#include <TChain.h>
#include <TFileCollection.h>
#include <TEntryList.h>
#include "TGridCollection.h"
#include <TPluginManager.h>
#include <TROOT.h>
#include <TSystem.h>
#include <TFile.h>
#include <TKey.h>
#include <TGrid.h>
#include <TGridResult.h>
#include "AliRawReaderChain.h"
#include "AliRawVEvent.h"
#include "AliLog.h"
ClassImp(AliRawReaderChain)
TString AliRawReaderChain::fgSearchPath = "/alice/data";
AliRawReaderChain::AliRawReaderChain() :
AliRawReaderRoot(),
fChain(NULL)
{
}
AliRawReaderChain::AliRawReaderChain(const char* fileName) :
AliRawReaderRoot(),
fChain(NULL)
{
fChain = new TChain("RAW");
TString fileNameStr = fileName;
if (fileNameStr.EndsWith(".xml")) {
TGridCollection *collection = NULL;
TPluginManager* pluginManager = gROOT->GetPluginManager();
TPluginHandler* pluginHandler = pluginManager->FindHandler("TGridCollection", "alice");
if (!pluginHandler) {
pluginManager->AddHandler("TGridCollection", "alice",
"AliXMLCollection", "ANALYSISalice", "AliXMLCollection(const char*)");
pluginHandler = pluginManager->FindHandler("TGridCollection", "alice");
}
gSystem->Load("libANALYSIS");
if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
collection = (TGridCollection*)pluginHandler->ExecPlugin(1,fileNameStr.Data());
}
else {
fIsValid = kFALSE;
return;
}
collection->Reset();
Bool_t elistsExist = kFALSE;
TEntryList *elist = new TEntryList();
while (collection->Next()) {
fChain->Add(collection->GetTURL(""));
TEntryList *list = (TEntryList *)collection->GetEntryList("");
if (list) {
list->SetTreeName("RAW");
list->SetFileName(collection->GetTURL(""));
elist->Add(list);
elistsExist = kTRUE;
}
}
if (elistsExist) {
fChain->SetEntryList(elist,"ne");
}
else {
Info("AliRawReaderChain", "no entry lists found in %s. Using all entries", fileNameStr.Data());
delete elist;
}
}
else if (fileNameStr.EndsWith(".root")) {
TDirectory* dir = gDirectory;
TFile *listFile = TFile::Open(fileNameStr.Data());
dir->cd();
if (!listFile || !listFile->IsOpen()) {
Error("AliRawReaderChain", "could not open file %s", fileNameStr.Data());
fIsValid = kFALSE;
return;
}
TEntryList *elist = NULL;
TKey *key = NULL;
TIter nextkey(listFile->GetListOfKeys());
while ((key=(TKey*)nextkey())){
if (strcmp("TEntryList", key->GetClassName())==0){
elist = (TEntryList*)key->ReadObj();
}
}
if (!elist) {
Error("AliRawReaderChain", "no TEntryList found in %s", fileNameStr.Data());
fIsValid = kFALSE;
return;
}
TEntryList *templist = NULL;
TList *elists = elist->GetLists();
TIter next(elists);
while((templist = (TEntryList*)next())){
Info("AliRawReaderChain", "%s added to the chain", templist->GetFileName());
fChain->Add(templist->GetFileName());
}
fChain->SetEntryList(elist,"ne");
}
else {
TFileCollection collection("RAW",
"Collection with raw-data files",
fileNameStr.Data());
if (!fChain->AddFileInfoList((TCollection*)(collection.GetList()))) {
Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
fIsValid = kFALSE;
return;
}
}
fChain->SetBranchStatus("*",1);
fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
}
AliRawReaderChain::AliRawReaderChain(TFileCollection *collection) :
AliRawReaderRoot(),
fChain(NULL)
{
fChain = new TChain("RAW");
if (!fChain->AddFileInfoList((TCollection*)(collection->GetList()))) {
Error("AliRawReaderChain","Bad file list in collection, the chain is empty");
fIsValid = kFALSE;
return;
}
fChain->SetBranchStatus("*",1);
fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
}
AliRawReaderChain::AliRawReaderChain(TChain *chain) :
AliRawReaderRoot(),
fChain(chain)
{
if (!fChain) {
fIsValid = kFALSE;
return;
}
fChain->SetBranchStatus("*",1);
fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
}
AliRawReaderChain::AliRawReaderChain(TEntryList *elist) :
AliRawReaderRoot(),
fChain(NULL)
{
if (!elist) {
fIsValid = kFALSE;
return;
}
fChain = new TChain("RAW");
TEntryList *templist = NULL;
TList *elists = elist->GetLists();
TIter next(elists);
while((templist = (TEntryList*)next())){
fChain->Add(templist->GetFileName());
}
fChain->SetEntryList(elist,"ne");
fChain->SetBranchStatus("*",1);
fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
}
AliRawReaderChain::AliRawReaderChain(Int_t runNumber) :
AliRawReaderRoot(),
fChain(NULL)
{
if (runNumber <= 0) {
Error("AliRawReaderChain","Bad run number:%d",runNumber);
fIsValid = kFALSE;
}
if (!gGrid) TGrid::Connect("alien://");
if (!gGrid) {
fIsValid = kFALSE;
return;
}
if (fgSearchPath.IsNull()) fgSearchPath = "/alice/data";
TGridResult *res = gGrid->Query(fgSearchPath.Data(),Form("%09d/raw/*%09d*.root",runNumber,runNumber));
Int_t nFiles = res->GetEntries();
if (!nFiles) {
Error("AliRawReaderChain","No raw-data files found for run %d",runNumber);
fIsValid = kFALSE;
delete res;
return;
}
fChain = new TChain("RAW");
for (Int_t i = 0; i < nFiles; i++) {
TString filename = res->GetKey(i, "turl");
if(filename == "") continue;
fChain->Add(filename.Data());
}
delete res;
fChain->SetBranchStatus("*",1);
fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
}
AliRawReaderChain::AliRawReaderChain(const AliRawReaderChain& rawReader) :
AliRawReaderRoot(rawReader),
fChain(rawReader.fChain)
{
}
AliRawReaderChain& AliRawReaderChain::operator = (const AliRawReaderChain&
rawReader)
{
this->~AliRawReaderChain();
new(this) AliRawReaderChain(rawReader);
return *this;
}
AliRawReaderChain::~AliRawReaderChain()
{
if (fChain) {
delete fChain;
fChain = NULL;
}
}
Bool_t AliRawReaderChain::NextEvent()
{
if (!fChain || !fChain->GetListOfFiles()->GetEntriesFast()) return kFALSE;
do {
delete fEvent;
fEvent = NULL;
fEventHeader = NULL;
Long64_t treeEntry = fChain->LoadTree(fEventIndex+1);
if (!fBranch)
return kFALSE;
if (fBranch->GetEntry(treeEntry) <= 0)
return kFALSE;
fEventHeader = fEvent->GetHeader();
fEventIndex++;
} while (!IsEventSelected());
fEventNumber++;
return Reset();
}
Bool_t AliRawReaderChain::RewindEvents()
{
fEventIndex = -1;
delete fEvent;
fEvent = NULL;
fEventHeader = NULL;
fEventNumber = -1;
return Reset();
}
Bool_t AliRawReaderChain::GotoEvent(Int_t event)
{
if (!fChain || !fChain->GetListOfFiles()->GetEntriesFast()) return kFALSE;
delete fEvent;
fEvent = NULL;
fEventHeader = NULL;
Long64_t treeEntry = fChain->LoadTree(event);
if (!fBranch)
return kFALSE;
if (fBranch->GetEntry(treeEntry) <= 0)
return kFALSE;
fEventHeader = fEvent->GetHeader();
fEventIndex = event;
fEventNumber++;
return Reset();
}
Int_t AliRawReaderChain::GetNumberOfEvents() const
{
if (!fChain) return -1;
return fChain->GetEntries();
}
void AliRawReaderChain::SetSearchPath(const char* path)
{
AliInfoGeneral("SetSearchPath",Form("Setting search path to \"%s\" (was \"%s\")",path,fgSearchPath.Data()));
fgSearchPath = path;
}
AliRawReaderChain.cxx:100 AliRawReaderChain.cxx:101 AliRawReaderChain.cxx:102 AliRawReaderChain.cxx:103 AliRawReaderChain.cxx:104 AliRawReaderChain.cxx:105 AliRawReaderChain.cxx:106 AliRawReaderChain.cxx:107 AliRawReaderChain.cxx:108 AliRawReaderChain.cxx:109 AliRawReaderChain.cxx:110 AliRawReaderChain.cxx:111 AliRawReaderChain.cxx:112 AliRawReaderChain.cxx:113 AliRawReaderChain.cxx:114 AliRawReaderChain.cxx:115 AliRawReaderChain.cxx:116 AliRawReaderChain.cxx:117 AliRawReaderChain.cxx:118 AliRawReaderChain.cxx:119 AliRawReaderChain.cxx:120 AliRawReaderChain.cxx:121 AliRawReaderChain.cxx:122 AliRawReaderChain.cxx:123 AliRawReaderChain.cxx:124 AliRawReaderChain.cxx:125 AliRawReaderChain.cxx:126 AliRawReaderChain.cxx:127 AliRawReaderChain.cxx:128 AliRawReaderChain.cxx:129 AliRawReaderChain.cxx:130 AliRawReaderChain.cxx:131 AliRawReaderChain.cxx:132 AliRawReaderChain.cxx:133 AliRawReaderChain.cxx:134 AliRawReaderChain.cxx:135 AliRawReaderChain.cxx:136 AliRawReaderChain.cxx:137 AliRawReaderChain.cxx:138 AliRawReaderChain.cxx:139 AliRawReaderChain.cxx:140 AliRawReaderChain.cxx:141 AliRawReaderChain.cxx:142 AliRawReaderChain.cxx:143 AliRawReaderChain.cxx:144 AliRawReaderChain.cxx:145 AliRawReaderChain.cxx:146 AliRawReaderChain.cxx:147 AliRawReaderChain.cxx:148 AliRawReaderChain.cxx:149 AliRawReaderChain.cxx:150 AliRawReaderChain.cxx:151 AliRawReaderChain.cxx:152 AliRawReaderChain.cxx:153 AliRawReaderChain.cxx:154 AliRawReaderChain.cxx:155 AliRawReaderChain.cxx:156 AliRawReaderChain.cxx:157 AliRawReaderChain.cxx:158 AliRawReaderChain.cxx:159 AliRawReaderChain.cxx:160 AliRawReaderChain.cxx:161 AliRawReaderChain.cxx:162 AliRawReaderChain.cxx:163 AliRawReaderChain.cxx:164 AliRawReaderChain.cxx:165 AliRawReaderChain.cxx:166 AliRawReaderChain.cxx:167 AliRawReaderChain.cxx:168 AliRawReaderChain.cxx:169 AliRawReaderChain.cxx:170 AliRawReaderChain.cxx:171 AliRawReaderChain.cxx:172 AliRawReaderChain.cxx:173 AliRawReaderChain.cxx:174 AliRawReaderChain.cxx:175 AliRawReaderChain.cxx:176 AliRawReaderChain.cxx:177 AliRawReaderChain.cxx:178 AliRawReaderChain.cxx:179 AliRawReaderChain.cxx:180 AliRawReaderChain.cxx:181 AliRawReaderChain.cxx:182 AliRawReaderChain.cxx:183 AliRawReaderChain.cxx:184 AliRawReaderChain.cxx:185 AliRawReaderChain.cxx:186 AliRawReaderChain.cxx:187 AliRawReaderChain.cxx:188 AliRawReaderChain.cxx:189 AliRawReaderChain.cxx:190 AliRawReaderChain.cxx:191 AliRawReaderChain.cxx:192 AliRawReaderChain.cxx:193 AliRawReaderChain.cxx:194 AliRawReaderChain.cxx:195 AliRawReaderChain.cxx:196 AliRawReaderChain.cxx:197 AliRawReaderChain.cxx:198 AliRawReaderChain.cxx:199 AliRawReaderChain.cxx:200 AliRawReaderChain.cxx:201 AliRawReaderChain.cxx:202 AliRawReaderChain.cxx:203 AliRawReaderChain.cxx:204 AliRawReaderChain.cxx:205 AliRawReaderChain.cxx:206 AliRawReaderChain.cxx:207 AliRawReaderChain.cxx:208 AliRawReaderChain.cxx:209 AliRawReaderChain.cxx:210 AliRawReaderChain.cxx:211 AliRawReaderChain.cxx:212 AliRawReaderChain.cxx:213 AliRawReaderChain.cxx:214 AliRawReaderChain.cxx:215 AliRawReaderChain.cxx:216 AliRawReaderChain.cxx:217 AliRawReaderChain.cxx:218 AliRawReaderChain.cxx:219 AliRawReaderChain.cxx:220 AliRawReaderChain.cxx:221 AliRawReaderChain.cxx:222 AliRawReaderChain.cxx:223 AliRawReaderChain.cxx:224 AliRawReaderChain.cxx:225 AliRawReaderChain.cxx:226 AliRawReaderChain.cxx:227 AliRawReaderChain.cxx:228 AliRawReaderChain.cxx:229 AliRawReaderChain.cxx:230 AliRawReaderChain.cxx:231 AliRawReaderChain.cxx:232 AliRawReaderChain.cxx:233 AliRawReaderChain.cxx:234 AliRawReaderChain.cxx:235 AliRawReaderChain.cxx:236 AliRawReaderChain.cxx:237 AliRawReaderChain.cxx:238 AliRawReaderChain.cxx:239 AliRawReaderChain.cxx:240 AliRawReaderChain.cxx:241 AliRawReaderChain.cxx:242 AliRawReaderChain.cxx:243 AliRawReaderChain.cxx:244 AliRawReaderChain.cxx:245 AliRawReaderChain.cxx:246 AliRawReaderChain.cxx:247 AliRawReaderChain.cxx:248 AliRawReaderChain.cxx:249 AliRawReaderChain.cxx:250 AliRawReaderChain.cxx:251 AliRawReaderChain.cxx:252 AliRawReaderChain.cxx:253 AliRawReaderChain.cxx:254 AliRawReaderChain.cxx:255 AliRawReaderChain.cxx:256 AliRawReaderChain.cxx:257 AliRawReaderChain.cxx:258 AliRawReaderChain.cxx:259 AliRawReaderChain.cxx:260 AliRawReaderChain.cxx:261 AliRawReaderChain.cxx:262 AliRawReaderChain.cxx:263 AliRawReaderChain.cxx:264 AliRawReaderChain.cxx:265 AliRawReaderChain.cxx:266 AliRawReaderChain.cxx:267 AliRawReaderChain.cxx:268 AliRawReaderChain.cxx:269 AliRawReaderChain.cxx:270 AliRawReaderChain.cxx:271 AliRawReaderChain.cxx:272 AliRawReaderChain.cxx:273 AliRawReaderChain.cxx:274 AliRawReaderChain.cxx:275 AliRawReaderChain.cxx:276 AliRawReaderChain.cxx:277 AliRawReaderChain.cxx:278 AliRawReaderChain.cxx:279 AliRawReaderChain.cxx:280 AliRawReaderChain.cxx:281 AliRawReaderChain.cxx:282 AliRawReaderChain.cxx:283 AliRawReaderChain.cxx:284 AliRawReaderChain.cxx:285 AliRawReaderChain.cxx:286 AliRawReaderChain.cxx:287 AliRawReaderChain.cxx:288 AliRawReaderChain.cxx:289 AliRawReaderChain.cxx:290 AliRawReaderChain.cxx:291 AliRawReaderChain.cxx:292 AliRawReaderChain.cxx:293 AliRawReaderChain.cxx:294 AliRawReaderChain.cxx:295 AliRawReaderChain.cxx:296 AliRawReaderChain.cxx:297 AliRawReaderChain.cxx:298 AliRawReaderChain.cxx:299 AliRawReaderChain.cxx:300 AliRawReaderChain.cxx:301 AliRawReaderChain.cxx:302 AliRawReaderChain.cxx:303 AliRawReaderChain.cxx:304 AliRawReaderChain.cxx:305 AliRawReaderChain.cxx:306 AliRawReaderChain.cxx:307 AliRawReaderChain.cxx:308 AliRawReaderChain.cxx:309 AliRawReaderChain.cxx:310 AliRawReaderChain.cxx:311 AliRawReaderChain.cxx:312 AliRawReaderChain.cxx:313 AliRawReaderChain.cxx:314 AliRawReaderChain.cxx:315 AliRawReaderChain.cxx:316 AliRawReaderChain.cxx:317 AliRawReaderChain.cxx:318 AliRawReaderChain.cxx:319 AliRawReaderChain.cxx:320 AliRawReaderChain.cxx:321 AliRawReaderChain.cxx:322 AliRawReaderChain.cxx:323 AliRawReaderChain.cxx:324 AliRawReaderChain.cxx:325 AliRawReaderChain.cxx:326 AliRawReaderChain.cxx:327 AliRawReaderChain.cxx:328 AliRawReaderChain.cxx:329 AliRawReaderChain.cxx:330 AliRawReaderChain.cxx:331 AliRawReaderChain.cxx:332 AliRawReaderChain.cxx:333 AliRawReaderChain.cxx:334 AliRawReaderChain.cxx:335 AliRawReaderChain.cxx:336 AliRawReaderChain.cxx:337 AliRawReaderChain.cxx:338 AliRawReaderChain.cxx:339 AliRawReaderChain.cxx:340 AliRawReaderChain.cxx:341 AliRawReaderChain.cxx:342 AliRawReaderChain.cxx:343 AliRawReaderChain.cxx:344 AliRawReaderChain.cxx:345 AliRawReaderChain.cxx:346 AliRawReaderChain.cxx:347 AliRawReaderChain.cxx:348 AliRawReaderChain.cxx:349 AliRawReaderChain.cxx:350 AliRawReaderChain.cxx:351 AliRawReaderChain.cxx:352 AliRawReaderChain.cxx:353 AliRawReaderChain.cxx:354 AliRawReaderChain.cxx:355 AliRawReaderChain.cxx:356 AliRawReaderChain.cxx:357