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 
//     Author: Andreas Morsch, CERN
//-------------------------------------------------------------------------

#include <TTree.h>
#include <TChain.h>
#include <TFile.h>
#include <TArchiveFile.h>
#include <TObjArray.h>
#include <TSystem.h>
#include <TString.h>
#include <TObjString.h>
#include <TProcessID.h>
#include <TMap.h>

#include "AliESDInputHandler.h"
#include "AliESDEvent.h"
#include "AliESDfriend.h"
#include "AliVCuts.h"
#include "AliESD.h"
#include "AliRunTag.h"
#include "AliEventTag.h"
#include "AliLog.h"
#include "AliESDpid.h"

ClassImp(AliESDInputHandler)

static Option_t *gESDDataType = "ESD";

//______________________________________________________________________________
AliESDInputHandler::AliESDInputHandler() :
  AliInputEventHandler(),
  fEvent(0x0),
  fFriend(0x0),
  fESDpid(0x0),
  fAnalysisType(0),
  fNEvents(0),
  fHLTEvent(0x0),
  fHLTTree(0x0),
  fUseHLT(kFALSE),
  fTagCutSumm(0x0),
  fUseTags(kFALSE),
  fChainT(0),
  fTreeT(0),
  fRunTag(0),
  fEventTag(0),
  fReadFriends(0),
  fFriendFileName("AliESDfriends.root")
{
  // default constructor
}

//______________________________________________________________________________
AliESDInputHandler::~AliESDInputHandler() 
{
  //  destructor
  if (fRunTag) delete fRunTag;
  delete fESDpid;
}

//______________________________________________________________________________
AliESDInputHandler::AliESDInputHandler(const char* name, const char* title):
    AliInputEventHandler(name, title), fEvent(0x0), fFriend(0x0), fESDpid(0x0), fAnalysisType(0),
    fNEvents(0),  fHLTEvent(0x0), fHLTTree(0x0), fUseHLT(kFALSE), fTagCutSumm(0x0), fUseTags(kFALSE), fChainT(0), fTreeT(0), fRunTag(0), fEventTag(0), fReadFriends(0), fFriendFileName("AliESDfriends.root")
{
    // Constructor
}

//______________________________________________________________________________
Bool_t AliESDInputHandler::Init(TTree* tree,  Option_t* opt)
{
    //
    // Initialisation necessary for each new tree 
    // 
    fAnalysisType = opt;
    fTree = tree;
    
    if (!fTree) return kFALSE;
//    fTree->GetEntry(0);
    

    if (!fEvent) fEvent = new AliESDEvent();
    fEvent->ReadFromTree(fTree);
    fNEvents = fTree->GetEntries();
    if (fReadFriends) ConnectFriends();

    if (fMixingHandler) fMixingHandler->Init(tree,  opt);
    return kTRUE;
}

//______________________________________________________________________________
Bool_t AliESDInputHandler::BeginEvent(Long64_t entry)
{
    
    // Copy from old to new format if necessary
  static Bool_t called = kFALSE;
  if (!called && fEventCuts && IsUserCallSelectionMask())
     AliInfo(Form("The ESD input handler expects that the first task calls AliESDInputHandler::CheckSelectionMask() %s", fEventCuts->ClassName()));
  AliESD* old = ((AliESDEvent*) fEvent)->GetAliESDOld();
  if (old) {
   ((AliESDEvent*)fEvent)->CopyFromOldESD();
   old->Reset();
  }

  if (fHLTTree) {
      fHLTTree->GetEntry(entry);
  }
  
  fNewEvent = kTRUE;
  //
  static Int_t prevRunNumber = -1;
  if (prevRunNumber != fEvent->GetRunNumber() && NeedField()) {
    fEvent->InitMagneticField();
    prevRunNumber = fEvent->GetRunNumber();
  } 
  //
  // Event selection
  // 
  fIsSelectedResult = 0;
  if (fEventCuts && !IsUserCallSelectionMask())
      fIsSelectedResult = fEventCuts->GetSelectionMask((AliESDEvent*)fEvent); 
  //
  // Friends
  ((AliESDEvent*)fEvent)->SetESDfriend(fFriend);
  called = kTRUE;

  // set transient pointer to event inside tracks
  fEvent->ConnectTracks();

  if (fMixingHandler) fMixingHandler->BeginEvent(entry);
  if (fUseTags && fRunTag) {
    fEventTag = 0;
    if (entry >= fRunTag->GetNEvents()) {
      AliError(Form("Current event %d does not match max range from run tag: 0-%d", (Int_t)entry, fRunTag->GetNEvents()));
      return kTRUE;
    }
    fEventTag = fRunTag->GetEventTag(entry);   
  }      
  return kTRUE;
}

//______________________________________________________________________________
void AliESDInputHandler::CheckSelectionMask()
{
// This method can be called by a task only if IsUserCallSelectionMask is true.
   if (!fEventCuts || !IsUserCallSelectionMask()) return;
   fIsSelectedResult = fEventCuts->GetSelectionMask((AliESDEvent*)fEvent);
}

