ROOT logo
// $Id$
//
// Generation of kinematics tree which can be then used as an extrenal
// event generator.
// According to: $ALICE_ROOT/test/genkine/gen/fastGen.C
//
// By I. Hrivnacova, IPN Orsay

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TH1F.h>
#include <TStopwatch.h>
#include <TDatime.h>
#include <TRandom.h>
#include <TDatabasePDG.h>
#include <TParticle.h>
#include <TArrayI.h>

#include "AliGenerator.h"
#include "AliPDG.h"
#include "AliRunLoader.h"
#include "AliRun.h"
#include "AliStack.h"
#include "AliHeader.h"
#include "PYTHIA6/AliGenPythia.h"
#include "PYTHIA6/AliPythia.h"
#endif

void gen(Int_t nev = 1, char* filename = "galice.root")
{
  // Load libraries
  // gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT");
  gSystem->Load("liblhapdf.so");      // Parton density functions
  gSystem->Load("libEGPythia6.so");   // TGenerator interface
  gSystem->Load("libpythia6.so");     // Pythia
  gSystem->Load("libAliPythia6.so");  // ALICE specific implementations

  AliPDG::AddParticlesToPdgDataBase();
  TDatabasePDG::Instance();

  // Run loader
  AliRunLoader* rl = AliRunLoader::Open("galice.root","FASTRUN","recreate");
  
  rl->SetCompressionLevel(2);
  rl->SetNumberOfEventsPerFile(nev);
  rl->LoadKinematics("RECREATE");
  rl->MakeTree("E");
  gAlice->SetRunLoader(rl);
  
  //  Create stack
  rl->MakeStack();
  AliStack* stack = rl->Stack();
  
  //  Header
  AliHeader* header = rl->GetHeader();
  
  //  Create and Initialize Generator
  gROOT->LoadMacro("$ALICE_ROOT/test/vmctest/ppbench/genPPbenchConfig.C");
  AliGenerator* gener = genPPbenchConfig();

  // Go to galice.root
  rl->CdGAFile();

  // Forbid some decays. Do it after gener->Init(0, because
  // the initialization of the generator includes reading of the decay table.
  // ...

  //
  // Event Loop
  //
  
  TStopwatch timer;
  timer.Start();
  for (Int_t iev = 0; iev < nev; iev++) {
    
    cout <<"Event number "<< iev << endl;
    
    // Initialize event
    header->Reset(0,iev);
    rl->SetEventNumber(iev);
    stack->Reset();
    rl->MakeTree("K");
    
    // Generate event
    stack->Reset();
    stack->ConnectTree(rl->TreeK());
    gener->Generate();
    cout << "Number of particles " << stack->GetNprimary() << endl;
    
    // Finish event
    header->SetNprimary(stack->GetNprimary());
    header->SetNtrack(stack->GetNtrack());  
    
    // I/O
    stack->FinishEvent();
    header->SetStack(stack);
    rl->TreeE()->Fill();
    rl->WriteKinematics("OVERWRITE");
    
  } // event loop
  timer.Stop();
  timer.Print();
  
  //                         Termination
  //  Generator
  gener->FinishRun();
  //  Write file
  rl->WriteHeader("OVERWRITE");
  gener->Write();
  rl->Write();
}
 gen.C:1
 gen.C:2
 gen.C:3
 gen.C:4
 gen.C:5
 gen.C:6
 gen.C:7
 gen.C:8
 gen.C:9
 gen.C:10
 gen.C:11
 gen.C:12
 gen.C:13
 gen.C:14
 gen.C:15
 gen.C:16
 gen.C:17
 gen.C:18
 gen.C:19
 gen.C:20
 gen.C:21
 gen.C:22
 gen.C:23
 gen.C:24
 gen.C:25
 gen.C:26
 gen.C:27
 gen.C:28
 gen.C:29
 gen.C:30
 gen.C:31
 gen.C:32
 gen.C:33
 gen.C:34
 gen.C:35
 gen.C:36
 gen.C:37
 gen.C:38
 gen.C:39
 gen.C:40
 gen.C:41
 gen.C:42
 gen.C:43
 gen.C:44
 gen.C:45
 gen.C:46
 gen.C:47
 gen.C:48
 gen.C:49
 gen.C:50
 gen.C:51
 gen.C:52
 gen.C:53
 gen.C:54
 gen.C:55
 gen.C:56
 gen.C:57
 gen.C:58
 gen.C:59
 gen.C:60
 gen.C:61
 gen.C:62
 gen.C:63
 gen.C:64
 gen.C:65
 gen.C:66
 gen.C:67
 gen.C:68
 gen.C:69
 gen.C:70
 gen.C:71
 gen.C:72
 gen.C:73
 gen.C:74
 gen.C:75
 gen.C:76
 gen.C:77
 gen.C:78
 gen.C:79
 gen.C:80
 gen.C:81
 gen.C:82
 gen.C:83
 gen.C:84
 gen.C:85
 gen.C:86
 gen.C:87
 gen.C:88
 gen.C:89
 gen.C:90
 gen.C:91
 gen.C:92
 gen.C:93
 gen.C:94
 gen.C:95
 gen.C:96
 gen.C:97
 gen.C:98
 gen.C:99
 gen.C:100
 gen.C:101
 gen.C:102
 gen.C:103
 gen.C:104
 gen.C:105
 gen.C:106
 gen.C:107
 gen.C:108
 gen.C:109
 gen.C:110
 gen.C:111
 gen.C:112