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

// This class is extracted from the AliRun class
// and contains all the MC-related functionality
// The number of dependencies has to be reduced...
// Author: F.Carminati
//         Federico.Carminati@cern.ch

#include <string.h>

#include <RVersion.h>
#include <TArrayI.h>
#include <TClonesArray.h>
#include <TFile.h>
#include <TGeoGlobalMagField.h>
#include <TGeoManager.h>
#include <TParticle.h>
#include <TROOT.h>
#include <TStopwatch.h>
#include <TSystem.h>
#include <TVirtualMC.h>
#include <TMCVerbose.h>
#include <TTree.h>
 
#include "AliCDBEntry.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliDetector.h"
#include "AliGenerator.h"
#include "AliGeomManager.h"
#include "AliHeader.h"
#include "AliHit.h"
#include "AliLego.h"
#include "AliLog.h"
#include "AliMC.h"
#include "AliMagF.h"
#include "AliRun.h"
#include "AliSimulation.h"
#include "AliStack.h"
#include "AliTrackReference.h"
#include "AliTransportMonitor.h"

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

//_______________________________________________________________________
AliMC::AliMC() :
  fGenerator(0),
  fSaveRndmStatus(kFALSE),
  fSaveRndmEventStatus(kFALSE),
  fReadRndmStatus(kFALSE),
  fUseMonitoring(kFALSE),
  fRndmFileName("random.root"),
  fEventEnergy(0),
  fSummEnergy(0),
  fSum2Energy(0),
  fTrRmax(1.e10),
  fTrZmax(1.e10),
  fRDecayMax(1.e10),
  fRDecayMin(-1.),
  fDecayPdg(0),
  fImedia(0),
  fTransParName("\0"),
  fMonitor(0),
  fHitLists(0),
  fTmpTreeTR(0),
  fTmpFileTR(0),
  fTrackReferences(),
  fTmpTrackReferences()

{
  //default constructor
  DecayLimits();
}

//_______________________________________________________________________
AliMC::AliMC(const char *name, const char *title) :
  TVirtualMCApplication(name, title),
  fGenerator(0),
  fSaveRndmStatus(kFALSE),
  fSaveRndmEventStatus(kFALSE),
  fReadRndmStatus(kFALSE),
  fUseMonitoring(kFALSE),
  fRndmFileName("random.root"),
  fEventEnergy(0),
  fSummEnergy(0),
  fSum2Energy(0),
  fTrRmax(1.e10),
  fTrZmax(1.e10),
  fRDecayMax(1.e10),
  fRDecayMin(-1.),
  fDecayPdg(0),
  fImedia(new TArrayI(1000)),
  fTransParName("\0"),
  fMonitor(0),
  fHitLists(new TList()),
  fTmpTreeTR(0),
  fTmpFileTR(0),
  fTrackReferences("AliTrackReference", 100),
  fTmpTrackReferences("AliTrackReference", 100)
{
  //constructor
  // Set transport parameters
  SetTransPar();
  DecayLimits();
  // Prepare the tracking medium lists
  for(Int_t i=0;i<1000;i++) (*fImedia)[i]=-99;
}

//_______________________________________________________________________
AliMC::~AliMC()
{
  //destructor
  delete fGenerator;
  delete fImedia;
  delete fHitLists;
  delete fMonitor;
  // Delete track references
}

//_______________________________________________________________________
void  AliMC::ConstructGeometry() 
{
  //
  // Either load geometry from file or create it through usual
  // loop on detectors. In the first case the method
  // AliModule::CreateMaterials() only builds fIdtmed and is postponed
  // at InitGeometry().
  //

  if(AliSimulation::Instance()->IsGeometryFromFile()){ //load geometry either from CDB or from file
    if(IsGeometryFromCDB()){
      AliInfo("Loading geometry from CDB default storage");
      AliCDBPath path("GRP","Geometry","Data");
      AliCDBEntry *entry=AliCDBManager::Instance()->Get(path.GetPath());
      if(!entry) AliFatal("Unable to load geometry from CDB!");
      entry->SetOwner(0);
      gGeoManager = (TGeoManager*) entry->GetObject();
      if (!gGeoManager) AliFatal("TGeoManager object not found in the specified CDB entry!");
    }else{
      // Load geometry
      const char *geomfilename = AliSimulation::Instance()->GetGeometryFile();
      if(gSystem->ExpandPathName(geomfilename)){
	AliInfo(Form("Loading geometry from file:\n %40s",geomfilename));
	TGeoManager::Import(geomfilename);
      }else{
	AliInfo(Form("Geometry file %40s not found!\n",geomfilename));
	return;
      }
    }
    TVirtualMC::GetMC()->SetRootGeometry();
  }else{
    // Create modules, materials, geometry
    if (!gGeoManager) new TGeoManager("ALICE", "ALICE geometry");
    TStopwatch stw;
    TIter next(gAlice->Modules());
    AliModule *detector;
    AliDebug(1, "Geometry creation:");
    while((detector = dynamic_cast<AliModule*>(next()))) {
      stw.Start();
      // Initialise detector materials and geometry
      detector->CreateMaterials();
      detector->CreateGeometry();
      AliInfo(Form("%10s R:%.2fs C:%.2fs",
		   detector->GetName(),stw.RealTime(),stw.CpuTime()));
    }
  }
  
}

//_______________________________________________________________________
Bool_t  AliMC::MisalignGeometry() 
{
  // Call misalignment code if AliSimulation object was defined.
  
  if(!AliSimulation::Instance()->IsGeometryFromFile()){
    //Set alignable volumes for the whole geometry
    SetAllAlignableVolumes();
  }
  // Misalign geometry via AliSimulation instance
  if (!AliSimulation::Instance()) return kFALSE;
  AliGeomManager::SetGeometry(gGeoManager);
  if(!AliGeomManager::CheckSymNamesLUT("ALL"))
    AliFatal("Current loaded geometry differs in the definition of symbolic names!");
  
  return AliSimulation::Instance()->MisalignGeometry(AliRunLoader::Instance());
}   

//_______________________________________________________________________
void  AliMC::ConstructOpGeometry() 
{
  //
  // Loop all detector modules and call DefineOpticalProperties() method 
  //

  TIter next(gAlice->Modules());
  AliModule *detector;
  AliInfo("Optical properties definition");
  while((detector = dynamic_cast<AliModule*>(next()))) {
    // Initialise detector geometry
    if(AliSimulation::Instance()->IsGeometryFromFile()) detector->CreateMaterials();
    // Initialise detector optical properties
    detector->DefineOpticalProperties();
  }  
}

#include <TPDGCode.h>
//_______________________________________________________________________
void  AliMC::AddParticles()
{
  //
  // Add particles (not present in Geant3 or Geant4)
  //
  
  cout << "########## AliMC::AddParticles"  << endl;

  //Hypertriton
  TVirtualMC::GetMC()->DefineParticle(1010010030, "HyperTriton", kPTHadron, 2.99131 , 1.0, 2.632e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 3, kFALSE);
  //Anti-Hypertriton
  TVirtualMC::GetMC()->DefineParticle(-1010010030, "AntiHyperTriton", kPTHadron, 2.99131 , 1.0, 2.632e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 3, kFALSE);

  //Hyper hydrogen 4
  TVirtualMC::GetMC()->DefineParticle(1010010040, "Hyperhydrog4", kPTHadron, 3.931 , 1.0, 2.632e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 4, kFALSE);
  //Anti-Hyper hydrogen 4
  TVirtualMC::GetMC()->DefineParticle(-1010010040, "AntiHyperhydrog4", kPTHadron, 3.931 , 1.0, 2.632e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 4, kFALSE);

  //Hyper helium 4
  TVirtualMC::GetMC()->DefineParticle(1010020040, "Hyperhelium4", kPTHadron, 3.929 , 2.0, 2.632e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 4, kFALSE);
  //Anti-Hyper helium 4
  TVirtualMC::GetMC()->DefineParticle(-1010020040, "AntiHyperhelium4", kPTHadron, 3.929 , 2.0, 2.632e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 4, kFALSE);

  //Lambda-Neutron 
  TVirtualMC::GetMC()->DefineParticle(1010000020, "LambdaNeutron", kPTNeutron, 2.054 , 0.0, 2.632e-10,"Hadron", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);

  //Anti-Lambda-Neutron
  TVirtualMC::GetMC()->DefineParticle(-1010000020, "AntiLambdaNeutron", kPTNeutron, 2.054 , 0.0, 2.632e-10,"Hadron", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);

  //H-Dibaryon
  TVirtualMC::GetMC()->DefineParticle(1020000020, "Hdibaryon", kPTNeutron, 2.23, 0.0, 2.632e-10,"Hadron", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);
  //Anti-H-Dibaryon
  TVirtualMC::GetMC()->DefineParticle(-1020000020, "AntiHdibaryon", kPTNeutron, 2.23, 0.0, 2.632e-10,"Hadron", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);

  //Xi-Proton
  TVirtualMC::GetMC()->DefineParticle(1030000020, "Xi0Proton", kPTHadron, 2.248 , 1.0, 1.333e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);

  //Anti-Xi-Proton
  TVirtualMC::GetMC()->DefineParticle(-1030000020, "AntiXi0Proton", kPTHadron, 2.248 , 1.0, 1.333e-10,"Ion", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);
  
  //Lambda-Neutron-Neutron
  TVirtualMC::GetMC()->DefineParticle(1010000030, "LambdaNeutronNeutron", kPTNeutron, 2.982 , 0.0, 2.632e-10,"Hadron", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);
  
  //Anti-Lambda-Neutron-Neutron
  TVirtualMC::GetMC()->DefineParticle(-1010000030, "AntiLambdaNeutronNeutron", kPTNeutron, 2.982 , 0.0, 2.632e-10,"Hadron", 0.0, 0, 1, 0, 0, 0, 0, 0, 2, kFALSE);
  
  //Resonances not in Generators
  // f0(980) assume 70 MeV as width (PDG: 40 to 100 MeV)
  TVirtualMC::GetMC()->DefineParticle(9010221, "f0_980", kPTNeutron, 0.98 , 0.0, 9.403e-24,"Hadron", 7e-2, 0, 0, 0, 0, 0, 0, 0, 0, kTRUE);

  // f2(1270) (PDG: width = 185 MeV)
  TVirtualMC::GetMC()->DefineParticle(225, "f2_1270", kPTNeutron, 1.275 , 0.0, 3.558e-24,"Hadron", 0.185, 0, 0, 0, 0, 0, 0, 0, 0, kTRUE);

  // Define the 2- and 3-body phase space decay for the Hyper-Triton
  Int_t mode[6][3];                  
  Float_t bratio[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     bratio[kz] = 0.;
     mode[kz][0] = 0;
     mode[kz][1] = 0;
     mode[kz][2] = 0;
  }
  bratio[0] = 50.;
  mode[0][0] = 1000020030; // Helium3 
  mode[0][1] = -211; // negative pion
  
  bratio[1] = 50.;
  mode[1][0] = 1000010020; // deuteron 
  mode[1][1] = 2212; // proton
  mode[1][2] = -211; // negative pion

  TVirtualMC::GetMC()->SetDecayMode(1010010030,bratio,mode);



  // Define the 2- and 3-body phase space decay for the Anti-Hyper-Triton
  Int_t amode[6][3];                  
  Float_t abratio[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     abratio[kz] = 0.;
     amode[kz][0] = 0;
     amode[kz][1] = 0;
     amode[kz][2] = 0;
  }
  abratio[0] = 50.;
  amode[0][0] = -1000020030; // anti- Helium3 
  amode[0][1] = 211; // positive pion
  abratio[1] = 50.;
  amode[1][0] = -1000010020; // anti-deuteron 
  amode[1][1] = -2212; // anti-proton
  amode[1][2] = 211; // positive pion

  TVirtualMC::GetMC()->SetDecayMode(-1010010030,abratio,amode);
  
  ////// ----------Hypernuclei with Mass=4 ----------- //////////
  
   // Define the 2- and 3-body phase space decay for the Hyper Hydrogen 4
   
  Int_t mode3[6][3];                  
  Float_t bratio3[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     bratio3[kz] = 0.;
     mode3[kz][0] = 0;
     mode3[kz][1] = 0;
     mode3[kz][2] = 0;
  }
  bratio3[0] = 50.;
  mode3[0][0] = 1000020040; // Helium4 
  mode3[0][1] = -211; // negative pion
  
  bratio3[1] = 50.;
  mode3[1][0] = 1000010030; // tritium
  mode3[1][1] = 2212; // proton
  mode3[1][2] = -211; // negative pion

  TVirtualMC::GetMC()->SetDecayMode(1010010040,bratio3,mode3);


  // Define the 2- and 3-body phase space decay for the Hyper Hydrogen 4
  Int_t amode3[6][3];                  
  Float_t abratio3[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     abratio3[kz] = 0.;
     amode3[kz][0] = 0;
     amode3[kz][1] = 0;
     amode3[kz][2] = 0;
  }
  abratio3[0] = 50.;
  amode3[0][0] = -1000020040; // anti- Helium4 
  amode3[0][1] = 211; // positive pion
  abratio3[1] = 50.;
  amode3[1][0] = -1000010030; // anti-tritium
  amode3[1][1] = -2212; // anti-proton
  amode3[1][2] = 211; // positive pion

  TVirtualMC::GetMC()->SetDecayMode(-1010010040,abratio3,amode3);
  
  
   // Define the 3-body phase space decay for the Hyper Helium 4
  Int_t mode4[6][3];                  
  Float_t bratio4[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     bratio4[kz] = 0.;
     mode4[kz][0] = 0;
     mode4[kz][1] = 0;
     mode4[kz][2] = 0;
  }
  bratio4[0] = 100.;
  mode4[0][0] = 1000020030; // Helium3 
  mode4[0][1] = -211; // negative pion
  mode4[0][2] = 2212; // proton
  
  TVirtualMC::GetMC()->SetDecayMode(1010020040,bratio4,mode4);


  // Define the 2-body phase space decay for the Anti-Hyper Helium 4
  Int_t amode4[6][3];                  
  Float_t abratio4[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     abratio4[kz] = 0.;
     amode4[kz][0] = 0;
     amode4[kz][1] = 0;
     amode4[kz][2] = 0;
  }
  abratio4[0] = 100.;
  amode4[0][0] = -1000020030; // anti-Helium 3
  amode4[0][1] = 211; // positive pion
  amode4[0][2] = -2212; // anti proton

  TVirtualMC::GetMC()->SetDecayMode(-1010020040,abratio4,amode4);

  
  // Define the 2-body phase space decay for the Lambda-neutron boundstate
  Int_t mode1[6][3];                  
  Float_t bratio1[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     bratio1[kz] = 0.;
     mode1[kz][0] = 0;
     mode1[kz][1] = 0;
     mode1[kz][2] = 0;
  }
  bratio1[0] = 100.;
  mode1[0][0] = 1000010020; // deuteron 
  mode1[0][1] = -211; // negative pion

  TVirtualMC::GetMC()->SetDecayMode(1010000020,bratio1,mode1);


  // Define the 2-body phase space decay for the Anti-Lambda-neutron boundstate
  Int_t amode1[6][3];                  
  Float_t abratio1[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     abratio1[kz] = 0.;
     amode1[kz][0] = 0;
     amode1[kz][1] = 0;
     amode1[kz][2] = 0;
  }
  abratio1[0] = 100.;
  amode1[0][0] = -1000010020; // anti-deuteron 
  amode1[0][1] = 211; // positive pion

  TVirtualMC::GetMC()->SetDecayMode(-1010000020,abratio1,amode1);

  // Define the 2-body phase space decay for the H-Dibaryon
  Int_t mode2[6][3];                  
  Float_t bratio2[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     bratio2[kz] = 0.;
     mode2[kz][0] = 0;
     mode2[kz][1] = 0;
     mode2[kz][2] = 0;
  }
  bratio2[0] = 100.;
  mode2[0][0] = 3122; // Lambda 
  mode2[0][1] = 2212; // proton
  mode2[0][2] = -211; // negative pion

  TVirtualMC::GetMC()->SetDecayMode(1020000020,bratio2,mode2);

  // Define the 2-body phase space decay for the Anti-H-Dibaryon
  Int_t amode2[6][3];                  
  Float_t abratio2[6];

  for (Int_t kz = 0; kz < 6; kz++) {
     abratio2[kz] = 0.;
     amode2[kz][0] = 0;
     amode2[kz][1] = 0;
     amode2[kz][2] = 0;
  }
  abratio2[0] = 100.;
  amode2[0][0] = -3122; // anti-deuteron 
  amode2[0][1] = -2212; // anti-proton
  amode2[0][2] = 211; // positive pion

  TVirtualMC::GetMC()->SetDecayMode(-1020000020,abratio2,amode2);

  // Define the 2-body phase space decay for the Xi0P
  Int_t mode5[6][3];
  Float_t bratio5[6];
  
  for (Int_t kz = 0; kz < 6; kz++) {
    bratio5[kz] = 0.;
    mode5[kz][0] = 0;
    mode5[kz][1] = 0;
    mode5[kz][2] = 0;
  }
  bratio5[0] = 100.;
  mode5[0][0] = 3122; // Lambda
  mode5[0][1] = 2212; // proton
  
  TVirtualMC::GetMC()->SetDecayMode(1030000020,bratio5,mode5);
  
  // Define the 2-body phase space decay for the Anti-Xi0P
  Int_t amode5[6][3];
  Float_t abratio5[6];

  for (Int_t kz = 0; kz < 6; kz++) {
    abratio5[kz] = 0.;
    amode5[kz][0] = 0;
    amode5[kz][1] = 0;
    amode5[kz][2] = 0;
  }
  abratio5[0] = 100.;
  amode5[0][0] = -3122; // anti-Lambda
  amode5[0][1] = -2212; // anti-proton
  
  TVirtualMC::GetMC()->SetDecayMode(-1030000020,abratio5,amode5);
  
  // Define the 2-body phase space decay for the Lambda-Neutron-Neutron
  Int_t mode6[6][3];
  Float_t bratio6[6];

  for (Int_t kz = 0; kz < 6; kz++) {
    bratio6[kz] = 0.;
    mode6[kz][0] = 0;
    mode6[kz][1] = 0;
    mode6[kz][2] = 0;
  }
  bratio6[0] = 100.;
  mode6[0][0] = 1000010030; // triton
  mode6[0][1] = -211; // pion
  
  TVirtualMC::GetMC()->SetDecayMode(1010000030,bratio6,mode6);
  
  // Define the 2-body phase space decay for the Anti-Lambda-Neutron-Neutron
  Int_t amode6[6][3];
  Float_t abratio6[6];
  
  for (Int_t kz = 0; kz < 6; kz++) {
    abratio6[kz] = 0.;
    amode6[kz][0] = 0;
    amode6[kz][1] = 0;
    amode6[kz][2] = 0;
  }
  abratio6[0] = 100.;
  amode6[0][0] = -1000010030; // anti-triton
  amode6[0][1] = 211; // pion
  
  TVirtualMC::GetMC()->SetDecayMode(-1010000030,abratio6,amode6);

  ///////////////////////////////////////////////////////////////////
  
  // Define the 2-body phase space decay for the f0(980)
//  Int_t mode[6][3];
//  Float_t bratio[6];

  for (Int_t kz = 0; kz < 6; kz++) {
    bratio[kz] = 0.;
    mode[kz][0] = 0;
    mode[kz][1] = 0;
    mode[kz][2] = 0;
  }
  bratio[0] = 100.;
  mode[0][0] = 211; // pion
  mode[0][1] = -211; // pion
  
  TVirtualMC::GetMC()->SetDecayMode(9010221,bratio,mode);

    // Define the 2-body phase space decay for the f2(1270)
//  Int_t mode[6][3];
//  Float_t bratio[6];

  for (Int_t kz = 0; kz < 6; kz++) {
    bratio[kz] = 0.;
    mode[kz][0] = 0;
    mode[kz][1] = 0;
    mode[kz][2] = 0;
  }
  bratio[0] = 100.;
  mode[0][0] = 211; // pion
  mode[0][1] = -211; // pion
  
  TVirtualMC::GetMC()->SetDecayMode(225,bratio,mode);


  // --------------------------------------------------------------------
}  
  