//______________________________________________________________________________
void AliESDInputHandler::ConnectFriends()
{
// Connect the friends tree as soon as available.
  //
  // Handle the friends first
  //
  TTree* cTree = fTree->GetTree();
  if (!cTree) cTree = fTree;      
  if (!cTree->FindBranch("ESDfriend.")) {
    // Try to add ESDfriend. branch as friend
    TString esdFriendTreeFName;
    esdFriendTreeFName = (fTree->GetCurrentFile())->GetName();    
    TString basename = gSystem->BaseName(esdFriendTreeFName);
    Int_t index = basename.Index("#")+1;
    basename.Remove(index);
    basename += fFriendFileName;
    TString dirname = gSystem->DirName(esdFriendTreeFName);
    dirname += "/";
    esdFriendTreeFName = dirname + basename;

    cTree->AddFriend("esdFriendTree", esdFriendTreeFName.Data());
    cTree->SetBranchStatus("ESDfriend.", 1);
    fFriend = fEvent->FindFriend();
    if (fFriend) cTree->SetBranchAddress("ESDfriend.", &fFriend);
  }
}

//______________________________________________________________________________
Bool_t  AliESDInputHandler::FinishEvent()
{
    // Finish the event 
  if(fEvent)fEvent->Reset();
  if (fFriend) fFriend->Reset();
  if (fMixingHandler) fMixingHandler->FinishEvent();
  return kTRUE;
} 

//______________________________________________________________________________
Bool_t AliESDInputHandler::Notify(const char* path)
{
  // Notify a directory change
  static Bool_t firsttime = kFALSE;
  AliInfo(Form("Directory change %s \n", path));
  //
  // Handle the friends first
  //
  if (fReadFriends) ConnectFriends();
  //
  //
  SwitchOffBranches();
  SwitchOnBranches();
  fFriend = (AliESDfriend*)(fEvent->FindListObject("AliESDfriend"));
  fUserInfo=fTree->GetTree()->GetUserInfo();

  //
  if (fUseHLT) {
    // Get HLTesdTree from current file
    TTree* cTree = fTree;
    if (fTree->GetTree()) cTree = fTree->GetTree();
    TFile* cFile = cTree->GetCurrentFile();
    cFile->GetObject("HLTesdTree", fHLTTree);
	
    if (fHLTTree) {
	   if (!fHLTEvent) fHLTEvent = new AliESDEvent();
	   fHLTEvent->ReadFromTree(fHLTTree);
    }
  }

  if (!fUseTags) {
    if (fMixingHandler) fMixingHandler->Notify(path);
    return kTRUE;
  }
    
  Bool_t zip = kFALSE;
    
  // Setup the base path
  TString pathName(path);
  Int_t index = pathName.Index("#");
  if (index>=0) {
    zip = kTRUE;
    pathName = pathName(0,index);
  } else {
    pathName = gSystem->DirName(pathName);
  }
  if (fTree->GetCurrentFile()->GetArchive()) zip = kTRUE;
  if (pathName.IsNull()) pathName = "./";  
  printf("AliESDInputHandler::Notify() Path: %s\n", pathName.Data());

  if (fRunTag) {
    fRunTag->Clear();
  } else {
    fRunTag = new AliRunTag();
  }
    
  const char* tagPattern = "ESD.tag.root";
  TString sname;
  TString tagFilename;
  if (zip) {
    TObjArray* arr = fTree->GetCurrentFile()->GetArchive()->GetMembers();
    TIter next(arr);
    TObject *objarchive;
    while ((objarchive = next())) {
      sname = objarchive->GetName();
	   if (sname.Contains(tagPattern)) { 
        tagFilename = pathName;
        if (index>=0) tagFilename += "#";
        else tagFilename += "/";
        tagFilename += sname;
        AliInfo(Form("Tag file found: %s\n", tagFilename.Data()));
        break; // There should be only one such file in the archive
      }//pattern check
    } // archive file loop
  } else {
    void * dirp = gSystem->OpenDirectory(pathName.Data());
    while(1) {
      sname = gSystem->GetDirEntry(dirp);
      if (sname.IsNull()) break;
      if (sname.Contains(tagPattern)) { 
        tagFilename = pathName;
        tagFilename += "/";
        tagFilename += sname;
        AliInfo(Form("Tag file found: %s\n", tagFilename.Data()));
        break;
      }//pattern check
    }//directory loop
    gSystem->FreeDirectory(dirp);
  }
  if (tagFilename.IsNull()) {
    if (firsttime) AliWarning(Form("Tag file not found in directory: %s", pathName.Data()));
    firsttime = kFALSE;
    delete fRunTag; fRunTag = 0;
    return kTRUE;
  }
  TFile *tagfile = TFile::Open(tagFilename);
  if (!tagfile) {
    AliError(Form("Cannot open tag file: %s", tagFilename.Data()));
    delete fRunTag; fRunTag = 0;
    return kTRUE;
  }   
  fTreeT = (TTree*)tagfile->Get("T"); // file is the owner
  if (!fTreeT) {
    AliError(Form("Cannot get tree of tags from file: %s", tagFilename.Data()));
    delete fRunTag; fRunTag = 0;
    return kTRUE;
  }
    
  fTreeT->SetBranchAddress("AliTAG",&fRunTag);
  fTreeT->GetEntry(0);
  delete tagfile;
  // Notify the mixing handler after the tags are loaded
  if (fMixingHandler) fMixingHandler->Notify(path);
  return kTRUE;
}

