Many PYTHIA users wish to use ROOT
to produce histograms, or even to run PYTHIA as a plugin to ROOT.
This is possible. It is not a task supported by the PYTHIA team,
however. All issues involving ROOT usage should be directed to the
ROOT team, or to the local support team of your collaboration.
Below some helpful hints have been collected. The text is based on
contributions by Rene Brun, Andreas Morsch and Axel Naumann.
Another example may be found in the
add-on program for parton showers, but this should also work for
a PYTHIA standalone run.
Note that in all that follows, a Linux-type system with a Bash shell
and GNU Make is assumed. In particular, for Mac OS X, the
LD_LIBRARY_PATH should be replaced with
DYLD_LIBRARY_PATH and the extension for shared libraries
.so should be replaced with
One can perform the generation and analysis of events in a completely
standalone fashion, and only use ROOT to process the completed events.
Some example programs are provided in the
directory, with details provided below and in the
The examples assume that you have already compiled the PYTHIA library,
ROOT is installed, and that all paths have been setup correctly (e.g.
PATH and LD_LIBRARY_PATH). If these paths are not already set, ROOT
typically comes with a shell script to set these paths, which can be
Histogramming with ROOT
An example of histogramming with ROOT is provided in
rootexamples/hist.cc. It may be compiled and run
with the following commands
After PYTHIA has run, a ROOT histogram of the charged multiplicity in
the events will be shown. This is now stored in the
Storing PYTHIA events in ROOT trees
Instead of only generating histograms, it is possible to store entire
PYTHIA events in ROOT trees. The
tree example in the
rootexamples subdirectory provides an example of this and
is comprised of the following files
tree.cc is the main example program showing how
PYTHIA events can be stored in ROOT trees.
pythiaLinkdef.h is used by Makefile to generate the
dictionary for all PYTHIA classes involved in the IO, as needed for
pythiaROOT.h is a small include declaring the
Pythia8 namespace as default.
The example may be compiled and run with
After the example has run, the
pytree.root file will now
be present containing the PYTHIA events. Note that files can become
quite large when many events are generated.
PYTHIA as a plugin to ROOT
In more ROOT-centric applications, PYTHIA can be run as a ROOT plug-in.
This requires a version of ROOT that has been
installed from source. The reason is that the interfaces depend on
PYTHIA header files that are not distributed with ROOT. Installing ROOT
is not more difficult than the PYTHIA installation, and some
guidelines are provided below.
To be run as a plugin, PYTHIA must be compiled as a shared library.
This is achieved by running the PYTHIA
--enable-shared option before
Define an environment variable for the path to your
PYTHIA installation directory
Before compiling ROOT,
configure ROOT by running the
including the following options
In case ROOT has already been compiled before, it will only recompile
the PYTHIA module and build the library
When running PYTHIA as a plugin, the exact interface structure becomes
very relevant. ROOT provides two simple interfaces (wrappers) for
PYTHIA 8. The code for these interfaces are located in
The two interfaces are
basic example for generating minimum-bias events with PYTHIA 8 inside
a ROOT macro, and filling some histograms with the kinematics of the
final-state particles is provided in either of the locations below
Note that before executing this script
The script can then be run with ROOT
After execution, ROOT will display some histograms from the event
To access the full PYTHIA functionality from the CINT interpreter,
a ROOT dictionary must be created. An example of creating this
dictionary is contained in the
pythiaDict.so library may be created by running
This may then be loaded in ROOT giving full access to the full PYTHIA 8
functionality, e.g. in an interactive session
Pythia8::Pythia *p = new Pythia8::Pythia();
p->readString("SoftQCD:nonDiffractive = on");