ROOT logo
#include <TVirtualMC.h>
#include <TDatabasePDG.h>
#include <TParticle.h>

#include "AliGenReaderHepMC.h"
#include "AliRun.h"
#include "AliStack.h"
#include "AliGenHepMCEventHeader.h"

#include "HepMC/IO_BaseClass.h"
#include "HepMC/GenEvent.h"
#include "HepMC/IO_GenEvent.h"

ClassImp(AliGenReaderHepMC)

AliGenReaderHepMC::AliGenReaderHepMC():fEventsHandle(0), fGenEvent(0), fParticleArray(0), fParticleIterator(0), fGenEventHeader(0) {;}

AliGenReaderHepMC::AliGenReaderHepMC(const AliGenReaderHepMC &reader)
   :AliGenReader(reader), fEventsHandle(0), fGenEvent(0), fParticleArray(0), fParticleIterator(0), fGenEventHeader(0) {reader.Copy(*this);}


AliGenReaderHepMC& AliGenReaderHepMC::operator=(const  AliGenReaderHepMC& rhs)
{
   // Assignment operator
   rhs.Copy(*this);
   return *this;
}

AliGenReaderHepMC::~AliGenReaderHepMC(){ delete fEventsHandle; delete fGenEvent; delete fParticleArray; delete fParticleIterator;} // not deleting fGenEventHeader as it is returned out

void AliGenReaderHepMC::Copy(TObject&) const
{
   //
   // Copy
   //
   Fatal("Copy","Not implemented!\n");
}

void AliGenReaderHepMC::Init()
{
   // check if file exists, using FILE to avoid (the otherwise faster) POSIX dependencies
   if (FILE *file = fopen(fFileName,"r"))  {
      printf("File %s opened \n", fFileName);
      fclose(file);
   } else {
      printf("Couldn't open input file: %s \n", fFileName);
   }
   // Initialisation
   fEventsHandle = new HepMC::IO_GenEvent(fFileName, std::ios::in);
   fParticleArray = new TClonesArray("TParticle");
   fParticleIterator = new TIter(fParticleArray);
}

Int_t AliGenReaderHepMC::NextEvent()
{
   // Clean memory
   if (fGenEvent) delete fGenEvent;
   // Read the next event
   if ((fGenEvent = fEventsHandle->read_next_event())) {
      THepMCParser::ParseGenEvent2TCloneArray(fGenEvent,fParticleArray,"GEV","CM",false);
      fParticleIterator->Reset();
      THepMCParser::HeavyIonHeader_t heavyIonHeader;
      THepMCParser::PdfHeader_t pdfHeader;
      THepMCParser::ParseGenEvent2HeaderStructs(fGenEvent,heavyIonHeader,pdfHeader,true,true);
      fGenEventHeader = new AliGenHepMCEventHeader(
            heavyIonHeader.Ncoll_hard,
            heavyIonHeader.Npart_proj,
            heavyIonHeader.Npart_targ,
            heavyIonHeader.Ncoll,
            heavyIonHeader.spectator_neutrons,
            heavyIonHeader.spectator_protons,
            heavyIonHeader.N_Nwounded_collisions,
            heavyIonHeader.Nwounded_N_collisions,
            heavyIonHeader.Nwounded_Nwounded_collisions,
            heavyIonHeader.impact_parameter,
            heavyIonHeader.event_plane_angle,
            heavyIonHeader.eccentricity,
            heavyIonHeader.sigma_inel_NN,
            pdfHeader.id1,
            pdfHeader.id2,
            pdfHeader.pdf_id1,
            pdfHeader.pdf_id2,
            pdfHeader.x1,
            pdfHeader.x2,
            pdfHeader.scalePDF,
            pdfHeader.pdf1,
            pdfHeader.pdf2
      );
      printf("Parsed event %d with %d particles.\n", fGenEvent->event_number(), fGenEvent->particles_size());
      return fGenEvent->particles_size();
   }
   printf("No more events in the file.\n");
   return 0;
}

TParticle* AliGenReaderHepMC::NextParticle()
{
   // Read next particle
   TParticle * particle = (TParticle*)fParticleIterator->Next();
   if (particle && particle->GetStatusCode()==1) {
      particle->SetBit(kTransportBit);
   }
   return particle;
}