//______________________________________________________________________________
Option_t *AliESDInputHandler::GetDataType() const
{
// Returns handled data type.
   return gESDDataType;
}

//______________________________________________________________________________
Int_t AliESDInputHandler::GetNEventAcceptedInFile()
{
  // Get number of events in file accepted by the tag cuts
  // return -1 if no info is available
  if (!fTagCutSumm) {
    TList *luo = fTree->GetUserInfo();
    if (!luo) {
      AliInfo(Form("No user info in input tree - no tag cut summary\n"));
      return -1;
    }
    for (int iluo=0; iluo<luo->GetEntries(); iluo++) {
      fTagCutSumm = dynamic_cast<TMap *>(luo->At(iluo));
      if (fTagCutSumm) break;
    }
    if (!fTagCutSumm) {
      AliInfo(Form("No tag summary map in input tree\n"));
      return -1;
    }
  }

  TObjString *ostr = 0;
  if (fTagCutSumm->FindObject(fTree->GetCurrentFile()->GetName()))
    ostr = (TObjString *) fTagCutSumm->GetValue(fTree->GetCurrentFile()->GetName());
  else {
    AliInfo(Form("No tag cut summary for file %s\n", fTree->GetCurrentFile()->GetName()));
    return -1;
  }
  char *iTagInfo;
  iTagInfo = strdup(ostr->GetString().Data());

  Int_t iAcc = atoi(strtok(iTagInfo, ","));
  
  AliInfo(Form("Got %i accepted events for file %s", iAcc,  fTree->GetCurrentFile()->GetName()));
  
  free(iTagInfo);

  return iAcc;
}

//______________________________________________________________________________
Int_t AliESDInputHandler::GetNEventRejectedInFile()
{
  // Get number of events in file rejected by the tag cuts
  // return -1 if no info is available
  if (!fTagCutSumm) {
    TList *luo = fTree->GetUserInfo();
    if (!luo) {
      AliInfo(Form("No user info in input tree - no tag cut summary\n"));
      return -1;
    }
    for (int iluo=0; iluo<luo->GetEntries(); iluo++) {
      fTagCutSumm = dynamic_cast<TMap *>(luo->At(iluo));
      if (fTagCutSumm) break;
    }
    if (!fTagCutSumm) {
      AliInfo(Form("No tag summary map in input tree\n"));
      return -1;
    }
  }

  TObjString *ostr = 0;
  if (fTagCutSumm->FindObject(fTree->GetCurrentFile()->GetName()))
    ostr = (TObjString *) fTagCutSumm->GetValue(fTree->GetCurrentFile()->GetName());
  else {
    AliInfo(Form("No tag cut summary for file %s\n", fTree->GetCurrentFile()->GetName()));
    return -1;
  }
  char *iTagInfo;
  iTagInfo = strdup(ostr->GetString().Data());

  strtok(iTagInfo, ",");
  Int_t iRej = atoi(strtok(NULL, ","));
  
  AliInfo(Form("Got %i accepted events for file %s", iRej,  fTree->GetCurrentFile()->GetName()));
  
  free(iTagInfo);

  return iRej;
}

//______________________________________________________________________________
Bool_t AliESDInputHandler::GetCutSummaryForChain(Int_t *aTotal,  Int_t *aAccepted,  Int_t *aRejected)
{
  // Get number of events in the full chain
  // Count accepted and rejected events
  // return kFALSE if no info is available
  if (!fTagCutSumm) {
    TList *luo = fTree->GetUserInfo();
    if (!luo) {
      AliInfo(Form("No user info in input tree - no tag cut summary\n"));
      return kFALSE;
    }
    for (int iluo=0; iluo<luo->GetEntries(); iluo++) {
      fTagCutSumm = dynamic_cast<TMap *>(luo->At(iluo));
      if (fTagCutSumm) break;
    }
    if (!fTagCutSumm) {
      AliInfo(Form("No tag summary map in input tree\n"));
      return kFALSE;
    }
  }
  
  TMapIter *tIter = new TMapIter(fTagCutSumm);
  
  Int_t iTotList=0, iAccList=0, iRejList=0;

  TObject *cobj;
  while ((cobj = tIter->Next())) {
    TObjString *kstr = (TObjString *) cobj;
    TObjString *vstr = (TObjString *) fTagCutSumm->GetValue(kstr->GetString().Data());
    //    printf("Got object value %s %s\n", kstr->GetString().Data(), vstr->GetString().Data());
    char *iTagInfo;
    iTagInfo = strdup(vstr->GetString().Data());
    
    Int_t iAcc = atoi(strtok(iTagInfo, ","));
    Int_t iRej = atoi(strtok(NULL, ","));
    free(iTagInfo);
    
    iAccList += iAcc;
    iRejList += iRej;
    iTotList += (iAcc+iRej);
  }

  *aTotal = iTotList;
  *aAccepted = iAccList;
  *aRejected = iRejList;

  return kTRUE;
}

