#include "AliEmcalMCTrackSelector.h"
#include <TClonesArray.h>
#include "AliVEvent.h"
#include "AliMCEvent.h"
#include "AliAODMCParticle.h"
#include "AliMCParticle.h"
#include "AliStack.h"
#include "AliNamedArrayI.h"
#include "AliLog.h"
ClassImp(AliEmcalMCTrackSelector)
AliEmcalMCTrackSelector::AliEmcalMCTrackSelector() :
AliAnalysisTaskSE("AliEmcalMCTrackSelector"),
fParticlesOutName("MCParticlesSelected"),
fOnlyPhysPrim(kTRUE),
fRejectNK(kFALSE),
fChargedMC(kFALSE),
fOnlyHIJING(kFALSE),
fEtaMax(1),
fParticlesMapName(""),
fInit(kFALSE),
fParticlesIn(0),
fParticlesOut(0),
fParticlesMap(0),
fEvent(0),
fMC(0),
fIsESD(kFALSE),
fDisabled(kFALSE)
{
}
AliEmcalMCTrackSelector::AliEmcalMCTrackSelector(const char *name) :
AliAnalysisTaskSE(name),
fParticlesOutName("MCParticlesSelected"),
fOnlyPhysPrim(kTRUE),
fRejectNK(kFALSE),
fChargedMC(kFALSE),
fOnlyHIJING(kFALSE),
fEtaMax(1),
fParticlesMapName(""),
fInit(kFALSE),
fParticlesIn(0),
fParticlesOut(0),
fParticlesMap(0),
fEvent(0),
fMC(0),
fIsESD(kFALSE),
fDisabled(kFALSE)
{
}
AliEmcalMCTrackSelector::~AliEmcalMCTrackSelector()
{
}
void AliEmcalMCTrackSelector::UserCreateOutputObjects()
{
}
void AliEmcalMCTrackSelector::UserExec(Option_t *)
{
if (fDisabled) return;
if (!fInit) {
fEvent = InputEvent();
if (!fEvent) {
AliError("Could not retrieve event! Returning");
return;
}
if (fEvent->InheritsFrom("AliESDEvent")) fIsESD = kTRUE;
else fIsESD = kFALSE;
TObject *obj = fEvent->FindListObject(fParticlesOutName);
if (obj) {
AliError(Form("The output array %s is already present in the event! Task will be disabled.", fParticlesOutName.Data()));
fDisabled = kTRUE;
return;
}
else {
fParticlesOut = new TClonesArray("AliAODMCParticle");
fParticlesOut->SetName(fParticlesOutName);
fEvent->AddObject(fParticlesOut);
fParticlesMapName = fParticlesOutName;
fParticlesMapName += "_Map";
if (fEvent->FindListObject(fParticlesMapName)) {
AliError(Form("The output array map %s is already present in the event! Task will be disabled.", fParticlesMapName.Data()));
fDisabled = kTRUE;
return;
}
else {
fParticlesMap = new AliNamedArrayI(fParticlesMapName, 99999);
fEvent->AddObject(fParticlesMap);
}
if (!fIsESD) {
fParticlesIn = static_cast<TClonesArray*>(InputEvent()->FindListObject(AliAODMCParticle::StdBranchName()));
if (!fParticlesIn) {
AliError("Could not retrieve AOD MC particles! Task will be disabled.");
fDisabled = kTRUE;
return;
}
TClass *cl = fParticlesIn->GetClass();
if (!cl->GetBaseClass("AliAODMCParticle")) {
AliError(Form("%s: Collection %s does not contain AliAODMCParticle! Task will be disabled.", GetName(), AliAODMCParticle::StdBranchName()));
fDisabled = kTRUE;
fParticlesIn = 0;
return;
}
}
}
fMC = MCEvent();
if (!fMC) {
AliError("Could not retrieve MC event! Returning");
fDisabled = kTRUE;
return;
}
fInit = kTRUE;
}
if (fIsESD) ConvertMCParticles();
else CopyMCParticles();
}
void AliEmcalMCTrackSelector::ConvertMCParticles()
{
fParticlesOut->Delete();
fParticlesMap->Clear();
const Int_t Nparticles = fMC->GetNumberOfTracks();
const Int_t nprim = fMC->GetNumberOfPrimaries();
if (fParticlesMap->GetSize() <= Nparticles) fParticlesMap->Set(Nparticles*2);
for (Int_t iPart = 0, nacc = 0; iPart < Nparticles; iPart++) {
fParticlesMap->AddAt(-1, iPart);
AliMCParticle* part = static_cast<AliMCParticle*>(fMC->GetTrack(iPart));
if (!part) continue;
if (fEtaMax > 0. && TMath::Abs(part->Eta()) > fEtaMax) continue;
if (fRejectNK && (part->PdgCode() == 130 || part->PdgCode() == 2112)) continue;
if (fChargedMC && part->Charge() == 0) continue;
Int_t genIndex = part->GetGeneratorIndex();
if (fOnlyHIJING && genIndex != 0) continue;
Bool_t isPhysPrim = fMC->IsPhysicalPrimary(iPart);
if (fOnlyPhysPrim && !isPhysPrim) continue;
fParticlesMap->AddAt(nacc, iPart);
Int_t flag = 0;
if (iPart < nprim) flag |= AliAODMCParticle::kPrimary;
if (isPhysPrim) flag |= AliAODMCParticle::kPhysicalPrim;
if (fMC->IsSecondaryFromWeakDecay(iPart)) flag |= AliAODMCParticle::kSecondaryFromWeakDecay;
if (fMC->IsSecondaryFromMaterial(iPart)) flag |= AliAODMCParticle::kSecondaryFromMaterial;
AliAODMCParticle *aodPart = new ((*fParticlesOut)[nacc]) AliAODMCParticle(part, iPart, flag);
aodPart->SetGeneratorIndex(genIndex);
aodPart->SetStatus(part->Particle()->GetStatusCode());
aodPart->SetMCProcessCode(part->Particle()->GetUniqueID());
nacc++;
}
}
void AliEmcalMCTrackSelector::CopyMCParticles()
{
if (!fParticlesIn) return;
fParticlesOut->Delete();
fParticlesMap->Clear();
const Int_t Nparticles = fParticlesIn->GetEntriesFast();
if (fParticlesMap->GetSize() <= Nparticles) fParticlesMap->Set(Nparticles*2);
for (Int_t iPart = 0, nacc = 0; iPart < Nparticles; iPart++) {
AliAODMCParticle* part = static_cast<AliAODMCParticle*>(fParticlesIn->At(iPart));
fParticlesMap->AddAt(-1, iPart);
if (!part) continue;
if (fEtaMax > 0. && TMath::Abs(part->Eta()) > fEtaMax) continue;
if (fRejectNK && (part->PdgCode() == 130 || part->PdgCode() == 2112)) continue;
if (fChargedMC && part->Charge() == 0) continue;
if (fOnlyHIJING && (part->GetGeneratorIndex() != 0)) continue;
if (fOnlyPhysPrim && !part->IsPhysicalPrimary()) continue;
fParticlesMap->AddAt(nacc, iPart);
AliAODMCParticle *newPart = new ((*fParticlesOut)[nacc]) AliAODMCParticle(*part);
newPart->SetGeneratorIndex(part->GetGeneratorIndex());
nacc++;
}
}
AliEmcalMCTrackSelector.cxx:1 AliEmcalMCTrackSelector.cxx:2 AliEmcalMCTrackSelector.cxx:3 AliEmcalMCTrackSelector.cxx:4 AliEmcalMCTrackSelector.cxx:5 AliEmcalMCTrackSelector.cxx:6 AliEmcalMCTrackSelector.cxx:7 AliEmcalMCTrackSelector.cxx:8 AliEmcalMCTrackSelector.cxx:9 AliEmcalMCTrackSelector.cxx:10 AliEmcalMCTrackSelector.cxx:11 AliEmcalMCTrackSelector.cxx:12 AliEmcalMCTrackSelector.cxx:13 AliEmcalMCTrackSelector.cxx:14 AliEmcalMCTrackSelector.cxx:15 AliEmcalMCTrackSelector.cxx:16 AliEmcalMCTrackSelector.cxx:17 AliEmcalMCTrackSelector.cxx:18 AliEmcalMCTrackSelector.cxx:19 AliEmcalMCTrackSelector.cxx:20 AliEmcalMCTrackSelector.cxx:21 AliEmcalMCTrackSelector.cxx:22 AliEmcalMCTrackSelector.cxx:23 AliEmcalMCTrackSelector.cxx:24 AliEmcalMCTrackSelector.cxx:25 AliEmcalMCTrackSelector.cxx:26 AliEmcalMCTrackSelector.cxx:27 AliEmcalMCTrackSelector.cxx:28 AliEmcalMCTrackSelector.cxx:29 AliEmcalMCTrackSelector.cxx:30 AliEmcalMCTrackSelector.cxx:31 AliEmcalMCTrackSelector.cxx:32 AliEmcalMCTrackSelector.cxx:33 AliEmcalMCTrackSelector.cxx:34 AliEmcalMCTrackSelector.cxx:35 AliEmcalMCTrackSelector.cxx:36 AliEmcalMCTrackSelector.cxx:37 AliEmcalMCTrackSelector.cxx:38 AliEmcalMCTrackSelector.cxx:39 AliEmcalMCTrackSelector.cxx:40 AliEmcalMCTrackSelector.cxx:41 AliEmcalMCTrackSelector.cxx:42 AliEmcalMCTrackSelector.cxx:43 AliEmcalMCTrackSelector.cxx:44 AliEmcalMCTrackSelector.cxx:45 AliEmcalMCTrackSelector.cxx:46 AliEmcalMCTrackSelector.cxx:47 AliEmcalMCTrackSelector.cxx:48 AliEmcalMCTrackSelector.cxx:49 AliEmcalMCTrackSelector.cxx:50 AliEmcalMCTrackSelector.cxx:51 AliEmcalMCTrackSelector.cxx:52 AliEmcalMCTrackSelector.cxx:53 AliEmcalMCTrackSelector.cxx:54 AliEmcalMCTrackSelector.cxx:55 AliEmcalMCTrackSelector.cxx:56 AliEmcalMCTrackSelector.cxx:57 AliEmcalMCTrackSelector.cxx:58 AliEmcalMCTrackSelector.cxx:59 AliEmcalMCTrackSelector.cxx:60 AliEmcalMCTrackSelector.cxx:61 AliEmcalMCTrackSelector.cxx:62 AliEmcalMCTrackSelector.cxx:63 AliEmcalMCTrackSelector.cxx:64 AliEmcalMCTrackSelector.cxx:65 AliEmcalMCTrackSelector.cxx:66 AliEmcalMCTrackSelector.cxx:67 AliEmcalMCTrackSelector.cxx:68 AliEmcalMCTrackSelector.cxx:69 AliEmcalMCTrackSelector.cxx:70 AliEmcalMCTrackSelector.cxx:71 AliEmcalMCTrackSelector.cxx:72 AliEmcalMCTrackSelector.cxx:73 AliEmcalMCTrackSelector.cxx:74 AliEmcalMCTrackSelector.cxx:75 AliEmcalMCTrackSelector.cxx:76 AliEmcalMCTrackSelector.cxx:77 AliEmcalMCTrackSelector.cxx:78 AliEmcalMCTrackSelector.cxx:79 AliEmcalMCTrackSelector.cxx:80 AliEmcalMCTrackSelector.cxx:81 AliEmcalMCTrackSelector.cxx:82 AliEmcalMCTrackSelector.cxx:83 AliEmcalMCTrackSelector.cxx:84 AliEmcalMCTrackSelector.cxx:85 AliEmcalMCTrackSelector.cxx:86 AliEmcalMCTrackSelector.cxx:87 AliEmcalMCTrackSelector.cxx:88 AliEmcalMCTrackSelector.cxx:89 AliEmcalMCTrackSelector.cxx:90 AliEmcalMCTrackSelector.cxx:91 AliEmcalMCTrackSelector.cxx:92 AliEmcalMCTrackSelector.cxx:93 AliEmcalMCTrackSelector.cxx:94 AliEmcalMCTrackSelector.cxx:95 AliEmcalMCTrackSelector.cxx:96 AliEmcalMCTrackSelector.cxx:97 AliEmcalMCTrackSelector.cxx:98 AliEmcalMCTrackSelector.cxx:99 AliEmcalMCTrackSelector.cxx:100 AliEmcalMCTrackSelector.cxx:101 AliEmcalMCTrackSelector.cxx:102 AliEmcalMCTrackSelector.cxx:103 AliEmcalMCTrackSelector.cxx:104 AliEmcalMCTrackSelector.cxx:105 AliEmcalMCTrackSelector.cxx:106 AliEmcalMCTrackSelector.cxx:107 AliEmcalMCTrackSelector.cxx:108 AliEmcalMCTrackSelector.cxx:109 AliEmcalMCTrackSelector.cxx:110 AliEmcalMCTrackSelector.cxx:111 AliEmcalMCTrackSelector.cxx:112 AliEmcalMCTrackSelector.cxx:113 AliEmcalMCTrackSelector.cxx:114 AliEmcalMCTrackSelector.cxx:115 AliEmcalMCTrackSelector.cxx:116 AliEmcalMCTrackSelector.cxx:117 AliEmcalMCTrackSelector.cxx:118 AliEmcalMCTrackSelector.cxx:119 AliEmcalMCTrackSelector.cxx:120 AliEmcalMCTrackSelector.cxx:121 AliEmcalMCTrackSelector.cxx:122 AliEmcalMCTrackSelector.cxx:123 AliEmcalMCTrackSelector.cxx:124 AliEmcalMCTrackSelector.cxx:125 AliEmcalMCTrackSelector.cxx:126 AliEmcalMCTrackSelector.cxx:127 AliEmcalMCTrackSelector.cxx:128 AliEmcalMCTrackSelector.cxx:129 AliEmcalMCTrackSelector.cxx:130 AliEmcalMCTrackSelector.cxx:131 AliEmcalMCTrackSelector.cxx:132 AliEmcalMCTrackSelector.cxx:133 AliEmcalMCTrackSelector.cxx:134 AliEmcalMCTrackSelector.cxx:135 AliEmcalMCTrackSelector.cxx:136 AliEmcalMCTrackSelector.cxx:137 AliEmcalMCTrackSelector.cxx:138 AliEmcalMCTrackSelector.cxx:139 AliEmcalMCTrackSelector.cxx:140 AliEmcalMCTrackSelector.cxx:141 AliEmcalMCTrackSelector.cxx:142 AliEmcalMCTrackSelector.cxx:143 AliEmcalMCTrackSelector.cxx:144 AliEmcalMCTrackSelector.cxx:145 AliEmcalMCTrackSelector.cxx:146 AliEmcalMCTrackSelector.cxx:147 AliEmcalMCTrackSelector.cxx:148 AliEmcalMCTrackSelector.cxx:149 AliEmcalMCTrackSelector.cxx:150 AliEmcalMCTrackSelector.cxx:151 AliEmcalMCTrackSelector.cxx:152 AliEmcalMCTrackSelector.cxx:153 AliEmcalMCTrackSelector.cxx:154 AliEmcalMCTrackSelector.cxx:155 AliEmcalMCTrackSelector.cxx:156 AliEmcalMCTrackSelector.cxx:157 AliEmcalMCTrackSelector.cxx:158 AliEmcalMCTrackSelector.cxx:159 AliEmcalMCTrackSelector.cxx:160 AliEmcalMCTrackSelector.cxx:161 AliEmcalMCTrackSelector.cxx:162 AliEmcalMCTrackSelector.cxx:163 AliEmcalMCTrackSelector.cxx:164 AliEmcalMCTrackSelector.cxx:165 AliEmcalMCTrackSelector.cxx:166 AliEmcalMCTrackSelector.cxx:167 AliEmcalMCTrackSelector.cxx:168 AliEmcalMCTrackSelector.cxx:169 AliEmcalMCTrackSelector.cxx:170 AliEmcalMCTrackSelector.cxx:171 AliEmcalMCTrackSelector.cxx:172 AliEmcalMCTrackSelector.cxx:173 AliEmcalMCTrackSelector.cxx:174 AliEmcalMCTrackSelector.cxx:175 AliEmcalMCTrackSelector.cxx:176 AliEmcalMCTrackSelector.cxx:177 AliEmcalMCTrackSelector.cxx:178 AliEmcalMCTrackSelector.cxx:179 AliEmcalMCTrackSelector.cxx:180 AliEmcalMCTrackSelector.cxx:181 AliEmcalMCTrackSelector.cxx:182 AliEmcalMCTrackSelector.cxx:183 AliEmcalMCTrackSelector.cxx:184 AliEmcalMCTrackSelector.cxx:185 AliEmcalMCTrackSelector.cxx:186 AliEmcalMCTrackSelector.cxx:187 AliEmcalMCTrackSelector.cxx:188 AliEmcalMCTrackSelector.cxx:189 AliEmcalMCTrackSelector.cxx:190 AliEmcalMCTrackSelector.cxx:191 AliEmcalMCTrackSelector.cxx:192 AliEmcalMCTrackSelector.cxx:193 AliEmcalMCTrackSelector.cxx:194 AliEmcalMCTrackSelector.cxx:195 AliEmcalMCTrackSelector.cxx:196 AliEmcalMCTrackSelector.cxx:197 AliEmcalMCTrackSelector.cxx:198 AliEmcalMCTrackSelector.cxx:199 AliEmcalMCTrackSelector.cxx:200 AliEmcalMCTrackSelector.cxx:201 AliEmcalMCTrackSelector.cxx:202 AliEmcalMCTrackSelector.cxx:203 AliEmcalMCTrackSelector.cxx:204 AliEmcalMCTrackSelector.cxx:205 AliEmcalMCTrackSelector.cxx:206 AliEmcalMCTrackSelector.cxx:207 AliEmcalMCTrackSelector.cxx:208 AliEmcalMCTrackSelector.cxx:209 AliEmcalMCTrackSelector.cxx:210 AliEmcalMCTrackSelector.cxx:211 AliEmcalMCTrackSelector.cxx:212 AliEmcalMCTrackSelector.cxx:213 AliEmcalMCTrackSelector.cxx:214 AliEmcalMCTrackSelector.cxx:215 AliEmcalMCTrackSelector.cxx:216 AliEmcalMCTrackSelector.cxx:217 AliEmcalMCTrackSelector.cxx:218 AliEmcalMCTrackSelector.cxx:219 AliEmcalMCTrackSelector.cxx:220 AliEmcalMCTrackSelector.cxx:221 AliEmcalMCTrackSelector.cxx:222 AliEmcalMCTrackSelector.cxx:223 AliEmcalMCTrackSelector.cxx:224 AliEmcalMCTrackSelector.cxx:225 AliEmcalMCTrackSelector.cxx:226 AliEmcalMCTrackSelector.cxx:227 AliEmcalMCTrackSelector.cxx:228 AliEmcalMCTrackSelector.cxx:229 AliEmcalMCTrackSelector.cxx:230 AliEmcalMCTrackSelector.cxx:231 AliEmcalMCTrackSelector.cxx:232 AliEmcalMCTrackSelector.cxx:233 AliEmcalMCTrackSelector.cxx:234 AliEmcalMCTrackSelector.cxx:235 AliEmcalMCTrackSelector.cxx:236 AliEmcalMCTrackSelector.cxx:237 AliEmcalMCTrackSelector.cxx:238 AliEmcalMCTrackSelector.cxx:239 AliEmcalMCTrackSelector.cxx:240 AliEmcalMCTrackSelector.cxx:241 AliEmcalMCTrackSelector.cxx:242 AliEmcalMCTrackSelector.cxx:243 AliEmcalMCTrackSelector.cxx:244 AliEmcalMCTrackSelector.cxx:245 AliEmcalMCTrackSelector.cxx:246 AliEmcalMCTrackSelector.cxx:247