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

/* $Id$ */
//---------------------------------------------------------------------------------
//                          Class AliMCEventHandler
// This class gives access to MC truth during the analysis.
// Monte Carlo truth is containe in the kinematics tree (produced particles) and 
// the tree of reference hits.
//      
// Origin: Andreas Morsch, CERN, andreas.morsch@cern.ch 
//---------------------------------------------------------------------------------



#include "AliMCEventHandler.h"
#include "AliMCEvent.h"
#include "AliMCParticle.h"
#include "AliPDG.h"
#include "AliTrackReference.h"
#include "AliHeader.h"
#include "AliStack.h"
#include "AliLog.h"

#include <TTree.h>
#include <TSystem.h>
#include <TTreeCache.h>
#include <TFile.h>
#include <TList.h>
#include <TParticle.h>
#include <TString.h>
#include <TClonesArray.h>
#include <TDirectoryFile.h>

ClassImp(AliMCEventHandler)

AliMCEventHandler::AliMCEventHandler() :
    AliInputEventHandler(),
    fMCEvent(0),
    fFileE(0),
    fFileK(0),
    fFileTR(0),
    fTreeE(0),
    fTreeK(0),
    fTreeTR(0),
    fDirK(0),
    fDirTR(0),
    fParticleSelected(0),
    fLabelMap(0),
    fNEvent(-1),
    fEvent(-1),
    fPathName(new TString("./")),
    fkExtension(""),
    fFileNumber(0),
    fEventsPerFile(0),
    fReadTR(kTRUE),
    fInitOk(kFALSE),
    fSubsidiaryHandlers(0),
    fEventsInContainer(0),
    fPreReadMode(kLmPreRead), // was kNoPreRead
    fCacheSize(0),
    fCacheTK(0),
    fCacheTR(0)
{
  //
  // Default constructor
  //
  // Be sure to add all particles to the PDG database
  AliPDG::AddParticlesToPdgDataBase();
}

AliMCEventHandler::AliMCEventHandler(const char* name, const char* title) :
    AliInputEventHandler(name, title),
    fMCEvent(),
    fFileE(0),
    fFileK(0),
    fFileTR(0),
    fTreeE(0),
    fTreeK(0),
    fTreeTR(0),
    fDirK(0),
    fDirTR(0),
    fParticleSelected(0),
    fLabelMap(0),
    fNEvent(-1),
    fEvent(-1),
    fPathName(new TString("./")),
    fkExtension(""),
    fFileNumber(0),
    fEventsPerFile(0),
    fReadTR(kTRUE),
    fInitOk(kFALSE),
    fSubsidiaryHandlers(0),
    fEventsInContainer(0),
    fPreReadMode(kLmPreRead), // was kNoPreRead
    fCacheSize(0),
    fCacheTK(0),
    fCacheTR(0)
{
  //
  // Constructor
  //
  // Be sure to add all particles to the PDG database
  AliPDG::AddParticlesToPdgDataBase();
}
AliMCEventHandler::~AliMCEventHandler()
{ 
    // Destructor
  delete fPathName;
    delete fMCEvent;
    delete fFileE;
    delete fFileK;
    delete fFileTR;
    delete fCacheTK;
    delete fCacheTR;
}

Bool_t AliMCEventHandler::Init(Option_t* opt)
{ 
    // Initialize input
    //
    if (!(strcmp(opt, "proof")) || !(strcmp(opt, "local"))) return kTRUE;
    //
    fFileE = TFile::Open(Form("%sgalice.root", fPathName->Data()));
    if (!fFileE) {
      AliError(Form("AliMCEventHandler:galice.root not found in directory %s ! \n", fPathName->Data()));
      fInitOk = kFALSE;
      return kFALSE;
    }
    
    //
    // Tree E
    fFileE->GetObject("TE", fTreeE);
    // Connect Tree E to the MCEvent
    if (!fMCEvent) fMCEvent = new AliMCEvent();
    fMCEvent->ConnectTreeE(fTreeE);
    fNEvent = fTreeE->GetEntries();
    //
    // Tree K
    fFileK = TFile::Open(Form("%sKinematics%s.root", fPathName->Data(), fkExtension));
    if (!fFileK) {
	AliError(Form("AliMCEventHandler:Kinematics.root not found in directory %s ! \n", fPathName->Data()));
	fInitOk = kFALSE;
	return kTRUE;
    }
    
    fEventsPerFile = fFileK->GetNkeys() - fFileK->GetNProcessIDs();
    //
    // Tree TR
    if (fReadTR) {
	fFileTR = TFile::Open(Form("%sTrackRefs%s.root", fPathName->Data(), fkExtension));
	if (!fFileTR) {
	    AliError(Form("AliMCEventHandler:TrackRefs.root not found in directory %s ! \n", fPathName->Data()));
	    fInitOk = kFALSE;
	    return kTRUE;
	}
    }
    //
    // Reset the event number
    fEvent      = -1;
    fFileNumber =  0;
    AliInfo(Form("Number of events in this directory %5d \n", fNEvent));
    fInitOk = kTRUE;


    if (fSubsidiaryHandlers) {
	TIter next(fSubsidiaryHandlers);
	AliMCEventHandler *handler;
	while((handler = (AliMCEventHandler*)next())) {
	    handler->Init(opt);
	    handler->SetNumberOfEventsInContainer(fNEvent);
	}
    }

    return kTRUE;
}