//_______________________________________________________________________
void  AliMC::InitGeometry()
{ 
  //
  // Initialize detectors
  //

  AliInfo("Initialisation:");
  TStopwatch stw;
  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = dynamic_cast<AliModule*>(next()))) {
    stw.Start();
    detector->Init();
    AliInfo(Form("%10s R:%.2fs C:%.2fs",
		 detector->GetName(),stw.RealTime(),stw.CpuTime()));
  }
}

//_______________________________________________________________________
void AliMC::SetGeometryFromCDB()
{
  // Set the loading of geometry from cdb instead of creating it
  // A default CDB storage needs to be set before this method is called
  if(AliCDBManager::Instance()->IsDefaultStorageSet() &&
     AliCDBManager::Instance()->GetRun() >= 0)
    AliSimulation::Instance()->SetGeometryFile("*OCDB*");
  else
    AliError("Loading of geometry from CDB ignored. First set a default CDB storage!");
}

//_______________________________________________________________________
Bool_t AliMC::IsGeometryFromCDB() const
{
  return (strcmp(AliSimulation::Instance()->GetGeometryFile(),"*OCDB*")==0);
}

//_______________________________________________________________________
void  AliMC::SetAllAlignableVolumes()
{ 
  //
  // Add alignable volumes (TGeoPNEntries) looping on all
  // active modules
  //

  AliInfo(Form("Setting entries for all alignable volumes of active detectors"));
  AliModule *detector;
  TIter next(gAlice->Modules());
  while((detector = dynamic_cast<AliModule*>(next()))) {
    detector->AddAlignableVolumes();
  }
}

//_______________________________________________________________________
void  AliMC::GeneratePrimaries() 
{ 
  //
  // Generate primary particles and fill them in the stack.
  //

  Generator()->Generate();
}

//_______________________________________________________________________
void AliMC::SetGenerator(AliGenerator *generator)
{
  //
  // Load the event generator
  //
  if(!fGenerator) fGenerator = generator;
}

//_______________________________________________________________________
void AliMC::ResetGenerator(AliGenerator *generator)
{
  //
  // Load the event generator
  //
  if(fGenerator) {
    if(generator) {
      AliWarning(Form("Replacing generator %s with %s",
		      fGenerator->GetName(),generator->GetName()));
    }
    else {
      AliWarning(Form("Replacing generator %s with NULL",
		      fGenerator->GetName()));
    }
  }
  fGenerator = generator;
}

//_______________________________________________________________________
void AliMC::FinishRun()
{
  // Clean generator information
  AliDebug(1, "fGenerator->FinishRun()");
  fGenerator->FinishRun();
  
  // Monitoring information
  if (fMonitor) {
    fMonitor->Print();
    fMonitor->Export("timing.root");
  }  

  //Output energy summary tables
  AliDebug(1, "EnergySummary()");
  ToAliDebug(1, EnergySummary());
}

//_______________________________________________________________________
void AliMC::BeginPrimary()
{
  //
  // Called  at the beginning of each primary track
  //
  
  // Reset Hits info
  ResetHits();
  ResetTrackReferences();
}

//_______________________________________________________________________
void AliMC::PreTrack()
{
  // Actions before the track's transport

     //verbose.PreTrack();

     TObjArray &dets = *gAlice->Modules();
     AliModule *module;

     for(Int_t i=0; i<=gAlice->GetNdets(); i++)
       if((module = dynamic_cast<AliModule*>(dets[i])))
	 module->PreTrack();
}

//_______________________________________________________________________
void AliMC::Stepping() 
{
  //
  // Called at every step during transport
  //
  //verbose.Stepping();

  Int_t id = DetFromMate(TVirtualMC::GetMC()->CurrentMedium());
  if (id < 0) return;


  if ( TVirtualMC::GetMC()->IsNewTrack()            && 
       TVirtualMC::GetMC()->TrackTime() == 0.       &&
       fRDecayMin >= 0.             &&  
       fRDecayMax > fRDecayMin      &&
       TVirtualMC::GetMC()->TrackPid() == fDecayPdg ) 
  {
      FixParticleDecaytime();
  } 
    
  // --- If monitoring timing was requested, monitor the step
  if (fUseMonitoring) {
    if (!fMonitor) {
      fMonitor = new AliTransportMonitor(TVirtualMC::GetMC()->NofVolumes()+1);
      fMonitor->Start();
    }  
    if (TVirtualMC::GetMC()->IsNewTrack() || TVirtualMC::GetMC()->TrackTime() == 0. || TVirtualMC::GetMC()->TrackStep()<1.1E-10) {
      fMonitor->DummyStep();
    } else {
    // Normal stepping
      Int_t copy;
      Int_t volId = TVirtualMC::GetMC()->CurrentVolID(copy);
      Int_t pdg = TVirtualMC::GetMC()->TrackPid();
      TLorentzVector xyz, pxpypz;
      TVirtualMC::GetMC()->TrackPosition(xyz);
      TVirtualMC::GetMC()->TrackMomentum(pxpypz);
      fMonitor->StepInfo(volId, pdg, pxpypz.E(), xyz.X(), xyz.Y(), xyz.Z());
    }  
  }
  //
  // --- If lego option, do it and leave 
  if (AliSimulation::Instance()->Lego())
    AliSimulation::Instance()->Lego()->StepManager();
  else {
    Int_t copy;
    //Update energy deposition tables
    AddEnergyDeposit(TVirtualMC::GetMC()->CurrentVolID(copy),TVirtualMC::GetMC()->Edep());
    //
    // write tracke reference for track which is dissapearing - MI

    if (TVirtualMC::GetMC()->IsTrackDisappeared() && !(TVirtualMC::GetMC()->IsTrackAlive())) {      
	if (TVirtualMC::GetMC()->Etot() > 0.05) AddTrackReference(GetCurrentTrackNumber(), 
						AliTrackReference::kDisappeared);
	

    }

    //Call the appropriate stepping routine;
    AliModule *det = dynamic_cast<AliModule*>(gAlice->Modules()->At(id));
    if(det && det->StepManagerIsEnabled()) {
      det->StepManager();
    }
  }
}