//______________________________________________________________________________
Int_t AliESDInputHandler::GetNFilesEmpty()
{
  // Count number of files in which all events were de-selected
  // For such files Notify() will NOT be called
  // return -1 if no info is available
  if (!fTagCutSumm) {
    TList *luo = fTree->GetUserInfo();
    if (!luo) {
      AliInfo(Form("No user info in input tree - no tag cut summary\n"));
      return -1;
    }
    for (int iluo=0; iluo<luo->GetEntries(); iluo++) {
      fTagCutSumm = dynamic_cast<TMap *>(luo->At(iluo));
      if (fTagCutSumm) break;
    }
    if (!fTagCutSumm) {
      AliInfo(Form("No tag summary map in input tree\n"));
      return -1;
    }
  }
  
  TMapIter *tIter = new TMapIter(fTagCutSumm);
  
  Int_t iFilesEmpty = 0;

  TObject *cobj;
  while ((cobj = tIter->Next())) {
    TObjString *kstr = (TObjString *) cobj;
    TObjString *vstr = (TObjString *) fTagCutSumm->GetValue(kstr->GetString().Data());
    //    printf("Got object value %s %s\n", kstr->GetString().Data(), vstr->GetString().Data());
    char *iTagInfo;
    iTagInfo = strdup(vstr->GetString().Data());
    
    Int_t iAcc = atoi(strtok(iTagInfo, ","));
    Int_t iRej = atoi(strtok(NULL, ","));
    free(iTagInfo);
    if ((iAcc == 0) && ((iRej+iAcc)>0))
      iFilesEmpty++;
  }

  return iFilesEmpty;
  
}

//______________________________________________________________________________
TObject *AliESDInputHandler::GetStatistics(Option_t *option) const
{
// Get the statistics histogram(s) from the physics selection object. This
// should be called during FinishTaskOutput(). Option can be empty (default
// statistics histogram) or BIN0.
   if (!fEventCuts) return NULL;
   TString opt(option);
   opt.ToUpper();
   if (opt=="BIN0") return fEventCuts->GetStatistics("BIN0");
   else return fEventCuts->GetStatistics("ALL");
}   

