#include <TTree.h>
#include <TList.h>
#include <TFile.h>
#include <TArchiveFile.h>
#include <TSystemDirectory.h>
#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>
#include <TProcessID.h>
#include <TSystem.h>
#include "AliESDInputHandlerRP.h"
#include "AliESDEvent.h"
#include "AliESD.h"
#include "AliLog.h"
ClassImp(AliESDInputHandlerRP)
AliESDInputHandlerRP::AliESDInputHandlerRP() :
AliESDInputHandler(),
fRTrees( new TObjArray()),
fRDirs ( new TObjArray()),
fRFiles( new TList()),
fDetectors(new TList()),
fDirR(0),
fEventNumber(-1),
fFileNumber(0),
fEventsPerFile(0),
fExtension(""),
fPathName(new TString("./")),
fIsArchive(kFALSE)
{
}
AliESDInputHandlerRP::AliESDInputHandlerRP(const char* name, const char* title):
AliESDInputHandler(name, title),
fRTrees( new TObjArray()),
fRDirs ( new TObjArray()),
fRFiles( new TList()),
fDetectors(new TList()),
fDirR(0),
fEventNumber(-1),
fFileNumber(0),
fEventsPerFile(0),
fExtension(""),
fPathName(new TString("./")),
fIsArchive(kFALSE)
{
}
AliESDInputHandlerRP::~AliESDInputHandlerRP()
{
}
Bool_t AliESDInputHandlerRP::Init(Option_t* opt)
{
if (!(strcmp(opt, "proof")) || !(strcmp(opt, "local"))) return kTRUE;
TIter next(fDetectors);
TNamed* det;
TFile* file = 0;
while ((det = (TNamed*) next()))
{
if (!fIsArchive) {
file = TFile::Open(Form("%s%s.RecPoints.root", fPathName->Data(), det->GetName()));
} else {
file = TFile::Open(Form("%s#%s.RecPoints.root", fPathName->Data(), det->GetName()));
}
if (!file) {
AliError(Form("AliESDInputHandlerRP: %s.RecPoints.root not found in %s ! \n", det->GetName(), fPathName->Data()));
return kFALSE;
}
fRFiles->Add(file);
}
if (file) {
fEventsPerFile = file->GetNkeys() - file->GetNProcessIDs();
} else {
AliError(Form("AliESDInputHandlerRP: No file with RecPoints found in %s ! \n", fPathName->Data()));
return kFALSE;
}
fEventNumber = -1;
fFileNumber = 0;
printf("AliESDInputHandlerRP::Init() %d %d\n",__LINE__, fNEvents);
AliESDInputHandler::Init(opt);
return kTRUE;
}
Bool_t AliESDInputHandlerRP::BeginEvent(Long64_t entry)
{
if (entry == -1) {
fEventNumber++;
entry = fEventNumber;
} else {
fEventNumber = entry;
}
if (entry >= fNEvents) {
AliWarning(Form("AliESDInputHandlerRP: Event number out of range %5lld %5d\n", entry, fNEvents));
return kFALSE;
}
LoadEvent(entry);
return AliESDInputHandler::BeginEvent(entry);
}
Bool_t AliESDInputHandlerRP::LoadEvent(Int_t iev)
{
if (fEventsPerFile<=0) return kFALSE;
Int_t inew = iev / fEventsPerFile;
if (inew != fFileNumber) {
fFileNumber = inew;
if (!OpenFile(fFileNumber)){
return kFALSE;
}
}
char folder[20];
snprintf(folder, 20, "Event%d", iev);
TIter next(fRFiles);
TFile* file;
Int_t idx = 0;
while ((file = (TFile*) next()))
{
file->GetObject(folder, fDirR);
if (!fDirR) {
AliWarning(Form("AliESDInputHandlerRP: Event #%5d not found\n", iev));
return kFALSE;
}
TTree* tree = 0;
fDirR->GetObject("TreeR", tree);
fRDirs ->AddAt(fDirR, idx );
fRTrees->AddAt(tree, idx++);
}
return kTRUE;
}
Bool_t AliESDInputHandlerRP::OpenFile(Int_t i)
{
Bool_t ok = kTRUE;
if (i > 0) {
fExtension = Form("%d", i);
} else {
fExtension = "";
}
fRFiles->Delete();
TIter next(fDetectors);
TNamed* det;
TFile* file;
while ((det = (TNamed*) next()))
{
if (!fIsArchive) {
file = TFile::Open(Form("%s%s.RecPoints%s.root", fPathName->Data(), det->GetName(), fExtension));
} else {
file = TFile::Open(Form("%s#%s.RecPoints%s.root", fPathName->Data(), det->GetName(), fExtension));
}
if (!file) AliFatal(Form("AliESDInputHandlerRP: RecPoints.root not found in %s ! \n", fPathName->Data()));
fRFiles->Add(file);
}
return ok;
}
Bool_t AliESDInputHandlerRP::Notify(const char *path)
{
TString fileName(path);
if (fileName.IsNull()) return kFALSE;
AliInfo(Form("Directory change %s \n", path));
TString esdname = gSystem->BaseName(fileName);
Int_t index = esdname.Index("#")+1;
if (index) esdname.Remove(0,index);
if(fileName.Contains("#")){
fIsArchive = kTRUE;
} else if(fileName.Contains(esdname)){
fileName.ReplaceAll(esdname, "");
}
*fPathName = fileName;
TSeqCollection* members;
if (fIsArchive) {
TFile* file = TFile::Open(fPathName->Data());
TArchiveFile* arch = file->GetArchive();
members = arch->GetMembers();
fPathName->ReplaceAll("#", "");
fPathName->ReplaceAll(esdname, "");
} else {
if (fileName.BeginsWith("alien:")) {
TFile* file = TFile::Open(Form("%s/root_archive.zip", fPathName->Data()));
TArchiveFile* arch = file->GetArchive();
members = arch->GetMembers();
} else {
TString wd = gSystem->WorkingDirectory();
TSystemDirectory dir(".", fPathName->Data());
members = dir.GetListOfFiles();
gSystem->cd(wd);
}
}
TIter next(members);
TFile* entry;
Int_t ien = 0;
fDetectors->Delete();
while ( (entry = (TFile*) next()) )
{
TString name(entry->GetName());
TObjArray* tokens = name.Tokenize(".");
Int_t ntok = 0;
if (tokens) {
ntok = tokens->GetEntries();
} else {
continue;
}
if (ntok <= 1) continue;
TString str = ((TObjString*) tokens->At(1))->GetString();
if (!(strcmp(str.Data(), "RecPoints"))){
TString det = ((TObjString*) tokens->At(0))->GetString();
printf("Found file with RecPoints for %s \n", det.Data());
TNamed* ent = new TNamed(det.Data(), det.Data());
fRTrees->AddAt(0, ien);
ent->SetUniqueID(ien++);
fDetectors->Add(ent);
}
if(tokens) delete tokens;
}
printf("AliESDInputHandlerRP::Notify() Path: %s\n", fPathName->Data());
ResetIO();
InitIO("");
if (members) members->Delete();
AliESDInputHandler::Notify(path);
return kTRUE;
}
Bool_t AliESDInputHandlerRP::FinishEvent()
{
fRDirs->Delete();
AliESDInputHandler::FinishEvent();
return kTRUE;
}
void AliESDInputHandlerRP::ResetIO()
{
fRFiles->Clear("nodelete");
fExtension="";
}
TTree* AliESDInputHandlerRP::GetTreeR(const char* det)
{
TNamed* entry = (TNamed*) (fDetectors->FindObject(det));
if (!entry) {
AliWarning(Form("AliESDInputHandlerRP: No RecPoints for detector %s available \n", det));
return 0;
} else {
Int_t ien = entry->GetUniqueID();
return ((TTree*) (fRTrees->At(ien)));
}
}
AliESDInputHandlerRP.cxx:1 AliESDInputHandlerRP.cxx:2 AliESDInputHandlerRP.cxx:3 AliESDInputHandlerRP.cxx:4 AliESDInputHandlerRP.cxx:5 AliESDInputHandlerRP.cxx:6 AliESDInputHandlerRP.cxx:7 AliESDInputHandlerRP.cxx:8 AliESDInputHandlerRP.cxx:9 AliESDInputHandlerRP.cxx:10 AliESDInputHandlerRP.cxx:11 AliESDInputHandlerRP.cxx:12 AliESDInputHandlerRP.cxx:13 AliESDInputHandlerRP.cxx:14 AliESDInputHandlerRP.cxx:15 AliESDInputHandlerRP.cxx:16 AliESDInputHandlerRP.cxx:17 AliESDInputHandlerRP.cxx:18 AliESDInputHandlerRP.cxx:19 AliESDInputHandlerRP.cxx:20 AliESDInputHandlerRP.cxx:21 AliESDInputHandlerRP.cxx:22 AliESDInputHandlerRP.cxx:23 AliESDInputHandlerRP.cxx:24 AliESDInputHandlerRP.cxx:25 AliESDInputHandlerRP.cxx:26 AliESDInputHandlerRP.cxx:27 AliESDInputHandlerRP.cxx:28 AliESDInputHandlerRP.cxx:29 AliESDInputHandlerRP.cxx:30 AliESDInputHandlerRP.cxx:31 AliESDInputHandlerRP.cxx:32 AliESDInputHandlerRP.cxx:33 AliESDInputHandlerRP.cxx:34 AliESDInputHandlerRP.cxx:35 AliESDInputHandlerRP.cxx:36 AliESDInputHandlerRP.cxx:37 AliESDInputHandlerRP.cxx:38 AliESDInputHandlerRP.cxx:39 AliESDInputHandlerRP.cxx:40 AliESDInputHandlerRP.cxx:41 AliESDInputHandlerRP.cxx:42 AliESDInputHandlerRP.cxx:43 AliESDInputHandlerRP.cxx:44 AliESDInputHandlerRP.cxx:45 AliESDInputHandlerRP.cxx:46 AliESDInputHandlerRP.cxx:47 AliESDInputHandlerRP.cxx:48 AliESDInputHandlerRP.cxx:49 AliESDInputHandlerRP.cxx:50 AliESDInputHandlerRP.cxx:51 AliESDInputHandlerRP.cxx:52 AliESDInputHandlerRP.cxx:53 AliESDInputHandlerRP.cxx:54 AliESDInputHandlerRP.cxx:55 AliESDInputHandlerRP.cxx:56 AliESDInputHandlerRP.cxx:57 AliESDInputHandlerRP.cxx:58 AliESDInputHandlerRP.cxx:59 AliESDInputHandlerRP.cxx:60 AliESDInputHandlerRP.cxx:61 AliESDInputHandlerRP.cxx:62 AliESDInputHandlerRP.cxx:63 AliESDInputHandlerRP.cxx:64 AliESDInputHandlerRP.cxx:65 AliESDInputHandlerRP.cxx:66 AliESDInputHandlerRP.cxx:67 AliESDInputHandlerRP.cxx:68 AliESDInputHandlerRP.cxx:69 AliESDInputHandlerRP.cxx:70 AliESDInputHandlerRP.cxx:71 AliESDInputHandlerRP.cxx:72 AliESDInputHandlerRP.cxx:73 AliESDInputHandlerRP.cxx:74 AliESDInputHandlerRP.cxx:75 AliESDInputHandlerRP.cxx:76 AliESDInputHandlerRP.cxx:77 AliESDInputHandlerRP.cxx:78 AliESDInputHandlerRP.cxx:79 AliESDInputHandlerRP.cxx:80 AliESDInputHandlerRP.cxx:81 AliESDInputHandlerRP.cxx:82 AliESDInputHandlerRP.cxx:83 AliESDInputHandlerRP.cxx:84 AliESDInputHandlerRP.cxx:85 AliESDInputHandlerRP.cxx:86 AliESDInputHandlerRP.cxx:87 AliESDInputHandlerRP.cxx:88 AliESDInputHandlerRP.cxx:89 AliESDInputHandlerRP.cxx:90 AliESDInputHandlerRP.cxx:91 AliESDInputHandlerRP.cxx:92 AliESDInputHandlerRP.cxx:93 AliESDInputHandlerRP.cxx:94 AliESDInputHandlerRP.cxx:95 AliESDInputHandlerRP.cxx:96 AliESDInputHandlerRP.cxx:97 AliESDInputHandlerRP.cxx:98 AliESDInputHandlerRP.cxx:99 AliESDInputHandlerRP.cxx:100 AliESDInputHandlerRP.cxx:101 AliESDInputHandlerRP.cxx:102 AliESDInputHandlerRP.cxx:103 AliESDInputHandlerRP.cxx:104 AliESDInputHandlerRP.cxx:105 AliESDInputHandlerRP.cxx:106 AliESDInputHandlerRP.cxx:107 AliESDInputHandlerRP.cxx:108 AliESDInputHandlerRP.cxx:109 AliESDInputHandlerRP.cxx:110 AliESDInputHandlerRP.cxx:111 AliESDInputHandlerRP.cxx:112 AliESDInputHandlerRP.cxx:113 AliESDInputHandlerRP.cxx:114 AliESDInputHandlerRP.cxx:115 AliESDInputHandlerRP.cxx:116 AliESDInputHandlerRP.cxx:117 AliESDInputHandlerRP.cxx:118 AliESDInputHandlerRP.cxx:119 AliESDInputHandlerRP.cxx:120 AliESDInputHandlerRP.cxx:121 AliESDInputHandlerRP.cxx:122 AliESDInputHandlerRP.cxx:123 AliESDInputHandlerRP.cxx:124 AliESDInputHandlerRP.cxx:125 AliESDInputHandlerRP.cxx:126 AliESDInputHandlerRP.cxx:127 AliESDInputHandlerRP.cxx:128 AliESDInputHandlerRP.cxx:129 AliESDInputHandlerRP.cxx:130 AliESDInputHandlerRP.cxx:131 AliESDInputHandlerRP.cxx:132 AliESDInputHandlerRP.cxx:133 AliESDInputHandlerRP.cxx:134 AliESDInputHandlerRP.cxx:135 AliESDInputHandlerRP.cxx:136 AliESDInputHandlerRP.cxx:137 AliESDInputHandlerRP.cxx:138 AliESDInputHandlerRP.cxx:139 AliESDInputHandlerRP.cxx:140 AliESDInputHandlerRP.cxx:141 AliESDInputHandlerRP.cxx:142 AliESDInputHandlerRP.cxx:143 AliESDInputHandlerRP.cxx:144 AliESDInputHandlerRP.cxx:145 AliESDInputHandlerRP.cxx:146 AliESDInputHandlerRP.cxx:147 AliESDInputHandlerRP.cxx:148 AliESDInputHandlerRP.cxx:149 AliESDInputHandlerRP.cxx:150 AliESDInputHandlerRP.cxx:151 AliESDInputHandlerRP.cxx:152 AliESDInputHandlerRP.cxx:153 AliESDInputHandlerRP.cxx:154 AliESDInputHandlerRP.cxx:155 AliESDInputHandlerRP.cxx:156 AliESDInputHandlerRP.cxx:157 AliESDInputHandlerRP.cxx:158 AliESDInputHandlerRP.cxx:159 AliESDInputHandlerRP.cxx:160 AliESDInputHandlerRP.cxx:161 AliESDInputHandlerRP.cxx:162 AliESDInputHandlerRP.cxx:163 AliESDInputHandlerRP.cxx:164 AliESDInputHandlerRP.cxx:165 AliESDInputHandlerRP.cxx:166 AliESDInputHandlerRP.cxx:167 AliESDInputHandlerRP.cxx:168 AliESDInputHandlerRP.cxx:169 AliESDInputHandlerRP.cxx:170 AliESDInputHandlerRP.cxx:171 AliESDInputHandlerRP.cxx:172 AliESDInputHandlerRP.cxx:173 AliESDInputHandlerRP.cxx:174 AliESDInputHandlerRP.cxx:175 AliESDInputHandlerRP.cxx:176 AliESDInputHandlerRP.cxx:177 AliESDInputHandlerRP.cxx:178 AliESDInputHandlerRP.cxx:179 AliESDInputHandlerRP.cxx:180 AliESDInputHandlerRP.cxx:181 AliESDInputHandlerRP.cxx:182 AliESDInputHandlerRP.cxx:183 AliESDInputHandlerRP.cxx:184 AliESDInputHandlerRP.cxx:185 AliESDInputHandlerRP.cxx:186 AliESDInputHandlerRP.cxx:187 AliESDInputHandlerRP.cxx:188 AliESDInputHandlerRP.cxx:189 AliESDInputHandlerRP.cxx:190 AliESDInputHandlerRP.cxx:191 AliESDInputHandlerRP.cxx:192 AliESDInputHandlerRP.cxx:193 AliESDInputHandlerRP.cxx:194 AliESDInputHandlerRP.cxx:195 AliESDInputHandlerRP.cxx:196 AliESDInputHandlerRP.cxx:197 AliESDInputHandlerRP.cxx:198 AliESDInputHandlerRP.cxx:199 AliESDInputHandlerRP.cxx:200 AliESDInputHandlerRP.cxx:201 AliESDInputHandlerRP.cxx:202 AliESDInputHandlerRP.cxx:203 AliESDInputHandlerRP.cxx:204 AliESDInputHandlerRP.cxx:205 AliESDInputHandlerRP.cxx:206 AliESDInputHandlerRP.cxx:207 AliESDInputHandlerRP.cxx:208 AliESDInputHandlerRP.cxx:209 AliESDInputHandlerRP.cxx:210 AliESDInputHandlerRP.cxx:211 AliESDInputHandlerRP.cxx:212 AliESDInputHandlerRP.cxx:213 AliESDInputHandlerRP.cxx:214 AliESDInputHandlerRP.cxx:215 AliESDInputHandlerRP.cxx:216 AliESDInputHandlerRP.cxx:217 AliESDInputHandlerRP.cxx:218 AliESDInputHandlerRP.cxx:219 AliESDInputHandlerRP.cxx:220 AliESDInputHandlerRP.cxx:221 AliESDInputHandlerRP.cxx:222 AliESDInputHandlerRP.cxx:223 AliESDInputHandlerRP.cxx:224 AliESDInputHandlerRP.cxx:225 AliESDInputHandlerRP.cxx:226 AliESDInputHandlerRP.cxx:227 AliESDInputHandlerRP.cxx:228 AliESDInputHandlerRP.cxx:229 AliESDInputHandlerRP.cxx:230 AliESDInputHandlerRP.cxx:231 AliESDInputHandlerRP.cxx:232 AliESDInputHandlerRP.cxx:233 AliESDInputHandlerRP.cxx:234 AliESDInputHandlerRP.cxx:235 AliESDInputHandlerRP.cxx:236 AliESDInputHandlerRP.cxx:237 AliESDInputHandlerRP.cxx:238 AliESDInputHandlerRP.cxx:239 AliESDInputHandlerRP.cxx:240 AliESDInputHandlerRP.cxx:241 AliESDInputHandlerRP.cxx:242 AliESDInputHandlerRP.cxx:243 AliESDInputHandlerRP.cxx:244 AliESDInputHandlerRP.cxx:245 AliESDInputHandlerRP.cxx:246 AliESDInputHandlerRP.cxx:247 AliESDInputHandlerRP.cxx:248 AliESDInputHandlerRP.cxx:249 AliESDInputHandlerRP.cxx:250 AliESDInputHandlerRP.cxx:251 AliESDInputHandlerRP.cxx:252 AliESDInputHandlerRP.cxx:253 AliESDInputHandlerRP.cxx:254 AliESDInputHandlerRP.cxx:255 AliESDInputHandlerRP.cxx:256 AliESDInputHandlerRP.cxx:257 AliESDInputHandlerRP.cxx:258 AliESDInputHandlerRP.cxx:259 AliESDInputHandlerRP.cxx:260 AliESDInputHandlerRP.cxx:261 AliESDInputHandlerRP.cxx:262 AliESDInputHandlerRP.cxx:263 AliESDInputHandlerRP.cxx:264 AliESDInputHandlerRP.cxx:265 AliESDInputHandlerRP.cxx:266 AliESDInputHandlerRP.cxx:267 AliESDInputHandlerRP.cxx:268 AliESDInputHandlerRP.cxx:269 AliESDInputHandlerRP.cxx:270 AliESDInputHandlerRP.cxx:271 AliESDInputHandlerRP.cxx:272 AliESDInputHandlerRP.cxx:273 AliESDInputHandlerRP.cxx:274 AliESDInputHandlerRP.cxx:275 AliESDInputHandlerRP.cxx:276 AliESDInputHandlerRP.cxx:277 AliESDInputHandlerRP.cxx:278 AliESDInputHandlerRP.cxx:279 AliESDInputHandlerRP.cxx:280 AliESDInputHandlerRP.cxx:281 AliESDInputHandlerRP.cxx:282 AliESDInputHandlerRP.cxx:283 AliESDInputHandlerRP.cxx:284 AliESDInputHandlerRP.cxx:285 AliESDInputHandlerRP.cxx:286 AliESDInputHandlerRP.cxx:287 AliESDInputHandlerRP.cxx:288 AliESDInputHandlerRP.cxx:289 AliESDInputHandlerRP.cxx:290 AliESDInputHandlerRP.cxx:291 AliESDInputHandlerRP.cxx:292 AliESDInputHandlerRP.cxx:293 AliESDInputHandlerRP.cxx:294 AliESDInputHandlerRP.cxx:295 AliESDInputHandlerRP.cxx:296 AliESDInputHandlerRP.cxx:297 AliESDInputHandlerRP.cxx:298 AliESDInputHandlerRP.cxx:299 AliESDInputHandlerRP.cxx:300 AliESDInputHandlerRP.cxx:301 AliESDInputHandlerRP.cxx:302 AliESDInputHandlerRP.cxx:303 AliESDInputHandlerRP.cxx:304 AliESDInputHandlerRP.cxx:305 AliESDInputHandlerRP.cxx:306 AliESDInputHandlerRP.cxx:307 AliESDInputHandlerRP.cxx:308 AliESDInputHandlerRP.cxx:309 AliESDInputHandlerRP.cxx:310 AliESDInputHandlerRP.cxx:311 AliESDInputHandlerRP.cxx:312 AliESDInputHandlerRP.cxx:313 AliESDInputHandlerRP.cxx:314 AliESDInputHandlerRP.cxx:315 AliESDInputHandlerRP.cxx:316 AliESDInputHandlerRP.cxx:317 AliESDInputHandlerRP.cxx:318 AliESDInputHandlerRP.cxx:319 AliESDInputHandlerRP.cxx:320 AliESDInputHandlerRP.cxx:321 AliESDInputHandlerRP.cxx:322 AliESDInputHandlerRP.cxx:323 AliESDInputHandlerRP.cxx:324 AliESDInputHandlerRP.cxx:325 AliESDInputHandlerRP.cxx:326 AliESDInputHandlerRP.cxx:327 AliESDInputHandlerRP.cxx:328 AliESDInputHandlerRP.cxx:329 AliESDInputHandlerRP.cxx:330 AliESDInputHandlerRP.cxx:331 AliESDInputHandlerRP.cxx:332 AliESDInputHandlerRP.cxx:333 AliESDInputHandlerRP.cxx:334 AliESDInputHandlerRP.cxx:335