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$ */

//-------------------------------------------------------------------------
//     Implementation of the Virtual Event Handler Interface for AOD
//     Author: Andreas Morsch, CERN
//-------------------------------------------------------------------------


#include <TTree.h>
#include <TFile.h>
#include <TString.h>
#include <TList.h>
#include <TROOT.h>

#include "AliLog.h"
#include "AliAODHandler.h"
#include "AliAODEvent.h"
#include "AliAODExtension.h"
#include "AliAODTracklets.h"
#include "AliStack.h"
#include "AliAODMCParticle.h"
#include "AliAODMCHeader.h"
#include "AliMCEventHandler.h"
#include "AliMCEvent.h"
#include "AliGenEventHeader.h"
#include "AliGenHijingEventHeader.h"
#include "AliGenDPMjetEventHeader.h"
#include "AliGenPythiaEventHeader.h"
#include "AliGenCocktailEventHeader.h"
#include "AliCodeTimer.h"
#include "AliAODBranchReplicator.h"
#include "Riostream.h"

using std::endl;
using std::cout;
ClassImp(AliAODHandler)

//______________________________________________________________________________
AliAODHandler::AliAODHandler() :
    AliVEventHandler(),
    fIsStandard(kTRUE),
    fFillAOD(kTRUE),
    fFillAODRun(kTRUE),
    fFillExtension(kTRUE),
    fNeedsHeaderReplication(kFALSE),
    fNeedsTOFHeaderReplication(kFALSE),
    fNeedsVZEROReplication(kFALSE),
    fNeedsTracksBranchReplication(kFALSE),
    fNeedsVerticesBranchReplication(kFALSE),
    fNeedsV0sBranchReplication(kFALSE),
    fNeedsCascadesBranchReplication(kFALSE),
    fNeedsTrackletsBranchReplication(kFALSE),
    fNeedsPMDClustersBranchReplication(kFALSE),
    fNeedsJetsBranchReplication(kFALSE),
    fNeedsFMDClustersBranchReplication(kFALSE),
    fNeedsCaloClustersBranchReplication(kFALSE),
	fNeedsCaloTriggerBranchReplication(kFALSE),
    fNeedsMCParticlesBranchReplication(kFALSE),
    fNeedsDimuonsBranchReplication(kFALSE),
    fNeedsHMPIDBranchReplication(kFALSE),
    fAODIsReplicated(kFALSE),
    fTreeBuffSize(30000000),
    fMemCountAOD(0),
    fAODEvent(NULL),
    fMCEventH(NULL),
    fTreeA(NULL),
    fFileA(NULL),
    fFileName(""),
    fExtensions(NULL),
    fFilters(NULL)
{
  // default constructor
}

//______________________________________________________________________________
AliAODHandler::AliAODHandler(const char* name, const char* title):
    AliVEventHandler(name, title),
    fIsStandard(kTRUE),
    fFillAOD(kTRUE),
    fFillAODRun(kTRUE),
    fFillExtension(kTRUE),
    fNeedsHeaderReplication(kFALSE),
    fNeedsTOFHeaderReplication(kFALSE),
    fNeedsVZEROReplication(kFALSE),
    fNeedsTracksBranchReplication(kFALSE),
    fNeedsVerticesBranchReplication(kFALSE),
    fNeedsV0sBranchReplication(kFALSE),
    fNeedsCascadesBranchReplication(kFALSE),
    fNeedsTrackletsBranchReplication(kFALSE),
    fNeedsPMDClustersBranchReplication(kFALSE),
    fNeedsJetsBranchReplication(kFALSE),
    fNeedsFMDClustersBranchReplication(kFALSE),
    fNeedsCaloClustersBranchReplication(kFALSE),
    fNeedsCaloTriggerBranchReplication(kFALSE),
    fNeedsMCParticlesBranchReplication(kFALSE),
    fNeedsDimuonsBranchReplication(kFALSE),
    fNeedsHMPIDBranchReplication(kFALSE),
    fAODIsReplicated(kFALSE),
    fTreeBuffSize(30000000),
    fMemCountAOD(0),
    fAODEvent(NULL),
    fMCEventH(NULL),
    fTreeA(NULL),
    fFileA(NULL),
    fFileName(""),
    fExtensions(NULL),
    fFilters(NULL)
{
// Normal constructor.
}

//______________________________________________________________________________
AliAODHandler::~AliAODHandler() 
{
 // Destructor.
  
  delete fAODEvent;

  if (fFileA) fFileA->Close();

  delete fFileA;
  delete fTreeA;
  delete fExtensions;
  delete fFilters;
}

//______________________________________________________________________________
Bool_t AliAODHandler::Init(Option_t* opt)
{
  // Initialize IO
  //
  // Create the AODevent object
    
  Bool_t createStdAOD = fIsStandard || fFillAOD;
  if(!fAODEvent && createStdAOD){
    fAODEvent = new AliAODEvent();
    if (fIsStandard) 
      fAODEvent->CreateStdContent();
  }
  //
  // File opening according to execution mode
  TString option(opt);
  option.ToLower();
  if (createStdAOD) {
    TDirectory *owd = gDirectory;
    if (option.Contains("proof")) {
      // proof
      // Merging via files. Need to access analysis manager via interpreter.
      gROOT->ProcessLine(Form("AliAnalysisDataContainer *c_common_out = AliAnalysisManager::GetAnalysisManager()->GetCommonOutputContainer();"));
      gROOT->ProcessLine(Form("AliAnalysisManager::GetAnalysisManager()->OpenProofFile(c_common_out, \"RECREATE\");"));
      fFileA = gFile;
    } else {
      // local and grid
      fFileA = new TFile(fFileName.Data(), "RECREATE");
    }
    CreateTree(1);
    owd->cd();
  }  
  if (fExtensions) {
     TIter next(fExtensions);
     AliAODExtension *ext;
     while ((ext=(AliAODExtension*)next())) ext->Init(option);
  }   
  if (fFilters) {
     TIter nextf(fFilters);
     AliAODExtension *filteredAOD;
     while ((filteredAOD=(AliAODExtension*)nextf())) {
        filteredAOD->SetEvent(fAODEvent);
        filteredAOD->Init(option);
     }
  }   
  
  return kTRUE;
}

//______________________________________________________________________________
void AliAODHandler::Print(Option_t* opt) const
{
  // Print info about this object

  cout << opt << Form("IsStandard %d filename=%s",fIsStandard,fFileName.Data()) << endl;
  
  if ( fExtensions ) 
  {
    cout << opt << fExtensions->GetEntries() << " extensions :" << endl;
    PrintExtensions(*fExtensions);    
  }
  if ( fFilters ) 
  {
    cout << opt << fFilters->GetEntries() << " filters :" << endl;
    PrintExtensions(*fFilters);      
  }
}

//______________________________________________________________________________
void AliAODHandler::PrintExtensions(const TObjArray& array) const
{
  // Show the list of aod extensions
  TIter next(&array);
  AliAODExtension* ext(0x0);
  while ( ( ext = static_cast<AliAODExtension*>(next()) ) )
  {
    ext->Print("   ");
  }
}

