## Update History

These update notes describe major updates relative to the PYTHIA 8.243 version, which was the last 8.2 release (so far). 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.303: 01 September 2020

- Marius Utheim and Leif Gellersen join the author team.
- A new framework for Hadronic Rescattering has been developed. To enable rescattering, use `HadronLevel:Rescatter = on`, or see example programs `main151.cc` through `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 `Pythia::getLowEnergySigma`.
- Several changes in the `LowEnergyProcess` and `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 K^0_S/K^0_L decays.
- 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 changes.
- The internal generation of photon-induced processes in hadronic collisions has been extended. This can be enabled with the new options `PDF:beamA2gamma` and `PDF:beamB2gamma`, which 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:beamA2gamma` and `PDF:beamB2gamma`. Also the sample programs `main69.cc` and `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 processing.
- 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 `BeamRemnants:primordialKThard` parameter, ignorning `BeamRemnants:primordialKTsoft`. This 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 merging schemes.
- 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 with the `--enable-mg5mes` flag during configuration and with the `Dire:MEplugin` and `Vincia:MEplugin` settings.
- Introduced common runtime plugin loading and unloading structure.
- Removed PDF set tracking for LHAPDF6 which breaks thread safety. In some cases this might cause a small penalty in memory.
- Removed `SLHA:keepSM` as it duplicates the functionality provided by `SLHA:minMassSM`.
- Some new methods in the `Hist` and `HistPlot` classes. `Hist::plotFunc` creates a histogram from the function provided as first argument, by evaluating its value in the middle of each histogram bin. `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::smallestAbsValue` renamed `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 borders.
- New `LinearInterpolator` class in `MathTools`.
- New `RotBstMatrix` methods `toSameVframe` and `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 `PythiaStdlib.h`.
- It is now possible to use range-based for loops to iterate over particles in an event, e.g. `for (Particle&amp p : pythia.event)`. Similarly, the particle data table can be iterated over, with each entry being a `pair<int, ParticleDataEntry&amp>`.
- New possibility to redirect particle data listing output.
- A configure option `--obj-common='FLAGS'` to add additional compiler flags to object (`.o`) compilation (i.e. no effect on linking).
- Compilation flag `-DGCCFPDEBUG` enables floating point exceptions on a gcc compiler.
- New `index()` method in the `Py8Particle` 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 physical kinematics.
- 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 Konstantinov.
- Mixup of `ASecondHardProcess` and `SecondHardProcess` labels resolved. Thanks to Anton Karneyeu.
- Number of weights in `info` reset to 1 for each new `init` call.
- Fixed issue where the dark matter mass was reset even after explicitly being set by the user, e.g. `57:m0 = 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.
  - In `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.
  - In `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 `hasOwnEventAttributes` in `Info.h` is necessary.
  - Protected against explicit evaluation of alphaS(LambdaQCD) in `VinciaISR`. Also added explicit member-variable initialisations for the `QEDemitElemental` class in `VinciaQED`.
  - Protected against floating point exceptions caused by dividing by zero in `PhaseSpace` for zero-width resonances.
  - Corrected a floating point exception in `Ropewalk.cc`.
  - Protected against out of range renormalization scale access for diffractive systems.
- Some further replacements of `fabs` by `abs`.
- 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 `main44.cc` and `main93.cc` which are kept for legacy purposes.
- Bug fix to correct units for automated shower uncertainty weights for `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. The `main121.cc` example has been modified accordingly. Note that the bug fix for `lhaStrategy = ±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 Zecca.
- 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 is used.
  - 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 `BeamParticle` class.
  - Optimization of array handling in `LHAGrid1` give 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 pointer in `Pythia.cc`. 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 `fabs()` by `abs()` in several places. Although default C++ `abs()` only takes integer arguments, `PythiaStdLib.h` contains the declaration `using std::abs` (via the `cmath` header), which is suitably overloaded and obviates the need for separate methods.
- Improvements to Vincia's handling of error messages; now issued via `Info::errorMsg()`.
- Removed `share/Pythia8/tunes` directory, 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 `-std=c++11` flag.
- 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 `PartonShowers:model` 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 OpenMP. `main200.cc` provides a simple test of final-state shower components, in a LEP-like setup. `main201.cc` compares two different shower models on dijet events. The two runs are executed in parallel if Pythia has been configured to link to OpenMP. `main202.cc` measures the running time for ttbar events and outputs a few test distributions. `main300.cc` can be linked against both HepMC2 and OpenMP, if Pythia has been configured correspondingly. It is capable of command-line instructions.
- 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 postscript file.
- 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 here.
- 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 `include/Pythia8/phpdoc` directory has been removed.
- The Python interface has been completely redesigned to handle `C++11` by migrating from a `SWIG` generated 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 `Info` has 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 `Pythia` to keep track of `new` and `delete` obligations. New header `SharedPointers.h`.
- The `CoupSM` and `CoupSUSY` couplings classes are now separated, rather than the latter being derived from the former. This avoids the problem of the old `Couplings` 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 `PythiaStdlib` is more clearly reserved for declarations related to the Stdlib library, to some simple inline expressions (now `constexpr` 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 a new `share/pythia8/pdfdata` directory, and code has been changed accordingly.
- 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 `Pythia::moreDecays()`.
- 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.
- New `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 configuration scripts.
- The `ProMC` example and configuration option has been dropped.
- Optional package configurations for `RIVET` and `YODA` have been added.
- Support for `BOOST` has been dropped and only `LHAPDF6` with versions greater than `6.2` are supported.
- The flag `--openmp` has been added. Currently, OpenMP is used in some of the examples mentioned above, and in `DireWeightContainer.cc`.
- Bug fix so the option `UncertaintyBands:ISRpTmin2Fac` is correctly used in `SimpleSpaceShower.cc`.
- Bug fix stopping growth of number weights when multiple `init` calls are made in `Info`.
- 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 model selections.
- 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 emissions.
- Clarify that Q2 scale has to be set by hand for DIS processes, if so desired.