//______________________________________________________________________________
void AliESDInputHandler::CreatePIDResponse(Bool_t isMC/*=kFALSE*/)
{
  //
  // create the pid response object if it does not exist yet
  //
  if (fESDpid) return;
  fESDpid=new AliESDpid(isMC);

}




 AliESDInputHandler.cxx:1
 AliESDInputHandler.cxx:2
 AliESDInputHandler.cxx:3
 AliESDInputHandler.cxx:4
 AliESDInputHandler.cxx:5
 AliESDInputHandler.cxx:6
 AliESDInputHandler.cxx:7
 AliESDInputHandler.cxx:8
 AliESDInputHandler.cxx:9
 AliESDInputHandler.cxx:10
 AliESDInputHandler.cxx:11
 AliESDInputHandler.cxx:12
 AliESDInputHandler.cxx:13
 AliESDInputHandler.cxx:14
 AliESDInputHandler.cxx:15
 AliESDInputHandler.cxx:16
 AliESDInputHandler.cxx:17
 AliESDInputHandler.cxx:18
 AliESDInputHandler.cxx:19
 AliESDInputHandler.cxx:20
 AliESDInputHandler.cxx:21
 AliESDInputHandler.cxx:22
 AliESDInputHandler.cxx:23
 AliESDInputHandler.cxx:24
 AliESDInputHandler.cxx:25
 AliESDInputHandler.cxx:26
 AliESDInputHandler.cxx:27
 AliESDInputHandler.cxx:28
 AliESDInputHandler.cxx:29
 AliESDInputHandler.cxx:30
 AliESDInputHandler.cxx:31
 AliESDInputHandler.cxx:32
 AliESDInputHandler.cxx:33
 AliESDInputHandler.cxx:34
 AliESDInputHandler.cxx:35
 AliESDInputHandler.cxx:36
 AliESDInputHandler.cxx:37
 AliESDInputHandler.cxx:38
 AliESDInputHandler.cxx:39
 AliESDInputHandler.cxx:40
 AliESDInputHandler.cxx:41
 AliESDInputHandler.cxx:42
 AliESDInputHandler.cxx:43
 AliESDInputHandler.cxx:44
 AliESDInputHandler.cxx:45
 AliESDInputHandler.cxx:46
 AliESDInputHandler.cxx:47
 AliESDInputHandler.cxx:48
 AliESDInputHandler.cxx:49
 AliESDInputHandler.cxx:50
 AliESDInputHandler.cxx:51
 AliESDInputHandler.cxx:52
 AliESDInputHandler.cxx:53
 AliESDInputHandler.cxx:54
 AliESDInputHandler.cxx:55
 AliESDInputHandler.cxx:56
 AliESDInputHandler.cxx:57
 AliESDInputHandler.cxx:58
 AliESDInputHandler.cxx:59
 AliESDInputHandler.cxx:60
 AliESDInputHandler.cxx:61
 AliESDInputHandler.cxx:62
 AliESDInputHandler.cxx:63
 AliESDInputHandler.cxx:64
 AliESDInputHandler.cxx:65
 AliESDInputHandler.cxx:66
 AliESDInputHandler.cxx:67
 AliESDInputHandler.cxx:68
 AliESDInputHandler.cxx:69
 AliESDInputHandler.cxx:70
 AliESDInputHandler.cxx:71
 AliESDInputHandler.cxx:72
 AliESDInputHandler.cxx:73
 AliESDInputHandler.cxx:74
 AliESDInputHandler.cxx:75
 AliESDInputHandler.cxx:76
 AliESDInputHandler.cxx:77
 AliESDInputHandler.cxx:78
 AliESDInputHandler.cxx:79
 AliESDInputHandler.cxx:80
 AliESDInputHandler.cxx:81
 AliESDInputHandler.cxx:82
 AliESDInputHandler.cxx:83
 AliESDInputHandler.cxx:84
 AliESDInputHandler.cxx:85
 AliESDInputHandler.cxx:86
 AliESDInputHandler.cxx:87
 AliESDInputHandler.cxx:88
 AliESDInputHandler.cxx:89
 AliESDInputHandler.cxx:90
 AliESDInputHandler.cxx:91
 AliESDInputHandler.cxx:92
 AliESDInputHandler.cxx:93
 AliESDInputHandler.cxx:94
 AliESDInputHandler.cxx:95
 AliESDInputHandler.cxx:96
 AliESDInputHandler.cxx:97
 AliESDInputHandler.cxx:98
 AliESDInputHandler.cxx:99
 AliESDInputHandler.cxx:100
 AliESDInputHandler.cxx:101
 AliESDInputHandler.cxx:102
 AliESDInputHandler.cxx:103
 AliESDInputHandler.cxx:104
 AliESDInputHandler.cxx:105
 AliESDInputHandler.cxx:106
 AliESDInputHandler.cxx:107
 AliESDInputHandler.cxx:108
 AliESDInputHandler.cxx:109
 AliESDInputHandler.cxx:110
 AliESDInputHandler.cxx:111
 AliESDInputHandler.cxx:112
 AliESDInputHandler.cxx:113
 AliESDInputHandler.cxx:114
 AliESDInputHandler.cxx:115
 AliESDInputHandler.cxx:116
 AliESDInputHandler.cxx:117
 AliESDInputHandler.cxx:118
 AliESDInputHandler.cxx:119
 AliESDInputHandler.cxx:120
 AliESDInputHandler.cxx:121
 AliESDInputHandler.cxx:122
 AliESDInputHandler.cxx:123
 AliESDInputHandler.cxx:124
 AliESDInputHandler.cxx:125
 AliESDInputHandler.cxx:126
 AliESDInputHandler.cxx:127
 AliESDInputHandler.cxx:128
 AliESDInputHandler.cxx:129
 AliESDInputHandler.cxx:130
 AliESDInputHandler.cxx:131
 AliESDInputHandler.cxx:132
 AliESDInputHandler.cxx:133
 AliESDInputHandler.cxx:134
 AliESDInputHandler.cxx:135
 AliESDInputHandler.cxx:136
 AliESDInputHandler.cxx:137
 AliESDInputHandler.cxx:138
 AliESDInputHandler.cxx:139
 AliESDInputHandler.cxx:140
 AliESDInputHandler.cxx:141
 AliESDInputHandler.cxx:142
 AliESDInputHandler.cxx:143
 AliESDInputHandler.cxx:144
 AliESDInputHandler.cxx:145
 AliESDInputHandler.cxx:146
 AliESDInputHandler.cxx:147
 AliESDInputHandler.cxx:148
 AliESDInputHandler.cxx:149
 AliESDInputHandler.cxx:150
 AliESDInputHandler.cxx:151
 AliESDInputHandler.cxx:152
 AliESDInputHandler.cxx:153
 AliESDInputHandler.cxx:154
 AliESDInputHandler.cxx:155
 AliESDInputHandler.cxx:156
 AliESDInputHandler.cxx:157
 AliESDInputHandler.cxx:158
 AliESDInputHandler.cxx:159
 AliESDInputHandler.cxx:160
 AliESDInputHandler.cxx:161
 AliESDInputHandler.cxx:162
 AliESDInputHandler.cxx:163
 AliESDInputHandler.cxx:164
 AliESDInputHandler.cxx:165
 AliESDInputHandler.cxx:166
 AliESDInputHandler.cxx:167
 AliESDInputHandler.cxx:168
 AliESDInputHandler.cxx:169
 AliESDInputHandler.cxx:170
 AliESDInputHandler.cxx:171
 AliESDInputHandler.cxx:172
 AliESDInputHandler.cxx:173
 AliESDInputHandler.cxx:174
 AliESDInputHandler.cxx:175
 AliESDInputHandler.cxx:176
 AliESDInputHandler.cxx:177
 AliESDInputHandler.cxx:178
 AliESDInputHandler.cxx:179
 AliESDInputHandler.cxx:180
 AliESDInputHandler.cxx:181
 AliESDInputHandler.cxx:182
 AliESDInputHandler.cxx:183
 AliESDInputHandler.cxx:184
 AliESDInputHandler.cxx:185
 AliESDInputHandler.cxx:186
 AliESDInputHandler.cxx:187
 AliESDInputHandler.cxx:188
 AliESDInputHandler.cxx:189
 AliESDInputHandler.cxx:190
 AliESDInputHandler.cxx:191
 AliESDInputHandler.cxx:192
 AliESDInputHandler.cxx:193
 AliESDInputHandler.cxx:194
 AliESDInputHandler.cxx:195
 AliESDInputHandler.cxx:196
 AliESDInputHandler.cxx:197
 AliESDInputHandler.cxx:198
 AliESDInputHandler.cxx:199
 AliESDInputHandler.cxx:200
 AliESDInputHandler.cxx:201
 AliESDInputHandler.cxx:202
 AliESDInputHandler.cxx:203
 AliESDInputHandler.cxx:204
 AliESDInputHandler.cxx:205
 AliESDInputHandler.cxx:206
 AliESDInputHandler.cxx:207
 AliESDInputHandler.cxx:208
 AliESDInputHandler.cxx:209
 AliESDInputHandler.cxx:210
 AliESDInputHandler.cxx:211
 AliESDInputHandler.cxx:212
 AliESDInputHandler.cxx:213
 AliESDInputHandler.cxx:214
 AliESDInputHandler.cxx:215
 AliESDInputHandler.cxx:216
 AliESDInputHandler.cxx:217
 AliESDInputHandler.cxx:218
 AliESDInputHandler.cxx:219
 AliESDInputHandler.cxx:220
 AliESDInputHandler.cxx:221
 AliESDInputHandler.cxx:222
 AliESDInputHandler.cxx:223
 AliESDInputHandler.cxx:224
 AliESDInputHandler.cxx:225
 AliESDInputHandler.cxx:226
 AliESDInputHandler.cxx:227
 AliESDInputHandler.cxx:228
 AliESDInputHandler.cxx:229
 AliESDInputHandler.cxx:230
 AliESDInputHandler.cxx:231
 AliESDInputHandler.cxx:232
 AliESDInputHandler.cxx:233
 AliESDInputHandler.cxx:234
 AliESDInputHandler.cxx:235
 AliESDInputHandler.cxx:236
 AliESDInputHandler.cxx:237
 AliESDInputHandler.cxx:238
 AliESDInputHandler.cxx:239
 AliESDInputHandler.cxx:240
 AliESDInputHandler.cxx:241
 AliESDInputHandler.cxx:242
 AliESDInputHandler.cxx:243
 AliESDInputHandler.cxx:244
 AliESDInputHandler.cxx:245
 AliESDInputHandler.cxx:246
 AliESDInputHandler.cxx:247
 AliESDInputHandler.cxx:248
 AliESDInputHandler.cxx:249
 AliESDInputHandler.cxx:250
 AliESDInputHandler.cxx:251
 AliESDInputHandler.cxx:252
 AliESDInputHandler.cxx:253
 AliESDInputHandler.cxx:254
 AliESDInputHandler.cxx:255
 AliESDInputHandler.cxx:256
 AliESDInputHandler.cxx:257
 AliESDInputHandler.cxx:258
 AliESDInputHandler.cxx:259
 AliESDInputHandler.cxx:260
 AliESDInputHandler.cxx:261
 AliESDInputHandler.cxx:262
 AliESDInputHandler.cxx:263
 AliESDInputHandler.cxx:264
 AliESDInputHandler.cxx:265
 AliESDInputHandler.cxx:266
 AliESDInputHandler.cxx:267
 AliESDInputHandler.cxx:268
 AliESDInputHandler.cxx:269
 AliESDInputHandler.cxx:270
 AliESDInputHandler.cxx:271
 AliESDInputHandler.cxx:272
 AliESDInputHandler.cxx:273
 AliESDInputHandler.cxx:274
 AliESDInputHandler.cxx:275
 AliESDInputHandler.cxx:276
 AliESDInputHandler.cxx:277
 AliESDInputHandler.cxx:278
 AliESDInputHandler.cxx:279
 AliESDInputHandler.cxx:280
 AliESDInputHandler.cxx:281
 AliESDInputHandler.cxx:282
 AliESDInputHandler.cxx:283
 AliESDInputHandler.cxx:284
 AliESDInputHandler.cxx:285
 AliESDInputHandler.cxx:286
 AliESDInputHandler.cxx:287
 AliESDInputHandler.cxx:288
 AliESDInputHandler.cxx:289
 AliESDInputHandler.cxx:290
 AliESDInputHandler.cxx:291
 AliESDInputHandler.cxx:292
 AliESDInputHandler.cxx:293
 AliESDInputHandler.cxx:294
 AliESDInputHandler.cxx:295
 AliESDInputHandler.cxx:296
 AliESDInputHandler.cxx:297
 AliESDInputHandler.cxx:298
 AliESDInputHandler.cxx:299
 AliESDInputHandler.cxx:300
 AliESDInputHandler.cxx:301
 AliESDInputHandler.cxx:302
 AliESDInputHandler.cxx:303
 AliESDInputHandler.cxx:304
 AliESDInputHandler.cxx:305
 AliESDInputHandler.cxx:306
 AliESDInputHandler.cxx:307
 AliESDInputHandler.cxx:308
 AliESDInputHandler.cxx:309
 AliESDInputHandler.cxx:310
 AliESDInputHandler.cxx:311
 AliESDInputHandler.cxx:312
 AliESDInputHandler.cxx:313
 AliESDInputHandler.cxx:314
 AliESDInputHandler.cxx:315
 AliESDInputHandler.cxx:316
 AliESDInputHandler.cxx:317
 AliESDInputHandler.cxx:318
 AliESDInputHandler.cxx:319
 AliESDInputHandler.cxx:320
 AliESDInputHandler.cxx:321
 AliESDInputHandler.cxx:322
 AliESDInputHandler.cxx:323
 AliESDInputHandler.cxx:324
 AliESDInputHandler.cxx:325
 AliESDInputHandler.cxx:326
 AliESDInputHandler.cxx:327
 AliESDInputHandler.cxx:328
 AliESDInputHandler.cxx:329
 AliESDInputHandler.cxx:330
 AliESDInputHandler.cxx:331
 AliESDInputHandler.cxx:332
 AliESDInputHandler.cxx:333
 AliESDInputHandler.cxx:334
 AliESDInputHandler.cxx:335
 AliESDInputHandler.cxx:336
 AliESDInputHandler.cxx:337
 AliESDInputHandler.cxx:338
 AliESDInputHandler.cxx:339
 AliESDInputHandler.cxx:340
 AliESDInputHandler.cxx:341
 AliESDInputHandler.cxx:342
 AliESDInputHandler.cxx:343
 AliESDInputHandler.cxx:344
 AliESDInputHandler.cxx:345
 AliESDInputHandler.cxx:346
 AliESDInputHandler.cxx:347
 AliESDInputHandler.cxx:348
 AliESDInputHandler.cxx:349
 AliESDInputHandler.cxx:350
 AliESDInputHandler.cxx:351
 AliESDInputHandler.cxx:352
 AliESDInputHandler.cxx:353
 AliESDInputHandler.cxx:354
 AliESDInputHandler.cxx:355
 AliESDInputHandler.cxx:356
 AliESDInputHandler.cxx:357
 AliESDInputHandler.cxx:358
 AliESDInputHandler.cxx:359
 AliESDInputHandler.cxx:360
 AliESDInputHandler.cxx:361
 AliESDInputHandler.cxx:362
 AliESDInputHandler.cxx:363
 AliESDInputHandler.cxx:364
 AliESDInputHandler.cxx:365
 AliESDInputHandler.cxx:366
 AliESDInputHandler.cxx:367
 AliESDInputHandler.cxx:368
 AliESDInputHandler.cxx:369
 AliESDInputHandler.cxx:370
 AliESDInputHandler.cxx:371
 AliESDInputHandler.cxx:372
 AliESDInputHandler.cxx:373
 AliESDInputHandler.cxx:374
 AliESDInputHandler.cxx:375
 AliESDInputHandler.cxx:376
 AliESDInputHandler.cxx:377
 AliESDInputHandler.cxx:378
 AliESDInputHandler.cxx:379
 AliESDInputHandler.cxx:380
 AliESDInputHandler.cxx:381
 AliESDInputHandler.cxx:382
 AliESDInputHandler.cxx:383
 AliESDInputHandler.cxx:384
 AliESDInputHandler.cxx:385
 AliESDInputHandler.cxx:386
 AliESDInputHandler.cxx:387
 AliESDInputHandler.cxx:388
 AliESDInputHandler.cxx:389
 AliESDInputHandler.cxx:390
 AliESDInputHandler.cxx:391
 AliESDInputHandler.cxx:392
 AliESDInputHandler.cxx:393
 AliESDInputHandler.cxx:394
 AliESDInputHandler.cxx:395
 AliESDInputHandler.cxx:396
 AliESDInputHandler.cxx:397
 AliESDInputHandler.cxx:398
 AliESDInputHandler.cxx:399
 AliESDInputHandler.cxx:400
 AliESDInputHandler.cxx:401
 AliESDInputHandler.cxx:402
 AliESDInputHandler.cxx:403
 AliESDInputHandler.cxx:404
 AliESDInputHandler.cxx:405
 AliESDInputHandler.cxx:406
 AliESDInputHandler.cxx:407
 AliESDInputHandler.cxx:408
 AliESDInputHandler.cxx:409
 AliESDInputHandler.cxx:410
 AliESDInputHandler.cxx:411
 AliESDInputHandler.cxx:412
 AliESDInputHandler.cxx:413
 AliESDInputHandler.cxx:414
 AliESDInputHandler.cxx:415
 AliESDInputHandler.cxx:416
 AliESDInputHandler.cxx:417
 AliESDInputHandler.cxx:418
 AliESDInputHandler.cxx:419
 AliESDInputHandler.cxx:420
 AliESDInputHandler.cxx:421
 AliESDInputHandler.cxx:422
 AliESDInputHandler.cxx:423
 AliESDInputHandler.cxx:424
 AliESDInputHandler.cxx:425
 AliESDInputHandler.cxx:426
 AliESDInputHandler.cxx:427
 AliESDInputHandler.cxx:428
 AliESDInputHandler.cxx:429
 AliESDInputHandler.cxx:430
 AliESDInputHandler.cxx:431
 AliESDInputHandler.cxx:432
 AliESDInputHandler.cxx:433
 AliESDInputHandler.cxx:434
 AliESDInputHandler.cxx:435
 AliESDInputHandler.cxx:436
 AliESDInputHandler.cxx:437
 AliESDInputHandler.cxx:438
 AliESDInputHandler.cxx:439
 AliESDInputHandler.cxx:440
 AliESDInputHandler.cxx:441
 AliESDInputHandler.cxx:442
 AliESDInputHandler.cxx:443
 AliESDInputHandler.cxx:444
 AliESDInputHandler.cxx:445
 AliESDInputHandler.cxx:446
 AliESDInputHandler.cxx:447
 AliESDInputHandler.cxx:448
 AliESDInputHandler.cxx:449
 AliESDInputHandler.cxx:450
 AliESDInputHandler.cxx:451
 AliESDInputHandler.cxx:452
 AliESDInputHandler.cxx:453
 AliESDInputHandler.cxx:454
 AliESDInputHandler.cxx:455
 AliESDInputHandler.cxx:456
 AliESDInputHandler.cxx:457
 AliESDInputHandler.cxx:458
 AliESDInputHandler.cxx:459
 AliESDInputHandler.cxx:460
 AliESDInputHandler.cxx:461
 AliESDInputHandler.cxx:462
 AliESDInputHandler.cxx:463
 AliESDInputHandler.cxx:464
 AliESDInputHandler.cxx:465
 AliESDInputHandler.cxx:466
 AliESDInputHandler.cxx:467
 AliESDInputHandler.cxx:468
 AliESDInputHandler.cxx:469
 AliESDInputHandler.cxx:470
 AliESDInputHandler.cxx:471
 AliESDInputHandler.cxx:472
 AliESDInputHandler.cxx:473
 AliESDInputHandler.cxx:474
 AliESDInputHandler.cxx:475
 AliESDInputHandler.cxx:476
 AliESDInputHandler.cxx:477
 AliESDInputHandler.cxx:478
 AliESDInputHandler.cxx:479
 AliESDInputHandler.cxx:480
 AliESDInputHandler.cxx:481
 AliESDInputHandler.cxx:482
 AliESDInputHandler.cxx:483
 AliESDInputHandler.cxx:484
 AliESDInputHandler.cxx:485
 AliESDInputHandler.cxx:486
 AliESDInputHandler.cxx:487
 AliESDInputHandler.cxx:488
 AliESDInputHandler.cxx:489
 AliESDInputHandler.cxx:490
 AliESDInputHandler.cxx:491
 AliESDInputHandler.cxx:492
 AliESDInputHandler.cxx:493
 AliESDInputHandler.cxx:494
 AliESDInputHandler.cxx:495
 AliESDInputHandler.cxx:496
 AliESDInputHandler.cxx:497
 AliESDInputHandler.cxx:498
 AliESDInputHandler.cxx:499
 AliESDInputHandler.cxx:500
 AliESDInputHandler.cxx:501
 AliESDInputHandler.cxx:502
 AliESDInputHandler.cxx:503
 AliESDInputHandler.cxx:504
 AliESDInputHandler.cxx:505
 AliESDInputHandler.cxx:506
 AliESDInputHandler.cxx:507
 AliESDInputHandler.cxx:508
 AliESDInputHandler.cxx:509
 AliESDInputHandler.cxx:510
 AliESDInputHandler.cxx:511
 AliESDInputHandler.cxx:512
 AliESDInputHandler.cxx:513
 AliESDInputHandler.cxx:514
 AliESDInputHandler.cxx:515
 AliESDInputHandler.cxx:516
 AliESDInputHandler.cxx:517
 AliESDInputHandler.cxx:518
 AliESDInputHandler.cxx:519
 AliESDInputHandler.cxx:520
 AliESDInputHandler.cxx:521
 AliESDInputHandler.cxx:522
 AliESDInputHandler.cxx:523
 AliESDInputHandler.cxx:524
 AliESDInputHandler.cxx:525
 AliESDInputHandler.cxx:526
 AliESDInputHandler.cxx:527
 AliESDInputHandler.cxx:528
 AliESDInputHandler.cxx:529
 AliESDInputHandler.cxx:530
 AliESDInputHandler.cxx:531
 AliESDInputHandler.cxx:532