//_______________________________________________________________________
void AliMC::EnergySummary()
{
  //e
  // Print summary of deposited energy
  //

  Int_t ndep=0;
  Float_t edtot=0;
  Float_t ed, ed2;
  Int_t kn, i, left, j, id;
  const Float_t kzero=0;
  Int_t ievent=AliRunLoader::Instance()->GetHeader()->GetEvent()+1;
  //
  // Energy loss information
  if(ievent) {
    printf("***************** Energy Loss Information per event (GEV) *****************\n");
    for(kn=1;kn<fEventEnergy.GetSize();kn++) {
      ed=fSummEnergy[kn];
      if(ed>0) {
	fEventEnergy[ndep]=kn;
	if(ievent>1) {
	  ed=ed/ievent;
	  ed2=fSum2Energy[kn];
	  ed2=ed2/ievent;
	  ed2=100*TMath::Sqrt(TMath::Max(ed2-ed*ed,kzero))/ed;
	} else 
	  ed2=99;
	fSummEnergy[ndep]=ed;
	fSum2Energy[ndep]=TMath::Min(static_cast<Float_t>(99.),TMath::Max(ed2,kzero));
	edtot+=ed;
	ndep++;
      }
    }
    for(kn=0;kn<(ndep-1)/3+1;kn++) {
      left=ndep-kn*3;
      for(i=0;i<(3<left?3:left);i++) {
	j=kn*3+i;
        id=Int_t (fEventEnergy[j]+0.1);
	printf(" %s %10.3f +- %10.3f%%;",TVirtualMC::GetMC()->VolName(id),fSummEnergy[j],fSum2Energy[j]);
      }
      printf("\n");
    }
    //
    // Relative energy loss in different detectors
    printf("******************** Relative Energy Loss per event ********************\n");
    printf("Total energy loss per event %10.3f GeV\n",edtot);
    for(kn=0;kn<(ndep-1)/5+1;kn++) {
      left=ndep-kn*5;
      for(i=0;i<(5<left?5:left);i++) {
	j=kn*5+i;
        id=Int_t (fEventEnergy[j]+0.1);
	printf(" %s %10.3f%%;",TVirtualMC::GetMC()->VolName(id),100*fSummEnergy[j]/edtot);
      }
      printf("\n");
    }
    for(kn=0;kn<75;kn++) printf("*"); 
    printf("\n");
  }
  //
  // Reset the TArray's
  //  fEventEnergy.Set(0);
  //  fSummEnergy.Set(0);
  //  fSum2Energy.Set(0);
}
#include <TFile.h>
//_____________________________________________________________________________
void AliMC::BeginEvent()
{
  //
  // Clean-up previous event
  // Energy scores
  AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
  AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
  AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
  AliDebug(1, "          BEGINNING EVENT               ");
  AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
  AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
  AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

  AliRunLoader *runloader=AliRunLoader::Instance();

  /*******************************/    
  /*   Clean after eventual      */
  /*   previous event            */
  /*******************************/    

  
  //Set the next event in Run Loader -> Cleans trees (TreeK and all trees in detectors),
  gAlice->SetEventNrInRun(gAlice->GetEventNrInRun()+1);
  runloader->SetEventNumber(gAlice->GetEventNrInRun());// sets new files, cleans the previous event stuff, if necessary, etc.,  
  AliDebug(1, Form("EventNr is %d",gAlice->GetEventNrInRun()));
     
  fEventEnergy.Reset();  
    // Clean detector information
  
  if (runloader->Stack())
      runloader->Stack()->Reset();//clean stack -> tree is unloaded
  else
      runloader->MakeStack();//or make a new one
  
  // Random engine status
  //
  
  if ( fSaveRndmStatus || fSaveRndmEventStatus) {
    TString fileName="random";
    if ( fSaveRndmEventStatus ) {
      fileName += "Evt";
      fileName += gAlice->GetEventNrInRun();
    }
    fileName += ".root";
       
    // write ROOT random engine status
    cout << "Saving random engine status in " << fileName.Data() << endl;
    TFile f(fileName.Data(),"RECREATE");
    gRandom->Write(fileName.Data());
  }     

  if ( fReadRndmStatus ) {
    //read ROOT random engine status
    cout << "Reading random engine status from " << fRndmFileName.Data() << endl;
    TFile f(fRndmFileName.Data());
    gRandom->Read(fRndmFileName.Data());    
  }       

  if(AliSimulation::Instance()->Lego() == 0x0)
  { 
      AliDebug(1, "fRunLoader->MakeTree(K)");
      runloader->MakeTree("K");
  }
  
  AliDebug(1, "TVirtualMC::GetMC()->SetStack(fRunLoader->Stack())");
  TVirtualMC::GetMC()->SetStack(runloader->Stack());//Was in InitMC - but was moved here 
                                     //because we don't have guarantee that 
                                     //stack pointer is not going to change from event to event
	                 //since it bellobgs to header and is obtained via RunLoader
  //
  //  Reset all Detectors & kinematics & make/reset trees
  //
    
  runloader->GetHeader()->Reset(AliCDBManager::Instance()->GetRun(),gAlice->GetEvNumber(),
				gAlice->GetEventNrInRun());
//  fRunLoader->WriteKinematics("OVERWRITE");  is there any reason to rewrite here since MakeTree does so

  if(AliSimulation::Instance()->Lego()) 
  {
      AliSimulation::Instance()->Lego()->BeginEvent();
      return;
  }
  

  AliDebug(1, "ResetHits()");
  ResetHits();
  
  AliDebug(1, "fRunLoader->MakeTree(H)");
  runloader->MakeTree("H");
  


  MakeTmpTrackRefsTree();
  //create new branches and SetAdresses
  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = (AliModule*)next()))
   {
       AliDebug(2, Form("%s->MakeBranch(H)",detector->GetName()));
       detector->MakeBranch("H"); 
   }
}

//_______________________________________________________________________
void AliMC::ResetHits()
{
  //
  //  Reset all Detectors hits
  //
  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = dynamic_cast<AliModule*>(next()))) {
     detector->ResetHits();
  }
}

//_______________________________________________________________________
void AliMC::ResetDigits()
{
  //
  //  Reset all Detectors digits
  //
  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = dynamic_cast<AliModule*>(next()))) {
     detector->ResetDigits();
  }
}

//_______________________________________________________________________
void AliMC::ResetSDigits()
{
  //
  //  Reset all Detectors digits
  //
  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = dynamic_cast<AliModule*>(next()))) {
     detector->ResetSDigits();
  }
}

//_______________________________________________________________________
void AliMC::PostTrack()
{
  // Posts tracks for each module

  TObjArray &dets = *gAlice->Modules();
  AliModule *module;
  
  for(Int_t i=0; i<=gAlice->GetNdets(); i++)
    if((module = dynamic_cast<AliModule*>(dets[i])))
      module->PostTrack();
}

//_______________________________________________________________________
void AliMC::FinishPrimary()
{
  //
  // Called  at the end of each primary track
  //

  AliRunLoader *runloader=AliRunLoader::Instance();
  //  static Int_t count=0;
  //  const Int_t times=10;
  // This primary is finished, purify stack
#if ROOT_VERSION_CODE > 262152
  if (!(TVirtualMC::GetMC()->SecondariesAreOrdered())) {
      if (runloader->Stack()->ReorderKine()) RemapHits();
  }
#endif
  if (runloader->Stack()->PurifyKine()) RemapHits();
  
  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = dynamic_cast<AliModule*>(next()))) {
    detector->FinishPrimary();
    AliLoader* loader = detector->GetLoader();
    if(loader)
     {
       TTree* treeH = loader->TreeH();
       if (treeH) treeH->Fill(); //can be Lego run and treeH can not exist
     }
  }

  // Write out track references if any
  if (fTmpTreeTR) fTmpTreeTR->Fill();
}

void AliMC::RemapHits()
{
//    
// Remaps the track labels of the hits
    AliRunLoader *runloader=AliRunLoader::Instance();
    AliStack* stack = runloader->Stack();
    TList* hitLists = GetHitLists();
    TIter next(hitLists);
    TCollection *hitList;
    
    while((hitList = dynamic_cast<TCollection*>(next()))) {
	TIter nexthit(hitList);
	AliHit *hit;
	while((hit = dynamic_cast<AliHit*>(nexthit()))) {
	    hit->SetTrack(stack->TrackLabel(hit->GetTrack()));
	}
    }
    
    // 
    // This for detectors which have a special mapping mechanism
    // for hits, such as TPC and TRD
    //

    
    TObjArray* modules = gAlice->Modules();
    TIter nextmod(modules);
    AliModule *module;
    while((module = (AliModule*) nextmod())) {
	AliDetector* det = dynamic_cast<AliDetector*> (module);
	if (det) det->RemapTrackHitIDs(stack->TrackLabelMap());
    }
    //
    RemapTrackReferencesIDs(stack->TrackLabelMap());
}