void AliGenReaderHepMC::RewindEvent()
{
   fParticleIterator->Reset();
}
 AliGenReaderHepMC.cxx:1
 AliGenReaderHepMC.cxx:2
 AliGenReaderHepMC.cxx:3
 AliGenReaderHepMC.cxx:4
 AliGenReaderHepMC.cxx:5
 AliGenReaderHepMC.cxx:6
 AliGenReaderHepMC.cxx:7
 AliGenReaderHepMC.cxx:8
 AliGenReaderHepMC.cxx:9
 AliGenReaderHepMC.cxx:10
 AliGenReaderHepMC.cxx:11
 AliGenReaderHepMC.cxx:12
 AliGenReaderHepMC.cxx:13
 AliGenReaderHepMC.cxx:14
 AliGenReaderHepMC.cxx:15
 AliGenReaderHepMC.cxx:16
 AliGenReaderHepMC.cxx:17
 AliGenReaderHepMC.cxx:18
 AliGenReaderHepMC.cxx:19
 AliGenReaderHepMC.cxx:20
 AliGenReaderHepMC.cxx:21
 AliGenReaderHepMC.cxx:22
 AliGenReaderHepMC.cxx:23
 AliGenReaderHepMC.cxx:24
 AliGenReaderHepMC.cxx:25
 AliGenReaderHepMC.cxx:26
 AliGenReaderHepMC.cxx:27
 AliGenReaderHepMC.cxx:28
 AliGenReaderHepMC.cxx:29
 AliGenReaderHepMC.cxx:30
 AliGenReaderHepMC.cxx:31
 AliGenReaderHepMC.cxx:32
 AliGenReaderHepMC.cxx:33
 AliGenReaderHepMC.cxx:34
 AliGenReaderHepMC.cxx:35
 AliGenReaderHepMC.cxx:36
 AliGenReaderHepMC.cxx:37
 AliGenReaderHepMC.cxx:38
 AliGenReaderHepMC.cxx:39
 AliGenReaderHepMC.cxx:40
 AliGenReaderHepMC.cxx:41
 AliGenReaderHepMC.cxx:42
 AliGenReaderHepMC.cxx:43
 AliGenReaderHepMC.cxx:44
 AliGenReaderHepMC.cxx:45
 AliGenReaderHepMC.cxx:46
 AliGenReaderHepMC.cxx:47
 AliGenReaderHepMC.cxx:48
 AliGenReaderHepMC.cxx:49
 AliGenReaderHepMC.cxx:50
 AliGenReaderHepMC.cxx:51
 AliGenReaderHepMC.cxx:52
 AliGenReaderHepMC.cxx:53
 AliGenReaderHepMC.cxx:54
 AliGenReaderHepMC.cxx:55
 AliGenReaderHepMC.cxx:56
 AliGenReaderHepMC.cxx:57
 AliGenReaderHepMC.cxx:58
 AliGenReaderHepMC.cxx:59
 AliGenReaderHepMC.cxx:60
 AliGenReaderHepMC.cxx:61
 AliGenReaderHepMC.cxx:62
 AliGenReaderHepMC.cxx:63
 AliGenReaderHepMC.cxx:64
 AliGenReaderHepMC.cxx:65
 AliGenReaderHepMC.cxx:66
 AliGenReaderHepMC.cxx:67
 AliGenReaderHepMC.cxx:68
 AliGenReaderHepMC.cxx:69
 AliGenReaderHepMC.cxx:70
 AliGenReaderHepMC.cxx:71
 AliGenReaderHepMC.cxx:72
 AliGenReaderHepMC.cxx:73
 AliGenReaderHepMC.cxx:74
 AliGenReaderHepMC.cxx:75
 AliGenReaderHepMC.cxx:76
 AliGenReaderHepMC.cxx:77
 AliGenReaderHepMC.cxx:78
 AliGenReaderHepMC.cxx:79
 AliGenReaderHepMC.cxx:80
 AliGenReaderHepMC.cxx:81
 AliGenReaderHepMC.cxx:82
 AliGenReaderHepMC.cxx:83
 AliGenReaderHepMC.cxx:84
 AliGenReaderHepMC.cxx:85
 AliGenReaderHepMC.cxx:86
 AliGenReaderHepMC.cxx:87
 AliGenReaderHepMC.cxx:88
 AliGenReaderHepMC.cxx:89
 AliGenReaderHepMC.cxx:90
 AliGenReaderHepMC.cxx:91
 AliGenReaderHepMC.cxx:92
 AliGenReaderHepMC.cxx:93
 AliGenReaderHepMC.cxx:94
 AliGenReaderHepMC.cxx:95
 AliGenReaderHepMC.cxx:96
 AliGenReaderHepMC.cxx:97
 AliGenReaderHepMC.cxx:98
 AliGenReaderHepMC.cxx:99
 AliGenReaderHepMC.cxx:100
 AliGenReaderHepMC.cxx:101
 AliGenReaderHepMC.cxx:102
 AliGenReaderHepMC.cxx:103
 AliGenReaderHepMC.cxx:104
 AliGenReaderHepMC.cxx:105
 AliGenReaderHepMC.cxx:106
 AliGenReaderHepMC.cxx:107
 AliGenReaderHepMC.cxx:108
 AliGenReaderHepMC.cxx:109