#include "AliMCTruthTrackMaker.h"
#include <TClonesArray.h>
#include <TString.h>
#include "AliAnalysisManager.h"
#include "AliVEventHandler.h"
#include "AliVEvent.h"
#include "AliMCEvent.h"
#include "AliVParticle.h"
#include "AliAODMCParticle.h"
#include "AliMCParticle.h"
#include "AliLog.h"
#include "AliESDMuonTrack.h"
#include "AliAODTrack.h"
#include "AliESDEvent.h"
#include "AliStack.h"
ClassImp(AliMCTruthTrackMaker)
AliMCTruthTrackMaker::AliMCTruthTrackMaker() :
AliAnalysisTaskSE("AliMCTruthTrackMaker"),
fTracksOutName("MCTruthTracks"),
fChargedMC(kFALSE),
fFillMuMothers(kFALSE),
fTriggerMatch(kTRUE),
fEtaMax(1.0),
fInit(kFALSE),
fEsdMode(kFALSE),
fTracksIn(0x0),
fTracksOut(0x0),
fESD(0x0),
fMC(0x0),
fStack(0x0)
{
}
AliMCTruthTrackMaker::AliMCTruthTrackMaker(const char *name) :
AliAnalysisTaskSE(name),
fTracksOutName("MCTruthTracks"),
fChargedMC(kFALSE),
fFillMuMothers(kFALSE),
fTriggerMatch(kTRUE),
fEtaMax(1.0),
fInit(kFALSE),
fEsdMode(kFALSE),
fTracksIn(0x0),
fTracksOut(0x0),
fESD(0x0),
fMC(0x0),
fStack(0x0)
{
}
AliMCTruthTrackMaker::~AliMCTruthTrackMaker()
{
}
void AliMCTruthTrackMaker::UserCreateOutputObjects()
{
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr) {
AliFatal("No analysis manager!");
return;
}
AliVEventHandler *handler = mgr->GetInputEventHandler();
if (!handler) {
AliFatal("No input handler!");
return;
}
if (handler->InheritsFrom("AliESDInputHandler"))
fEsdMode = kTRUE;
else
fEsdMode = kFALSE;
if (fEsdMode)
fTracksOut = new TClonesArray("AliMCParticle");
else
fTracksOut = new TClonesArray("AliAODMCParticle");
fTracksOut->SetName(fTracksOutName);
}
void AliMCTruthTrackMaker::UserExec(Option_t *)
{
if (!InputEvent()) {
AliError("Could not retrieve event! Returning");
return;
}
if (fEsdMode && !MCEvent()) {
AliError("Could not retrieve ESD MC event! Returning");
return;
}
if (!fInit) {
if (!(InputEvent()->FindListObject(fTracksOutName)))
InputEvent()->AddObject(fTracksOut);
if (!fEsdMode) {
fTracksIn = static_cast<TClonesArray*>(InputEvent()->FindListObject(AliAODMCParticle::StdBranchName()));
if (!fTracksIn) {
AliError("Could not retrieve AOD MC particles! Returning");
return;
}
TClass *cl = fTracksIn->GetClass();
if (!cl->GetBaseClass("AliAODMCParticle")) {
AliError(Form("%s: Collection %s does not contain AliAODMCParticle!", GetName(), AliAODMCParticle::StdBranchName()));
fTracksIn = 0;
return;
}
}
fInit = kTRUE;
}
fTracksOut->Delete();
Int_t nacc = 0;
const Int_t Ntracks = GetNumberOfTracks();
for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
AliVParticle* track = GetTrack(iTracks);
if (!track)
continue;
if (TMath::Abs(track->Eta()) > fEtaMax)
continue;
if (fChargedMC && track->Charge() == 0) continue;
AddTrack(track, nacc);
++nacc;
}
if (fFillMuMothers) {
if (!fEsdMode) {
AliError("Muon mother particles can only be filled when running on ESD! Returning");
return;
}
fESD = dynamic_cast<AliESDEvent*>(InputEvent());
if (!fESD) { AliError("ESD event not found. Nothing done!"); return; }
Int_t ntrks = fESD->GetNumberOfMuonTracks();
fMC = MCEvent();
if (!fMC) { AliError("MC event not available."); return; }
fStack = fMC->Stack();
for (Int_t iTrack = 0; iTrack<ntrks; iTrack++)
{
Int_t label = 0;
AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iTrack);
if(muonTrack)
{
if (IsGoodMUONtrack(*muonTrack)) {
label = TMath::Abs(muonTrack->GetLabel());
if (label>=fMC->GetNumberOfTracks()) {
AliError(Form("Label %d larger than number of particles on stack %d\n",label,fMC->GetNumberOfTracks()));
continue;
}
AliVParticle * fpmMu = (AliVParticle *) fMC->GetTrack(GetFirstPrimaryMother(label));
if (fpmMu) {
AddTrack(fpmMu, nacc);
++nacc;
} else {
AliError("didn't receive a valid first primary mother here");
}
}
}
}
}
}
Int_t AliMCTruthTrackMaker::GetNumberOfTracks() const
{
if (fEsdMode)
return MCEvent()->GetNumberOfTracks();
else
return fTracksIn->GetEntries();
}
AliVParticle* AliMCTruthTrackMaker::GetTrack(Int_t i)
{
if (fEsdMode) {
if (!MCEvent()->IsPhysicalPrimary(i))
return 0;
return MCEvent()->GetTrack(i);
}
else {
AliAODMCParticle *part = static_cast<AliAODMCParticle*>(fTracksIn->At(i));
if (!part->IsPhysicalPrimary())
return 0;
return part;
}
}
void AliMCTruthTrackMaker::AddTrack(AliVParticle *track, Int_t nacc)
{
if (fEsdMode) {
AliMCParticle *part = static_cast<AliMCParticle*>(track);
new ((*fTracksOut)[nacc]) AliMCParticle(part->Particle(), 0, part->Label());
}
else {
AliAODMCParticle *part = static_cast<AliAODMCParticle*>(track);
new ((*fTracksOut)[nacc]) AliAODMCParticle(*part);
}
}
Bool_t AliMCTruthTrackMaker::IsGoodMUONtrack(AliESDMuonTrack &track)
{
if (!track.ContainTrackerData())
return kFALSE;
Double_t thetaTrackAbsEnd = TMath::ATan(track.GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
if ((thetaTrackAbsEnd < 2.) || (thetaTrackAbsEnd > 10.))
return kFALSE;
Double_t eta = track.Eta();
if ((eta < -4.) || (eta > -2.5))
return kFALSE;
if (fTriggerMatch) {
if (!track.ContainTriggerData())
return kFALSE;
if (track.GetMatchTrigger() < 0.5)
return kFALSE;
}
return kTRUE;
}
Bool_t AliMCTruthTrackMaker::IsGoodMUONtrack(AliAODTrack &track)
{
if (!track.IsMuonTrack())
return kFALSE;
Double_t dThetaAbs = TMath::ATan(track.GetRAtAbsorberEnd()/505.)* TMath::RadToDeg();
if ((dThetaAbs<2.) || (dThetaAbs>10.))
return kFALSE;
Double_t dEta = track.Eta();
if ((dEta<-4.) || (dEta>-2.5))
return kFALSE;
if (fTriggerMatch) {
if (track.GetMatchTrigger()<0.5)
return kFALSE;
}
return kTRUE;
}
Int_t AliMCTruthTrackMaker::GetFirstPrimaryMother(Int_t muonlabel)
{
AliMCParticle *McParticle = (AliMCParticle*)fMC->GetTrack(muonlabel);
if(McParticle->GetMother()<fStack->GetNprimary()) return McParticle->GetMother();
else
{
Int_t motherlabel = McParticle->GetMother();
while(motherlabel > -1)
{
AliMCParticle *MotherParticle = (AliMCParticle*)fMC->GetTrack(motherlabel);
if(MotherParticle->GetMother()<fStack->GetNprimary()) break;
else motherlabel = MotherParticle->GetMother();
}
AliMCParticle *FirstSecondaryMotherParticle = (AliMCParticle*)fMC->GetTrack(motherlabel);
return FirstSecondaryMotherParticle->GetMother();
}
}
AliMCTruthTrackMaker.cxx:1 AliMCTruthTrackMaker.cxx:2 AliMCTruthTrackMaker.cxx:3 AliMCTruthTrackMaker.cxx:4 AliMCTruthTrackMaker.cxx:5 AliMCTruthTrackMaker.cxx:6 AliMCTruthTrackMaker.cxx:7 AliMCTruthTrackMaker.cxx:8 AliMCTruthTrackMaker.cxx:9 AliMCTruthTrackMaker.cxx:10 AliMCTruthTrackMaker.cxx:11 AliMCTruthTrackMaker.cxx:12 AliMCTruthTrackMaker.cxx:13 AliMCTruthTrackMaker.cxx:14 AliMCTruthTrackMaker.cxx:15 AliMCTruthTrackMaker.cxx:16 AliMCTruthTrackMaker.cxx:17 AliMCTruthTrackMaker.cxx:18 AliMCTruthTrackMaker.cxx:19 AliMCTruthTrackMaker.cxx:20 AliMCTruthTrackMaker.cxx:21 AliMCTruthTrackMaker.cxx:22 AliMCTruthTrackMaker.cxx:23 AliMCTruthTrackMaker.cxx:24 AliMCTruthTrackMaker.cxx:25 AliMCTruthTrackMaker.cxx:26 AliMCTruthTrackMaker.cxx:27 AliMCTruthTrackMaker.cxx:28 AliMCTruthTrackMaker.cxx:29 AliMCTruthTrackMaker.cxx:30 AliMCTruthTrackMaker.cxx:31 AliMCTruthTrackMaker.cxx:32 AliMCTruthTrackMaker.cxx:33 AliMCTruthTrackMaker.cxx:34 AliMCTruthTrackMaker.cxx:35 AliMCTruthTrackMaker.cxx:36 AliMCTruthTrackMaker.cxx:37 AliMCTruthTrackMaker.cxx:38 AliMCTruthTrackMaker.cxx:39 AliMCTruthTrackMaker.cxx:40 AliMCTruthTrackMaker.cxx:41 AliMCTruthTrackMaker.cxx:42 AliMCTruthTrackMaker.cxx:43 AliMCTruthTrackMaker.cxx:44 AliMCTruthTrackMaker.cxx:45 AliMCTruthTrackMaker.cxx:46 AliMCTruthTrackMaker.cxx:47 AliMCTruthTrackMaker.cxx:48 AliMCTruthTrackMaker.cxx:49 AliMCTruthTrackMaker.cxx:50 AliMCTruthTrackMaker.cxx:51 AliMCTruthTrackMaker.cxx:52 AliMCTruthTrackMaker.cxx:53 AliMCTruthTrackMaker.cxx:54 AliMCTruthTrackMaker.cxx:55 AliMCTruthTrackMaker.cxx:56 AliMCTruthTrackMaker.cxx:57 AliMCTruthTrackMaker.cxx:58 AliMCTruthTrackMaker.cxx:59 AliMCTruthTrackMaker.cxx:60 AliMCTruthTrackMaker.cxx:61 AliMCTruthTrackMaker.cxx:62 AliMCTruthTrackMaker.cxx:63 AliMCTruthTrackMaker.cxx:64 AliMCTruthTrackMaker.cxx:65 AliMCTruthTrackMaker.cxx:66 AliMCTruthTrackMaker.cxx:67 AliMCTruthTrackMaker.cxx:68 AliMCTruthTrackMaker.cxx:69 AliMCTruthTrackMaker.cxx:70 AliMCTruthTrackMaker.cxx:71 AliMCTruthTrackMaker.cxx:72 AliMCTruthTrackMaker.cxx:73 AliMCTruthTrackMaker.cxx:74 AliMCTruthTrackMaker.cxx:75 AliMCTruthTrackMaker.cxx:76 AliMCTruthTrackMaker.cxx:77 AliMCTruthTrackMaker.cxx:78 AliMCTruthTrackMaker.cxx:79 AliMCTruthTrackMaker.cxx:80 AliMCTruthTrackMaker.cxx:81 AliMCTruthTrackMaker.cxx:82 AliMCTruthTrackMaker.cxx:83 AliMCTruthTrackMaker.cxx:84 AliMCTruthTrackMaker.cxx:85 AliMCTruthTrackMaker.cxx:86 AliMCTruthTrackMaker.cxx:87 AliMCTruthTrackMaker.cxx:88 AliMCTruthTrackMaker.cxx:89 AliMCTruthTrackMaker.cxx:90 AliMCTruthTrackMaker.cxx:91 AliMCTruthTrackMaker.cxx:92 AliMCTruthTrackMaker.cxx:93 AliMCTruthTrackMaker.cxx:94 AliMCTruthTrackMaker.cxx:95 AliMCTruthTrackMaker.cxx:96 AliMCTruthTrackMaker.cxx:97 AliMCTruthTrackMaker.cxx:98 AliMCTruthTrackMaker.cxx:99 AliMCTruthTrackMaker.cxx:100 AliMCTruthTrackMaker.cxx:101 AliMCTruthTrackMaker.cxx:102 AliMCTruthTrackMaker.cxx:103 AliMCTruthTrackMaker.cxx:104 AliMCTruthTrackMaker.cxx:105 AliMCTruthTrackMaker.cxx:106 AliMCTruthTrackMaker.cxx:107 AliMCTruthTrackMaker.cxx:108 AliMCTruthTrackMaker.cxx:109 AliMCTruthTrackMaker.cxx:110 AliMCTruthTrackMaker.cxx:111 AliMCTruthTrackMaker.cxx:112 AliMCTruthTrackMaker.cxx:113 AliMCTruthTrackMaker.cxx:114 AliMCTruthTrackMaker.cxx:115 AliMCTruthTrackMaker.cxx:116 AliMCTruthTrackMaker.cxx:117 AliMCTruthTrackMaker.cxx:118 AliMCTruthTrackMaker.cxx:119 AliMCTruthTrackMaker.cxx:120 AliMCTruthTrackMaker.cxx:121 AliMCTruthTrackMaker.cxx:122 AliMCTruthTrackMaker.cxx:123 AliMCTruthTrackMaker.cxx:124 AliMCTruthTrackMaker.cxx:125 AliMCTruthTrackMaker.cxx:126 AliMCTruthTrackMaker.cxx:127 AliMCTruthTrackMaker.cxx:128 AliMCTruthTrackMaker.cxx:129 AliMCTruthTrackMaker.cxx:130 AliMCTruthTrackMaker.cxx:131 AliMCTruthTrackMaker.cxx:132 AliMCTruthTrackMaker.cxx:133 AliMCTruthTrackMaker.cxx:134 AliMCTruthTrackMaker.cxx:135 AliMCTruthTrackMaker.cxx:136 AliMCTruthTrackMaker.cxx:137 AliMCTruthTrackMaker.cxx:138 AliMCTruthTrackMaker.cxx:139 AliMCTruthTrackMaker.cxx:140 AliMCTruthTrackMaker.cxx:141 AliMCTruthTrackMaker.cxx:142 AliMCTruthTrackMaker.cxx:143 AliMCTruthTrackMaker.cxx:144 AliMCTruthTrackMaker.cxx:145 AliMCTruthTrackMaker.cxx:146 AliMCTruthTrackMaker.cxx:147 AliMCTruthTrackMaker.cxx:148 AliMCTruthTrackMaker.cxx:149 AliMCTruthTrackMaker.cxx:150 AliMCTruthTrackMaker.cxx:151 AliMCTruthTrackMaker.cxx:152 AliMCTruthTrackMaker.cxx:153 AliMCTruthTrackMaker.cxx:154 AliMCTruthTrackMaker.cxx:155 AliMCTruthTrackMaker.cxx:156 AliMCTruthTrackMaker.cxx:157 AliMCTruthTrackMaker.cxx:158 AliMCTruthTrackMaker.cxx:159 AliMCTruthTrackMaker.cxx:160 AliMCTruthTrackMaker.cxx:161 AliMCTruthTrackMaker.cxx:162 AliMCTruthTrackMaker.cxx:163 AliMCTruthTrackMaker.cxx:164 AliMCTruthTrackMaker.cxx:165 AliMCTruthTrackMaker.cxx:166 AliMCTruthTrackMaker.cxx:167 AliMCTruthTrackMaker.cxx:168 AliMCTruthTrackMaker.cxx:169 AliMCTruthTrackMaker.cxx:170 AliMCTruthTrackMaker.cxx:171 AliMCTruthTrackMaker.cxx:172 AliMCTruthTrackMaker.cxx:173 AliMCTruthTrackMaker.cxx:174 AliMCTruthTrackMaker.cxx:175 AliMCTruthTrackMaker.cxx:176 AliMCTruthTrackMaker.cxx:177 AliMCTruthTrackMaker.cxx:178 AliMCTruthTrackMaker.cxx:179 AliMCTruthTrackMaker.cxx:180 AliMCTruthTrackMaker.cxx:181 AliMCTruthTrackMaker.cxx:182 AliMCTruthTrackMaker.cxx:183 AliMCTruthTrackMaker.cxx:184 AliMCTruthTrackMaker.cxx:185 AliMCTruthTrackMaker.cxx:186 AliMCTruthTrackMaker.cxx:187 AliMCTruthTrackMaker.cxx:188 AliMCTruthTrackMaker.cxx:189 AliMCTruthTrackMaker.cxx:190 AliMCTruthTrackMaker.cxx:191 AliMCTruthTrackMaker.cxx:192 AliMCTruthTrackMaker.cxx:193 AliMCTruthTrackMaker.cxx:194 AliMCTruthTrackMaker.cxx:195 AliMCTruthTrackMaker.cxx:196 AliMCTruthTrackMaker.cxx:197 AliMCTruthTrackMaker.cxx:198 AliMCTruthTrackMaker.cxx:199 AliMCTruthTrackMaker.cxx:200 AliMCTruthTrackMaker.cxx:201 AliMCTruthTrackMaker.cxx:202 AliMCTruthTrackMaker.cxx:203 AliMCTruthTrackMaker.cxx:204 AliMCTruthTrackMaker.cxx:205 AliMCTruthTrackMaker.cxx:206 AliMCTruthTrackMaker.cxx:207 AliMCTruthTrackMaker.cxx:208 AliMCTruthTrackMaker.cxx:209 AliMCTruthTrackMaker.cxx:210 AliMCTruthTrackMaker.cxx:211 AliMCTruthTrackMaker.cxx:212 AliMCTruthTrackMaker.cxx:213 AliMCTruthTrackMaker.cxx:214 AliMCTruthTrackMaker.cxx:215 AliMCTruthTrackMaker.cxx:216 AliMCTruthTrackMaker.cxx:217 AliMCTruthTrackMaker.cxx:218 AliMCTruthTrackMaker.cxx:219 AliMCTruthTrackMaker.cxx:220 AliMCTruthTrackMaker.cxx:221 AliMCTruthTrackMaker.cxx:222 AliMCTruthTrackMaker.cxx:223 AliMCTruthTrackMaker.cxx:224 AliMCTruthTrackMaker.cxx:225 AliMCTruthTrackMaker.cxx:226 AliMCTruthTrackMaker.cxx:227 AliMCTruthTrackMaker.cxx:228 AliMCTruthTrackMaker.cxx:229 AliMCTruthTrackMaker.cxx:230 AliMCTruthTrackMaker.cxx:231 AliMCTruthTrackMaker.cxx:232 AliMCTruthTrackMaker.cxx:233 AliMCTruthTrackMaker.cxx:234 AliMCTruthTrackMaker.cxx:235 AliMCTruthTrackMaker.cxx:236 AliMCTruthTrackMaker.cxx:237 AliMCTruthTrackMaker.cxx:238 AliMCTruthTrackMaker.cxx:239 AliMCTruthTrackMaker.cxx:240 AliMCTruthTrackMaker.cxx:241 AliMCTruthTrackMaker.cxx:242 AliMCTruthTrackMaker.cxx:243 AliMCTruthTrackMaker.cxx:244 AliMCTruthTrackMaker.cxx:245 AliMCTruthTrackMaker.cxx:246 AliMCTruthTrackMaker.cxx:247 AliMCTruthTrackMaker.cxx:248 AliMCTruthTrackMaker.cxx:249 AliMCTruthTrackMaker.cxx:250 AliMCTruthTrackMaker.cxx:251 AliMCTruthTrackMaker.cxx:252 AliMCTruthTrackMaker.cxx:253 AliMCTruthTrackMaker.cxx:254 AliMCTruthTrackMaker.cxx:255 AliMCTruthTrackMaker.cxx:256 AliMCTruthTrackMaker.cxx:257 AliMCTruthTrackMaker.cxx:258 AliMCTruthTrackMaker.cxx:259 AliMCTruthTrackMaker.cxx:260 AliMCTruthTrackMaker.cxx:261 AliMCTruthTrackMaker.cxx:262 AliMCTruthTrackMaker.cxx:263 AliMCTruthTrackMaker.cxx:264 AliMCTruthTrackMaker.cxx:265 AliMCTruthTrackMaker.cxx:266 AliMCTruthTrackMaker.cxx:267 AliMCTruthTrackMaker.cxx:268 AliMCTruthTrackMaker.cxx:269 AliMCTruthTrackMaker.cxx:270 AliMCTruthTrackMaker.cxx:271 AliMCTruthTrackMaker.cxx:272 AliMCTruthTrackMaker.cxx:273 AliMCTruthTrackMaker.cxx:274 AliMCTruthTrackMaker.cxx:275 AliMCTruthTrackMaker.cxx:276 AliMCTruthTrackMaker.cxx:277 AliMCTruthTrackMaker.cxx:278 AliMCTruthTrackMaker.cxx:279 AliMCTruthTrackMaker.cxx:280 AliMCTruthTrackMaker.cxx:281 AliMCTruthTrackMaker.cxx:282 AliMCTruthTrackMaker.cxx:283 AliMCTruthTrackMaker.cxx:284 AliMCTruthTrackMaker.cxx:285 AliMCTruthTrackMaker.cxx:286 AliMCTruthTrackMaker.cxx:287 AliMCTruthTrackMaker.cxx:288 AliMCTruthTrackMaker.cxx:289 AliMCTruthTrackMaker.cxx:290 AliMCTruthTrackMaker.cxx:291 AliMCTruthTrackMaker.cxx:292 AliMCTruthTrackMaker.cxx:293 AliMCTruthTrackMaker.cxx:294 AliMCTruthTrackMaker.cxx:295 AliMCTruthTrackMaker.cxx:296 AliMCTruthTrackMaker.cxx:297