//______________________________________________________________________________
void AliAODHandler::StoreMCParticles(){

  // 
  // Remap the labels from ESD stack and store
  // the AODMCParticles, makes only sense if we have
  // the mcparticles branch
  // has to be done here since we cannot know in advance 
  // which particles are needed (e.g. by the tracks etc.)
  //
  // Particles have been selected by AliMCEventhanlder->SelectParticle()
  // To use the MCEventhandler here we need to set it from the outside
  // can vanish when Handler go to the ANALYSISalice library
  //
  // The Branch booking for mcParticles and mcHeader has to happen 
  // in an external task for now since the AODHandler does not have access
  // the AnalysisManager. For the same reason the pointer t o the MCEventH
  // has to passed to the AOD Handler by this task 
  // (doing this in the steering macro would not work on PROOF)

  if (!fAODEvent) return;
  TClonesArray *mcarray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName()); 
  if(!mcarray)return;

  AliAODMCHeader *mcHeader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName()); 
  if(!mcHeader)return;

  // Get the MC Infos.. Handler needs to be set before 
  // while adding the branch
  // This needs to be done, not to depend on the AnalysisManager

  if(!fMCEventH)return;
  if(!fMCEventH->MCEvent())return;
  AliStack *pStack = fMCEventH->MCEvent()->Stack();
  if(!pStack)return;

  fMCEventH->CreateLabelMap();

  //
  // Get the Event Header 
  // 

  AliHeader* header = fMCEventH->MCEvent()->Header();
   // get the MC vertex
  AliGenEventHeader* genHeader = 0;
  if (header) genHeader = header->GenEventHeader();
  if (genHeader) {
      TArrayF vtxMC(3);
      genHeader->PrimaryVertex(vtxMC);
      mcHeader->SetVertex(vtxMC[0],vtxMC[1],vtxMC[2]);
      // we search the MCEventHeaders first 
      // Two cases, cocktail or not...
      AliGenCocktailEventHeader* genCocktailHeader = dynamic_cast<AliGenCocktailEventHeader*>(genHeader);
      if(genCocktailHeader){
	  // we have a coktail header add the name once
	  mcHeader->AddGeneratorName(genHeader->GetName());
	  TList* headerList = genCocktailHeader->GetHeaders();
	  // the first entry defines some extra general settings
	  AliGenEventHeader *headerEntry = dynamic_cast<AliGenEventHeader*>(headerList->At(0));
	  if (!headerEntry) {
	    AliFatal("AliGenEventHeader entry not found in the header list");
	  } else {   
	    SetMCHeaderInfo(mcHeader,headerEntry);
	  }  
      }
      else{
	// No Cocktail just take the first one
	SetMCHeaderInfo(mcHeader,genHeader);
      }
      // Add all the headers and names, if no cocktail header 
      // there will be only one entry
      mcHeader->AddCocktailHeaders(genHeader);
  }
  




  // Store the AliAODParticlesMC
  AliMCEvent* mcEvent = fMCEventH->MCEvent();
  
  Int_t np    = mcEvent->GetNumberOfTracks();
  Int_t nprim = mcEvent->GetNumberOfPrimaries();


  Int_t j = 0;
  TClonesArray& l = *mcarray;

  for(int i = 0; i < np; ++i){
      if(fMCEventH->IsParticleSelected(i)){
	  Int_t flag = 0;
	  AliMCParticle* mcpart =  (AliMCParticle*) mcEvent->GetTrack(i);
	  if(i<nprim)flag |= AliAODMCParticle::kPrimary;
	  
	  if(mcEvent->IsPhysicalPrimary(i))flag |= AliAODMCParticle::kPhysicalPrim;
	  if(mcEvent->IsSecondaryFromWeakDecay(i))flag |= AliAODMCParticle::kSecondaryFromWeakDecay;
	  if(mcEvent->IsSecondaryFromMaterial(i))flag |= AliAODMCParticle::kSecondaryFromMaterial;

	  if(fMCEventH->GetNewLabel(i)!=j){
	      AliError(Form("MISMATCH New label %d j: %d",fMCEventH->GetNewLabel(i),j));
	  }

	  AliAODMCParticle mcpartTmp(mcpart,i,flag);
	  
	  mcpartTmp.SetStatus(mcpart->Particle()->GetStatusCode());
	  mcpartTmp.SetMCProcessCode(mcpart->Particle()->GetUniqueID());
	  // 
	  Int_t d0 =  mcpartTmp.GetDaughter(0);
	  Int_t d1 =  mcpartTmp.GetDaughter(1);
	  Int_t m =   mcpartTmp.GetMother();
	  
	  // other than for the track labels, negative values mean
	  // no daughter/mother so preserve it
	  
	  if(d0<0 && d1<0){
	      // no first daughter -> no second daughter
	      // nothing to be done
	      // second condition not needed just for sanity check at the end
	      mcpartTmp.SetDaughter(0,d0);
	      mcpartTmp.SetDaughter(1,d1);
	  } else if(d1 < 0 && d0 >= 0) {
	      // Only one daughter
	      // second condition not needed just for sanity check at the end
	      if(fMCEventH->IsParticleSelected(d0)){
		  mcpartTmp.SetDaughter(0,fMCEventH->GetNewLabel(d0));
	      } else {
		  mcpartTmp.SetDaughter(0,-1);
	      }
	      mcpartTmp.SetDaughter(1,d1);
	  }
	  else if (d0 > 0 && d1 > 0 ){
	      // we have two or more daughters loop on the stack to see if they are
	      // selected
	      Int_t d0Tmp = -1;
	      Int_t d1Tmp = -1;
	      for(int id = d0; id<=d1;++id){
		  if(fMCEventH->IsParticleSelected(id)){
		      if(d0Tmp==-1){
			  // first time
			  d0Tmp = fMCEventH->GetNewLabel(id);
			  d1Tmp = d0Tmp; // this is to have the same schema as on the stack i.e. with one daugther d0 and d1 are the same 
		      }
		      else d1Tmp = fMCEventH->GetNewLabel(id);
		  }
	      }
	      mcpartTmp.SetDaughter(0,d0Tmp);
	      mcpartTmp.SetDaughter(1,d1Tmp);
	  } else {
	      AliError(Form("Unxpected indices %d %d",d0,d1));
	  }
	  
	  if(m<0){
	      mcpartTmp.SetMother(m);
	  } else {
	      if(fMCEventH->IsParticleSelected(m))mcpartTmp.SetMother(fMCEventH->GetNewLabel(m));
	      else AliError(Form("PROBLEM Mother not selected %d \n", m));
	  }

	  new (l[j++]) AliAODMCParticle(mcpartTmp);
	  
      }
  }
  AliInfo(Form("AliAODHandler::StoreMCParticles: Selected %d (Primaries %d / total %d) after validation \n",
	       j,nprim,np));
  
  // Set the labels in the AOD output...
  // Remapping

  // AODTracks
  TClonesArray* tracks = fAODEvent->GetTracks();
  Int_t tofLabel[3];
  if(tracks){
    for(int it = 0; it < fAODEvent->GetNumberOfTracks();++it){
      AliAODTrack *track = dynamic_cast<AliAODTrack*>(fAODEvent->GetTrack(it));
      if(!track) AliFatal("Not a standard AOD");
      
      Int_t sign = 1;
      Int_t label = track->GetLabel();
      if(label<0){ // preserve the sign for later usage
	label *= -1;
	sign  = -1;
      }
      
      if (label >= AliMCEvent::BgLabelOffset()) label =  mcEvent->BgLabelToIndex(label);
      if(label > np || track->GetLabel() == 0){
	AliWarning(Form("Wrong ESD track label %5d (%5d)",track->GetLabel(), label));
      }
      if(fMCEventH->GetNewLabel(label) == 0) {
	AliWarning(Form("New label not found for %5d (%5d)",track->GetLabel(), label));
      }
      track->SetLabel(sign*fMCEventH->GetNewLabel(label));
      
      track->GetTOFLabel(tofLabel);
      
      for (Int_t i = 0; i < 3; i++) {
	label  = tofLabel[i]; // esd label
	Int_t nlabel = label; // new label
	if (label < 0) continue;
	if (label >= AliMCEvent::BgLabelOffset()) nlabel =  mcEvent->BgLabelToIndex(label);
	if(nlabel > np || label == 0) {
	  AliWarning(Form("Wrong TOF label %5d (%5d)", label, nlabel));
	}
	if(fMCEventH->GetNewLabel(label) == 0){
	  AliWarning(Form("New TOF label not found for %5d %5d",i, label ));
	  tofLabel[i] = -label;  
	} else {
	  tofLabel[i] = fMCEventH->GetNewLabel(label);
	}
      } 
      track->SetTOFLabel(tofLabel);
    }
  }
  
  // AOD calo cluster
  TClonesArray *clusters = fAODEvent->GetCaloClusters();
  if(clusters){
    for (Int_t iClust = 0;iClust < fAODEvent->GetNumberOfCaloClusters(); ++iClust) {
      AliAODCaloCluster * cluster = fAODEvent->GetCaloCluster(iClust);
      UInt_t nLabel    = cluster->GetNLabels();
      // Ugly but do not want to fragment memory by creating 
      // new Int_t (nLabel)
      Int_t* labels    = const_cast<Int_t*>(cluster->GetLabels());
      if (labels){
	for(UInt_t i = 0;i < nLabel;++i){
	  labels[i] = fMCEventH->GetNewLabel(cluster->GetLabelAt(i));
	}
      }
      //      cluster->SetLabels(labels,nLabel);
    }// iClust
  }// clusters
  
  // AOD calo cells MC label re-index
  Int_t iCell, nCell, cellMCLabel, cellMCLabelNew;;
  Short_t cellAbsId;
  Double_t cellE, cellT, cellEFrac;
  AliAODCaloCells *cells;
  
  // EMCal
  cells = fAODEvent->GetEMCALCells();
  if( cells ){
    nCell = cells->GetNumberOfCells() ;
    for( iCell = 0; iCell < nCell; iCell++ ){ 
      cells->GetCell( iCell, cellAbsId, cellE, cellT, cellMCLabel, cellEFrac );
      // GetNewLabel returns 1 in case when -1 is supplied
      if( cellMCLabel < 0 )
        cellMCLabelNew = cellMCLabel;
      else
        cellMCLabelNew = fMCEventH->GetNewLabel( cellMCLabel );
        
      cells->SetCell( iCell, cellAbsId, cellE, cellT, cellMCLabelNew, cellEFrac );
    }
  }
  // PHOS
  cells = fAODEvent->GetPHOSCells();
  if( cells ){
    nCell = cells->GetNumberOfCells() ;
    for( iCell = 0; iCell < nCell; iCell++ ){ 
      cells->GetCell( iCell, cellAbsId, cellE, cellT, cellMCLabel, cellEFrac );
      // GetNewLabel returns 1 in case when -1 is supplied
      if( cellMCLabel < 0 )
        cellMCLabelNew = cellMCLabel;
      else
        cellMCLabelNew = fMCEventH->GetNewLabel( cellMCLabel );
        
      cells->SetCell( iCell, cellAbsId, cellE, cellT, cellMCLabelNew, cellEFrac );
    }
  }

  // AOD tracklets
  AliAODTracklets *tracklets = fAODEvent->GetTracklets();
  if(tracklets){
    for(int it = 0;it < tracklets->GetNumberOfTracklets();++it){
      int label0 = tracklets->GetLabel(it,0);
      int label1 = tracklets->GetLabel(it,1);
      if(label0>=0)label0 = fMCEventH->GetNewLabel(label0);      
      if(label1>=0)label1 = fMCEventH->GetNewLabel(label1);
      tracklets->SetLabel(it,0,label0);
      tracklets->SetLabel(it,1,label1);
    }
  }

}

