Skip to content

cms-externals/pythia8

Repository files navigation

----------------------------------------------------------------------

   INSTALLATION - BASIC

1) Once you have unpacked your tarball into a new (sub)directory, the
   first step is to run the "configure" script. If you accept the
   default compiler options, and plan to run PYTHIA 8 standalone, you
   only have to type "./configure". This will create the file
   Makefile.inc.  Actually, running this script by hand is optional
   since "make" will run "configure" anyway, but possible errors in
   the paths will be less clearly visible.

2) Type "gmake" or "make". This will create an archive library.
   On Linux systems gmake and make are usually equivalent. For others,
   in case of doubt, use gmake. This applies below as well.

3) The library should now be ready for use. To study some examples,
   go to the "examples" subdirectory. The README file in that
   subdirectory contain further instructions how executables can
   be built and run.

4) At any time, typing "gmake clean" will remove all files related to
   the library compilation, including the library itself, but it will
   not reset the configure selections. With "gmake distclean" additionally
   the configure selection is reset, and many other temporary files are
   removed. Output files you may have created during your test runs are
   not affected. (A "gmake clean" is also available in the examples
   subdirectory, see the README there.)

----------------------------------------------------------------------

   INSTALLATION - ADVANCED OPTIONS

1) If you want to set various compilation options, the following two options
   are available.

1.1) You can use command-line arguments to the configure script for
     finer grain control of the installation. A full description of
     the options is given by running "configure --help". Here additional
     clarification is provided.
     --enable-debug : turns on debugging flags and turns off optimization.
         (This makes program execution much slower. If you later want to
         switch optimization back on you have to rerun configure without
         this option, since default is to allow optimization.)
     --enable-optdebug : turns on debugging flags but allow optimization.
     --enable-shared : turns on shared-library creation,
         in addition to the archive libraries always built.
     --enable-64bit : turns on 64 bits compilation flag
         (is automatic on many 64-bit installations, but just in case).
     --lcg=PLATFORM : allows you to specify the platform assumed for
         compilation, which also affects the assumed location of the
         libraries below; default is x86_64-slc5-gcc43-opt while other
         supported values for name include slc4_ia32_gcc34,
         slc4_amd64_gcc34 and slc3_ia32_gcc323 (deprecated).
     --prefix=DIR : absolute path to a directory where the "bin",
         "lib", "include", and "share" directories will be copied, by
         a "gmake install" command subsequent to the "gmake" one.
         Note that the files in the current working directory are
         kept.
     --prefix-COMPONENT=DIR : finer grain control over where the "bin", "lib",
         "include", and "share" directories are copied for installation.
     --arch=ARCH : sets the architecture to be used. The two options
         are either "Darwin" for OS X, or "Linux" for other *nix
         platforms. The architecture is used to set automatically the
         "--cxx-shared", "--cxx-soname", and "--lib-suffix" flags but
         otherwise has no effect.
     --cxx=COMPILER : the compiler to be used. Currently PYTHIA 8 has
         been successfully compiled with GCC and LLVM
         (i.e. CLANG). Most systems will by default have "g++" aliased
         or linked to the appropriate compiler for your program.
     --cxx-common='FLAGS' : the flags that are passed for all
         compilation statements. This is equivalent to the GNU
         configuration variable CXXFLAGS, which is not supported here.
     --cxx-shared='FLAGS' : the flags that are passed when building
         shared dynamic libraries. These are only used when building
         "lib/libpythia8.[so,dylib]" and
         "lib/libpythia8lhapdf[5,6].so".
     --cxx-soname='FLAGS' : these flags are passed to the linker when
         setting the shared library names. Normally this should not
         need to be changed.
     --lib-suffix=SUF : the shared library suffix to use. This only
         effects the name of "lib/libpythia8.SUF". Typically for *nix
         systems this is ".so" and for OS X this is ".dylib".

1.2) All of the options listed above are formatted into
     "Makefile.inc", which is also copied to
     "examples/Makefile.inc" whenever "gmake" is run and
     a change has been made. The "Makefile.inc" file can be simply
     modified to change any of these options after "configure" is
     run. Each option corresponds to a variable in this file as
     follows: "--option-foo-bar" is translated to "OPTION_FOO_BAR".

2) If you have two CPUs or cores on your computer then using the "-j"
   option on make/gmake may speed up compilation.

3) Necessary data are automatically loaded when you use the default
   PYTHIA installation directory structure and run the main programs in
   the examples subdirectory. However, in the general case, you must
   provide the path to the .xml files, originally stored in the xmldoc
   directory, where default settings and particle data are found. This
   can be done in two ways.

