#include <TTree.h>
#include <TChain.h>
#include <TFile.h>
#include <TChainElement.h>
#include "AliLog.h"
#include "AliInputEventHandler.h"
#include "AliMixInputHandlerInfo.h"
ClassImp(AliMixInputHandlerInfo)
AliMixInputHandlerInfo::AliMixInputHandlerInfo(const char *name, const char *title): TNamed(name, title),
fChain(0),
fChainEntriesArray(),
fZeroEntryNumber(0),
fNeedNotify(kFALSE)
{
}
AliMixInputHandlerInfo::~AliMixInputHandlerInfo()
{
if (fChain) delete fChain;
}
TChain *AliMixInputHandlerInfo::GetChain()
{
if (!fChain) fChain = new TChain(GetName());
return fChain;
}
void AliMixInputHandlerInfo::AddChain(TChain *chain)
{
AliDebug(AliLog::kDebug + 5, "<-");
if (!chain) return;
if (fChain) delete fChain;
fChain = new TChain(GetName());
fChain->Add(chain);
AliDebug(AliLog::kDebug + 5, "->");
}
void AliMixInputHandlerInfo::AddTreeToChain(const char *path)
{
AliDebug(AliLog::kDebug + 5, Form("<- %s", path));
GetChain();
fChain->AddFile(path);
AliDebug(AliLog::kDebug + 3, Form("Num files in fChain %d", fChain->GetListOfFiles()->GetEntries()));
Long64_t sumTree = fZeroEntryNumber;
for (Int_t i = 0; i < fChainEntriesArray.GetSize() ; i++) sumTree += fChainEntriesArray.At(i);
fChain->LoadTree(sumTree);
Int_t lastIndex = fChain->GetListOfFiles()->GetEntries();
AliDebug(AliLog::kDebug + 3, Form("Num files in fChain %d", lastIndex));
fChainEntriesArray.Set(lastIndex);
AliDebug(AliLog::kDebug + 3, Form("Adding %lld to id %d", fChain->GetTree()->GetEntries(), lastIndex - 1));
fChainEntriesArray.AddAt((Int_t)fChain->GetTree()->GetEntries(), (Int_t)lastIndex - 1);
AliDebug(AliLog::kDebug + 5, Form("-> %s", path));
}
TChainElement *AliMixInputHandlerInfo::GetEntryInTree(Long64_t &entry)
{
AliDebug(AliLog::kDebug + 5, Form("<- %lld", entry));
fZeroEntryNumber = 0;
if (entry < fZeroEntryNumber) {
AliError(Form("Num %lld is less then ZeroEntryNumber(%lld)", entry, fZeroEntryNumber));
entry = -1;
AliDebug(AliLog::kDebug + 5, "->");
return 0;
}
Long64_t sumTree = fZeroEntryNumber;
for (Int_t i = 0; i < fChainEntriesArray.GetSize() ; i++) {
sumTree += fChainEntriesArray.At(i);
if (sumTree > entry) {
sumTree = entry - sumTree + fChainEntriesArray.At(i);
AliDebug(AliLog::kDebug + 1, Form("Entry in current tree num is %lld with i=%d", sumTree, i));
entry = sumTree;
AliDebug(AliLog::kDebug + 5, "->");
return (TChainElement *) fChain->GetListOfFiles()->At(i);
}
}
entry = -1;
AliDebug(AliLog::kDebug + 5, "->");
return 0;
}
void AliMixInputHandlerInfo::PrepareEntry(TChainElement *te, Long64_t entry, AliInputEventHandler *eh, Option_t *opt)
{
AliDebug(AliLog::kDebug + 5, Form("<- %lld", entry));
if (!te) {
AliDebug(AliLog::kDebug + 5, "-> te is null");
return;
}
if (entry < 0) {
AliDebug(AliLog::kDebug, Form("We are creating new chain from file %s ...", te->GetTitle()));
if (!fChain) {
fChain = new TChain(te->GetName());
fChain->AddFile(te->GetTitle());
fChain->GetEntry(0);
eh->Init(opt);
eh->Init(fChain->GetTree(), opt);
}
fNeedNotify = kTRUE;
AliDebug(AliLog::kDebug + 5, "->");
return;
}
if (fChain) {
AliDebug(AliLog::kDebug, Form("Filename is %s", fChain->GetTree()->GetCurrentFile()->GetName()));
TString fn = fChain->GetTree()->GetCurrentFile()->GetName();
if (fn.CompareTo(te->GetTitle())) {
AliDebug(AliLog::kDebug, Form("Filename %s is NOT same ...", te->GetTitle()));
AliDebug(AliLog::kDebug, Form("We are changing to file %s ...", te->GetTitle()));
delete fChain;
fChain = new TChain(te->GetName());
fChain->AddFile(te->GetTitle());
fChain->GetEntry(0);
eh->Init(opt);
eh->Init(fChain->GetTree(), opt);
eh->Notify(te->GetTitle());
fChain->GetEntry(entry);
eh->BeginEvent(entry);
fNeedNotify = kFALSE;
} else {
AliDebug(AliLog::kDebug, Form("We are reusing file %s ...", te->GetTitle()));
if (fNeedNotify) eh->Notify(te->GetTitle());
fNeedNotify = kFALSE;
AliDebug(AliLog::kDebug, Form("Entry is %lld fChain->GetEntries %lld ...", entry, fChain->GetEntries()));
fChain->GetEntry(entry);
eh->BeginEvent(entry);
}
}
AliDebug(AliLog::kDebug, Form("We are USING file %s ...", te->GetTitle()));
AliDebug(AliLog::kDebug, Form("We are USING file from fChain->GetTree() %s ...", fChain->GetTree()->GetCurrentFile()->GetName()));
AliDebug(AliLog::kDebug + 5, "->");
}
Long64_t AliMixInputHandlerInfo::GetEntries()
{
if (fChain) return fChain->GetEntries();
return -1;
}
AliMixInputHandlerInfo.cxx:1 AliMixInputHandlerInfo.cxx:2 AliMixInputHandlerInfo.cxx:3 AliMixInputHandlerInfo.cxx:4 AliMixInputHandlerInfo.cxx:5 AliMixInputHandlerInfo.cxx:6 AliMixInputHandlerInfo.cxx:7 AliMixInputHandlerInfo.cxx:8 AliMixInputHandlerInfo.cxx:9 AliMixInputHandlerInfo.cxx:10 AliMixInputHandlerInfo.cxx:11 AliMixInputHandlerInfo.cxx:12 AliMixInputHandlerInfo.cxx:13 AliMixInputHandlerInfo.cxx:14 AliMixInputHandlerInfo.cxx:15 AliMixInputHandlerInfo.cxx:16 AliMixInputHandlerInfo.cxx:17 AliMixInputHandlerInfo.cxx:18 AliMixInputHandlerInfo.cxx:19 AliMixInputHandlerInfo.cxx:20 AliMixInputHandlerInfo.cxx:21 AliMixInputHandlerInfo.cxx:22 AliMixInputHandlerInfo.cxx:23 AliMixInputHandlerInfo.cxx:24 AliMixInputHandlerInfo.cxx:25 AliMixInputHandlerInfo.cxx:26 AliMixInputHandlerInfo.cxx:27 AliMixInputHandlerInfo.cxx:28 AliMixInputHandlerInfo.cxx:29 AliMixInputHandlerInfo.cxx:30 AliMixInputHandlerInfo.cxx:31 AliMixInputHandlerInfo.cxx:32 AliMixInputHandlerInfo.cxx:33 AliMixInputHandlerInfo.cxx:34 AliMixInputHandlerInfo.cxx:35 AliMixInputHandlerInfo.cxx:36 AliMixInputHandlerInfo.cxx:37 AliMixInputHandlerInfo.cxx:38 AliMixInputHandlerInfo.cxx:39 AliMixInputHandlerInfo.cxx:40 AliMixInputHandlerInfo.cxx:41 AliMixInputHandlerInfo.cxx:42 AliMixInputHandlerInfo.cxx:43 AliMixInputHandlerInfo.cxx:44 AliMixInputHandlerInfo.cxx:45 AliMixInputHandlerInfo.cxx:46 AliMixInputHandlerInfo.cxx:47 AliMixInputHandlerInfo.cxx:48 AliMixInputHandlerInfo.cxx:49 AliMixInputHandlerInfo.cxx:50 AliMixInputHandlerInfo.cxx:51 AliMixInputHandlerInfo.cxx:52 AliMixInputHandlerInfo.cxx:53 AliMixInputHandlerInfo.cxx:54 AliMixInputHandlerInfo.cxx:55 AliMixInputHandlerInfo.cxx:56 AliMixInputHandlerInfo.cxx:57 AliMixInputHandlerInfo.cxx:58 AliMixInputHandlerInfo.cxx:59 AliMixInputHandlerInfo.cxx:60 AliMixInputHandlerInfo.cxx:61 AliMixInputHandlerInfo.cxx:62 AliMixInputHandlerInfo.cxx:63 AliMixInputHandlerInfo.cxx:64 AliMixInputHandlerInfo.cxx:65 AliMixInputHandlerInfo.cxx:66 AliMixInputHandlerInfo.cxx:67 AliMixInputHandlerInfo.cxx:68 AliMixInputHandlerInfo.cxx:69 AliMixInputHandlerInfo.cxx:70 AliMixInputHandlerInfo.cxx:71 AliMixInputHandlerInfo.cxx:72 AliMixInputHandlerInfo.cxx:73 AliMixInputHandlerInfo.cxx:74 AliMixInputHandlerInfo.cxx:75 AliMixInputHandlerInfo.cxx:76 AliMixInputHandlerInfo.cxx:77 AliMixInputHandlerInfo.cxx:78 AliMixInputHandlerInfo.cxx:79 AliMixInputHandlerInfo.cxx:80 AliMixInputHandlerInfo.cxx:81 AliMixInputHandlerInfo.cxx:82 AliMixInputHandlerInfo.cxx:83 AliMixInputHandlerInfo.cxx:84 AliMixInputHandlerInfo.cxx:85 AliMixInputHandlerInfo.cxx:86 AliMixInputHandlerInfo.cxx:87 AliMixInputHandlerInfo.cxx:88 AliMixInputHandlerInfo.cxx:89 AliMixInputHandlerInfo.cxx:90 AliMixInputHandlerInfo.cxx:91 AliMixInputHandlerInfo.cxx:92 AliMixInputHandlerInfo.cxx:93 AliMixInputHandlerInfo.cxx:94 AliMixInputHandlerInfo.cxx:95 AliMixInputHandlerInfo.cxx:96 AliMixInputHandlerInfo.cxx:97 AliMixInputHandlerInfo.cxx:98 AliMixInputHandlerInfo.cxx:99 AliMixInputHandlerInfo.cxx:100 AliMixInputHandlerInfo.cxx:101 AliMixInputHandlerInfo.cxx:102 AliMixInputHandlerInfo.cxx:103 AliMixInputHandlerInfo.cxx:104 AliMixInputHandlerInfo.cxx:105 AliMixInputHandlerInfo.cxx:106 AliMixInputHandlerInfo.cxx:107 AliMixInputHandlerInfo.cxx:108 AliMixInputHandlerInfo.cxx:109 AliMixInputHandlerInfo.cxx:110 AliMixInputHandlerInfo.cxx:111 AliMixInputHandlerInfo.cxx:112 AliMixInputHandlerInfo.cxx:113 AliMixInputHandlerInfo.cxx:114 AliMixInputHandlerInfo.cxx:115 AliMixInputHandlerInfo.cxx:116 AliMixInputHandlerInfo.cxx:117 AliMixInputHandlerInfo.cxx:118 AliMixInputHandlerInfo.cxx:119 AliMixInputHandlerInfo.cxx:120 AliMixInputHandlerInfo.cxx:121 AliMixInputHandlerInfo.cxx:122 AliMixInputHandlerInfo.cxx:123 AliMixInputHandlerInfo.cxx:124 AliMixInputHandlerInfo.cxx:125 AliMixInputHandlerInfo.cxx:126 AliMixInputHandlerInfo.cxx:127 AliMixInputHandlerInfo.cxx:128 AliMixInputHandlerInfo.cxx:129 AliMixInputHandlerInfo.cxx:130 AliMixInputHandlerInfo.cxx:131 AliMixInputHandlerInfo.cxx:132 AliMixInputHandlerInfo.cxx:133 AliMixInputHandlerInfo.cxx:134 AliMixInputHandlerInfo.cxx:135 AliMixInputHandlerInfo.cxx:136 AliMixInputHandlerInfo.cxx:137 AliMixInputHandlerInfo.cxx:138 AliMixInputHandlerInfo.cxx:139 AliMixInputHandlerInfo.cxx:140 AliMixInputHandlerInfo.cxx:141 AliMixInputHandlerInfo.cxx:142 AliMixInputHandlerInfo.cxx:143 AliMixInputHandlerInfo.cxx:144 AliMixInputHandlerInfo.cxx:145 AliMixInputHandlerInfo.cxx:146 AliMixInputHandlerInfo.cxx:147 AliMixInputHandlerInfo.cxx:148 AliMixInputHandlerInfo.cxx:149 AliMixInputHandlerInfo.cxx:150 AliMixInputHandlerInfo.cxx:151 AliMixInputHandlerInfo.cxx:152 AliMixInputHandlerInfo.cxx:153 AliMixInputHandlerInfo.cxx:154 AliMixInputHandlerInfo.cxx:155 AliMixInputHandlerInfo.cxx:156 AliMixInputHandlerInfo.cxx:157 AliMixInputHandlerInfo.cxx:158 AliMixInputHandlerInfo.cxx:159 AliMixInputHandlerInfo.cxx:160 AliMixInputHandlerInfo.cxx:161 AliMixInputHandlerInfo.cxx:162 AliMixInputHandlerInfo.cxx:163 AliMixInputHandlerInfo.cxx:164 AliMixInputHandlerInfo.cxx:165 AliMixInputHandlerInfo.cxx:166 AliMixInputHandlerInfo.cxx:167 AliMixInputHandlerInfo.cxx:168 AliMixInputHandlerInfo.cxx:169 AliMixInputHandlerInfo.cxx:170 AliMixInputHandlerInfo.cxx:171 AliMixInputHandlerInfo.cxx:172 AliMixInputHandlerInfo.cxx:173 AliMixInputHandlerInfo.cxx:174 AliMixInputHandlerInfo.cxx:175 AliMixInputHandlerInfo.cxx:176 AliMixInputHandlerInfo.cxx:177 AliMixInputHandlerInfo.cxx:178 AliMixInputHandlerInfo.cxx:179 AliMixInputHandlerInfo.cxx:180 AliMixInputHandlerInfo.cxx:181 AliMixInputHandlerInfo.cxx:182