Bool_t AliMCEventHandler::LoadEvent(Int_t iev)
{
    // Load the event number iev
    //
    // Calculate the file number
  if (!fInitOk) return kFALSE;
    
  Int_t inew  = iev / fEventsPerFile;
  Bool_t firsttree = (fTreeK==0) ? kTRUE : kFALSE;
//  Bool_t newtree = firsttree;
  if (inew != fFileNumber) {
//    newtree = kTRUE;
    fFileNumber = inew;
    if (!OpenFile(fFileNumber)){
      return kFALSE;
    }
  }
  // Folder name
  char folder[20];
  snprintf(folder, 20, "Event%d", iev);
  // TreeE
  fTreeE->GetEntry(iev);
  // Tree K
  fFileK->GetObject(folder, fDirK);
  if (!fDirK) {
    AliWarning(Form("AliMCEventHandler: Event #%5d - Cannot get kinematics\n", iev));
    return kFALSE;
  }
    
  fDirK ->GetObject("TreeK", fTreeK);
  if (!fTreeK) {
    AliError(Form("AliMCEventHandler: Event #%5d - Cannot get TreeK\n",iev));
    return kFALSE;
  }  
  // Connect TreeK to MCEvent
  fMCEvent->ConnectTreeK(fTreeK);
  //Tree TR 
  if (fFileTR) {
    // Check which format has been read
    fFileTR->GetObject(folder, fDirTR);
    if (!fDirTR) {
      AliError(Form("AliMCEventHandler: Event #%5d - Cannot get track references\n",iev));
      return kFALSE;
    }  
     
    fDirTR->GetObject("TreeTR", fTreeTR);
    //
    if (!fTreeTR) {
      AliError(Form("AliMCEventHandler: Event #%5d - Cannot get TreeTR\n",iev));
      return kFALSE;
    }  
    // Connect TR to MCEvent
    fMCEvent->ConnectTreeTR(fTreeTR);
  }
  // Now setup the caches if not yet done
  if (fCacheSize) {
    fTreeK->SetCacheSize(fCacheSize);
    fCacheTK = (TTreeCache*) fFileK->GetCacheRead(fTreeK);
    TTreeCache::SetLearnEntries(1);
    fTreeK->AddBranchToCache("*",kTRUE);
    if (firsttree) Info("LoadEvent","Read cache enabled %lld bytes for TreeK",fCacheSize);
    if (fTreeTR) {
      fTreeTR->SetCacheSize(fCacheSize);
      fCacheTR = (TTreeCache*) fFileTR->GetCacheRead(fTreeTR);
      TTreeCache::SetLearnEntries(1);
      fTreeTR->AddBranchToCache("*",kTRUE);
      if (firsttree) Info("LoadEvent","Read cache enabled %lld bytes for TreeTR",fCacheSize);
    } 
//    } else {
      // We need to reuse the previous caches and every new event is a new tree
//      if (fCacheTK) {
//         fCacheTK->ResetCache();
//         if (fFileK) fFileK->SetCacheRead(fCacheTK, fTreeK);
//         fCacheTK->UpdateBranches(fTreeK);
//      }
//      if (fCacheTR) {
//         fCacheTR->ResetCache();
//         if (fFileTR) fFileTR->SetCacheRead(fCacheTR, fTreeTR);
//         fCacheTR->UpdateBranches(fTreeTR);
//      }   
  }  
  return kTRUE;
}

