
                Examples for HepMC-Geant4 interface
                -----------------------------------

This directory contains examples for using HepMC as an interface with 
various Monte Carlo event generators, such as PYTHIA.
It also include an example for demonstrating MC truth handling with HepMC.

Requirements for external software packages
-------------------------------------------
HepMC:
  Tested version : 2.06.09
  http://lcgapp.cern.ch/project/simu/HepMC/

  Note: examples were tested only on Linux with gcc.

PYTHIA
  Tested version 6.4.26
  URL: http://www.thep.lu.se/~torbjorn/Pythia.html


Examples HepMCEx01 and HepMCEx02
================================

class HepMCG4Interface
  This class is derived from G4VPrimaryGenerator, and is a base class 
  for primary generation via HepMC object.

  protected members
  + virtual HepMC::GenEvent* GenerateHepMCEvent()
    Implement this method in his/her own concrete class.
    An empty event will be created in default.

  + void HepMC2G4(const HepMC::GenEvent* hepmcevt, G4Event* g4event)
    service method for conversion from HepMC::GenEvent to G4Event

  + virtual G4bool CheckVertexInsideWorld(const G4ThreeVector& pos) const
    We have to take care for the position of primaries because
    primary vertices outside the world volume give rise to G4Exception.
    If the default implementation is not adequate, an alternative 
    can be implemented in your own class.

  public members
  + virtual void GeneratePrimaryVertex(G4Event* anEvent)
    The default behavior is that a single HepMC event generated by
    GenerateHepMCEvent() will be converted to G4Event through HepMC2G4().

class HepMCG4AsciiReader / HepMCG4AsciiReaderMessenger
  (derived from HepMCG4Interface)
  This derived class is for reading primary information from 
  an Ascii file generated by HepMC.

class HepMCG4PythiaInterface / HepMCG4AsciiReaderMessenger
  (derived from HepMCG4Interface)
  This derived class is for directly calling PYTHIA functions. 
  Users can set parameters, initialize, generate, and terminate
  by command line operation.
  
  Macros in examples
  -----------------
  hepmc_pygen.in
    process PYTHIA events(H->4mu) generated at every event.

  hepmc_ascii.in
    read pregenerated events from HepMC Ascii file (data/example_MyPythia.dat).

  Installation
  --------------
  1. Download and install HepMC from:
    http://lcgapp.cern.ch/project/simu/HepMC/
    (Last tested version : 2.06.09)
    
    and define the environment variable:
    HEPMC_DIR         the path to HepMC installation.
 
  2. Download the PYTHIA6 source file from the PYTHIA6 download site:
    http://www.hepforge.org/downloads/pythia6
    
    A) With CMake: Build pythia6 library

    For a convenience a CMake file for building Pythia6 library from 
    the source is provided in
    examples/extended/eventgenerator/CMakeLists.txt.pythia6.
    Build the pythia6 library following the insytructions in this file
    and then define the environment variables:
    PYTHIA6          the path where pythia6 library is installed
    PYTHIA6_VERSION  the pythia version 

    B) With GNUmake: Define the environment variables
    
    PYTHIA6           the path to pythia-versionX.f source code
    PYTHIA6_VERSION   the pythia version 
    
    e.g. If you download pythia-6.4.26.f.gz and unzip it in $HOME,
         then you have to set:
    export PYTHIA6=$HOME
    export PYTHIA6_VERSION="6.4.26"
    
    Pythia6 will be then compiled together with example code.

 3. Compilation:
    Then the examples are compiled in a standard way, 
    see examples/README_HowToRun.
 
  Examples
  ----------
  See more details in HepMCEx01/README and HepMCEx02/README. 

  Notes
  -----
  We attached a sample HepMC Ascii data file, "data/example_MyPythia.dat",
  which contains 10 PYTHIA events created by "data/example_MyPythia.cxx".

Example MCTruth
===============

Application demonstrating handling of Monte-Carlo truth information through
the HepMC package.