//______________________________________________________________________________
Bool_t AliAODHandler::FinishEvent()
{
  // Fill data structures
  if(fFillAOD && fFillAODRun && fAODEvent){
      fAODEvent->MakeEntriesReferencable();
      fTreeA->BranchRef();
      FillTree();
  }

  if ((fFillAOD && fFillAODRun) || fFillExtension) {
    if (fExtensions && fFillExtension) {
      // fFillExtension can be set by the ESD filter or by a delta filter in case of AOD inputs
      TIter next(fExtensions);
      AliAODExtension *ext;
      while ((ext=(AliAODExtension*)next())) ext->FinishEvent();
    }
    if (fFilters && fFillAOD && fFillAODRun) {
      TIter nextf(fFilters);
      AliAODExtension *ext;
      while ((ext=(AliAODExtension*)nextf())) {
	      ext->FinishEvent();
      }  
    }       
  }  
  
  if (fIsStandard && fAODEvent) 
  {
    fAODEvent->ResetStd();    
  }
  
  if (fAODEvent) 
  {
    TClonesArray *mcarray = static_cast<TClonesArray*>(fAODEvent->FindListObject(AliAODMCParticle::StdBranchName()));
    if(mcarray) mcarray->Delete();
    
    AliAODMCHeader *mcHeader = static_cast<AliAODMCHeader*>(fAODEvent->FindListObject(AliAODMCHeader::StdBranchName()));
    if(mcHeader) mcHeader->Reset();
  }
  
  // Reset AOD replication flag
  fAODIsReplicated = kFALSE;
  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAODHandler::Terminate()
{
  // Terminate 
  AddAODtoTreeUserInfo();
  
  TIter nextF(fFilters);
  AliAODExtension *ext;
  while ((ext=static_cast<AliAODExtension*>(nextF())))
  {
    ext->AddAODtoTreeUserInfo();
  }

  TIter nextE(fExtensions);
  while ((ext=static_cast<AliAODExtension*>(nextE())))
  {
    ext->AddAODtoTreeUserInfo();
  }
  
  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAODHandler::TerminateIO()
{
  // Terminate IO
  if (fFileA) {
    fFileA->Write();
    fFileA->Close();
    delete fFileA;
    fFileA = 0;
    // When closing the file, the tree is also deleted.
    fTreeA = 0;
  }
  
  TIter nextF(fFilters);
  AliAODExtension *ext;
  while ((ext=static_cast<AliAODExtension*>(nextF())))
  {
    ext->TerminateIO();
  }  

  TIter nextE(fExtensions);
  while ((ext=static_cast<AliAODExtension*>(nextE())))
  {
    ext->TerminateIO();
  }  
  
  return kTRUE;
}

//______________________________________________________________________________
void AliAODHandler::CreateTree(Int_t flag)
{
    // Creates the AOD Tree
    fTreeA = new TTree("aodTree", "AliAOD tree");
    fTreeA->Branch(fAODEvent->GetList());
    if (flag == 0) fTreeA->SetDirectory(0);
    fMemCountAOD = 0;
}

//______________________________________________________________________________
void AliAODHandler::FillTree()
{
 
    // Fill the AOD Tree
   Long64_t nbf = fTreeA->Fill();
   if (fTreeBuffSize>0 && fTreeA->GetAutoFlush()<0 && (fMemCountAOD += nbf)>fTreeBuffSize ) { // default limit is still not reached
    nbf = fTreeA->GetZipBytes();
    if (nbf>0) nbf = -nbf;
    else       nbf = fTreeA->GetEntries();
    fTreeA->SetAutoFlush(nbf);
    AliInfo(Form("Calling fTreeA->SetAutoFlush(%lld) | W:%lld T:%lld Z:%lld",
		 nbf,fMemCountAOD,fTreeA->GetTotBytes(),fTreeA->GetZipBytes()));        
  }
 
}

//______________________________________________________________________________
void AliAODHandler::AddAODtoTreeUserInfo()
{
  // Add aod event to tree user info
  if (fTreeA) fTreeA->GetUserInfo()->Add(fAODEvent);
  // Now the tree owns our fAODEvent...
  fAODEvent = 0;
}

//______________________________________________________________________________
void AliAODHandler::AddBranch(const char* cname, void* addobj, const char* filename)
{
  // Add a new branch to the aod. Added optional filename parameter if the
  // branch should be written to a separate file.
  
  if (strlen(filename)) 
  {
    AliAODExtension *ext = AddExtension(filename);
    ext->AddBranch(cname, addobj);
    return;
  } 
  
  // Add branch to all filters
  // Add branch to all filters
  if (fFilters) {
    TIter next(fFilters);
    AliAODExtension *ext;
    while ((ext=(AliAODExtension*)next())) ext->AddBranch(cname, addobj);
  }
  
  TDirectory *owd = gDirectory;
  if (fFileA) 
  {
    fFileA->cd();
  }

  char** apointer = (char**) addobj;
  TObject* obj = (TObject*) *apointer;
  
  fAODEvent->AddObject(obj);
  
  const Int_t kSplitlevel = 99; // default value in TTree::Branch()
  const Int_t kBufsize = 32000; // default value in TTree::Branch()
  
  if (!fTreeA->FindBranch(obj->GetName())) 
  {
    // Do the same as if we book via 
    // TTree::Branch(TCollection*)
    
    fTreeA->Bronch(obj->GetName(), cname, fAODEvent->GetList()->GetObjectRef(obj),
                   kBufsize, kSplitlevel - 1);
  }
  owd->cd();
}

//______________________________________________________________________________
AliAODExtension *AliAODHandler::AddExtension(const char *filename, const char *title, Bool_t tomerge)
{
  // Add an AOD extension with some branches in a different file.
  
  TString fname(filename);
  if (!fname.EndsWith(".root")) fname += ".root";
  if (!fExtensions) {
    fExtensions = new TObjArray();
    fExtensions->SetOwner();
  }   
  AliAODExtension *ext = (AliAODExtension*)fExtensions->FindObject(fname);
  if (!ext) {
    ext = new AliAODExtension(fname, title);
    fExtensions->Add(ext);
  }   
  ext->SetToMerge(tomerge);
  return ext;
}

//______________________________________________________________________________
AliAODExtension *AliAODHandler::GetExtension(const char *filename) const
{
  // Getter for AOD extensions via file name.
  if (!fExtensions) return NULL;
  return (AliAODExtension*)fExtensions->FindObject(filename);
}   

//______________________________________________________________________________
AliAODExtension *AliAODHandler::AddFilteredAOD(const char *filename, const char *filtername, Bool_t tomerge)
{
  // Add an AOD extension that can write only AOD events that pass a user filter.
  if (!fFilters) {
    fFilters = new TObjArray();
    fFilters->SetOwner();
  } 
  AliAODExtension *filter = (AliAODExtension*)fFilters->FindObject(filename);
  if (!filter) {
    filter = new AliAODExtension(filename, filtername, kTRUE);
    fFilters->Add(filter);
  }
  filter->SetToMerge(tomerge);
  return filter;
}      

//______________________________________________________________________________
AliAODExtension *AliAODHandler::GetFilteredAOD(const char *filename) const
{
  // Getter for AOD filters via file name.
  if (!fFilters) return NULL;
  return (AliAODExtension*)fFilters->FindObject(filename);
}   

//______________________________________________________________________________
void AliAODHandler::SetOutputFileName(const char* fname)
{
// Set file name.
   fFileName = fname;
}

//______________________________________________________________________________
const char *AliAODHandler::GetOutputFileName() const
{
// Get file name.
   return fFileName.Data();
}

//______________________________________________________________________________
const char *AliAODHandler::GetExtraOutputs(Bool_t merge) const
{
  // Get extra outputs as a string separated by commas.
  static TString eoutputs;
  eoutputs = "";
  AliAODExtension *obj;
  if (fExtensions) {
    TIter next1(fExtensions);
    while ((obj=(AliAODExtension*)next1())) {
      if (merge && !obj->IsToMerge()) continue;
      if (!eoutputs.IsNull()) eoutputs += ",";
      eoutputs += obj->GetName();
    }
  }
  if (fFilters) {
    TIter next2(fFilters);
    while ((obj=(AliAODExtension*)next2())) {
      if (merge && !obj->IsToMerge()) continue;
      if (!eoutputs.IsNull()) eoutputs += ",";
      eoutputs += obj->GetName();
    }
  }
  return eoutputs.Data();
}

//______________________________________________________________________________
Bool_t AliAODHandler::HasExtensions() const
{
  // Whether or not we manage extensions
  
  if ( fExtensions && fExtensions->GetEntries()>0 ) return kTRUE;
  
  return kFALSE;
}

//______________________________________________________________________________
void  AliAODHandler::SetMCHeaderInfo(AliAODMCHeader *mcHeader,AliGenEventHeader *genHeader){


  // Utility function to cover different cases for the AliGenEventHeader
  // Needed since different ProcessType and ImpactParamter are not 
  // in the base class...

  if(!genHeader)return;
  AliGenPythiaEventHeader *pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
  if (pythiaGenHeader) {
    mcHeader->SetEventType(pythiaGenHeader->ProcessType());
    mcHeader->SetPtHard(pythiaGenHeader->GetPtHard());
    return;
  }
  
  AliGenDPMjetEventHeader* dpmJetGenHeader = dynamic_cast<AliGenDPMjetEventHeader*>(genHeader);
  
  if (dpmJetGenHeader){
    mcHeader->SetEventType(dpmJetGenHeader->ProcessType());
    return;
  } 

  AliGenHijingEventHeader* hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
  if(hijingGenHeader){
    mcHeader->SetImpactParameter(hijingGenHeader->ImpactParameter());
    return;
  }
  
  //  AliWarning(Form("MC Eventheader not known: %s",genHeader->GetName()));
  
}

 AliAODHandler.cxx:1
 AliAODHandler.cxx:2
 AliAODHandler.cxx:3
 AliAODHandler.cxx:4
 AliAODHandler.cxx:5
 AliAODHandler.cxx:6
 AliAODHandler.cxx:7
 AliAODHandler.cxx:8
 AliAODHandler.cxx:9
 AliAODHandler.cxx:10
 AliAODHandler.cxx:11
 AliAODHandler.cxx:12
 AliAODHandler.cxx:13
 AliAODHandler.cxx:14
 AliAODHandler.cxx:15
 AliAODHandler.cxx:16
 AliAODHandler.cxx:17
 AliAODHandler.cxx:18
 AliAODHandler.cxx:19
 AliAODHandler.cxx:20
 AliAODHandler.cxx:21
 AliAODHandler.cxx:22
 AliAODHandler.cxx:23
 AliAODHandler.cxx:24
 AliAODHandler.cxx:25
 AliAODHandler.cxx:26
 AliAODHandler.cxx:27
 AliAODHandler.cxx:28
 AliAODHandler.cxx:29
 AliAODHandler.cxx:30
 AliAODHandler.cxx:31
 AliAODHandler.cxx:32
 AliAODHandler.cxx:33
 AliAODHandler.cxx:34
 AliAODHandler.cxx:35
 AliAODHandler.cxx:36
 AliAODHandler.cxx:37
 AliAODHandler.cxx:38
 AliAODHandler.cxx:39
 AliAODHandler.cxx:40
 AliAODHandler.cxx:41
 AliAODHandler.cxx:42
 AliAODHandler.cxx:43
 AliAODHandler.cxx:44
 AliAODHandler.cxx:45
 AliAODHandler.cxx:46
 AliAODHandler.cxx:47
 AliAODHandler.cxx:48
 AliAODHandler.cxx:49
 AliAODHandler.cxx:50
 AliAODHandler.cxx:51
 AliAODHandler.cxx:52
 AliAODHandler.cxx:53
 AliAODHandler.cxx:54
 AliAODHandler.cxx:55
 AliAODHandler.cxx:56
 AliAODHandler.cxx:57
 AliAODHandler.cxx:58
 AliAODHandler.cxx:59
 AliAODHandler.cxx:60
 AliAODHandler.cxx:61
 AliAODHandler.cxx:62
 AliAODHandler.cxx:63
 AliAODHandler.cxx:64
 AliAODHandler.cxx:65
 AliAODHandler.cxx:66
 AliAODHandler.cxx:67
 AliAODHandler.cxx:68
 AliAODHandler.cxx:69
 AliAODHandler.cxx:70
 AliAODHandler.cxx:71
 AliAODHandler.cxx:72
 AliAODHandler.cxx:73
 AliAODHandler.cxx:74
 AliAODHandler.cxx:75
 AliAODHandler.cxx:76
 AliAODHandler.cxx:77
 AliAODHandler.cxx:78
 AliAODHandler.cxx:79
 AliAODHandler.cxx:80
 AliAODHandler.cxx:81
 AliAODHandler.cxx:82
 AliAODHandler.cxx:83
 AliAODHandler.cxx:84
 AliAODHandler.cxx:85
 AliAODHandler.cxx:86
 AliAODHandler.cxx:87
 AliAODHandler.cxx:88
 AliAODHandler.cxx:89
 AliAODHandler.cxx:90
 AliAODHandler.cxx:91
 AliAODHandler.cxx:92
 AliAODHandler.cxx:93
 AliAODHandler.cxx:94
 AliAODHandler.cxx:95
 AliAODHandler.cxx:96
 AliAODHandler.cxx:97
 AliAODHandler.cxx:98
 AliAODHandler.cxx:99
 AliAODHandler.cxx:100
 AliAODHandler.cxx:101
 AliAODHandler.cxx:102
 AliAODHandler.cxx:103
 AliAODHandler.cxx:104
 AliAODHandler.cxx:105
 AliAODHandler.cxx:106
 AliAODHandler.cxx:107
 AliAODHandler.cxx:108
 AliAODHandler.cxx:109
 AliAODHandler.cxx:110
 AliAODHandler.cxx:111
 AliAODHandler.cxx:112
 AliAODHandler.cxx:113
 AliAODHandler.cxx:114
 AliAODHandler.cxx:115
 AliAODHandler.cxx:116
 AliAODHandler.cxx:117
 AliAODHandler.cxx:118
 AliAODHandler.cxx:119
 AliAODHandler.cxx:120
 AliAODHandler.cxx:121
 AliAODHandler.cxx:122
 AliAODHandler.cxx:123
 AliAODHandler.cxx:124
 AliAODHandler.cxx:125
 AliAODHandler.cxx:126
 AliAODHandler.cxx:127
 AliAODHandler.cxx:128
 AliAODHandler.cxx:129
 AliAODHandler.cxx:130
 AliAODHandler.cxx:131
 AliAODHandler.cxx:132
 AliAODHandler.cxx:133
 AliAODHandler.cxx:134
 AliAODHandler.cxx:135
 AliAODHandler.cxx:136
 AliAODHandler.cxx:137
 AliAODHandler.cxx:138
 AliAODHandler.cxx:139
 AliAODHandler.cxx:140
 AliAODHandler.cxx:141
 AliAODHandler.cxx:142
 AliAODHandler.cxx:143
 AliAODHandler.cxx:144
 AliAODHandler.cxx:145
 AliAODHandler.cxx:146
 AliAODHandler.cxx:147
 AliAODHandler.cxx:148
 AliAODHandler.cxx:149
 AliAODHandler.cxx:150
 AliAODHandler.cxx:151
 AliAODHandler.cxx:152
 AliAODHandler.cxx:153
 AliAODHandler.cxx:154
 AliAODHandler.cxx:155
 AliAODHandler.cxx:156
 AliAODHandler.cxx:157
 AliAODHandler.cxx:158
 AliAODHandler.cxx:159
 AliAODHandler.cxx:160
 AliAODHandler.cxx:161
 AliAODHandler.cxx:162
 AliAODHandler.cxx:163
 AliAODHandler.cxx:164
 AliAODHandler.cxx:165
 AliAODHandler.cxx:166
 AliAODHandler.cxx:167
 AliAODHandler.cxx:168
 AliAODHandler.cxx:169
 AliAODHandler.cxx:170
 AliAODHandler.cxx:171
 AliAODHandler.cxx:172
 AliAODHandler.cxx:173
 AliAODHandler.cxx:174
 AliAODHandler.cxx:175
 AliAODHandler.cxx:176
 AliAODHandler.cxx:177
 AliAODHandler.cxx:178
 AliAODHandler.cxx:179
 AliAODHandler.cxx:180
 AliAODHandler.cxx:181
 AliAODHandler.cxx:182
 AliAODHandler.cxx:183
 AliAODHandler.cxx:184
 AliAODHandler.cxx:185
 AliAODHandler.cxx:186
 AliAODHandler.cxx:187
 AliAODHandler.cxx:188
 AliAODHandler.cxx:189
 AliAODHandler.cxx:190
 AliAODHandler.cxx:191
 AliAODHandler.cxx:192
 AliAODHandler.cxx:193
 AliAODHandler.cxx:194
 AliAODHandler.cxx:195
 AliAODHandler.cxx:196
 AliAODHandler.cxx:197
 AliAODHandler.cxx:198
 AliAODHandler.cxx:199
 AliAODHandler.cxx:200
 AliAODHandler.cxx:201
 AliAODHandler.cxx:202
 AliAODHandler.cxx:203
 AliAODHandler.cxx:204
 AliAODHandler.cxx:205
 AliAODHandler.cxx:206
 AliAODHandler.cxx:207
 AliAODHandler.cxx:208
 AliAODHandler.cxx:209
 AliAODHandler.cxx:210
 AliAODHandler.cxx:211
 AliAODHandler.cxx:212
 AliAODHandler.cxx:213
 AliAODHandler.cxx:214
 AliAODHandler.cxx:215
 AliAODHandler.cxx:216
 AliAODHandler.cxx:217
 AliAODHandler.cxx:218
 AliAODHandler.cxx:219
 AliAODHandler.cxx:220
 AliAODHandler.cxx:221
 AliAODHandler.cxx:222
 AliAODHandler.cxx:223
 AliAODHandler.cxx:224
 AliAODHandler.cxx:225
 AliAODHandler.cxx:226
 AliAODHandler.cxx:227
 AliAODHandler.cxx:228
 AliAODHandler.cxx:229
 AliAODHandler.cxx:230
 AliAODHandler.cxx:231
 AliAODHandler.cxx:232
 AliAODHandler.cxx:233
 AliAODHandler.cxx:234
 AliAODHandler.cxx:235
 AliAODHandler.cxx:236
 AliAODHandler.cxx:237
 AliAODHandler.cxx:238
 AliAODHandler.cxx:239
 AliAODHandler.cxx:240
 AliAODHandler.cxx:241
 AliAODHandler.cxx:242
 AliAODHandler.cxx:243
 AliAODHandler.cxx:244
 AliAODHandler.cxx:245
 AliAODHandler.cxx:246
 AliAODHandler.cxx:247
 AliAODHandler.cxx:248
 AliAODHandler.cxx:249
 AliAODHandler.cxx:250
 AliAODHandler.cxx:251
 AliAODHandler.cxx:252
 AliAODHandler.cxx:253
 AliAODHandler.cxx:254
 AliAODHandler.cxx:255
 AliAODHandler.cxx:256
 AliAODHandler.cxx:257
 AliAODHandler.cxx:258
 AliAODHandler.cxx:259
 AliAODHandler.cxx:260
 AliAODHandler.cxx:261
 AliAODHandler.cxx:262
 AliAODHandler.cxx:263
 AliAODHandler.cxx:264
 AliAODHandler.cxx:265
 AliAODHandler.cxx:266
 AliAODHandler.cxx:267
 AliAODHandler.cxx:268
 AliAODHandler.cxx:269
 AliAODHandler.cxx:270
 AliAODHandler.cxx:271
 AliAODHandler.cxx:272
 AliAODHandler.cxx:273
 AliAODHandler.cxx:274
 AliAODHandler.cxx:275
 AliAODHandler.cxx:276
 AliAODHandler.cxx:277
 AliAODHandler.cxx:278
 AliAODHandler.cxx:279
 AliAODHandler.cxx:280
 AliAODHandler.cxx:281
 AliAODHandler.cxx:282
 AliAODHandler.cxx:283
 AliAODHandler.cxx:284
 AliAODHandler.cxx:285
 AliAODHandler.cxx:286
 AliAODHandler.cxx:287
 AliAODHandler.cxx:288
 AliAODHandler.cxx:289
 AliAODHandler.cxx:290
 AliAODHandler.cxx:291
 AliAODHandler.cxx:292
 AliAODHandler.cxx:293
 AliAODHandler.cxx:294
 AliAODHandler.cxx:295
 AliAODHandler.cxx:296
 AliAODHandler.cxx:297
 AliAODHandler.cxx:298
 AliAODHandler.cxx:299
 AliAODHandler.cxx:300
 AliAODHandler.cxx:301
 AliAODHandler.cxx:302
 AliAODHandler.cxx:303
 AliAODHandler.cxx:304
 AliAODHandler.cxx:305
 AliAODHandler.cxx:306
 AliAODHandler.cxx:307
 AliAODHandler.cxx:308
 AliAODHandler.cxx:309
 AliAODHandler.cxx:310
 AliAODHandler.cxx:311
 AliAODHandler.cxx:312
 AliAODHandler.cxx:313
 AliAODHandler.cxx:314
 AliAODHandler.cxx:315
 AliAODHandler.cxx:316
 AliAODHandler.cxx:317
 AliAODHandler.cxx:318
 AliAODHandler.cxx:319
 AliAODHandler.cxx:320
 AliAODHandler.cxx:321
 AliAODHandler.cxx:322
 AliAODHandler.cxx:323
 AliAODHandler.cxx:324
 AliAODHandler.cxx:325
 AliAODHandler.cxx:326
 AliAODHandler.cxx:327
 AliAODHandler.cxx:328
 AliAODHandler.cxx:329
 AliAODHandler.cxx:330
 AliAODHandler.cxx:331
 AliAODHandler.cxx:332
 AliAODHandler.cxx:333
 AliAODHandler.cxx:334
 AliAODHandler.cxx:335
 AliAODHandler.cxx:336
 AliAODHandler.cxx:337
 AliAODHandler.cxx:338
 AliAODHandler.cxx:339
 AliAODHandler.cxx:340
 AliAODHandler.cxx:341
 AliAODHandler.cxx:342
 AliAODHandler.cxx:343
 AliAODHandler.cxx:344
 AliAODHandler.cxx:345
 AliAODHandler.cxx:346
 AliAODHandler.cxx:347
 AliAODHandler.cxx:348
 AliAODHandler.cxx:349
 AliAODHandler.cxx:350
 AliAODHandler.cxx:351
 AliAODHandler.cxx:352
 AliAODHandler.cxx:353
 AliAODHandler.cxx:354
 AliAODHandler.cxx:355
 AliAODHandler.cxx:356
 AliAODHandler.cxx:357
 AliAODHandler.cxx:358
 AliAODHandler.cxx:359
 AliAODHandler.cxx:360
 AliAODHandler.cxx:361
 AliAODHandler.cxx:362
 AliAODHandler.cxx:363
 AliAODHandler.cxx:364
 AliAODHandler.cxx:365
 AliAODHandler.cxx:366
 AliAODHandler.cxx:367
 AliAODHandler.cxx:368
 AliAODHandler.cxx:369
 AliAODHandler.cxx:370
 AliAODHandler.cxx:371
 AliAODHandler.cxx:372
 AliAODHandler.cxx:373
 AliAODHandler.cxx:374
 AliAODHandler.cxx:375
 AliAODHandler.cxx:376
 AliAODHandler.cxx:377
 AliAODHandler.cxx:378
 AliAODHandler.cxx:379
 AliAODHandler.cxx:380
 AliAODHandler.cxx:381
 AliAODHandler.cxx:382
 AliAODHandler.cxx:383
 AliAODHandler.cxx:384
 AliAODHandler.cxx:385
 AliAODHandler.cxx:386
 AliAODHandler.cxx:387
 AliAODHandler.cxx:388
 AliAODHandler.cxx:389
 AliAODHandler.cxx:390
 AliAODHandler.cxx:391
 AliAODHandler.cxx:392
 AliAODHandler.cxx:393
 AliAODHandler.cxx:394
 AliAODHandler.cxx:395
 AliAODHandler.cxx:396
 AliAODHandler.cxx:397
 AliAODHandler.cxx:398
 AliAODHandler.cxx:399
 AliAODHandler.cxx:400
 AliAODHandler.cxx:401
 AliAODHandler.cxx:402
 AliAODHandler.cxx:403
 AliAODHandler.cxx:404
 AliAODHandler.cxx:405
 AliAODHandler.cxx:406
 AliAODHandler.cxx:407
 AliAODHandler.cxx:408
 AliAODHandler.cxx:409
 AliAODHandler.cxx:410
 AliAODHandler.cxx:411
 AliAODHandler.cxx:412
 AliAODHandler.cxx:413
 AliAODHandler.cxx:414
 AliAODHandler.cxx:415
 AliAODHandler.cxx:416
 AliAODHandler.cxx:417
 AliAODHandler.cxx:418
 AliAODHandler.cxx:419
 AliAODHandler.cxx:420
 AliAODHandler.cxx:421
 AliAODHandler.cxx:422
 AliAODHandler.cxx:423
 AliAODHandler.cxx:424
 AliAODHandler.cxx:425
 AliAODHandler.cxx:426
 AliAODHandler.cxx:427
 AliAODHandler.cxx:428
 AliAODHandler.cxx:429
 AliAODHandler.cxx:430
 AliAODHandler.cxx:431
 AliAODHandler.cxx:432
 AliAODHandler.cxx:433
 AliAODHandler.cxx:434
 AliAODHandler.cxx:435
 AliAODHandler.cxx:436
 AliAODHandler.cxx:437
 AliAODHandler.cxx:438
 AliAODHandler.cxx:439
 AliAODHandler.cxx:440
 AliAODHandler.cxx:441
 AliAODHandler.cxx:442
 AliAODHandler.cxx:443
 AliAODHandler.cxx:444
 AliAODHandler.cxx:445
 AliAODHandler.cxx:446
 AliAODHandler.cxx:447
 AliAODHandler.cxx:448
 AliAODHandler.cxx:449
 AliAODHandler.cxx:450
 AliAODHandler.cxx:451
 AliAODHandler.cxx:452
 AliAODHandler.cxx:453
 AliAODHandler.cxx:454
 AliAODHandler.cxx:455
 AliAODHandler.cxx:456
 AliAODHandler.cxx:457
 AliAODHandler.cxx:458
 AliAODHandler.cxx:459
 AliAODHandler.cxx:460
 AliAODHandler.cxx:461
 AliAODHandler.cxx:462
 AliAODHandler.cxx:463
 AliAODHandler.cxx:464
 AliAODHandler.cxx:465
 AliAODHandler.cxx:466
 AliAODHandler.cxx:467
 AliAODHandler.cxx:468
 AliAODHandler.cxx:469
 AliAODHandler.cxx:470
 AliAODHandler.cxx:471
 AliAODHandler.cxx:472
 AliAODHandler.cxx:473
 AliAODHandler.cxx:474
 AliAODHandler.cxx:475
 AliAODHandler.cxx:476
 AliAODHandler.cxx:477
 AliAODHandler.cxx:478
 AliAODHandler.cxx:479
 AliAODHandler.cxx:480
 AliAODHandler.cxx:481
 AliAODHandler.cxx:482
 AliAODHandler.cxx:483
 AliAODHandler.cxx:484
 AliAODHandler.cxx:485
 AliAODHandler.cxx:486
 AliAODHandler.cxx:487
 AliAODHandler.cxx:488
 AliAODHandler.cxx:489
 AliAODHandler.cxx:490
 AliAODHandler.cxx:491
 AliAODHandler.cxx:492
 AliAODHandler.cxx:493
 AliAODHandler.cxx:494
 AliAODHandler.cxx:495
 AliAODHandler.cxx:496
 AliAODHandler.cxx:497
 AliAODHandler.cxx:498
 AliAODHandler.cxx:499
 AliAODHandler.cxx:500
 AliAODHandler.cxx:501
 AliAODHandler.cxx:502
 AliAODHandler.cxx:503
 AliAODHandler.cxx:504
 AliAODHandler.cxx:505
 AliAODHandler.cxx:506
 AliAODHandler.cxx:507
 AliAODHandler.cxx:508
 AliAODHandler.cxx:509
 AliAODHandler.cxx:510
 AliAODHandler.cxx:511
 AliAODHandler.cxx:512
 AliAODHandler.cxx:513
 AliAODHandler.cxx:514
 AliAODHandler.cxx:515
 AliAODHandler.cxx:516
 AliAODHandler.cxx:517
 AliAODHandler.cxx:518
 AliAODHandler.cxx:519
 AliAODHandler.cxx:520
 AliAODHandler.cxx:521
 AliAODHandler.cxx:522
 AliAODHandler.cxx:523
 AliAODHandler.cxx:524
 AliAODHandler.cxx:525
 AliAODHandler.cxx:526
 AliAODHandler.cxx:527
 AliAODHandler.cxx:528
 AliAODHandler.cxx:529
 AliAODHandler.cxx:530
 AliAODHandler.cxx:531
 AliAODHandler.cxx:532
 AliAODHandler.cxx:533
 AliAODHandler.cxx:534
 AliAODHandler.cxx:535
 AliAODHandler.cxx:536
 AliAODHandler.cxx:537
 AliAODHandler.cxx:538
 AliAODHandler.cxx:539
 AliAODHandler.cxx:540
 AliAODHandler.cxx:541
 AliAODHandler.cxx:542
 AliAODHandler.cxx:543
 AliAODHandler.cxx:544
 AliAODHandler.cxx:545
 AliAODHandler.cxx:546
 AliAODHandler.cxx:547
 AliAODHandler.cxx:548
 AliAODHandler.cxx:549
 AliAODHandler.cxx:550
 AliAODHandler.cxx:551
 AliAODHandler.cxx:552
 AliAODHandler.cxx:553
 AliAODHandler.cxx:554
 AliAODHandler.cxx:555
 AliAODHandler.cxx:556
 AliAODHandler.cxx:557
 AliAODHandler.cxx:558
 AliAODHandler.cxx:559
 AliAODHandler.cxx:560
 AliAODHandler.cxx:561
 AliAODHandler.cxx:562
 AliAODHandler.cxx:563
 AliAODHandler.cxx:564
 AliAODHandler.cxx:565
 AliAODHandler.cxx:566
 AliAODHandler.cxx:567
 AliAODHandler.cxx:568
 AliAODHandler.cxx:569
 AliAODHandler.cxx:570
 AliAODHandler.cxx:571
 AliAODHandler.cxx:572
 AliAODHandler.cxx:573
 AliAODHandler.cxx:574
 AliAODHandler.cxx:575
 AliAODHandler.cxx:576
 AliAODHandler.cxx:577
 AliAODHandler.cxx:578
 AliAODHandler.cxx:579
 AliAODHandler.cxx:580
 AliAODHandler.cxx:581
 AliAODHandler.cxx:582
 AliAODHandler.cxx:583
 AliAODHandler.cxx:584
 AliAODHandler.cxx:585
 AliAODHandler.cxx:586
 AliAODHandler.cxx:587
 AliAODHandler.cxx:588
 AliAODHandler.cxx:589
 AliAODHandler.cxx:590
 AliAODHandler.cxx:591
 AliAODHandler.cxx:592
 AliAODHandler.cxx:593
 AliAODHandler.cxx:594
 AliAODHandler.cxx:595
 AliAODHandler.cxx:596
 AliAODHandler.cxx:597
 AliAODHandler.cxx:598
 AliAODHandler.cxx:599
 AliAODHandler.cxx:600
 AliAODHandler.cxx:601
 AliAODHandler.cxx:602
 AliAODHandler.cxx:603
 AliAODHandler.cxx:604
 AliAODHandler.cxx:605
 AliAODHandler.cxx:606
 AliAODHandler.cxx:607
 AliAODHandler.cxx:608
 AliAODHandler.cxx:609
 AliAODHandler.cxx:610
 AliAODHandler.cxx:611
 AliAODHandler.cxx:612
 AliAODHandler.cxx:613
 AliAODHandler.cxx:614
 AliAODHandler.cxx:615
 AliAODHandler.cxx:616
 AliAODHandler.cxx:617
 AliAODHandler.cxx:618
 AliAODHandler.cxx:619
 AliAODHandler.cxx:620
 AliAODHandler.cxx:621
 AliAODHandler.cxx:622
 AliAODHandler.cxx:623
 AliAODHandler.cxx:624
 AliAODHandler.cxx:625
 AliAODHandler.cxx:626
 AliAODHandler.cxx:627
 AliAODHandler.cxx:628
 AliAODHandler.cxx:629
 AliAODHandler.cxx:630
 AliAODHandler.cxx:631
 AliAODHandler.cxx:632
 AliAODHandler.cxx:633
 AliAODHandler.cxx:634
 AliAODHandler.cxx:635
 AliAODHandler.cxx:636
 AliAODHandler.cxx:637
 AliAODHandler.cxx:638
 AliAODHandler.cxx:639
 AliAODHandler.cxx:640
 AliAODHandler.cxx:641
 AliAODHandler.cxx:642
 AliAODHandler.cxx:643
 AliAODHandler.cxx:644
 AliAODHandler.cxx:645
 AliAODHandler.cxx:646
 AliAODHandler.cxx:647
 AliAODHandler.cxx:648
 AliAODHandler.cxx:649
 AliAODHandler.cxx:650
 AliAODHandler.cxx:651
 AliAODHandler.cxx:652
 AliAODHandler.cxx:653
 AliAODHandler.cxx:654
 AliAODHandler.cxx:655
 AliAODHandler.cxx:656
 AliAODHandler.cxx:657
 AliAODHandler.cxx:658
 AliAODHandler.cxx:659
 AliAODHandler.cxx:660
 AliAODHandler.cxx:661
 AliAODHandler.cxx:662
 AliAODHandler.cxx:663
 AliAODHandler.cxx:664
 AliAODHandler.cxx:665
 AliAODHandler.cxx:666
 AliAODHandler.cxx:667
 AliAODHandler.cxx:668
 AliAODHandler.cxx:669
 AliAODHandler.cxx:670
 AliAODHandler.cxx:671
 AliAODHandler.cxx:672
 AliAODHandler.cxx:673
 AliAODHandler.cxx:674
 AliAODHandler.cxx:675
 AliAODHandler.cxx:676
 AliAODHandler.cxx:677
 AliAODHandler.cxx:678
 AliAODHandler.cxx:679
 AliAODHandler.cxx:680
 AliAODHandler.cxx:681
 AliAODHandler.cxx:682
 AliAODHandler.cxx:683
 AliAODHandler.cxx:684
 AliAODHandler.cxx:685
 AliAODHandler.cxx:686
 AliAODHandler.cxx:687
 AliAODHandler.cxx:688
 AliAODHandler.cxx:689
 AliAODHandler.cxx:690
 AliAODHandler.cxx:691
 AliAODHandler.cxx:692
 AliAODHandler.cxx:693
 AliAODHandler.cxx:694
 AliAODHandler.cxx:695
 AliAODHandler.cxx:696
 AliAODHandler.cxx:697
 AliAODHandler.cxx:698
 AliAODHandler.cxx:699
 AliAODHandler.cxx:700
 AliAODHandler.cxx:701
 AliAODHandler.cxx:702
 AliAODHandler.cxx:703
 AliAODHandler.cxx:704
 AliAODHandler.cxx:705
 AliAODHandler.cxx:706
 AliAODHandler.cxx:707
 AliAODHandler.cxx:708
 AliAODHandler.cxx:709
 AliAODHandler.cxx:710
 AliAODHandler.cxx:711
 AliAODHandler.cxx:712
 AliAODHandler.cxx:713
 AliAODHandler.cxx:714
 AliAODHandler.cxx:715
 AliAODHandler.cxx:716
 AliAODHandler.cxx:717
 AliAODHandler.cxx:718
 AliAODHandler.cxx:719
 AliAODHandler.cxx:720
 AliAODHandler.cxx:721
 AliAODHandler.cxx:722
 AliAODHandler.cxx:723
 AliAODHandler.cxx:724
 AliAODHandler.cxx:725
 AliAODHandler.cxx:726
 AliAODHandler.cxx:727
 AliAODHandler.cxx:728
 AliAODHandler.cxx:729
 AliAODHandler.cxx:730
 AliAODHandler.cxx:731
 AliAODHandler.cxx:732
 AliAODHandler.cxx:733
 AliAODHandler.cxx:734
 AliAODHandler.cxx:735
 AliAODHandler.cxx:736
 AliAODHandler.cxx:737
 AliAODHandler.cxx:738
 AliAODHandler.cxx:739
 AliAODHandler.cxx:740
 AliAODHandler.cxx:741
 AliAODHandler.cxx:742
 AliAODHandler.cxx:743
 AliAODHandler.cxx:744
 AliAODHandler.cxx:745
 AliAODHandler.cxx:746
 AliAODHandler.cxx:747
 AliAODHandler.cxx:748
 AliAODHandler.cxx:749
 AliAODHandler.cxx:750
 AliAODHandler.cxx:751
 AliAODHandler.cxx:752
 AliAODHandler.cxx:753
 AliAODHandler.cxx:754
 AliAODHandler.cxx:755
 AliAODHandler.cxx:756
 AliAODHandler.cxx:757
 AliAODHandler.cxx:758
 AliAODHandler.cxx:759
 AliAODHandler.cxx:760
 AliAODHandler.cxx:761
 AliAODHandler.cxx:762
 AliAODHandler.cxx:763
 AliAODHandler.cxx:764
 AliAODHandler.cxx:765
 AliAODHandler.cxx:766
 AliAODHandler.cxx:767
 AliAODHandler.cxx:768
 AliAODHandler.cxx:769
 AliAODHandler.cxx:770
 AliAODHandler.cxx:771
 AliAODHandler.cxx:772
 AliAODHandler.cxx:773
 AliAODHandler.cxx:774
 AliAODHandler.cxx:775
 AliAODHandler.cxx:776
 AliAODHandler.cxx:777
 AliAODHandler.cxx:778
 AliAODHandler.cxx:779
 AliAODHandler.cxx:780
 AliAODHandler.cxx:781
 AliAODHandler.cxx:782
 AliAODHandler.cxx:783
 AliAODHandler.cxx:784
 AliAODHandler.cxx:785
 AliAODHandler.cxx:786
 AliAODHandler.cxx:787
 AliAODHandler.cxx:788
 AliAODHandler.cxx:789
 AliAODHandler.cxx:790
 AliAODHandler.cxx:791
 AliAODHandler.cxx:792
 AliAODHandler.cxx:793
 AliAODHandler.cxx:794
 AliAODHandler.cxx:795
 AliAODHandler.cxx:796
 AliAODHandler.cxx:797
 AliAODHandler.cxx:798
 AliAODHandler.cxx:799
 AliAODHandler.cxx:800
 AliAODHandler.cxx:801
 AliAODHandler.cxx:802
 AliAODHandler.cxx:803
 AliAODHandler.cxx:804
 AliAODHandler.cxx:805
 AliAODHandler.cxx:806
 AliAODHandler.cxx:807
 AliAODHandler.cxx:808
 AliAODHandler.cxx:809
 AliAODHandler.cxx:810
 AliAODHandler.cxx:811
 AliAODHandler.cxx:812
 AliAODHandler.cxx:813
 AliAODHandler.cxx:814
 AliAODHandler.cxx:815
 AliAODHandler.cxx:816
 AliAODHandler.cxx:817
 AliAODHandler.cxx:818
 AliAODHandler.cxx:819