Bool_t AliMCEventHandler::OpenFile(Int_t i)
{
    // Open file i
    fInitOk = kFALSE;
    if (i > 0) {
      fkExtension = Form("%d", i);
    } else {
      fkExtension = "";
    }
    
    if (fFileK && fCacheTK) fFileK->SetCacheRead(0, fTreeK);
    delete fFileK;
    fFileK = TFile::Open(Form("%sKinematics%s.root", fPathName->Data(), fkExtension));
    if (!fFileK) {
      AliError(Form("AliMCEventHandler:Kinematics%s.root not found in directory %s ! \n", fkExtension, fPathName->Data()));
      delete fMCEvent; fMCEvent=0;
      return fInitOk;
    }
    
    fInitOk = kTRUE;
    if (fReadTR) {
      if (fFileTR && fCacheTR) fFileTR->SetCacheRead(0, fTreeTR);
      delete fFileTR;
      fFileTR = TFile::Open(Form("%sTrackRefs%s.root", fPathName->Data(), fkExtension));
      if (!fFileTR) {
        AliError(Form("AliMCEventHandler:TrackRefs%s.root not found in directory %s ! \n", fkExtension, fPathName->Data()));
        return fInitOk;
      }
    }
    return fInitOk;
}

Bool_t AliMCEventHandler::BeginEvent(Long64_t entry)
{ 
    // Begin event
    if (!fInitOk) return kFALSE;
    fParticleSelected.Delete();
    fLabelMap.Delete();
    // Read the next event

    if (fEventsInContainer != 0) {
	entry = (Long64_t) ( entry * Float_t(fNEvent) / Float_t (fEventsInContainer));
    }


    if (entry == -1) {
	fEvent++;
	entry = fEvent;
    } else {
	fEvent = entry;
    }

    if (entry >= fNEvent) {
	AliWarning(Form("AliMCEventHandler: Event number out of range %5lld %5d\n", entry, fNEvent));
	return kFALSE;
    }
    
    Bool_t result = LoadEvent(entry);

    if (fSubsidiaryHandlers) {
	TIter next(fSubsidiaryHandlers);
	AliMCEventHandler *handler;
	while((handler = (AliMCEventHandler*)next())) {
	    handler->BeginEvent(entry);
	}
	next.Reset();
	while((handler = (AliMCEventHandler*)next())) {
	  if (!handler->MCEvent()) continue;
	    fMCEvent->AddSubsidiaryEvent(handler->MCEvent());
	}
	fMCEvent->InitEvent();
    }
    
    if (fPreReadMode == kLmPreRead) {
	fMCEvent->PreReadAll();
    }

    return result;
    
}

void AliMCEventHandler::SelectParticle(Int_t i){
  // taking the absolute values here, need to take care 
  // of negative daughter and mother
  // IDs when setting!
    if (!fInitOk) return;
    if (TMath::Abs(i) >= AliMCEvent::BgLabelOffset()) i =  fMCEvent->BgLabelToIndex(TMath::Abs(i));
    if(!IsParticleSelected(TMath::Abs(i)))fParticleSelected.Add(TMath::Abs(i),1);
}

Bool_t AliMCEventHandler::IsParticleSelected(Int_t i)  {
  // taking the absolute values here, need to take 
  // care with negative daughter and mother
  // IDs when setting!
  return (fParticleSelected.GetValue(TMath::Abs(i))==1);
}


void AliMCEventHandler::CreateLabelMap(){

  //
  // this should be called once all selections where done 
  //

  fLabelMap.Delete();
  if(!fMCEvent){
    fParticleSelected.Delete();
    return;
  }

  VerifySelectedParticles();

  Int_t iNew = 0;
  for(int i = 0;i < fMCEvent->GetNumberOfTracks();++i){
    if(IsParticleSelected(i)){
      fLabelMap.Add(i,iNew);
      iNew++;
    }
  }
}

Int_t AliMCEventHandler::GetNewLabel(Int_t i) {
  // Gets the label from the new created Map
  // Call CreatLabelMap before
  // otherwise only 0 returned
  return fLabelMap.GetValue(TMath::Abs(i));
}

