8 #include <TClonesArray.h>
10 #include "AliVEvent.h"
11 #include "AliMCEvent.h"
12 #include "AliAODMCParticle.h"
13 #include "AliMCParticle.h"
24 fParticlesOutName("MCParticlesSelected"),
30 fParticlesMapName(""),
45 AliAnalysisTaskSE(name),
46 fParticlesOutName(
"MCParticlesSelected"),
52 fParticlesMapName(
""),
87 AliError(
"Could not retrieve event! Returning");
96 AliError(Form(
"The output array %s is already present in the event! Task will be disabled.",
fParticlesOutName.Data()));
110 AliError(Form(
"The output array map %s is already present in the event! Task will be disabled.",
fParticlesMapName.Data()));
120 fParticlesIn =
static_cast<TClonesArray*
>(InputEvent()->FindListObject(AliAODMCParticle::StdBranchName()));
122 AliError(
"Could not retrieve AOD MC particles! Task will be disabled.");
127 if (!cl->GetBaseClass(
"AliAODMCParticle")) {
128 AliError(Form(
"%s: Collection %s does not contain AliAODMCParticle! Task will be disabled.", GetName(), AliAODMCParticle::StdBranchName()));
138 AliError(
"Could not retrieve MC event! Returning");
161 const Int_t Nparticles =
fMC->GetNumberOfTracks();
162 const Int_t nprim =
fMC->GetNumberOfPrimaries();
167 for (Int_t iPart = 0, nacc = 0; iPart < Nparticles; iPart++) {
171 AliMCParticle* part =
static_cast<AliMCParticle*
>(
fMC->GetTrack(iPart));
175 Bool_t isPhysPrim =
fMC->IsPhysicalPrimary(iPart);
178 if (iPart < nprim) flag |= AliAODMCParticle::kPrimary;
179 if (isPhysPrim) flag |= AliAODMCParticle::kPhysicalPrim;
180 if (
fMC->IsSecondaryFromWeakDecay(iPart)) flag |= AliAODMCParticle::kSecondaryFromWeakDecay;
181 if (
fMC->IsSecondaryFromMaterial(iPart)) flag |= AliAODMCParticle::kSecondaryFromMaterial;
183 AliAODMCParticle *aodPart =
new ((*fParticlesOut)[nacc]) AliAODMCParticle(part, iPart, flag);
184 aodPart->SetGeneratorIndex(part->GetGeneratorIndex());
185 aodPart->SetStatus(part->Particle()->GetStatusCode());
186 aodPart->SetMCProcessCode(part->Particle()->GetUniqueID());
208 const Int_t Nparticles =
fParticlesIn->GetEntriesFast();
212 AliDebug(2, Form(
"Total number of particles = %d", Nparticles));
217 for (Int_t iPart = 0; iPart < Nparticles; iPart++) {
220 AliAODMCParticle* part =
static_cast<AliAODMCParticle*
>(
fParticlesIn->At(iPart));
226 AliAODMCParticle *newPart =
new ((*fParticlesOut)[nacc]) AliAODMCParticle(*part);
227 newPart->SetGeneratorIndex(part->GetGeneratorIndex());
238 if (!part)
return kFALSE;
240 Int_t partPdgCode = TMath::Abs(part->PdgCode());
242 if (
fOnlyHIJING && (part->GetGeneratorIndex() != 0))
return kFALSE;
244 if (
fEtaMax > 0. && TMath::Abs(part->Eta()) >
fEtaMax)
return kFALSE;
246 if (
fRejectNK && (partPdgCode == 130 || partPdgCode == 2112))
return kFALSE;
248 if (
fChargedMC && part->Charge() == 0)
return kFALSE;
250 if (
fOnlyPhysPrim && !part->IsPhysicalPrimary())
return kFALSE;
void ConvertMCParticles()
TClonesArray * fParticlesOut
particle array in (AOD)
Bool_t fIsESD
MC event (ESD)
void UserExec(Option_t *option)
Bool_t fDisabled
ESD or AOD analysis.
TString fParticlesMapName
AliNamedArrayI * fParticlesMap
particle array out
AliEmcalMCTrackSelector()
void UserCreateOutputObjects()
void Clear(Option_t *option="")
AliVEvent * fEvent
particle index/label
virtual ~AliEmcalMCTrackSelector()
TString fParticlesOutName
Bool_t fInit
name of the particle map
TClonesArray * fParticlesIn
true = task initialized
ClassImp(AliEmcalMCTrackSelector) AliEmcalMCTrackSelector
virtual Bool_t AcceptParticle(AliAODMCParticle *part) const