These update notes describe major updates relative to the
PYTHIA 8.243 version, which was the starting point for PYTHIA
8.3. The step from 8.2 to 8.3 gave an occasion to break backwards
compatibility. The main change is that C++11 is now assumed.
The impact on existing used code should be mild, however.
- 8.306: 28 June 2021
- 8.305: 03 May 2021
- 8.304: 09 April 2021
- 8.303: 01 September 2020
- 8.302: 24 April 2020
- 8.301: 30 October 2019
8.306: 28 June 2021
- Fixed the incorrect scale being set when applying the POWHEG veto,
main31.cc. Note that the number of emissions is
correct in 8.303, but is incorrect in 8.304 and 8.305. Thanks to
- Fixed repeated initialization causing an ever expanding physics
pointer list in the main
- Fixed issue for HepMC output from Vincia, which would previously
issue warnings about inconsistent mother/daughter relationships,
caused by Vincia's antenna-style bookkeeping by which emitted partons
have two mothers instead of one. For status codes 43, 51, and 53, the
HepMC interface now ignores the second parent, always using just the
first one to define the vertex structure. Minor modifications to
Vincia's QCD shower to ensure that the first mother is the one that
changed colour and hence would be identified with the "radiator" in a
collinear context. Analogous modifications in the QED module so the
most collinear parent is the first mother.
assert statements from Angantyr.
- Shortened Pythia constructor header.
8.305: 03 May 2021
- Fixed issue that otherwise caused the weights of the Dire
parton shower to be erroneously discarded. The fix will impact
the results produced with the Dire parton shower model. The
results of the previous version should be considered
- Fixed potential for segfault in
weightsShowerPtr == nullptr.
- A number of fixes related to Vincia have been included.
- Bug fixes in Vincia's merging, addressing the issue that
occasionally incomplete histories were accepted while a complete one
- Fixed some small bugs in Vincia's QED shower that could cause
issues when running at very high energies.
- Minor namespace fixes. Moved
VinciaConstants from headers to source files and moved
enum antFunType inside the Pythia8 namespace.
- Added default initialisers for data members in several Vincia
classes, to avoid potentially undefined behaviour. Thanks to
- Fixed unintentional initial-state radiation from unresolved hadron
beams when set with option
which would break up the beam. Minor fix also for cases where two
- Added threshold check on low energy cross sections. This fixes a
small bug reported by Vittorio Zecca.
- Corrected bug in normalization of histograms in
main07.cc. Thanks to M. Baker and A. Thamm.
8.304: 09 April 2021
- Christian Preuss and Rob Verheyen join the author team.
- Christine O. Rasmussen leaves as an active author.
- New "sector" antenna showers implemented and made default
for the Vincia antenna shower model.
- Minor changes to a few of the default Vincia hadronisation
parameters, reflecting the move to sector showers as default.
- New dedicated LO merging scheme for the Vincia sector antenna
showers. The scheme is similar to CKKWL in spirit but exploits the
bijective nature of the sector shower to vastly reduce the number of
histories that need to be taken into account.
- New full-fledged electroweak shower option implemented for the
Vincia shower model. The splitting kernels are based on collinear
limits of corresponding helicity matrix elements so this EW shower
model requires Born partons with assigned helicities. Currently these
must either be input via LHEF or (for experts) runtime via Vincia's
interface to MG5 matrix elements.
- Introduced tools to automatically generate MadGraph plugin
- New options for interleaved resonance decays implemented for both
Pythia's default (simple) shower model, and for Vincia's
antenna-shower model. Made default for the Vincia shower model,
while Pythia's shower keeps its previous (non-interleaved) default
- Revised internal handling of shower variations and splitting
enhancements, both for regular and trial emissions. Enhancements of
rare shower splittings are now steered by settings instead of
UserHooks, and the necessary weights are automatically included in the
shower and merging weights.
- A number of updates have been made to sophisticated tau
- External SPINUP is now always interpreted as a helicity state in
the lab frame to ensure consistent treatment between tau
decays and helicity showers.
- The default external mode for tau decays has been changed to
handle helicity showers.
- gamma gamma → tau^+ tau^- processes are now
- Helicity states for initial beams can be specified and used in
- Added HDF5 support.
- Added support for lepton-photon initiated hard processes generated
internally or externally. Thanks to Liu Yao-Bei.
- Minor code changes to allow hadronic rescattering in nuclear
collisions (remove limit on number of rescatterings, increase maximum
transverse vertex location).
- Double quarkonia production, if enabled, is now also included in
both MPI and second hard processes.
- Added some new functionality to the
- Moved the event information in Info class to an appropriate
diffractive system for hard diffraction. This way also the
hard-process scale is properly propagated for primordial kT
StringFragmentation.cc is made to increase faster for
charm and bottom end quarks, to allow an increased few-body fraction
further above threshold. Thanks to Andy Buckley.
ResonanceDecayFilterHook and example
main103.cc to demonstrate how to select specific final states
from resonance decays.
- Fixed vertex smearing in heavy ion events.
- Fixed remnant handling for e+e- collisions for photon-initiated
processes, thanks to Murat Köksal.
- Several (mostly minor) optimisations in Vincia, thanks to
- Minor fixes in xml/html QCD process links and text.
- Several small bug fixes based on error reports by Vittorio Zecca.
- Fixed a bug where some elastic cross sections for pi K at low
energies were set equal to the total ones.
- Protect against too high constituent masses inside a hadron in
LowEnergyProcess.cc, already at an earlier stage of the
- Protect against exp(-infinity) in
- Two fixes for first step in the trial emissions in
StringFragmentation.cc, used primarily in the thermal
- Properly set the photon-in-lepton PDF to vanish at very large
x, rather than give unphysical values there.
- Better protection against weird results for the
eta methods in
- Fixed pointer logic in Dire
- Migrated from
log(1 + x) to
- Several small fixes in response to a static code analysis,
provided by Dmitri Konstantinov.
- Fix inconsistency in the usage of the third argument of the
dsigmaEl method in the classes derived from
- Flawed and unused
- Fix inconsistent type for
- Introduce minor changes, e.g. to protect against out-of-bounds
addressing or insert missing initializer, even though there is no
evidence that it is needed.
- Small speedup of the
switch() instead of
if to find element
to be returned.
- Bug fixed in the new possibility to let particles with narrow
widths (such as onia states) obtain a simple Breit-Wigner
distribution, specifically for MPIs, introduced in 8.240. This bug led
to excessive rejection of low-invariant-mass interactions. Thanks to
Albert De Roeck.
- Default event record checks switched off for
main21.cc, to avoid issues with junction mother-daughter
relations not being fully set. Also change so that showers are not
called twice. Now all available cases are looped over, but easy to
change back to study only one.
8.303: 01 September 2020
- Marius Utheim and Leif Gellersen join the author team.
- A new framework for
has been developed. To enable rescattering, use
HadronLevel:Rescatter = on, or see
main156.cc for use
examples. Note that while the framework is ready to use, it is still
being actively developed, and changes are likely in the near
future. The older and much simpler rescattering models have been
removed, including the related pp tunes 33 and 34, and there
has been some file reorganization in code and documentation.
- A new class HadronWidths has been
added to handle hadrons with mass-dependent widths. This has been done
primarily because of its importance in resonance formation in
rescattering, but the class is also used for decays of hadrons
produced in other processes.
- A new class
LowEnergySigma has been added to
calculate cross sections of hadron-hadron interactions at low
energies. These are used in rescattering and when performing primary
collisions at low energies. Cross sections can be accessed using
- Several changes in the
MiniStringFragmentation frameworks, in particular with
several new approaches to produce nondiffractive inelastic events as
close as possible to the kinematical threshold. New method
StringFlav::combineToLightest attempts to form the
lightest hadron for a given flavour content. Also new possibility to
disable popcorn baryon production, for use in small systems.
- The "decay"/mixing time of K^0/K^0bar → K^0_S/K^0_L
has been changed from 1e-15 to 1e-6 mm, such that it only happens
after hadronic rescattering, but still well before
- The Parton Vertex
impact-parameter-plane assignment machinery has been completely
rewritten and expanded with new options and capabilities. The default
proton radius has been change from 0.7 to 0.85 fm.
- Limit the amount by which transverse smearing of the space-time
quark-antiquark string breakup vertices can give large shifts, see
further the new
HadronVertex:maxSmear parameter. The new
HadronVertex:maxTau gives the possibility to reject
hadrons of suspected misreconstructed systems and try again. The
introduction of MPI impact parameters is compensated by a reduced
transverse hadronization smearing. Also some other related
- The internal generation of photon-induced processes in hadronic
collisions has been extended. This can be enabled with the new options
supersede the previous
PDF:leptonA2gamma option. Some
minor updates also for other related options, see
PDF Selection for details.
- New photon fluxes from hadrons implemented, see
PDF Selection for details.
- New example main program
main78.cc to generate
elastic, single- and double-dissociative photon-induced processes in
proton-proton collisions, using options
PDF:beamB2gamma. Also the sample programs
main70.cc have been updated to
use the new options.
- For asymmetric beams (e.g. electron-proton collisions) in Les
Houches event files, a boost to the event CM frame is now defined and
applied for outgoing particles, as required for succesful event
- The problem of "dangling" gluons causing changing color flows in
SimpleTimeShower for top decays is now fixed. The fix is
not fully validated for RPV.
- For LHE processes, the width of the primordial kT distribution is
now set solely by the
change is so that LHE events with low-pT extra jets (e.g., in the
context of POWHEG-style merging) are given the same primordial kT as
their Born-level counterparts.
- Improved HepMC3 multiweight output.
- Added automated renormalization scale variations in CKKW-L type
- Added UNLOPS merging scheme variations.
- Added warning messages in UNLOPS merging.
- Added flexible runtime plugin loading for Dire and Vincia matrix
element corrections from Madgraph. These corrections can be enabled
--enable-mg5mes flag during configuration and
- Introduced common runtime plugin loading and unloading
- Removed PDF set tracking for LHAPDF6 which breaks thread
safety. In some cases this might cause a small penalty in memory.
SLHA:keepSM as it duplicates the
functionality provided by
- Some new methods in the
Hist::plotFunc creates a
histogram from the function provided as first argument, by evaluating
its value in the middle of each histogram
Hist::normalize can rescale a histogram to an
intended sum of bin contents. Methods to get x limits and
lowest and highest y value.
Hist::getYAbsMin for consistency.
HistPlot::addFile can add a file of data points, with or
without errors, on to an existing histogram, for comparison purposes.
A new variant of
HistPlot::plot can set the frame
LinearInterpolator class in
fromSameVframe sets up transformation to/from a frame
where two particles move towards each other with equal-size velocities
along the +-z direction.
- Some new functionality accessible via
- It is now possible to use range-based for loops to iterate over
particles in an event, e.g.
for (Particle& p :
pythia.event). Similarly, the particle data table can be
iterated over, with each entry being a
- New possibility to redirect particle data listing output.
- A configure option
--obj-common='FLAGS' to add
additional compiler flags to object (
(i.e. no effect on linking).
- Compilation flag
floating point exceptions on a gcc compiler.
index() method in the
class of the Fastjet3 interface ensures that the location of the
particle in the PYTHIA event record is returned correctly. Thanks to
Gavin Salam and Priyotosh Bandyopadhyay.
- A minor fix for kinematics of zero-virtuality photons to retain
- Protect against diffractive masses exceeding phase space bounds
for hard diffraction.
- A bug for propagation of space-like partons in string shoving.
Thanks to Dong Jo Kim.
- Several indexing bugs for the "guess" option used in CKKW-L
merging have been fixed. However, this does not yet mean that "guess"
is guaranteed to be stable for any BSM process.
- Several fixes for problems discovered in a static code analysis,
including one bug fix in LowEnergyProcess.cc. Thanks to Dmitri
- Mixup of
SecondHardProcess labels resolved. Thanks to Anton
- Number of weights in
info reset to 1 for each new
- Fixed issue where the dark matter mass was reset even after
explicitly being set by the user, e.g.
X. This affects particle IDs 57 (DM+), 58
(DM2), and 59 (DM++).
- An indexing bug for the scattering lepton in DIS events with
photon radiation allowed has been fixed.
- The redefinition of
dlsym for plugin loading has now
been removed as this is no longer required by modern compilers. Thanks
to Chris Burr.
- Several small bug fixes based on error reports by Vittorio Zecca.
ProcessContainer.cc the error calculation for Les
Houches strategy +-3 should not be renewed for each file when the
event sample is split across several files.
ProcessContainer::trialProcess() a call to
phaseSpacePtr->rescaleMomenta( sHatNew); should not be
done since the momenta have not been set yet.
- In the CT14qed PDF grid (and others?) the first two x
grid values coincide, so one must not divide by their difference.
- Default initialization of
Info.h is necessary.
- Protected against explicit evaluation of alphaS(LambdaQCD) in
VinciaISR. Also added explicit member-variable
initialisations for the
QEDemitElemental class in
- Protected against floating point exceptions caused by dividing by
PhaseSpace for zero-width resonances.
- Corrected a floating point exception in
- Protected against out of range renormalization scale access for
- Some further replacements of
- Fix missing-pointer bug when colour reconnection is switched off
for diffraction. Thanks to Valentina Zaccolo.
8.302: 24 April 2020
- A HepMC 3 interface is now included in
Pythia8Plugins/HepMC3.h. All HepMC examples have been
migrated from using the HepMC 2 interface to HepMC 3, excluding
main93.cc which are kept for
- Bug fix to correct units for automated shower uncertainty weights
lhaStrategy = ±4. In addition, the
combination of weight variations, within the context of uncertainty
bands, was not previously well documented and was therefore prone to
misunderstandings. Now, all methods related to cross sections and
weights are documented together on a single page,
Cross Sections and Weights, the
documentation on shower Variations has
been improved, and the behaviour of
Info::getGroupWeight() has been made more transparent.
main121.cc example has been modified
accordingly. Note that the bug fix for
±4 parallels an analogous one made in Pythia 8.244 which
had not been previously carried over to Pythia 8.3.
- Fix for subscripting issue for photon beams, courtesy of Vittorio
- New particle property directive
tauCalc allows for a
particle's proper lifetime to be set independently of its width. This
is useful for studying the effect of lifetime for a particle when the
particle width is otherwise negligible.
- Significant speedup of parton distribution handling, and
thereby of the whole PYTHIA execution, since PDF is such a major
part of the total execution time. This has been achieved by
careful work by Dmitri Konstantinov and Grigory Latyshev.
In detail, the main changes are:
- In the LHAPDF6 interface the evaluation of the x and
Q^2 limits is extremely slow, such that a caching of these
numbers increases execution speed by about a factor of 2 when LHAPDF
- A caching of info on the amount of x already used up
helps speed up MPI, ISR and FSR execution times, giving gains of
order 20%. Main changes are in the
- Optimization of array handling in
a speedup by about 5%. This is the internal PYTHIA implementation
of interpolation in LHAPDF6 grids which, still after the LHAPDF6
improvements reported above, runs more than 50% faster than using
the same PDF evaluated by LHAPDF6. This streamlining is made at
the cost of not offering facilities like PDF error bands.
- Also the special internal routines for the NNPDF 2.3 series
could be speeded up, but would still be slower than an equivalent
LHAGrid1 implementation. The NNPDF 2.3 sets therefore
have been moved to the latter framework.
- New base class
ShowerModel introduced, as a
top-level handler of parton-shower models, interfaced via a shared
Changes to Pythia's default showers
and to the Vincia and Dire shower models to inherit from
ShowerModel. New public method
Pythia::getShowerModelPtr() intended to provide a way
to access public ShowerModel methods for diagnostics purposes.
- Extra protection against unexpected input in e+e- Les
Houches events, specifically where x >= 1 by roundoff errors.
Thanks to Alexander Belyaev, Alexander Pukhov and Marco Zaro.
- Bug fix in
SusyLesHouches::checkSpectrum(), to ensure uniform
error handling when one or more spectrum self-consistency checks fails.
- Replaced use of
in several places. Although default C++
abs() only takes
PythiaStdLib.h contains the
using std::abs (via the
header), which is suitably overloaded and obviates the need for
- Improvements to Vincia's handling of error messages;
now issued via
with Vincia reverting to the same (in-code) way of setting tune
presets as Dire and Pythia.
8.301: 30 October 2019
- Compilation is done with a new
- The Vincia and Dire parton-shower programs, which previously have
been available as free-standing add-ons to Pythia, are now fully
integrated into Pythia, and will henceforth be distributed as part of
this package. This has significant implications for code and
documentation. The new master switch
allows a simple choice of which to use, with 1 being the simple old
internal one, 2 being Vincia and 3 being Dire. Note that Dire always
comes with weighted events, while the other two by default have unit
weight events, so analysis strategies must be adjusted accordingly.
- MadGraph-generated plugins for matrix element corrections to the
Vincia and Dire parton-shower programs are now available. A new
plugins directory has been created, where MadGraph5 matrix elements
can be stored. Note that this implementation still is preliminary,
with further improvements to come. To build the available plugins,
--enable-mg5mes should be specified.
- Four new main programs have been introduced in the context of
illustrating the Vincia and Dire shower models. Two of them also serve
as examples of multithreading if Pythia is configured to link to
main200.cc provides a simple test of final-state
shower components, in a LEP-like setup.
compares two different shower models on dijet events. The two runs
are executed in parallel if Pythia has been configured to link to
main202.cc measures the running time for ttbar
events and outputs a few test distributions.
can be linked against both HepMC2 and OpenMP, if Pythia has been
configured correspondingly. It is capable of command-line
- A new plugin header,
Visualisation is available and
used in the example program
main300.cc. Events can now be
visualized via output that can be passed through GraphViz to produce a
- Introduced a compromise for the treatment of lifetime and width,
so that these can be set separately in some situations. If an
SLHA file is used to set particle properties, then
SLHA:allowUserOverride = true allows the lifetime to be
set using a command file/string. Otherwise, lifetime is calculated
from particle width. The ability to have the width and lifetime as
independent properties is convenient for studies of new physics.
- The HTML and XML versions of the manual have been significantly
reordered, with contents grouped in an increased set of main headings,
each with an expandable index of subheadings. There are several new
sections, notably for the Vincia and Dire showers. Among other changes,
the example main programs have been classified by keywords, and are
listed and searchable by these, see
- The PHP version of the manual has been discontinued, since it
would be difficult to maintain in conjuction with the ongoing expansion
of the html manual. The
directory has been removed.
- The Python interface has been completely redesigned to handle
C++11 by migrating from a
interface to a
PyBind11 one. It is now possible for
users to generate their own interface. Full details are given on the
Python Interface page.
- The field
Pythia::info of type
been made a constant reference, so that it cannot be externally
manipulated outside of the internal classes. This constant reference
points back to
Pythia::infoPrivate instance, which is
for internal use only. This instance now also contains pointers to
several other commonly used classes.
- A new base class
PhysicsBase has been created, from
which several of the "physics" classes derive. This class standardizes
the setup of pointers to commonly used classes, via the
Info class. It has new methods that are called at the
beginning and end of the generation of each event, and at the printout
of final statistics. A new enum
Status is provided in the
method at the end of each event, to provide information on the reason
for error exits. The access of the most commonly used
Settings methods is streamlined.
- Most of the pointers in the
Pythia class are now
shared pointers, such that there is no need for
keep track of
obligations. New header
classes are now separated, rather than the latter being derived from
the former. This avoids the problem of the old
pointer potentially changing address, and some pointer casting.
- Mathematical functions and methods have been extracted from the
PythiaStdlib.h/.cc files and put in new
MathTools.h/.cc files. Thereby
is more clearly reserved for declarations related to the Stdlib
library, to some simple inline expressions (now
where feasible) and to an expanded list of conversion constants.
- A new method
Rndm::phaseSpace2 has been added, and can be
used to sample two-body phase space.
- The heavy ion machinery has been fixed so that particle vertex
information in the event record is stored in units of mm
rather than fm, while internal calculations still are in
fm. Thanks to Christopher Plumberg.
- The data files related to parton distributions have been moved to
share/pythia8/pdfdata directory, and code has been
- Iterators are made available to simplify the study of the particles
in the event record.
- A bug in the XML-to-HTML conversion has led to the indiscriminate
removal of "more" from the HTML manual, notably in
- New class
LowEnergyProcess for the hadronization of
low-energy collisions between two hadrons. By default there is a smooh
transition between this simple nonperturbative model and the full
MPI-based framework at higher energies. To be used e.g. within the
modelling of hadronic rescattering in the final state of high-energy
collisions. This framework is still under development.
StringInteractions base class to provide common
administrative framework for string shoving, rope hadronization,
swing, (some) colour reconnection models, and more.
- The headers in
include/Pythia8Plugins have been
updated to no longer contain
using namespace Pythia8.
Thanks to Axel Naumann for pointing out inconsistent usage of scope.
- The build system has been updated to handle external package
ProMC example and configuration option has been
- Optional package configurations for
YODA have been added.
- Support for
BOOST has been dropped and only
LHAPDF6 with versions greater than
- The flag
--openmp has been added. Currently, OpenMP
is used in some of the examples mentioned above, and in
- Bug fix so the option
is correctly used in
- Bug fix stopping growth of number weights when multiple
init calls are made in
- Bug fix for
SusyWidthFunctions.cc incorrectly calling
integrateGauss, resulting in a width of zero.
- Bug fix to prevent overwriting of dark matter masses from unused
- Bug fix where instead of counting all PDG ids less than 100 as
the Standard Model, masses of BSM Higges and dark matter are allowed
to be set without changing minMassSM.
- All 2 to 2 SUSY processes now inherit from Sigma2SUSY.
- Bug fix for Les Houches Event File input without specified beams,
such that multiparton decays of a resonance can be combined with
showers, although with proper care needed so as not to doublecount
- Clarify that Q2 scale has to be set by hand for DIS processes, if