ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

///////////////////////////////////////////////////////////////////////////////
///
/// This is a class for reading raw data from a root chain.
/// There are two constructors available - one from a text file containing the
/// list of root raw-data files to be processed and one directly from
/// TFileCollection.
///
/// cvetan.cheshkov@cern.ch 29/07/2008
///
///////////////////////////////////////////////////////////////////////////////

#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)
{
  // default constructor
}

AliRawReaderChain::AliRawReaderChain(const char* fileName) :
  AliRawReaderRoot(),
  fChain(NULL)
{
// create raw-reader objects which takes as an input a root chain
// either from the file list found in 'fileName' (IsCollection = true)
// or from entry list found in 'filename' (IsCollection = false)
// The entry-list syntax follows root convetion: filename.root/listname

  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)
{
// create raw-reader objects which takes as an input a root chain
// from a root file collection

  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)
{
// create raw-reader objects which takes as an input a root chain
// from a root file collection

  if (!fChain) {
    fIsValid = kFALSE;
    return;
  }

  fChain->SetBranchStatus("*",1);
  fChain->SetBranchAddress("rawevent",&fEvent,&fBranch);
}

AliRawReaderChain::AliRawReaderChain(TEntryList *elist) :
  AliRawReaderRoot(),
  fChain(NULL)
{
// create raw-reader objects which takes as an input a root chain
// from a root file collection

  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)
{
// create raw-reader objects which takes as an input a root chain
// with the raw-data files for a given run
// It queries alien FC in order to do that and therefore
// it needs alien API to be enabled

  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)
{
// copy constructor
}

AliRawReaderChain& AliRawReaderChain::operator = (const AliRawReaderChain& 
						  rawReader)
{
// assignment operator

  this->~AliRawReaderChain();
  new(this) AliRawReaderChain(rawReader);
  return *this;
}

AliRawReaderChain::~AliRawReaderChain()
{
// delete objects and close root file

  if (fChain) {
    delete fChain;
    fChain = NULL;
  }
}

Bool_t AliRawReaderChain::NextEvent()
{
// go to the next event in the root file

  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()
{
// go back to the beginning of the root file

  fEventIndex = -1;
  delete fEvent;
  fEvent = NULL;
  fEventHeader = NULL;
  fEventNumber = -1;
  return Reset();
}

Bool_t  AliRawReaderChain::GotoEvent(Int_t event)
{
  // go to a particular event
  // Uses the absolute event index inside the
  // chain with raw data

  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
{
  // Get the total number of events in the chain
  // of raw-data files

  if (!fChain) return -1;

  return fChain->GetEntries();
}

void AliRawReaderChain::SetSearchPath(const char* path)
{
  // set alien query search path
  AliInfoGeneral("SetSearchPath",Form("Setting search path to \"%s\" (was \"%s\")",path,fgSearchPath.Data()));
  fgSearchPath = path;
}
 AliRawReaderChain.cxx:1
 AliRawReaderChain.cxx:2
 AliRawReaderChain.cxx:3
 AliRawReaderChain.cxx:4
 AliRawReaderChain.cxx:5
 AliRawReaderChain.cxx:6
 AliRawReaderChain.cxx:7
 AliRawReaderChain.cxx:8
 AliRawReaderChain.cxx:9
 AliRawReaderChain.cxx:10
 AliRawReaderChain.cxx:11
 AliRawReaderChain.cxx:12
 AliRawReaderChain.cxx:13
 AliRawReaderChain.cxx:14
 AliRawReaderChain.cxx:15
 AliRawReaderChain.cxx:16
 AliRawReaderChain.cxx:17
 AliRawReaderChain.cxx:18
 AliRawReaderChain.cxx:19
 AliRawReaderChain.cxx:20
 AliRawReaderChain.cxx:21
 AliRawReaderChain.cxx:22
 AliRawReaderChain.cxx:23
 AliRawReaderChain.cxx:24
 AliRawReaderChain.cxx:25
 AliRawReaderChain.cxx:26
 AliRawReaderChain.cxx:27
 AliRawReaderChain.cxx:28
 AliRawReaderChain.cxx:29
 AliRawReaderChain.cxx:30
 AliRawReaderChain.cxx:31
 AliRawReaderChain.cxx:32
 AliRawReaderChain.cxx:33
 AliRawReaderChain.cxx:34
 AliRawReaderChain.cxx:35
 AliRawReaderChain.cxx:36
 AliRawReaderChain.cxx:37
 AliRawReaderChain.cxx:38
 AliRawReaderChain.cxx:39
 AliRawReaderChain.cxx:40
 AliRawReaderChain.cxx:41
 AliRawReaderChain.cxx:42
 AliRawReaderChain.cxx:43
 AliRawReaderChain.cxx:44
 AliRawReaderChain.cxx:45
 AliRawReaderChain.cxx:46
 AliRawReaderChain.cxx:47
 AliRawReaderChain.cxx:48
 AliRawReaderChain.cxx:49
 AliRawReaderChain.cxx:50
 AliRawReaderChain.cxx:51
 AliRawReaderChain.cxx:52
 AliRawReaderChain.cxx:53
 AliRawReaderChain.cxx:54
 AliRawReaderChain.cxx:55
 AliRawReaderChain.cxx:56
 AliRawReaderChain.cxx:57
 AliRawReaderChain.cxx:58
 AliRawReaderChain.cxx:59
 AliRawReaderChain.cxx:60
 AliRawReaderChain.cxx:61
 AliRawReaderChain.cxx:62
 AliRawReaderChain.cxx:63
 AliRawReaderChain.cxx:64
 AliRawReaderChain.cxx:65
 AliRawReaderChain.cxx:66
 AliRawReaderChain.cxx:67
 AliRawReaderChain.cxx:68
 AliRawReaderChain.cxx:69
 AliRawReaderChain.cxx:70
 AliRawReaderChain.cxx:71
 AliRawReaderChain.cxx:72
 AliRawReaderChain.cxx:73
 AliRawReaderChain.cxx:74
 AliRawReaderChain.cxx:75
 AliRawReaderChain.cxx:76
 AliRawReaderChain.cxx:77
 AliRawReaderChain.cxx:78
 AliRawReaderChain.cxx:79
 AliRawReaderChain.cxx:80
 AliRawReaderChain.cxx:81
 AliRawReaderChain.cxx:82
 AliRawReaderChain.cxx:83
 AliRawReaderChain.cxx:84
 AliRawReaderChain.cxx:85
 AliRawReaderChain.cxx:86
 AliRawReaderChain.cxx:87
 AliRawReaderChain.cxx:88
 AliRawReaderChain.cxx:89
 AliRawReaderChain.cxx:90
 AliRawReaderChain.cxx:91
 AliRawReaderChain.cxx:92
 AliRawReaderChain.cxx:93
 AliRawReaderChain.cxx:94
 AliRawReaderChain.cxx:95
 AliRawReaderChain.cxx:96
 AliRawReaderChain.cxx:97
 AliRawReaderChain.cxx:98
 AliRawReaderChain.cxx:99
 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