3.1) You can set the environment variable PYTHIA8DATA to contain the
     location of the xmldoc directory. In the csh and tcsh shells this
     could e.g. be
       setenv PYTHIA8DATA /home/myname/pythia81xx/share/Pythia8/xmldoc
     while in other shells it could be
       export PYTHIA8DATA=/home/myname/pythia81xx/share/Pythia8/xmldoc
     where xx is the subversion number.
     Recall that environment variables set locally are only defined in
     the current instance of the shell. The above lines should go into
     your .cshrc and .bashrc files, respectively, if you want a more
     permanent assignment.

3.2) You can provide the path as argument to the Pythia constructor in
     your main program, e.g.
       Pythia pythia("/home/myname/pythia81xx/share/Pythia8/xmldoc");
     where again xx is the subversion number.

   When PYTHIA8DATA is set it takes precedence, else the path in the
   constructor is used, else one defaults to the ../share/Pythia8/xmldoc
   directory, which works fine when you run the examples/mainNN programs.

----------------------------------------------------------------------

   INSTALLATION - EXTERNAL PACKAGES

1) PYTHIA 8 is designed to run out-of-the-box without any external
   package dependencies. However, a variety of interfaces to external
   packages is available. The building and linking to external
   interfaces can be controlled via the same two options as the
   advanced installation options.

1.1) Command-line arguments can be passed to "configure" using the
     arguments that begin with "--with". When an external package
     interface is enabled, "configure" takes the following steps.
     a) It looks for the necessary binaries, headers, and libraries
        that are needed for the external package. If no paths for the
        package have been defined it looks along the default paths
        for the system. If it can not find the necessary files, it
        disables the external package and issues a warning as to why.
     b) It looks for any external packages that this package might
        require, and enables them if needed. It then checks to see if
        these packages fulfill a). If not, it disables both packages.
     If any "--with-PACKAGE" option is passed to "configure" it will
     attempt to enable the package. For example, "--with-lhapdf6" will
     enable LHAPDF6, while "--with-lhapdf6-lib=/lib/foo" will also
     enable LHAPDF6. The available "--with" arguments are
     described by "./configure --help", but further details are given
     here.
     --with-PACKAGE=[DIR] : enables a package and if "DIR" is
         provided, then looks for the package at this root path. For
         example, if the command "--with-lhapdf6=/foo/bar" is passed,
         then "configure" will look for the library LHAPDF along the
         path "/foo/bar/lib" and the LHAPDF headers along the path
         "/foo/bar/include".
     --with-PACKAGE-bin=DIR : specifies where to look for the package
         binaries, and will ignore the root path from
         "--with-PACKAGE=DIR" and the default system paths. This can
         be used for non-standard installations of packages, where the
         "bin", "lib", and "include" directories are scattered across
         the system. In the example "--with-lhapdf6=/foo
         --with-lhapdf6-bin=/foo/bar" the "configure" script will look
         for libraries and headers on the paths "/foo/lib" and
         "/foo/include", but the binaries on the path "/foo/bar" and
         not "/foo/bin".
     --with-PACKAGE-lib=DIR : same as above for bin, but now for
         libraries.
     --with-PACKAGE-include=DIR : same as above for bin, but now for
          headers.
     --with-PACKAGE-version=VER : is used when the "--lcg=PLATFORM"
         option is specified, and will cause "configure" to look for
         version "VER" of the package in the default LCG location.

1.2) All of the options above can also be set in "Makefile.inc" after
     "configure" has been run. For each package the variable
     "PACKAGE_USE" sets whether the package is used ("true" is used,
     while "false" is not). The variables "PACKAGE_BIN",
     "PACKAGE_INCLUDE", and "PACKAGE_LIB" then specify what paths are
     used when building, for the binaries, headers, and libraries,
     respectively.