void  AliMCEventHandler::VerifySelectedParticles(){

  //  
  // Make sure that each particle has at least it's predecessors
  // selected so that we have the complete ancestry tree
  // Private, should be only called by CreateLabelMap

  if(!fMCEvent){
      fParticleSelected.Delete();
      return;
  }

  Int_t nprim = fMCEvent->GetNumberOfPrimaries();

  for(int i = 0;i < fMCEvent->GetNumberOfTracks(); ++i){
      if(i < nprim){
	  SelectParticle(i);// take all primaries
	  continue;
      }

      if(!IsParticleSelected(i))continue;

      AliMCParticle* mcpart = (AliMCParticle*) fMCEvent->GetTrack(i);
      Int_t imo = mcpart->GetMother();
      while((imo >= nprim)&&!IsParticleSelected(imo)){
	  // Mother not yet selected
	  SelectParticle(imo);
	  mcpart = (AliMCParticle*) fMCEvent->GetTrack(imo);
	  imo = mcpart->GetMother();
      }
    // after last step we may have an unselected primary
    // mother
    if(imo>=0){
      if(!IsParticleSelected(imo))
	SelectParticle(imo);
    } 
  }// loop over all tracks
}

Int_t AliMCEventHandler::GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*& trefs)
{
    // Retrieve entry i
    if (!fInitOk) {
	return 0;
    } else {
	return (fMCEvent->GetParticleAndTR(i, particle, trefs));
    }
}

void AliMCEventHandler::DrawCheck(Int_t i, Int_t search)
{
    // Retrieve entry i and draw momentum vector and hits
    fMCEvent->DrawCheck(i, search);
}

Bool_t AliMCEventHandler::Notify(const char *path)
{
  // Notify about directory change
  // The directory is taken from the 'path' argument
  // Reconnect trees
    TString fileName(path);
    TString dirname = gSystem->DirName(fileName);
    TString basename = gSystem->BaseName(fileName);
    Int_t index = basename.Index("#");
    basename = basename(0, index+1);
    fileName = dirname;
    fileName += "/";
    fileName += basename;
    /*
    if (fileName.BeginsWith("root:")) {
      fileName.Append("?ZIP=");
    }
    */
    *fPathName = fileName;
    AliInfo(Form("Path: -%s-\n", fPathName->Data()));
    
    ResetIO();
    InitIO("");

// Handle subsidiary handlers
    if (fSubsidiaryHandlers) {
	TIter next(fSubsidiaryHandlers);
	AliMCEventHandler *handler;
	while((handler = (AliMCEventHandler*) next())) {
	    TString* spath = handler->GetInputPath();
	    if (spath->Contains("merged")) {
		if (! fPathName->IsNull()) {
		    handler->Notify(Form("%s/../.", fPathName->Data()));
		} else {
		    handler->Notify("../");
		}
	    }
	}
    }
    
    return kTRUE;
}

void AliMCEventHandler::ResetIO()
{
//  Clear header and stack
    
    if (fInitOk) fMCEvent->Clean();
    
// Delete Tree E
    delete fTreeE; fTreeE = 0;
     
// Reset files
    if (fFileE)  {delete fFileE;  fFileE  = 0;}
    if (fFileK)  {delete fFileK;  fFileK  = 0;}
    if (fFileTR) {delete fFileTR; fFileTR = 0;}
    fkExtension="";
    fInitOk = kFALSE;

    if (fSubsidiaryHandlers) {
	TIter next(fSubsidiaryHandlers);
	AliMCEventHandler *handler;
	while((handler = (AliMCEventHandler*)next())) {
	    handler->ResetIO();
	}
    }

}

			    
Bool_t AliMCEventHandler::FinishEvent()
{
    // Clean-up after each event
   if (fFileK && fCacheTK) {
      fTreeK->SetCacheSize(0);
      fCacheTK = 0;  
      fFileK->SetCacheRead(0, fTreeK);
   }   
   if (fFileTR && fCacheTR) {
      fTreeTR->SetCacheSize(0);
      fCacheTR = 0;
      fFileTR->SetCacheRead(0, fTreeTR);
   }
   delete fDirTR;  fDirTR = 0;
   delete fDirK;   fDirK  = 0;    
    if (fInitOk) fMCEvent->FinishEvent();

    if (fSubsidiaryHandlers) {
	TIter next(fSubsidiaryHandlers);
	AliMCEventHandler *handler;
	while((handler = (AliMCEventHandler*)next())) {
	    handler->FinishEvent();
	}
    }

    return kTRUE;
}

Bool_t AliMCEventHandler::Terminate()
{ 
    // Dummy 
    return kTRUE;
}

Bool_t AliMCEventHandler::TerminateIO()
{ 
    // Dummy
    return kTRUE;
}
    

void AliMCEventHandler::SetInputPath(const char* fname)
{
    // Set the input path name
    delete fPathName;
    fPathName = new TString(fname);
}

void AliMCEventHandler::AddSubsidiaryHandler(AliMCEventHandler* handler)
{
    // Add a subsidiary handler. For example for background events

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