2 #include "AliAnalysisManager.h"
6 #include <TClonesArray.h>
10 #include <AliMCEvent.h>
13 #if 0 // For Emacs - do not remove
20 AliMCEventHandler* parent)
21 : AliMCEventHandler(name, what),
29 fNEventsInContainer(0),
46 AliWarning(
"No parent");
61 AliDebugF(10,
"AliMCAuxHandler::Init(\"%s\")", opt);
66 if (option.EqualTo(
"proof") ||
67 option.EqualTo(
"local") ||
68 option.EqualTo(
"lite"))
return true;
72 TClass* cl = gROOT->GetClass(GetTitle());
74 if (cl->InheritsFrom(
"AliHit")) {
78 else if (cl->InheritsFrom(
"AliSDigit")) {
82 else if (cl->InheritsFrom(
"AliDigit")) {
90 AliWarningF(
"Couldn't get the class description of %s", GetTitle());
91 AliWarning(
"The list of loaded libraries is");
101 fArray =
new TClonesArray(GetTitle());
105 AliError(
"Parent does not have an events tree");
128 AliDebugF(10,
"AliMCAuxHandler::BeginEvent(%lld)", entry);
144 AliError(
"Parent does not have a kinematics tree");
148 TFile* fileK = treeK->GetCurrentFile();
150 AliError(
"Kinematics tree has no associated file");
167 AliDebugF(10,
"AliMCAuxHandler::Notify(\"%s\")", path);
188 AliDebug(10,
"AliMCAuxHandler::Terminate()");
198 AliDebug(10,
"AliMCAuxHandler::TerminateIO()");
209 AliDebug(10,
"AliMCAuxHandler::ResetIO()");
212 AliDebugF(10,
"Got parent path %s", path ? path->Data() :
"null");
225 AliDebugF(10,
"Got parent path %s", path ? path->Data() :
"null");
227 if (!path)
return false;
230 if (fileNo > 0) ext = TString::Format(
"%d", fileNo);
233 if (w.EndsWith(
"s")) w.Chop();
235 TString fn = TString::Format(
"%s%s.%s%s.root",
236 path->Data(), GetName(),
238 AliDebugF(10,
"Opening %s", fn.Data());
240 fFile = TFile::Open(fn,
"READ");
242 AliErrorF(
"Failed to open %s", fn.Data());
258 AliDebugF(10,
"AliMCAuxHandler::LoadEvent(%d)", iev);
266 if (!
fFile)
return false;
268 TString folder = TString::Format(
"Event%d", iev);
271 AliWarningF(
"Folder %s not found in file", folder.Data());
277 AliWarningF(
"Folder %s does not contain the %s tree %s",
278 folder.Data(), GetTitle(),
fTreeName.Data());
290 if (!
fTree)
return 0;
291 return fTree->GetEntries();
298 if (!
fTree)
return 0;
300 if (entry < 0 || entry >=
fTree->GetEntries()) {
301 AliErrorF(
"Entry # %d out of bounds [0,%lld]",
302 entry,
fTree->GetEntries());
307 if (
fTree->GetEntry(entry) <= 0)
return 0;
319 ::Error(
"AliMCAuxHandler::Create",
"No analysis manager");
323 AliVEventHandler* vmc = mgr->GetMCtruthEventHandler();
325 ::Error(
"AliMCAuxHandler::Create",
"No MC truth handler");
329 AliMCEventHandler* mc =
dynamic_cast<AliMCEventHandler*
>(vmc);
331 ::Error(
"AliMCAuxHandler::Create",
332 "MC truth handler not a AliMCEventHandler, but %s",
338 mc->AddSubsidiaryHandler(ret);
349 ::Error(
"AliMCAuxHandler::GetArray",
"No handler passed");
353 AliMCEventHandler* mc = handler->
GetParent();
355 ::Error(
"AliMCAuxHandler::GetArray",
"Handler has no parent");
359 AliMCEvent*
event = mc->MCEvent();
361 ::Error(
"AliMCAuxHandler::GetArray",
"No MC event");
365 AliStack*
stack =
event->Stack();
367 ::Error(
"AliMCAuxHandler::GetArray",
"Event has no stack");
374 ::Error(
"AliMCAuxHandler::GetArray",
"Handler has no tree");
378 Int_t treeIdx = stack->TreeKEntry(particle);
379 if (treeIdx < 0 || treeIdx >= tree->GetEntries()) {
380 ::Error(
"AliMCAuxHandler::GetArray",
381 "Index %d of %d out of bounds [0,%lld]", treeIdx, particle,
382 tree->GetEntries()-1);
386 tree->GetEntry(treeIdx);
virtual Bool_t FinishEvent()
virtual Bool_t OpenFile(Int_t ev)
virtual Bool_t LoadEvent(Int_t iev)
static TClonesArray * GetParticleArray(AliMCAuxHandler *handler, Int_t particle)
TClonesArray * GetArray() const
virtual Bool_t Init(TTree *t, Option_t *o)
TString * GetParentPath() const
AliMCEventHandler * fParent
virtual Bool_t BeginEvent(Long64_t entry)
virtual Bool_t TerminateIO()
virtual TTree * GetTree() const
AliMCAuxHandler(const char *name="FMD", const char *clsName="AliFMDHit", AliMCEventHandler *parent=0)
virtual Bool_t Terminate()
static AliMCAuxHandler * Create(const char *name="FMD", const char *what="Hits")
TClonesArray * GetEntryArray(Int_t entry)
AliMCEventHandler * GetParent()