ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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.                  *
 **************************************************************************/

/* $Id$ */

//-------------------------------------------------------------------------
//     Event handler for ESD input reading the RecPoint Trees in parallel
//     Author: Andreas Morsch, CERN
//-------------------------------------------------------------------------

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


//______________________________________________________________________________
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)
{
    // Constructor
}

//______________________________________________________________________________
AliESDInputHandlerRP::~AliESDInputHandlerRP() 
{
  // Destructor
}

Bool_t AliESDInputHandlerRP::Init(Option_t* opt)
{
    //
    // Initialize input
    //
    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;
    }
    

    // Reset the event number
    fEventNumber      = -1;
    fFileNumber       =  0;
    // Get number of events from esd tree 
    printf("AliESDInputHandlerRP::Init() %d %d\n",__LINE__, fNEvents);
    //
    AliESDInputHandler::Init(opt);
    //
    return kTRUE;
}

Bool_t AliESDInputHandlerRP::BeginEvent(Long64_t entry)
{
    // Begin the next event
    //
    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);

    // Delegate to base class
    return AliESDInputHandler::BeginEvent(entry);

}

Bool_t AliESDInputHandlerRP::LoadEvent(Int_t iev)
{
    // Load the event number iev
    //
    // Calculate the file number
  if (fEventsPerFile<=0) return kFALSE;
    Int_t inew  = iev / fEventsPerFile;
    if (inew != fFileNumber) {
	fFileNumber = inew;
	if (!OpenFile(fFileNumber)){
	    return kFALSE;
	}
    }
    // Folder name
    char folder[20];
    snprintf(folder, 20, "Event%d", iev);
    // Tree R
    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)
{
    // Open file 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)
{
  // Notify about directory change
  // The directory is taken from the 'path' argument
  // 

    // Get path to directory
    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("#")){
    // If this is an archive it will contain a # 
      fIsArchive = kTRUE;
    } else  if(fileName.Contains(esdname)){
      fileName.ReplaceAll(esdname, "");
    }

    //
    // At this point we have a path to the directory or to the archive anchor
    *fPathName = fileName;
    //
    // Now filter the files containing RecPoints *.RecPoints.*

    TSeqCollection* members;

    
    if (fIsArchive) {
	// Archive
      TFile* file = TFile::Open(fPathName->Data());
      TArchiveFile* arch = file->GetArchive();
      members = arch->GetMembers();
      fPathName->ReplaceAll("#", "");
      fPathName->ReplaceAll(esdname, "");
    } else {
	// Directory or alien archive
      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;
    } // loop over files


    // Now we have the path and the list of detectors
    
    printf("AliESDInputHandlerRP::Notify() Path: %s\n", fPathName->Data());
    //
    ResetIO();
    InitIO("");
    // Some clean-up
    if (members) members->Delete();

    AliESDInputHandler::Notify(path);
    
    return kTRUE;
}

Bool_t AliESDInputHandlerRP::FinishEvent()
{
    // Clean-up after each event
    fRDirs->Delete();
    AliESDInputHandler::FinishEvent();
    return kTRUE;
}

void AliESDInputHandlerRP::ResetIO()
{
// Delete trees and files
    fRFiles->Clear("nodelete");
    fExtension="";
}

TTree* AliESDInputHandlerRP::GetTreeR(const char* det)
{
// Return pointer to RecPoint tree for detector 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