2) A variety of external packages can be enabled, with details given here.
   FASTJET3) The industry standard package to build jets,
       http://fastjet.fr/.  An interface to FastJet is provided in the
       "include/Pythia8Plugins/FastJet3.h" header and a variety of
       examples in "examples" link against the FastJet libraries.
   HEPMC2) An interface to the HepMC event record, version 2:
       http://lcgapp.cern.ch/project/simu/HepMC/. The interface
       between PYTHIA 8 and HepMC is provided via the
       "include/Pythia8Plugins/HepMC2.h" header.
   HEPMC3) An interface for the upcoming HepMC 3 format. Currently this
       package does nothing, as the record does not exist yet.
   LHAPDF5) Provides an interface to the FORTRAN version of LHAPDF,
       details can be found here:
       http://lhapdf.hepforge.org/lhapdf5/. Because PDF sets are an
       integral part of PYTHIA 8, the LHAPDF interface is handled
       differently than for the other external packages. If LHAPDF5
       support is enabled, then the shared library
       "lib/pythia8lhapdf5.so" is built (even for OS X systems because
       this library is not used for linking). This library is NOT
       linked with PYTHIA, but rather is dynamically loaded at
       runtime. Consequently, PYTHIA is no longer linked against
       LHAPDF, but rather attempts to load it at runtime if an LHAPDF
       set is requested. Note that the plugin library
       "pythia8lhapdf5.so" must exist along the current library load
       path. This can be set by the environment variable
       "LD_LIBRARY_PATH" or at compile time using the "--Wl,-rpath"
       linker flag.
   LHAPDF6) The details for this package are the same as for LHAPDF5,
       but now for the modern C++ version of LHAPDF,
       http://lhapdf.hepforge.org/. There are three important things to
       note here. First, the LHAPDF6 package provides the exact same C
       interface as the LHAPDF5 package, and so technically supplying
       LHAPDF6 libraries to the LHAPDF5 package option will work. This
       is not recommended except for checking that the new C++
       interface works properly. Second, both LHAPDF5 and LHAPDF6 can
       be used simultaneously, technically. This behavior has not
       been tested and is not recommended. Third, if using a version
       earlier than 6.2, BOOST is required and can be specified using
       "--with-boost".
   ROOT) The ROOT HEP package used for data analysis and
       visualization, http://root.cern.ch. This package is only used
       for the "examples/main9[1,2].cc" examples.
   BOOST) Advanced C++ libraries, http://www.boost.org/, which are needed
       when using the C++ interface for LHAPDF6 with version < 6.2.
   GZIP) Support for the reading of gzipped LHE files. It relies upon
       zlib to function. The "--with-gzip=PATH" provides the location
       for "zlib.h" and "libz.[so,dylib]". Note that when compiling a
       final PYTHIA executable, the zlib library must also be
       included, e.g.: "-lz". This is done automatically for the
       examples in "examples/" when GZIP support is enabled.
   PYTHON) Provides a Python interface to Pythia. To build this interface,
       the executable "python" must be available, as well as the
       Python system header "Python.h". Typically this can be found
       under "/usr/include/pythonX.Y". Note that the interface
       includes this header as "#include <Python.h>" so the user will
       typically need to explicitly set the include path with
       "--with-python-include=/usr/include/pythonX.Y" or something
       similar. The interface works both with Python 2 and 3.

----------------------------------------------------------------------

   COMPILING PROGRAMS AGAINST PYTHIA 8

Generally compiling programs against the PYTHIA 8 libraries requires
that the PYTHIA 8 header and library directories be specified via the
usual -I and -L compiler flags, and that at least the -lpythia8 option
be provided to link against the PYTHIA 8 library.

Extra compiler flags will be needed if you are making use of PYTHIA 8's
external package features. To make this simpler,
and so that an identical compilation recipe can be used with different
builds of PYTHIA (e.g. for inclusion in shared Makefiles), a pythia8-config
script will be installed into PREFIX_BIN/bin by the "make install" build
target. A typical usage of this script is as follows:

g++ myprog.cc -o myprog `pythia8-config --cppflags --libs`

The --cppflags option to this script makes pythia8-config write out
the necessary -I flags corresponding to the installed headers, and
--libs adds the required -L and -l flags.

The pythia8-config script may also be used at runtime to generate the
data directory environment variable if needed, e.g.:

PYTHIA8DATA=`pythia8-config --xmldoc` ./myprog

----------------------------------------------------------------------

   FOR WINDOWS USERS

PYTHIA 8 is primarily intended to be run in a Unix-based environment,
such as Linux or Mac OS X. Unfortunately it is not currently supported
for Windows platforms. If you want to experiment, and do not have the
knowledge to set everything up from scratch yourself, we are aware of
three possible approaches to take.

1) Install Linux in a Virtual Machine (VM) on your Windows system,
and then work within this virtual environment as on any regular
Linux platform. You could e.g. download the VirtualBox
    https://www.virtualbox.org/
and install either Ubuntu or CernVM (Scientific Linux)
    http://cernvm.cern.ch/
on it. Make sure your installation includes the g++ compiler.

2) Install the Cygwin package, intended to allow Linux apps to run
under Windows, see
    https://www.cygwin.com/
Be sure to install the Dev tools, which appears in the list of options
to include, but won't be installed by default. Then put the Pythia
folder in the Cygwin/home directory, and compile and work with it
as usual. (The include/Pythia8Plugins/execinfo.h file provides dummy
versions of methods needed for proper compilation.)

3) The nuget.org website
    http://www.nuget.org/packages/Pythia8/
contains pre-built PYTHIA packages ready to be used under Windows
Visual Studio.

We take no responsibility for either of these solutions.
Also note that linking with other libraries may involve further
problems, in particular for the dynamic loading of LHAPDF.

----------------------------------------------------------------------

   LEARN MORE

To learn more about the current program:

A) A brief self-contained introduction is found in the
   share/Pythia8/pdfdoc/pythia8200.pdf file.

B) Details can be found by opening a web browser on the
   share/Pythia8/htmldoc/Welcome.html file, and then navigating among
   the pages in the index there.

----------------------------------------------------------------------