//_______________________________________________________________________
void AliMC::FinishEvent()
{
  //
  // Called at the end of the event.
  //
    
  if(AliSimulation::Instance()->Lego()) AliSimulation::Instance()->Lego()->FinishEvent();

  TIter next(gAlice->Modules());
  AliModule *detector;
  while((detector = dynamic_cast<AliModule*>(next()))) {
    detector->FinishEvent();
  }

  //Update the energy deposit tables
  Int_t i;
  for(i=0;i<fEventEnergy.GetSize();i++) 
   {
    fSummEnergy[i]+=fEventEnergy[i];
    fSum2Energy[i]+=fEventEnergy[i]*fEventEnergy[i];
   }

  AliRunLoader *runloader=AliRunLoader::Instance();

  AliHeader* header = runloader->GetHeader();
  AliStack* stack = runloader->Stack();
  if ( (header == 0x0) || (stack == 0x0) )
   {//check if we got header and stack. If not cry and exit aliroot
    AliFatal("Can not get the stack or header from LOADER");
    return;//never reached
   }  
  // Update Header information 
  header->SetNprimary(stack->GetNprimary());
  header->SetNtrack(stack->GetNtrack());  
  header->SetTimeStamp(AliSimulation::Instance()->GenerateTimeStamp());

  // Write out the kinematics
  if (!AliSimulation::Instance()->Lego()) stack->FinishEvent();

  // Synchronize the TreeTR with TreeK
  if (fTmpTreeTR) ReorderAndExpandTreeTR();
   
  // Write out the event Header information
  TTree* treeE = runloader->TreeE();
  if (treeE) 
   {
      header->SetStack(stack);
      treeE->Fill();
   }
  else
   {
    AliError("Can not get TreeE from RL");
   }
  
  if(AliSimulation::Instance()->Lego() == 0x0)
   {
     runloader->WriteKinematics("OVERWRITE");
     runloader->WriteTrackRefs("OVERWRITE");
     runloader->WriteHits("OVERWRITE");
   }
   
  AliDebug(1, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  AliDebug(1, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  AliDebug(1, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  AliDebug(1, "          FINISHING EVENT               ");
  AliDebug(1, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  AliDebug(1, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  AliDebug(1, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
}

//_______________________________________________________________________
void AliMC::Init()
{
  // MC initialization


   //=================Create Materials and geometry
   TVirtualMC::GetMC()->Init();
  // Set alignable volumes for the whole geometry (with old root)
#if ROOT_VERSION_CODE < 331527
  SetAllAlignableVolumes();
#endif
   //Read the cuts for all materials
   ReadTransPar();
   //Build the special IMEDIA table
   MediaTable();

   //Compute cross-sections
   TVirtualMC::GetMC()->BuildPhysics();
   
   //Initialise geometry deposition table
   fEventEnergy.Set(TVirtualMC::GetMC()->NofVolumes()+1);
   fSummEnergy.Set(TVirtualMC::GetMC()->NofVolumes()+1);
   fSum2Energy.Set(TVirtualMC::GetMC()->NofVolumes()+1);

   // Register MC in configuration 
   AliConfig::Instance()->Add(TVirtualMC::GetMC());
}

//_______________________________________________________________________
void AliMC::MediaTable()
{
  //
  // Built media table to get from the media number to
  // the detector id
  //

  Int_t kz, nz, idt, lz, i, k, ind;
  //  Int_t ibeg;
  TObjArray &dets = *gAlice->Detectors();
  AliModule *det;
  Int_t ndets=gAlice->GetNdets();
  //
  // For all detectors
  for (kz=0;kz<ndets;kz++) {
    // If detector is defined
    if((det=dynamic_cast<AliModule*>(dets[kz]))) {
        TArrayI &idtmed = *(det->GetIdtmed()); 
        for(nz=0;nz<100;nz++) {
	    
	// Find max and min material number
	if((idt=idtmed[nz])) {
	  det->LoMedium() = det->LoMedium() < idt ? det->LoMedium() : idt;
	  det->HiMedium() = det->HiMedium() > idt ? det->HiMedium() : idt;
	}
      }
      if(det->LoMedium() > det->HiMedium()) {
	det->LoMedium() = 0;
	det->HiMedium() = 0;
      } else {
	if(det->HiMedium() > fImedia->GetSize()) {
	  AliError(Form("Increase fImedia from %d to %d",
			fImedia->GetSize(),det->HiMedium()));
	  return;
	}
	// Tag all materials in rage as belonging to detector kz
	for(lz=det->LoMedium(); lz<= det->HiMedium(); lz++) {
	  (*fImedia)[lz]=kz;
	}
      }
    }
  }
  //
  // Print summary table
  AliInfo("Tracking media ranges:");
  ToAliInfo(
  for(i=0;i<(ndets-1)/6+1;i++) {
    for(k=0;k< (6<ndets-i*6?6:ndets-i*6);k++) {
      ind=i*6+k;
      det=dynamic_cast<AliModule*>(dets[ind]);
      if(det)
	printf(" %6s: %3d -> %3d;",det->GetName(),det->LoMedium(),
	       det->HiMedium());
      else
	printf(" %6s: %3d -> %3d;","NULL",0,0);
    }
    printf("\n");
  }
	    );
}

//_______________________________________________________________________
void AliMC::ReadTransPar()
{
  //
  // Read filename to set the transport parameters
  //


  const Int_t kncuts=10;
  const Int_t knflags=12;
  const Int_t knpars=kncuts+knflags;
  const char kpars[knpars][7] = {"CUTGAM" ,"CUTELE","CUTNEU","CUTHAD","CUTMUO",
			       "BCUTE","BCUTM","DCUTE","DCUTM","PPCUTM","ANNI",
			       "BREM","COMP","DCAY","DRAY","HADR","LOSS",
			       "MULS","PAIR","PHOT","RAYL","STRA"};
  char line[256];
  char detName[7];
  char* filtmp;
  Float_t cut[kncuts];
  Int_t flag[knflags];
  Int_t i, itmed, iret, jret, ktmed, kz;
  FILE *lun;
  //
  // See whether the file is there
  filtmp=gSystem->ExpandPathName(fTransParName.Data());
  lun=fopen(filtmp,"r");
  delete [] filtmp;
  if(!lun) {
    AliWarning(Form("File %s does not exist!",fTransParName.Data()));
    return;
  }
  //
  while(1) {
    // Initialise cuts and flags
    for(i=0;i<kncuts;i++) cut[i]=-99;
    for(i=0;i<knflags;i++) flag[i]=-99;
    itmed=0;
    memset(line,0,256);
    // Read up to the end of line excluded
    iret=fscanf(lun,"%255[^\n]",line);
    if(iret<0) {
      //End of file
      fclose(lun);
      return;
    }
    // Read the end of line
    jret = fscanf(lun,"%*c");
    if(!iret) continue;
    if(line[0]=='*') continue;
    // Read the numbers
    iret=sscanf(line,"%6s %d %f %f %f %f %f %f %f %f %f %f %d %d %d %d %d %d %d %d %d %d %d %d",
		detName,&itmed,&cut[0],&cut[1],&cut[2],&cut[3],&cut[4],&cut[5],&cut[6],&cut[7],&cut[8],
		&cut[9],&flag[0],&flag[1],&flag[2],&flag[3],&flag[4],&flag[5],&flag[6],&flag[7],
		&flag[8],&flag[9],&flag[10],&flag[11]);
    if(!iret) continue;
    if(iret<0) {
      //reading error
      AliWarning(Form("Error reading file %s",fTransParName.Data()));
      continue;
    }
    // Check that the module exist
    AliModule *mod = gAlice->GetModule(detName);
    if(mod) {
      // Get the array of media numbers
      TArrayI &idtmed = *mod->GetIdtmed();
      // Check that the tracking medium code is valid
      if(0<=itmed && itmed < 100) {
	ktmed=idtmed[itmed];
	if(!ktmed) {
	  AliWarning(Form("Invalid tracking medium code %d for %s",itmed,mod->GetName()));
	  continue;
	}
	// Set energy thresholds
	for(kz=0;kz<kncuts;kz++) {
	  if(cut[kz]>=0) {
	    AliDebug(2, Form("%-6s set to %10.3E for tracking medium code %4d for %s",
			     kpars[kz],cut[kz],itmed,mod->GetName()));
	    TVirtualMC::GetMC()->Gstpar(ktmed,kpars[kz],cut[kz]);
	  }
	}
	// Set transport mechanisms
	for(kz=0;kz<knflags;kz++) {
	  if(flag[kz]>=0) {
	    AliDebug(2, Form("%-6s set to %10d for tracking medium code %4d for %s",
			     kpars[kncuts+kz],flag[kz],itmed,mod->GetName()));
	    TVirtualMC::GetMC()->Gstpar(ktmed,kpars[kncuts+kz],Float_t(flag[kz]));
	  }
	}
      } else {
	AliWarning(Form("Invalid medium code %d",itmed));
	continue;
      }
    } else {
      AliDebug(1, Form("%s not present",detName));
      continue;
    }
  }
}

//_______________________________________________________________________
void AliMC::SetTransPar(const char *filename)
{
  //
  // Sets the file name for transport parameters
  //
  fTransParName = filename;
}

//_______________________________________________________________________
void AliMC::AddHit(Int_t id, Int_t track, Int_t *vol, Float_t *hits) const
{
  //
  //  Add a hit to detector id
  //
  TObjArray &dets = *gAlice->Modules();
  if(dets[id]) static_cast<AliModule*>(dets[id])->AddHit(track,vol,hits);
}

//_______________________________________________________________________
void AliMC::AddDigit(Int_t id, Int_t *tracks, Int_t *digits) const
{
  //
  // Add digit to detector id
  //
  TObjArray &dets = *gAlice->Modules();
  if(dets[id]) static_cast<AliModule*>(dets[id])->AddDigit(tracks,digits);
}

//_______________________________________________________________________
Int_t AliMC::GetCurrentTrackNumber() const {
  //
  // Returns current track
  //
  return AliRunLoader::Instance()->Stack()->GetCurrentTrackNumber();
}

//_______________________________________________________________________
void AliMC::DumpPart (Int_t i) const
{
  //
  // Dumps particle i in the stack
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
   if (runloader->Stack())
    runloader->Stack()->DumpPart(i);
}

//_______________________________________________________________________
void AliMC::DumpPStack () const
{
  //
  // Dumps the particle stack
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
   if (runloader->Stack())
    runloader->Stack()->DumpPStack();
}

//_______________________________________________________________________
Int_t AliMC::GetNtrack() const {
  //
  // Returns number of tracks in stack
  //
  Int_t ntracks = -1;
  AliRunLoader * runloader = AliRunLoader::Instance();
   if (runloader->Stack())
     ntracks = runloader->Stack()->GetNtrack();
   return ntracks;
}

//_______________________________________________________________________
Int_t AliMC::GetPrimary(Int_t track) const
{
  //
  // return number of primary that has generated track
  //
  Int_t nprimary = -999;
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader->Stack())
    nprimary = runloader->Stack()->GetPrimary(track);
  return nprimary;
}
 
//_______________________________________________________________________
TParticle* AliMC::Particle(Int_t i) const
{
  // Returns the i-th particle from the stack taking into account
  // the remaping done by PurifyKine
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
   if (runloader->Stack())
    return runloader->Stack()->Particle(i);
  return 0x0;   
}

//_______________________________________________________________________
const TObjArray* AliMC::Particles() const {
  //
  // Returns pointer to Particles array
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
   if (runloader->Stack())
    return runloader->Stack()->Particles();
  return 0x0;
}

//_______________________________________________________________________
void AliMC::PushTrack(Int_t done, Int_t parent, Int_t pdg, const Float_t *pmom,
                      const Float_t *vpos, const Float_t *polar, Float_t tof,
                      TMCProcess mech, Int_t &ntr, Float_t weight, Int_t is) const
{ 
// Delegate to stack
//
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
    if (runloader->Stack())
      runloader->Stack()->PushTrack(done, parent, pdg, pmom, vpos, polar, tof,
				    mech, ntr, weight, is);
}

//_______________________________________________________________________
void AliMC::PushTrack(Int_t done, Int_t parent, Int_t pdg,
  	              Double_t px, Double_t py, Double_t pz, Double_t e,
  		      Double_t vx, Double_t vy, Double_t vz, Double_t tof,
		      Double_t polx, Double_t poly, Double_t polz,
		      TMCProcess mech, Int_t &ntr, Float_t weight, Int_t is) const
{ 
  // Delegate to stack
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
    if (runloader->Stack())
      runloader->Stack()->PushTrack(done, parent, pdg, px, py, pz, e, vx, vy, vz, tof,
				    polx, poly, polz, mech, ntr, weight, is);
}

//_______________________________________________________________________
void AliMC::SetHighWaterMark(Int_t nt) const
{
    //
    // Set high water mark for last track in event
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
    if (runloader->Stack())
      runloader->Stack()->SetHighWaterMark(nt);
}

//_______________________________________________________________________
void AliMC::KeepTrack(Int_t track) const
{ 
  //
  // Delegate to stack
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
    if (runloader->Stack())
      runloader->Stack()->KeepTrack(track);
}
 
//_______________________________________________________________________
void AliMC::FlagTrack(Int_t track) const
{
  // Delegate to stack
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
    if (runloader->Stack())
      runloader->Stack()->FlagTrack(track);
}

//_______________________________________________________________________
void AliMC::SetCurrentTrack(Int_t track) const
{ 
  //
  // Set current track number
  //
  AliRunLoader * runloader = AliRunLoader::Instance();
  if (runloader)
    if (runloader->Stack())
      runloader->Stack()->SetCurrentTrack(track); 
}

//_______________________________________________________________________
AliTrackReference*  AliMC::AddTrackReference(Int_t label, Int_t id) 
{
  //
  // add a trackrefernce to the list
  Int_t primary = GetPrimary(label);
  Particle(primary)->SetBit(kKeepBit);

  Int_t nref = fTmpTrackReferences.GetEntriesFast();
  return new(fTmpTrackReferences[nref]) AliTrackReference(label, id);
}



//_______________________________________________________________________
void AliMC::ResetTrackReferences()
{
  //
  //  Reset all  references
  //
    fTmpTrackReferences.Clear();
}

//_______________________________________________________________________
void AliMC::RemapTrackReferencesIDs(const Int_t *map)
{
  // 
  // Remapping track reference
  // Called at finish primary
  //
    
  Int_t nEntries = fTmpTrackReferences.GetEntries();
  for (Int_t i=0; i < nEntries; i++){
      AliTrackReference * ref = dynamic_cast<AliTrackReference*>(fTmpTrackReferences.UncheckedAt(i));
      if (ref) {
	  Int_t newID = map[ref->GetTrack()];
	  if (newID>=0) ref->SetTrack(newID);
	  else {
	      ref->SetBit(kNotDeleted,kFALSE);
	      fTmpTrackReferences.RemoveAt(i);  
	  }      
      } // if ref
  }
  fTmpTrackReferences.Compress();
}

//_______________________________________________________________________
void AliMC::FixParticleDecaytime()
{
    //
    // Fix the particle decay time according to rmin and rmax for decays
    //

    TLorentzVector p;
    TVirtualMC::GetMC()->TrackMomentum(p);
    Double_t tmin, tmax;
    Double_t b;

    // Transverse velocity 
    Double_t vt    = p.Pt() / p.E();
    
    if ((b = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->SolenoidField()) > 0.) {     // [kG]

	// Radius of helix
	
	Double_t rho   = p.Pt() / 0.0003 / b; // [cm]
	
	// Revolution frequency
	
	Double_t omega = vt / rho;
	
	// Maximum and minimum decay time
	//
	// Check for curlers first
	const Double_t kOvRhoSqr2 = 1./(rho*TMath::Sqrt(2.));
	if (fRDecayMax * kOvRhoSqr2 > 1.) return;
	
	//
 
	tmax  = TMath::ACos((1.-fRDecayMax*kOvRhoSqr2)*(1.+fRDecayMax*kOvRhoSqr2)) / omega;   // [ct]
	tmin  = TMath::ACos((1.-fRDecayMin*kOvRhoSqr2)*(1.+fRDecayMin*kOvRhoSqr2)) / omega;   // [ct]
    } else {
	tmax =  fRDecayMax / vt;                                                      // [ct] 
	tmin =  fRDecayMin / vt;	                                              // [ct]
    }
    
    //
    // Dial t using the two limits
    Double_t t = tmin + (tmax - tmin) * gRandom->Rndm();                              // [ct]
    //
    //
    // Force decay time in transport code
    //
    TVirtualMC::GetMC()->ForceDecayTime(t / 2.99792458e10);
}

void AliMC::MakeTmpTrackRefsTree()
{
    // Make the temporary track reference tree
    fTmpFileTR = new TFile("TrackRefsTmp.root", "recreate");
    fTmpTreeTR = new TTree("TreeTR", "Track References");
    TClonesArray* pRef = &fTmpTrackReferences;
    fTmpTreeTR->Branch("TrackReferences", &pRef, 4000);
}

//_______________________________________________________________________
void AliMC::ReorderAndExpandTreeTR()
{
//
//  Reorder and expand the temporary track reference tree in order to match the kinematics tree
//

    AliRunLoader *rl = AliRunLoader::Instance();
//
//  TreeTR
    AliDebug(1, "fRunLoader->MakeTrackRefsContainer()");
    rl->MakeTrackRefsContainer(); 
    TTree * treeTR = rl->TreeTR();
	// make branch for central track references
	TClonesArray* pRef = &fTrackReferences;
	treeTR->Branch("TrackReferences", &pRef);

    AliStack* stack  = rl->Stack();
    Int_t np = stack->GetNprimary();
    Int_t nt = fTmpTreeTR->GetEntries();
    //
    // Loop over tracks and find the secondaries with the help of the kine tree
    Int_t ifills = 0;
    Int_t it = 0;
    for (Int_t ip = np - 1; ip > -1; ip--) {
	TParticle *part = stack->Particle(ip);
	//printf("Particle %5d %5d %5d %5d %5d \n", ip, part->GetPdgCode(), part->GetFirstMother(), part->GetFirstDaughter(), part->GetLastDaughter());
	
	// Skip primaries that have not been transported
	Int_t dau1  = part->GetFirstDaughter();
	Int_t dau2  = -1;
	if (!part->TestBit(kTransportBit)) continue;
	//
	fTmpTreeTR->GetEntry(it++);
	Int_t nh = fTmpTrackReferences.GetEntries();
	// Determine range of secondaries produced by this primary
	if (dau1 > -1) {
	    Int_t inext = ip - 1;
	    while (dau2 < 0) {
		if (inext >= 0) {
		    part = stack->Particle(inext);
		    dau2 =  part->GetFirstDaughter();
		    if (!(part->TestBit(kTransportBit)) || dau2 == -1 || dau2 < np) {
//		    if (dau2 == -1 || dau2 < np) {
			dau2 = -1;
		    } else {
			dau2--;
		    }
		} else {
		    dau2 = stack->GetNtrack() - 1;
		}
		inext--;
	    } // find upper bound
	}  // dau2 < 0
//	printf("Check (1) %5d %5d %5d %5d %5d \n", ip, np, it, dau1, dau2);
	// 
	// Loop over reference hits and find secondary label
	for (Int_t id = dau1; (id <= dau2) && (dau1 > -1); id++) {
	    for (Int_t ih = 0; ih < nh; ih++) {
		AliTrackReference* tr = (AliTrackReference*) fTmpTrackReferences.At(ih);
		Int_t label = tr->Label();
		// Skip primaries
		if (label == ip) continue;
		if (label > dau2 || label < dau1) 
		    AliWarning(Form("Track Reference Label out of range !: %5d %5d %5d \n", label, dau1, dau2));
		if (label == id) {
		    // secondary found
		    Int_t nref =  fTrackReferences.GetEntriesFast();
		    new(fTrackReferences[nref]) AliTrackReference(*tr);
		}
	    } // hits
	    treeTR->Fill();
	    fTrackReferences.Clear();
	    ifills++;
	} // daughters
    } // tracks
    //
    // Now loop again and write the primaries
    it = nt - 1;
    for (Int_t ip = 0; ip < np; ip++) {
	TParticle* part = stack->Particle(ip);
//	if ((part->GetFirstDaughter() == -1 && part->GetStatusCode() <= 1) || part->GetFirstDaughter() >= np) 
	if (part->TestBit(kTransportBit))
	{
	    // Skip particles that have not been transported
	    fTmpTreeTR->GetEntry(it--);
	    Int_t nh = fTmpTrackReferences.GetEntries();
	    // 
	    // Loop over reference hits and find primary labels
	    for (Int_t ih = 0; ih < nh; ih++) {
		AliTrackReference* tr = (AliTrackReference*)  fTmpTrackReferences.At(ih);
		Int_t label = tr->Label();
		if (label == ip) {
		    Int_t nref = fTrackReferences.GetEntriesFast();
		    new(fTrackReferences[nref]) AliTrackReference(*tr);
		}
	    } 
	}
	treeTR->Fill();
	fTrackReferences.Clear();
	ifills++;
    } // tracks
    // Check
    if (ifills != stack->GetNtrack()) 
	AliWarning(Form("Number of entries in TreeTR (%5d) unequal to TreeK (%5d) \n", ifills, stack->GetNtrack()));
//
//  Clean-up
    delete fTmpTreeTR;
    fTmpFileTR->Close();
    delete fTmpFileTR;
    fTmpTrackReferences.Clear();
    gSystem->Exec("rm -rf TrackRefsTmp.root");
}

 AliMC.cxx:1
 AliMC.cxx:2
 AliMC.cxx:3
 AliMC.cxx:4
 AliMC.cxx:5
 AliMC.cxx:6
 AliMC.cxx:7
 AliMC.cxx:8
 AliMC.cxx:9
 AliMC.cxx:10
 AliMC.cxx:11
 AliMC.cxx:12
 AliMC.cxx:13
 AliMC.cxx:14
 AliMC.cxx:15
 AliMC.cxx:16
 AliMC.cxx:17
 AliMC.cxx:18
 AliMC.cxx:19
 AliMC.cxx:20
 AliMC.cxx:21
 AliMC.cxx:22
 AliMC.cxx:23
 AliMC.cxx:24
 AliMC.cxx:25
 AliMC.cxx:26
 AliMC.cxx:27
 AliMC.cxx:28
 AliMC.cxx:29
 AliMC.cxx:30
 AliMC.cxx:31
 AliMC.cxx:32
 AliMC.cxx:33
 AliMC.cxx:34
 AliMC.cxx:35
 AliMC.cxx:36
 AliMC.cxx:37
 AliMC.cxx:38
 AliMC.cxx:39
 AliMC.cxx:40
 AliMC.cxx:41
 AliMC.cxx:42
 AliMC.cxx:43
 AliMC.cxx:44
 AliMC.cxx:45
 AliMC.cxx:46
 AliMC.cxx:47
 AliMC.cxx:48
 AliMC.cxx:49
 AliMC.cxx:50
 AliMC.cxx:51
 AliMC.cxx:52
 AliMC.cxx:53
 AliMC.cxx:54
 AliMC.cxx:55
 AliMC.cxx:56
 AliMC.cxx:57
 AliMC.cxx:58
 AliMC.cxx:59
 AliMC.cxx:60
 AliMC.cxx:61
 AliMC.cxx:62
 AliMC.cxx:63
 AliMC.cxx:64
 AliMC.cxx:65
 AliMC.cxx:66
 AliMC.cxx:67
 AliMC.cxx:68
 AliMC.cxx:69
 AliMC.cxx:70
 AliMC.cxx:71
 AliMC.cxx:72
 AliMC.cxx:73
 AliMC.cxx:74
 AliMC.cxx:75
 AliMC.cxx:76
 AliMC.cxx:77
 AliMC.cxx:78
 AliMC.cxx:79
 AliMC.cxx:80
 AliMC.cxx:81
 AliMC.cxx:82
 AliMC.cxx:83
 AliMC.cxx:84
 AliMC.cxx:85
 AliMC.cxx:86
 AliMC.cxx:87
 AliMC.cxx:88
 AliMC.cxx:89
 AliMC.cxx:90
 AliMC.cxx:91
 AliMC.cxx:92
 AliMC.cxx:93
 AliMC.cxx:94
 AliMC.cxx:95
 AliMC.cxx:96
 AliMC.cxx:97
 AliMC.cxx:98
 AliMC.cxx:99
 AliMC.cxx:100
 AliMC.cxx:101
 AliMC.cxx:102
 AliMC.cxx:103
 AliMC.cxx:104
 AliMC.cxx:105
 AliMC.cxx:106
 AliMC.cxx:107
 AliMC.cxx:108
 AliMC.cxx:109
 AliMC.cxx:110
 AliMC.cxx:111
 AliMC.cxx:112
 AliMC.cxx:113
 AliMC.cxx:114
 AliMC.cxx:115
 AliMC.cxx:116
 AliMC.cxx:117
 AliMC.cxx:118
 AliMC.cxx:119
 AliMC.cxx:120
 AliMC.cxx:121
 AliMC.cxx:122
 AliMC.cxx:123
 AliMC.cxx:124
 AliMC.cxx:125
 AliMC.cxx:126
 AliMC.cxx:127
 AliMC.cxx:128
 AliMC.cxx:129
 AliMC.cxx:130
 AliMC.cxx:131
 AliMC.cxx:132
 AliMC.cxx:133
 AliMC.cxx:134
 AliMC.cxx:135
 AliMC.cxx:136
 AliMC.cxx:137
 AliMC.cxx:138
 AliMC.cxx:139
 AliMC.cxx:140
 AliMC.cxx:141
 AliMC.cxx:142
 AliMC.cxx:143
 AliMC.cxx:144
 AliMC.cxx:145
 AliMC.cxx:146
 AliMC.cxx:147
 AliMC.cxx:148
 AliMC.cxx:149
 AliMC.cxx:150
 AliMC.cxx:151
 AliMC.cxx:152
 AliMC.cxx:153
 AliMC.cxx:154
 AliMC.cxx:155
 AliMC.cxx:156
 AliMC.cxx:157
 AliMC.cxx:158
 AliMC.cxx:159
 AliMC.cxx:160
 AliMC.cxx:161
 AliMC.cxx:162
 AliMC.cxx:163
 AliMC.cxx:164
 AliMC.cxx:165
 AliMC.cxx:166
 AliMC.cxx:167
 AliMC.cxx:168
 AliMC.cxx:169
 AliMC.cxx:170
 AliMC.cxx:171
 AliMC.cxx:172
 AliMC.cxx:173
 AliMC.cxx:174
 AliMC.cxx:175
 AliMC.cxx:176
 AliMC.cxx:177
 AliMC.cxx:178
 AliMC.cxx:179
 AliMC.cxx:180
 AliMC.cxx:181
 AliMC.cxx:182
 AliMC.cxx:183
 AliMC.cxx:184
 AliMC.cxx:185
 AliMC.cxx:186
 AliMC.cxx:187
 AliMC.cxx:188
 AliMC.cxx:189
 AliMC.cxx:190
 AliMC.cxx:191
 AliMC.cxx:192
 AliMC.cxx:193
 AliMC.cxx:194
 AliMC.cxx:195
 AliMC.cxx:196
 AliMC.cxx:197
 AliMC.cxx:198
 AliMC.cxx:199
 AliMC.cxx:200
 AliMC.cxx:201
 AliMC.cxx:202
 AliMC.cxx:203
 AliMC.cxx:204
 AliMC.cxx:205
 AliMC.cxx:206
 AliMC.cxx:207
 AliMC.cxx:208
 AliMC.cxx:209
 AliMC.cxx:210
 AliMC.cxx:211
 AliMC.cxx:212
 AliMC.cxx:213
 AliMC.cxx:214
 AliMC.cxx:215
 AliMC.cxx:216
 AliMC.cxx:217
 AliMC.cxx:218
 AliMC.cxx:219
 AliMC.cxx:220
 AliMC.cxx:221
 AliMC.cxx:222
 AliMC.cxx:223
 AliMC.cxx:224
 AliMC.cxx:225
 AliMC.cxx:226
 AliMC.cxx:227
 AliMC.cxx:228
 AliMC.cxx:229
 AliMC.cxx:230
 AliMC.cxx:231
 AliMC.cxx:232
 AliMC.cxx:233
 AliMC.cxx:234
 AliMC.cxx:235
 AliMC.cxx:236
 AliMC.cxx:237
 AliMC.cxx:238
 AliMC.cxx:239
 AliMC.cxx:240
 AliMC.cxx:241
 AliMC.cxx:242
 AliMC.cxx:243
 AliMC.cxx:244
 AliMC.cxx:245
 AliMC.cxx:246
 AliMC.cxx:247
 AliMC.cxx:248
 AliMC.cxx:249
 AliMC.cxx:250
 AliMC.cxx:251
 AliMC.cxx:252
 AliMC.cxx:253
 AliMC.cxx:254
 AliMC.cxx:255
 AliMC.cxx:256
 AliMC.cxx:257
 AliMC.cxx:258
 AliMC.cxx:259
 AliMC.cxx:260
 AliMC.cxx:261
 AliMC.cxx:262
 AliMC.cxx:263
 AliMC.cxx:264
 AliMC.cxx:265
 AliMC.cxx:266
 AliMC.cxx:267
 AliMC.cxx:268
 AliMC.cxx:269
 AliMC.cxx:270
 AliMC.cxx:271
 AliMC.cxx:272
 AliMC.cxx:273
 AliMC.cxx:274
 AliMC.cxx:275
 AliMC.cxx:276
 AliMC.cxx:277
 AliMC.cxx:278
 AliMC.cxx:279
 AliMC.cxx:280
 AliMC.cxx:281
 AliMC.cxx:282
 AliMC.cxx:283
 AliMC.cxx:284
 AliMC.cxx:285
 AliMC.cxx:286
 AliMC.cxx:287
 AliMC.cxx:288
 AliMC.cxx:289
 AliMC.cxx:290
 AliMC.cxx:291
 AliMC.cxx:292
 AliMC.cxx:293
 AliMC.cxx:294
 AliMC.cxx:295
 AliMC.cxx:296
 AliMC.cxx:297
 AliMC.cxx:298
 AliMC.cxx:299
 AliMC.cxx:300
 AliMC.cxx:301
 AliMC.cxx:302
 AliMC.cxx:303
 AliMC.cxx:304
 AliMC.cxx:305
 AliMC.cxx:306
 AliMC.cxx:307
 AliMC.cxx:308
 AliMC.cxx:309
 AliMC.cxx:310
 AliMC.cxx:311
 AliMC.cxx:312
 AliMC.cxx:313
 AliMC.cxx:314
 AliMC.cxx:315
 AliMC.cxx:316
 AliMC.cxx:317
 AliMC.cxx:318
 AliMC.cxx:319
 AliMC.cxx:320
 AliMC.cxx:321
 AliMC.cxx:322
 AliMC.cxx:323
 AliMC.cxx:324
 AliMC.cxx:325
 AliMC.cxx:326
 AliMC.cxx:327
 AliMC.cxx:328
 AliMC.cxx:329
 AliMC.cxx:330
 AliMC.cxx:331
 AliMC.cxx:332
 AliMC.cxx:333
 AliMC.cxx:334
 AliMC.cxx:335
 AliMC.cxx:336
 AliMC.cxx:337
 AliMC.cxx:338
 AliMC.cxx:339
 AliMC.cxx:340
 AliMC.cxx:341
 AliMC.cxx:342
 AliMC.cxx:343
 AliMC.cxx:344
 AliMC.cxx:345
 AliMC.cxx:346
 AliMC.cxx:347
 AliMC.cxx:348
 AliMC.cxx:349
 AliMC.cxx:350
 AliMC.cxx:351
 AliMC.cxx:352
 AliMC.cxx:353
 AliMC.cxx:354
 AliMC.cxx:355
 AliMC.cxx:356
 AliMC.cxx:357
 AliMC.cxx:358
 AliMC.cxx:359
 AliMC.cxx:360
 AliMC.cxx:361
 AliMC.cxx:362
 AliMC.cxx:363
 AliMC.cxx:364
 AliMC.cxx:365
 AliMC.cxx:366
 AliMC.cxx:367
 AliMC.cxx:368
 AliMC.cxx:369
 AliMC.cxx:370
 AliMC.cxx:371
 AliMC.cxx:372
 AliMC.cxx:373
 AliMC.cxx:374
 AliMC.cxx:375
 AliMC.cxx:376
 AliMC.cxx:377
 AliMC.cxx:378
 AliMC.cxx:379
 AliMC.cxx:380
 AliMC.cxx:381
 AliMC.cxx:382
 AliMC.cxx:383
 AliMC.cxx:384
 AliMC.cxx:385
 AliMC.cxx:386
 AliMC.cxx:387
 AliMC.cxx:388
 AliMC.cxx:389
 AliMC.cxx:390
 AliMC.cxx:391
 AliMC.cxx:392
 AliMC.cxx:393
 AliMC.cxx:394
 AliMC.cxx:395
 AliMC.cxx:396
 AliMC.cxx:397
 AliMC.cxx:398
 AliMC.cxx:399
 AliMC.cxx:400
 AliMC.cxx:401
 AliMC.cxx:402
 AliMC.cxx:403
 AliMC.cxx:404
 AliMC.cxx:405
 AliMC.cxx:406
 AliMC.cxx:407
 AliMC.cxx:408
 AliMC.cxx:409
 AliMC.cxx:410
 AliMC.cxx:411
 AliMC.cxx:412
 AliMC.cxx:413
 AliMC.cxx:414
 AliMC.cxx:415
 AliMC.cxx:416
 AliMC.cxx:417
 AliMC.cxx:418
 AliMC.cxx:419
 AliMC.cxx:420
 AliMC.cxx:421
 AliMC.cxx:422
 AliMC.cxx:423
 AliMC.cxx:424
 AliMC.cxx:425
 AliMC.cxx:426
 AliMC.cxx:427
 AliMC.cxx:428
 AliMC.cxx:429
 AliMC.cxx:430
 AliMC.cxx:431
 AliMC.cxx:432
 AliMC.cxx:433
 AliMC.cxx:434
 AliMC.cxx:435
 AliMC.cxx:436
 AliMC.cxx:437
 AliMC.cxx:438
 AliMC.cxx:439
 AliMC.cxx:440
 AliMC.cxx:441
 AliMC.cxx:442
 AliMC.cxx:443
 AliMC.cxx:444
 AliMC.cxx:445
 AliMC.cxx:446
 AliMC.cxx:447
 AliMC.cxx:448
 AliMC.cxx:449
 AliMC.cxx:450
 AliMC.cxx:451
 AliMC.cxx:452
 AliMC.cxx:453
 AliMC.cxx:454
 AliMC.cxx:455
 AliMC.cxx:456
 AliMC.cxx:457
 AliMC.cxx:458
 AliMC.cxx:459
 AliMC.cxx:460
 AliMC.cxx:461
 AliMC.cxx:462
 AliMC.cxx:463
 AliMC.cxx:464
 AliMC.cxx:465
 AliMC.cxx:466
 AliMC.cxx:467
 AliMC.cxx:468
 AliMC.cxx:469
 AliMC.cxx:470
 AliMC.cxx:471
 AliMC.cxx:472
 AliMC.cxx:473
 AliMC.cxx:474
 AliMC.cxx:475
 AliMC.cxx:476
 AliMC.cxx:477
 AliMC.cxx:478
 AliMC.cxx:479
 AliMC.cxx:480
 AliMC.cxx:481
 AliMC.cxx:482
 AliMC.cxx:483
 AliMC.cxx:484
 AliMC.cxx:485
 AliMC.cxx:486
 AliMC.cxx:487
 AliMC.cxx:488
 AliMC.cxx:489
 AliMC.cxx:490
 AliMC.cxx:491
 AliMC.cxx:492
 AliMC.cxx:493
 AliMC.cxx:494
 AliMC.cxx:495
 AliMC.cxx:496
 AliMC.cxx:497
 AliMC.cxx:498
 AliMC.cxx:499
 AliMC.cxx:500
 AliMC.cxx:501
 AliMC.cxx:502
 AliMC.cxx:503
 AliMC.cxx:504
 AliMC.cxx:505
 AliMC.cxx:506
 AliMC.cxx:507
 AliMC.cxx:508
 AliMC.cxx:509
 AliMC.cxx:510
 AliMC.cxx:511
 AliMC.cxx:512
 AliMC.cxx:513
 AliMC.cxx:514
 AliMC.cxx:515
 AliMC.cxx:516
 AliMC.cxx:517
 AliMC.cxx:518
 AliMC.cxx:519
 AliMC.cxx:520
 AliMC.cxx:521
 AliMC.cxx:522
 AliMC.cxx:523
 AliMC.cxx:524
 AliMC.cxx:525
 AliMC.cxx:526
 AliMC.cxx:527
 AliMC.cxx:528
 AliMC.cxx:529
 AliMC.cxx:530
 AliMC.cxx:531
 AliMC.cxx:532
 AliMC.cxx:533
 AliMC.cxx:534
 AliMC.cxx:535
 AliMC.cxx:536
 AliMC.cxx:537
 AliMC.cxx:538
 AliMC.cxx:539
 AliMC.cxx:540
 AliMC.cxx:541
 AliMC.cxx:542
 AliMC.cxx:543
 AliMC.cxx:544
 AliMC.cxx:545
 AliMC.cxx:546
 AliMC.cxx:547
 AliMC.cxx:548
 AliMC.cxx:549
 AliMC.cxx:550
 AliMC.cxx:551
 AliMC.cxx:552
 AliMC.cxx:553
 AliMC.cxx:554
 AliMC.cxx:555
 AliMC.cxx:556
 AliMC.cxx:557
 AliMC.cxx:558
 AliMC.cxx:559
 AliMC.cxx:560
 AliMC.cxx:561
 AliMC.cxx:562
 AliMC.cxx:563
 AliMC.cxx:564
 AliMC.cxx:565
 AliMC.cxx:566
 AliMC.cxx:567
 AliMC.cxx:568
 AliMC.cxx:569
 AliMC.cxx:570
 AliMC.cxx:571
 AliMC.cxx:572
 AliMC.cxx:573
 AliMC.cxx:574
 AliMC.cxx:575
 AliMC.cxx:576
 AliMC.cxx:577
 AliMC.cxx:578
 AliMC.cxx:579
 AliMC.cxx:580
 AliMC.cxx:581
 AliMC.cxx:582
 AliMC.cxx:583
 AliMC.cxx:584
 AliMC.cxx:585
 AliMC.cxx:586
 AliMC.cxx:587
 AliMC.cxx:588
 AliMC.cxx:589
 AliMC.cxx:590
 AliMC.cxx:591
 AliMC.cxx:592
 AliMC.cxx:593
 AliMC.cxx:594
 AliMC.cxx:595
 AliMC.cxx:596
 AliMC.cxx:597
 AliMC.cxx:598
 AliMC.cxx:599
 AliMC.cxx:600
 AliMC.cxx:601
 AliMC.cxx:602
 AliMC.cxx:603
 AliMC.cxx:604
 AliMC.cxx:605
 AliMC.cxx:606
 AliMC.cxx:607
 AliMC.cxx:608
 AliMC.cxx:609
 AliMC.cxx:610
 AliMC.cxx:611
 AliMC.cxx:612
 AliMC.cxx:613
 AliMC.cxx:614
 AliMC.cxx:615
 AliMC.cxx:616
 AliMC.cxx:617
 AliMC.cxx:618
 AliMC.cxx:619
 AliMC.cxx:620
 AliMC.cxx:621
 AliMC.cxx:622
 AliMC.cxx:623
 AliMC.cxx:624
 AliMC.cxx:625
 AliMC.cxx:626
 AliMC.cxx:627
 AliMC.cxx:628
 AliMC.cxx:629
 AliMC.cxx:630
 AliMC.cxx:631
 AliMC.cxx:632
 AliMC.cxx:633
 AliMC.cxx:634
 AliMC.cxx:635
 AliMC.cxx:636
 AliMC.cxx:637
 AliMC.cxx:638
 AliMC.cxx:639
 AliMC.cxx:640
 AliMC.cxx:641
 AliMC.cxx:642
 AliMC.cxx:643
 AliMC.cxx:644
 AliMC.cxx:645
 AliMC.cxx:646
 AliMC.cxx:647
 AliMC.cxx:648
 AliMC.cxx:649
 AliMC.cxx:650
 AliMC.cxx:651
 AliMC.cxx:652
 AliMC.cxx:653
 AliMC.cxx:654
 AliMC.cxx:655
 AliMC.cxx:656
 AliMC.cxx:657
 AliMC.cxx:658
 AliMC.cxx:659
 AliMC.cxx:660
 AliMC.cxx:661
 AliMC.cxx:662
 AliMC.cxx:663
 AliMC.cxx:664
 AliMC.cxx:665
 AliMC.cxx:666
 AliMC.cxx:667
 AliMC.cxx:668
 AliMC.cxx:669
 AliMC.cxx:670
 AliMC.cxx:671
 AliMC.cxx:672
 AliMC.cxx:673
 AliMC.cxx:674
 AliMC.cxx:675
 AliMC.cxx:676
 AliMC.cxx:677
 AliMC.cxx:678
 AliMC.cxx:679
 AliMC.cxx:680
 AliMC.cxx:681
 AliMC.cxx:682
 AliMC.cxx:683
 AliMC.cxx:684
 AliMC.cxx:685
 AliMC.cxx:686
 AliMC.cxx:687
 AliMC.cxx:688
 AliMC.cxx:689
 AliMC.cxx:690
 AliMC.cxx:691
 AliMC.cxx:692
 AliMC.cxx:693
 AliMC.cxx:694
 AliMC.cxx:695
 AliMC.cxx:696
 AliMC.cxx:697
 AliMC.cxx:698
 AliMC.cxx:699
 AliMC.cxx:700
 AliMC.cxx:701
 AliMC.cxx:702
 AliMC.cxx:703
 AliMC.cxx:704
 AliMC.cxx:705
 AliMC.cxx:706
 AliMC.cxx:707
 AliMC.cxx:708
 AliMC.cxx:709
 AliMC.cxx:710
 AliMC.cxx:711
 AliMC.cxx:712
 AliMC.cxx:713
 AliMC.cxx:714
 AliMC.cxx:715
 AliMC.cxx:716
 AliMC.cxx:717
 AliMC.cxx:718
 AliMC.cxx:719
 AliMC.cxx:720
 AliMC.cxx:721
 AliMC.cxx:722
 AliMC.cxx:723
 AliMC.cxx:724
 AliMC.cxx:725
 AliMC.cxx:726
 AliMC.cxx:727
 AliMC.cxx:728
 AliMC.cxx:729
 AliMC.cxx:730
 AliMC.cxx:731
 AliMC.cxx:732
 AliMC.cxx:733
 AliMC.cxx:734
 AliMC.cxx:735
 AliMC.cxx:736
 AliMC.cxx:737
 AliMC.cxx:738
 AliMC.cxx:739
 AliMC.cxx:740
 AliMC.cxx:741
 AliMC.cxx:742
 AliMC.cxx:743
 AliMC.cxx:744
 AliMC.cxx:745
 AliMC.cxx:746
 AliMC.cxx:747
 AliMC.cxx:748
 AliMC.cxx:749
 AliMC.cxx:750
 AliMC.cxx:751
 AliMC.cxx:752
 AliMC.cxx:753
 AliMC.cxx:754
 AliMC.cxx:755
 AliMC.cxx:756
 AliMC.cxx:757
 AliMC.cxx:758
 AliMC.cxx:759
 AliMC.cxx:760
 AliMC.cxx:761
 AliMC.cxx:762
 AliMC.cxx:763
 AliMC.cxx:764
 AliMC.cxx:765
 AliMC.cxx:766
 AliMC.cxx:767
 AliMC.cxx:768
 AliMC.cxx:769
 AliMC.cxx:770
 AliMC.cxx:771
 AliMC.cxx:772
 AliMC.cxx:773
 AliMC.cxx:774
 AliMC.cxx:775
 AliMC.cxx:776
 AliMC.cxx:777
 AliMC.cxx:778
 AliMC.cxx:779
 AliMC.cxx:780
 AliMC.cxx:781
 AliMC.cxx:782
 AliMC.cxx:783
 AliMC.cxx:784
 AliMC.cxx:785
 AliMC.cxx:786
 AliMC.cxx:787
 AliMC.cxx:788
 AliMC.cxx:789
 AliMC.cxx:790
 AliMC.cxx:791
 AliMC.cxx:792
 AliMC.cxx:793
 AliMC.cxx:794
 AliMC.cxx:795
 AliMC.cxx:796
 AliMC.cxx:797
 AliMC.cxx:798
 AliMC.cxx:799
 AliMC.cxx:800
 AliMC.cxx:801
 AliMC.cxx:802
 AliMC.cxx:803
 AliMC.cxx:804
 AliMC.cxx:805
 AliMC.cxx:806
 AliMC.cxx:807
 AliMC.cxx:808
 AliMC.cxx:809
 AliMC.cxx:810
 AliMC.cxx:811
 AliMC.cxx:812
 AliMC.cxx:813
 AliMC.cxx:814
 AliMC.cxx:815
 AliMC.cxx:816
 AliMC.cxx:817
 AliMC.cxx:818
 AliMC.cxx:819
 AliMC.cxx:820
 AliMC.cxx:821
 AliMC.cxx:822
 AliMC.cxx:823
 AliMC.cxx:824
 AliMC.cxx:825
 AliMC.cxx:826
 AliMC.cxx:827
 AliMC.cxx:828
 AliMC.cxx:829
 AliMC.cxx:830
 AliMC.cxx:831
 AliMC.cxx:832
 AliMC.cxx:833
 AliMC.cxx:834
 AliMC.cxx:835
 AliMC.cxx:836
 AliMC.cxx:837
 AliMC.cxx:838
 AliMC.cxx:839
 AliMC.cxx:840
 AliMC.cxx:841
 AliMC.cxx:842
 AliMC.cxx:843
 AliMC.cxx:844
 AliMC.cxx:845
 AliMC.cxx:846
 AliMC.cxx:847
 AliMC.cxx:848
 AliMC.cxx:849
 AliMC.cxx:850
 AliMC.cxx:851
 AliMC.cxx:852
 AliMC.cxx:853
 AliMC.cxx:854
 AliMC.cxx:855
 AliMC.cxx:856
 AliMC.cxx:857
 AliMC.cxx:858
 AliMC.cxx:859
 AliMC.cxx:860
 AliMC.cxx:861
 AliMC.cxx:862
 AliMC.cxx:863
 AliMC.cxx:864
 AliMC.cxx:865
 AliMC.cxx:866
 AliMC.cxx:867
 AliMC.cxx:868
 AliMC.cxx:869
 AliMC.cxx:870
 AliMC.cxx:871
 AliMC.cxx:872
 AliMC.cxx:873
 AliMC.cxx:874
 AliMC.cxx:875
 AliMC.cxx:876
 AliMC.cxx:877
 AliMC.cxx:878
 AliMC.cxx:879
 AliMC.cxx:880
 AliMC.cxx:881
 AliMC.cxx:882
 AliMC.cxx:883
 AliMC.cxx:884
 AliMC.cxx:885
 AliMC.cxx:886
 AliMC.cxx:887
 AliMC.cxx:888
 AliMC.cxx:889
 AliMC.cxx:890
 AliMC.cxx:891
 AliMC.cxx:892
 AliMC.cxx:893
 AliMC.cxx:894
 AliMC.cxx:895
 AliMC.cxx:896
 AliMC.cxx:897
 AliMC.cxx:898
 AliMC.cxx:899
 AliMC.cxx:900
 AliMC.cxx:901
 AliMC.cxx:902
 AliMC.cxx:903
 AliMC.cxx:904
 AliMC.cxx:905
 AliMC.cxx:906
 AliMC.cxx:907
 AliMC.cxx:908
 AliMC.cxx:909
 AliMC.cxx:910
 AliMC.cxx:911
 AliMC.cxx:912
 AliMC.cxx:913
 AliMC.cxx:914
 AliMC.cxx:915
 AliMC.cxx:916
 AliMC.cxx:917
 AliMC.cxx:918
 AliMC.cxx:919
 AliMC.cxx:920
 AliMC.cxx:921
 AliMC.cxx:922
 AliMC.cxx:923
 AliMC.cxx:924
 AliMC.cxx:925
 AliMC.cxx:926
 AliMC.cxx:927
 AliMC.cxx:928
 AliMC.cxx:929
 AliMC.cxx:930
 AliMC.cxx:931
 AliMC.cxx:932
 AliMC.cxx:933
 AliMC.cxx:934
 AliMC.cxx:935
 AliMC.cxx:936
 AliMC.cxx:937
 AliMC.cxx:938
 AliMC.cxx:939
 AliMC.cxx:940
 AliMC.cxx:941
 AliMC.cxx:942
 AliMC.cxx:943
 AliMC.cxx:944
 AliMC.cxx:945
 AliMC.cxx:946
 AliMC.cxx:947
 AliMC.cxx:948
 AliMC.cxx:949
 AliMC.cxx:950
 AliMC.cxx:951
 AliMC.cxx:952
 AliMC.cxx:953
 AliMC.cxx:954
 AliMC.cxx:955
 AliMC.cxx:956
 AliMC.cxx:957
 AliMC.cxx:958
 AliMC.cxx:959
 AliMC.cxx:960
 AliMC.cxx:961
 AliMC.cxx:962
 AliMC.cxx:963
 AliMC.cxx:964
 AliMC.cxx:965
 AliMC.cxx:966
 AliMC.cxx:967
 AliMC.cxx:968
 AliMC.cxx:969
 AliMC.cxx:970
 AliMC.cxx:971
 AliMC.cxx:972
 AliMC.cxx:973
 AliMC.cxx:974
 AliMC.cxx:975
 AliMC.cxx:976
 AliMC.cxx:977
 AliMC.cxx:978
 AliMC.cxx:979
 AliMC.cxx:980
 AliMC.cxx:981
 AliMC.cxx:982
 AliMC.cxx:983
 AliMC.cxx:984
 AliMC.cxx:985
 AliMC.cxx:986
 AliMC.cxx:987
 AliMC.cxx:988
 AliMC.cxx:989
 AliMC.cxx:990
 AliMC.cxx:991
 AliMC.cxx:992
 AliMC.cxx:993
 AliMC.cxx:994
 AliMC.cxx:995
 AliMC.cxx:996
 AliMC.cxx:997
 AliMC.cxx:998
 AliMC.cxx:999
 AliMC.cxx:1000
 AliMC.cxx:1001
 AliMC.cxx:1002
 AliMC.cxx:1003
 AliMC.cxx:1004
 AliMC.cxx:1005
 AliMC.cxx:1006
 AliMC.cxx:1007
 AliMC.cxx:1008
 AliMC.cxx:1009
 AliMC.cxx:1010
 AliMC.cxx:1011
 AliMC.cxx:1012
 AliMC.cxx:1013
 AliMC.cxx:1014
 AliMC.cxx:1015
 AliMC.cxx:1016
 AliMC.cxx:1017
 AliMC.cxx:1018
 AliMC.cxx:1019
 AliMC.cxx:1020
 AliMC.cxx:1021
 AliMC.cxx:1022
 AliMC.cxx:1023
 AliMC.cxx:1024
 AliMC.cxx:1025
 AliMC.cxx:1026
 AliMC.cxx:1027
 AliMC.cxx:1028
 AliMC.cxx:1029
 AliMC.cxx:1030
 AliMC.cxx:1031
 AliMC.cxx:1032
 AliMC.cxx:1033
 AliMC.cxx:1034
 AliMC.cxx:1035
 AliMC.cxx:1036
 AliMC.cxx:1037
 AliMC.cxx:1038
 AliMC.cxx:1039
 AliMC.cxx:1040
 AliMC.cxx:1041
 AliMC.cxx:1042
 AliMC.cxx:1043
 AliMC.cxx:1044
 AliMC.cxx:1045
 AliMC.cxx:1046
 AliMC.cxx:1047
 AliMC.cxx:1048
 AliMC.cxx:1049
 AliMC.cxx:1050
 AliMC.cxx:1051
 AliMC.cxx:1052
 AliMC.cxx:1053
 AliMC.cxx:1054
 AliMC.cxx:1055
 AliMC.cxx:1056
 AliMC.cxx:1057
 AliMC.cxx:1058
 AliMC.cxx:1059
 AliMC.cxx:1060
 AliMC.cxx:1061
 AliMC.cxx:1062
 AliMC.cxx:1063
 AliMC.cxx:1064
 AliMC.cxx:1065
 AliMC.cxx:1066
 AliMC.cxx:1067
 AliMC.cxx:1068
 AliMC.cxx:1069
 AliMC.cxx:1070
 AliMC.cxx:1071
 AliMC.cxx:1072
 AliMC.cxx:1073
 AliMC.cxx:1074
 AliMC.cxx:1075
 AliMC.cxx:1076
 AliMC.cxx:1077
 AliMC.cxx:1078
 AliMC.cxx:1079
 AliMC.cxx:1080
 AliMC.cxx:1081
 AliMC.cxx:1082
 AliMC.cxx:1083
 AliMC.cxx:1084
 AliMC.cxx:1085
 AliMC.cxx:1086
 AliMC.cxx:1087
 AliMC.cxx:1088
 AliMC.cxx:1089
 AliMC.cxx:1090
 AliMC.cxx:1091
 AliMC.cxx:1092
 AliMC.cxx:1093
 AliMC.cxx:1094
 AliMC.cxx:1095
 AliMC.cxx:1096
 AliMC.cxx:1097
 AliMC.cxx:1098
 AliMC.cxx:1099
 AliMC.cxx:1100
 AliMC.cxx:1101
 AliMC.cxx:1102
 AliMC.cxx:1103
 AliMC.cxx:1104
 AliMC.cxx:1105
 AliMC.cxx:1106
 AliMC.cxx:1107
 AliMC.cxx:1108
 AliMC.cxx:1109
 AliMC.cxx:1110
 AliMC.cxx:1111
 AliMC.cxx:1112
 AliMC.cxx:1113
 AliMC.cxx:1114
 AliMC.cxx:1115
 AliMC.cxx:1116
 AliMC.cxx:1117
 AliMC.cxx:1118
 AliMC.cxx:1119
 AliMC.cxx:1120
 AliMC.cxx:1121
 AliMC.cxx:1122
 AliMC.cxx:1123
 AliMC.cxx:1124
 AliMC.cxx:1125
 AliMC.cxx:1126
 AliMC.cxx:1127
 AliMC.cxx:1128
 AliMC.cxx:1129
 AliMC.cxx:1130
 AliMC.cxx:1131
 AliMC.cxx:1132
 AliMC.cxx:1133
 AliMC.cxx:1134
 AliMC.cxx:1135
 AliMC.cxx:1136
 AliMC.cxx:1137
 AliMC.cxx:1138
 AliMC.cxx:1139
 AliMC.cxx:1140
 AliMC.cxx:1141
 AliMC.cxx:1142
 AliMC.cxx:1143
 AliMC.cxx:1144
 AliMC.cxx:1145
 AliMC.cxx:1146
 AliMC.cxx:1147
 AliMC.cxx:1148
 AliMC.cxx:1149
 AliMC.cxx:1150
 AliMC.cxx:1151
 AliMC.cxx:1152
 AliMC.cxx:1153
 AliMC.cxx:1154
 AliMC.cxx:1155
 AliMC.cxx:1156
 AliMC.cxx:1157
 AliMC.cxx:1158
 AliMC.cxx:1159
 AliMC.cxx:1160
 AliMC.cxx:1161
 AliMC.cxx:1162
 AliMC.cxx:1163
 AliMC.cxx:1164
 AliMC.cxx:1165
 AliMC.cxx:1166
 AliMC.cxx:1167
 AliMC.cxx:1168
 AliMC.cxx:1169
 AliMC.cxx:1170
 AliMC.cxx:1171
 AliMC.cxx:1172
 AliMC.cxx:1173
 AliMC.cxx:1174
 AliMC.cxx:1175
 AliMC.cxx:1176
 AliMC.cxx:1177
 AliMC.cxx:1178
 AliMC.cxx:1179
 AliMC.cxx:1180
 AliMC.cxx:1181
 AliMC.cxx:1182
 AliMC.cxx:1183
 AliMC.cxx:1184
 AliMC.cxx:1185
 AliMC.cxx:1186
 AliMC.cxx:1187
 AliMC.cxx:1188
 AliMC.cxx:1189
 AliMC.cxx:1190
 AliMC.cxx:1191
 AliMC.cxx:1192
 AliMC.cxx:1193
 AliMC.cxx:1194
 AliMC.cxx:1195
 AliMC.cxx:1196
 AliMC.cxx:1197
 AliMC.cxx:1198
 AliMC.cxx:1199
 AliMC.cxx:1200
 AliMC.cxx:1201
 AliMC.cxx:1202
 AliMC.cxx:1203
 AliMC.cxx:1204
 AliMC.cxx:1205
 AliMC.cxx:1206
 AliMC.cxx:1207
 AliMC.cxx:1208
 AliMC.cxx:1209
 AliMC.cxx:1210
 AliMC.cxx:1211
 AliMC.cxx:1212
 AliMC.cxx:1213
 AliMC.cxx:1214
 AliMC.cxx:1215
 AliMC.cxx:1216
 AliMC.cxx:1217
 AliMC.cxx:1218
 AliMC.cxx:1219
 AliMC.cxx:1220
 AliMC.cxx:1221
 AliMC.cxx:1222
 AliMC.cxx:1223
 AliMC.cxx:1224
 AliMC.cxx:1225
 AliMC.cxx:1226
 AliMC.cxx:1227
 AliMC.cxx:1228
 AliMC.cxx:1229
 AliMC.cxx:1230
 AliMC.cxx:1231
 AliMC.cxx:1232
 AliMC.cxx:1233
 AliMC.cxx:1234
 AliMC.cxx:1235
 AliMC.cxx:1236
 AliMC.cxx:1237
 AliMC.cxx:1238
 AliMC.cxx:1239
 AliMC.cxx:1240
 AliMC.cxx:1241
 AliMC.cxx:1242
 AliMC.cxx:1243
 AliMC.cxx:1244
 AliMC.cxx:1245
 AliMC.cxx:1246
 AliMC.cxx:1247
 AliMC.cxx:1248
 AliMC.cxx:1249
 AliMC.cxx:1250
 AliMC.cxx:1251
 AliMC.cxx:1252
 AliMC.cxx:1253
 AliMC.cxx:1254
 AliMC.cxx:1255
 AliMC.cxx:1256
 AliMC.cxx:1257
 AliMC.cxx:1258
 AliMC.cxx:1259
 AliMC.cxx:1260
 AliMC.cxx:1261
 AliMC.cxx:1262
 AliMC.cxx:1263
 AliMC.cxx:1264
 AliMC.cxx:1265
 AliMC.cxx:1266
 AliMC.cxx:1267
 AliMC.cxx:1268
 AliMC.cxx:1269
 AliMC.cxx:1270
 AliMC.cxx:1271
 AliMC.cxx:1272
 AliMC.cxx:1273
 AliMC.cxx:1274
 AliMC.cxx:1275
 AliMC.cxx:1276
 AliMC.cxx:1277
 AliMC.cxx:1278
 AliMC.cxx:1279
 AliMC.cxx:1280
 AliMC.cxx:1281
 AliMC.cxx:1282
 AliMC.cxx:1283
 AliMC.cxx:1284
 AliMC.cxx:1285
 AliMC.cxx:1286
 AliMC.cxx:1287
 AliMC.cxx:1288
 AliMC.cxx:1289
 AliMC.cxx:1290
 AliMC.cxx:1291
 AliMC.cxx:1292
 AliMC.cxx:1293
 AliMC.cxx:1294
 AliMC.cxx:1295
 AliMC.cxx:1296
 AliMC.cxx:1297
 AliMC.cxx:1298
 AliMC.cxx:1299
 AliMC.cxx:1300
 AliMC.cxx:1301
 AliMC.cxx:1302
 AliMC.cxx:1303
 AliMC.cxx:1304
 AliMC.cxx:1305
 AliMC.cxx:1306
 AliMC.cxx:1307
 AliMC.cxx:1308
 AliMC.cxx:1309
 AliMC.cxx:1310
 AliMC.cxx:1311
 AliMC.cxx:1312
 AliMC.cxx:1313
 AliMC.cxx:1314
 AliMC.cxx:1315
 AliMC.cxx:1316
 AliMC.cxx:1317
 AliMC.cxx:1318
 AliMC.cxx:1319
 AliMC.cxx:1320
 AliMC.cxx:1321
 AliMC.cxx:1322
 AliMC.cxx:1323
 AliMC.cxx:1324
 AliMC.cxx:1325
 AliMC.cxx:1326
 AliMC.cxx:1327
 AliMC.cxx:1328
 AliMC.cxx:1329
 AliMC.cxx:1330
 AliMC.cxx:1331
 AliMC.cxx:1332
 AliMC.cxx:1333
 AliMC.cxx:1334
 AliMC.cxx:1335
 AliMC.cxx:1336
 AliMC.cxx:1337
 AliMC.cxx:1338
 AliMC.cxx:1339
 AliMC.cxx:1340
 AliMC.cxx:1341
 AliMC.cxx:1342
 AliMC.cxx:1343
 AliMC.cxx:1344
 AliMC.cxx:1345
 AliMC.cxx:1346
 AliMC.cxx:1347
 AliMC.cxx:1348
 AliMC.cxx:1349
 AliMC.cxx:1350
 AliMC.cxx:1351
 AliMC.cxx:1352
 AliMC.cxx:1353
 AliMC.cxx:1354
 AliMC.cxx:1355
 AliMC.cxx:1356
 AliMC.cxx:1357
 AliMC.cxx:1358
 AliMC.cxx:1359
 AliMC.cxx:1360
 AliMC.cxx:1361
 AliMC.cxx:1362
 AliMC.cxx:1363
 AliMC.cxx:1364
 AliMC.cxx:1365
 AliMC.cxx:1366
 AliMC.cxx:1367
 AliMC.cxx:1368
 AliMC.cxx:1369
 AliMC.cxx:1370
 AliMC.cxx:1371
 AliMC.cxx:1372
 AliMC.cxx:1373
 AliMC.cxx:1374
 AliMC.cxx:1375
 AliMC.cxx:1376
 AliMC.cxx:1377
 AliMC.cxx:1378
 AliMC.cxx:1379
 AliMC.cxx:1380
 AliMC.cxx:1381
 AliMC.cxx:1382
 AliMC.cxx:1383
 AliMC.cxx:1384
 AliMC.cxx:1385
 AliMC.cxx:1386
 AliMC.cxx:1387
 AliMC.cxx:1388
 AliMC.cxx:1389
 AliMC.cxx:1390
 AliMC.cxx:1391
 AliMC.cxx:1392
 AliMC.cxx:1393
 AliMC.cxx:1394
 AliMC.cxx:1395
 AliMC.cxx:1396
 AliMC.cxx:1397
 AliMC.cxx:1398
 AliMC.cxx:1399
 AliMC.cxx:1400
 AliMC.cxx:1401
 AliMC.cxx:1402
 AliMC.cxx:1403
 AliMC.cxx:1404
 AliMC.cxx:1405
 AliMC.cxx:1406
 AliMC.cxx:1407
 AliMC.cxx:1408
 AliMC.cxx:1409
 AliMC.cxx:1410
 AliMC.cxx:1411
 AliMC.cxx:1412
 AliMC.cxx:1413
 AliMC.cxx:1414
 AliMC.cxx:1415
 AliMC.cxx:1416
 AliMC.cxx:1417
 AliMC.cxx:1418
 AliMC.cxx:1419
 AliMC.cxx:1420
 AliMC.cxx:1421
 AliMC.cxx:1422
 AliMC.cxx:1423
 AliMC.cxx:1424
 AliMC.cxx:1425
 AliMC.cxx:1426
 AliMC.cxx:1427
 AliMC.cxx:1428
 AliMC.cxx:1429
 AliMC.cxx:1430
 AliMC.cxx:1431
 AliMC.cxx:1432
 AliMC.cxx:1433
 AliMC.cxx:1434
 AliMC.cxx:1435
 AliMC.cxx:1436
 AliMC.cxx:1437
 AliMC.cxx:1438
 AliMC.cxx:1439
 AliMC.cxx:1440
 AliMC.cxx:1441
 AliMC.cxx:1442
 AliMC.cxx:1443
 AliMC.cxx:1444
 AliMC.cxx:1445
 AliMC.cxx:1446
 AliMC.cxx:1447
 AliMC.cxx:1448
 AliMC.cxx:1449
 AliMC.cxx:1450
 AliMC.cxx:1451
 AliMC.cxx:1452
 AliMC.cxx:1453
 AliMC.cxx:1454
 AliMC.cxx:1455
 AliMC.cxx:1456
 AliMC.cxx:1457
 AliMC.cxx:1458
 AliMC.cxx:1459
 AliMC.cxx:1460
 AliMC.cxx:1461
 AliMC.cxx:1462
 AliMC.cxx:1463
 AliMC.cxx:1464
 AliMC.cxx:1465
 AliMC.cxx:1466
 AliMC.cxx:1467
 AliMC.cxx:1468
 AliMC.cxx:1469
 AliMC.cxx:1470
 AliMC.cxx:1471
 AliMC.cxx:1472
 AliMC.cxx:1473
 AliMC.cxx:1474
 AliMC.cxx:1475
 AliMC.cxx:1476
 AliMC.cxx:1477
 AliMC.cxx:1478
 AliMC.cxx:1479
 AliMC.cxx:1480
 AliMC.cxx:1481
 AliMC.cxx:1482
 AliMC.cxx:1483
 AliMC.cxx:1484
 AliMC.cxx:1485
 AliMC.cxx:1486
 AliMC.cxx:1487
 AliMC.cxx:1488
 AliMC.cxx:1489
 AliMC.cxx:1490
 AliMC.cxx:1491
 AliMC.cxx:1492
 AliMC.cxx:1493
 AliMC.cxx:1494
 AliMC.cxx:1495
 AliMC.cxx:1496
 AliMC.cxx:1497
 AliMC.cxx:1498
 AliMC.cxx:1499
 AliMC.cxx:1500
 AliMC.cxx:1501
 AliMC.cxx:1502
 AliMC.cxx:1503
 AliMC.cxx:1504
 AliMC.cxx:1505
 AliMC.cxx:1506
 AliMC.cxx:1507
 AliMC.cxx:1508
 AliMC.cxx:1509
 AliMC.cxx:1510
 AliMC.cxx:1511
 AliMC.cxx:1512
 AliMC.cxx:1513
 AliMC.cxx:1514
 AliMC.cxx:1515
 AliMC.cxx:1516
 AliMC.cxx:1517
 AliMC.cxx:1518
 AliMC.cxx:1519
 AliMC.cxx:1520
 AliMC.cxx:1521
 AliMC.cxx:1522
 AliMC.cxx:1523
 AliMC.cxx:1524
 AliMC.cxx:1525
 AliMC.cxx:1526
 AliMC.cxx:1527
 AliMC.cxx:1528
 AliMC.cxx:1529
 AliMC.cxx:1530
 AliMC.cxx:1531
 AliMC.cxx:1532
 AliMC.cxx:1533
 AliMC.cxx:1534
 AliMC.cxx:1535
 AliMC.cxx:1536
 AliMC.cxx:1537
 AliMC.cxx:1538
 AliMC.cxx:1539
 AliMC.cxx:1540
 AliMC.cxx:1541
 AliMC.cxx:1542
 AliMC.cxx:1543
 AliMC.cxx:1544
 AliMC.cxx:1545
 AliMC.cxx:1546
 AliMC.cxx:1547
 AliMC.cxx:1548
 AliMC.cxx:1549
 AliMC.cxx:1550
 AliMC.cxx:1551
 AliMC.cxx:1552
 AliMC.cxx:1553
 AliMC.cxx:1554
 AliMC.cxx:1555
 AliMC.cxx:1556
 AliMC.cxx:1557
 AliMC.cxx:1558
 AliMC.cxx:1559
 AliMC.cxx:1560
 AliMC.cxx:1561
 AliMC.cxx:1562
 AliMC.cxx:1563
 AliMC.cxx:1564
 AliMC.cxx:1565
 AliMC.cxx:1566
 AliMC.cxx:1567
 AliMC.cxx:1568
 AliMC.cxx:1569
 AliMC.cxx:1570
 AliMC.cxx:1571
 AliMC.cxx:1572
 AliMC.cxx:1573
 AliMC.cxx:1574
 AliMC.cxx:1575
 AliMC.cxx:1576
 AliMC.cxx:1577
 AliMC.cxx:1578
 AliMC.cxx:1579
 AliMC.cxx:1580
 AliMC.cxx:1581
 AliMC.cxx:1582
 AliMC.cxx:1583
 AliMC.cxx:1584
 AliMC.cxx:1585
 AliMC.cxx:1586
 AliMC.cxx:1587
 AliMC.cxx:1588
 AliMC.cxx:1589
 AliMC.cxx:1590
 AliMC.cxx:1591
 AliMC.cxx:1592
 AliMC.cxx:1593
 AliMC.cxx:1594
 AliMC.cxx:1595
 AliMC.cxx:1596
 AliMC.cxx:1597
 AliMC.cxx:1598
 AliMC.cxx:1599
 AliMC.cxx:1600
 AliMC.cxx:1601
 AliMC.cxx:1602
 AliMC.cxx:1603
 AliMC.cxx:1604
 AliMC.cxx:1605
 AliMC.cxx:1606
 AliMC.cxx:1607
 AliMC.cxx:1608
 AliMC.cxx:1609
 AliMC.cxx:1610
 AliMC.cxx:1611
 AliMC.cxx:1612
 AliMC.cxx:1613
 AliMC.cxx:1614
 AliMC.cxx:1615
 AliMC.cxx:1616
 AliMC.cxx:1617
 AliMC.cxx:1618
 AliMC.cxx:1619
 AliMC.cxx:1620
 AliMC.cxx:1621
 AliMC.cxx:1622
 AliMC.cxx:1623
 AliMC.cxx:1624
 AliMC.cxx:1625
 AliMC.cxx:1626
 AliMC.cxx:1627
 AliMC.cxx:1628
 AliMC.cxx:1629
 AliMC.cxx:1630
 AliMC.cxx:1631
 AliMC.cxx:1632
 AliMC.cxx:1633
 AliMC.cxx:1634
 AliMC.cxx:1635
 AliMC.cxx:1636
 AliMC.cxx:1637
 AliMC.cxx:1638
 AliMC.cxx:1639
 AliMC.cxx:1640
 AliMC.cxx:1641
 AliMC.cxx:1642
 AliMC.cxx:1643
 AliMC.cxx:1644
 AliMC.cxx:1645
 AliMC.cxx:1646
 AliMC.cxx:1647
 AliMC.cxx:1648
 AliMC.cxx:1649
 AliMC.cxx:1650
 AliMC.cxx:1651
 AliMC.cxx:1652
 AliMC.cxx:1653
 AliMC.cxx:1654
 AliMC.cxx:1655
 AliMC.cxx:1656
 AliMC.cxx:1657
 AliMC.cxx:1658
 AliMC.cxx:1659
 AliMC.cxx:1660
 AliMC.cxx:1661
 AliMC.cxx:1662
 AliMC.cxx:1663
 AliMC.cxx:1664
 AliMC.cxx:1665
 AliMC.cxx:1666
 AliMC.cxx:1667
 AliMC.cxx:1668
 AliMC.cxx:1669
 AliMC.cxx:1670
 AliMC.cxx:1671
 AliMC.cxx:1672
 AliMC.cxx:1673
 AliMC.cxx:1674
 AliMC.cxx:1675
 AliMC.cxx:1676
 AliMC.cxx:1677
 AliMC.cxx:1678
 AliMC.cxx:1679
 AliMC.cxx:1680
 AliMC.cxx:1681
 AliMC.cxx:1682
 AliMC.cxx:1683
 AliMC.cxx:1684
 AliMC.cxx:1685
 AliMC.cxx:1686
 AliMC.cxx:1687
 AliMC.cxx:1688
 AliMC.cxx:1689
 AliMC.cxx:1690
 AliMC.cxx:1691
 AliMC.cxx:1692
 AliMC.cxx:1693
 AliMC.cxx:1694
 AliMC.cxx:1695
 AliMC.cxx:1696
 AliMC.cxx:1697
 AliMC.cxx:1698
 AliMC.cxx:1699
 AliMC.cxx:1700
 AliMC.cxx:1701
 AliMC.cxx:1702
 AliMC.cxx:1703
 AliMC.cxx:1704
 AliMC.cxx:1705
 AliMC.cxx:1706
 AliMC.cxx:1707
 AliMC.cxx:1708
 AliMC.cxx:1709
 AliMC.cxx:1710
 AliMC.cxx:1711
 AliMC.cxx:1712
 AliMC.cxx:1713
 AliMC.cxx:1714
 AliMC.cxx:1715
 AliMC.cxx:1716
 AliMC.cxx:1717
 AliMC.cxx:1718
 AliMC.cxx:1719
 AliMC.cxx:1720
 AliMC.cxx:1721
 AliMC.cxx:1722
 AliMC.cxx:1723
 AliMC.cxx:1724
 AliMC.cxx:1725
 AliMC.cxx:1726
 AliMC.cxx:1727
 AliMC.cxx:1728