Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
146 lines (100 sloc) 5.88 KB


DecayLanguage: describe, manipulate and convert particle decays

Documentation Status Azure Build Status Coverage Status Tests Status PyPI Package latest release Supported versions Commits since latest release Binder demo

DecayLanguage implements a language to describe and convert particle decays between digital representations, effectively making it possible to interoperate several fitting programs. Particular interest is given to programs dedicated to amplitude analyses.

DecayLanguage provides tools to parse so-called .dec decay files, and manipulate and visualize decay chains.


Just run the following:

pip install decaylanguage

You can use a virtual environment through pipenv or with --user if you know what those are. Python 2.7 and 3.4+ are supported.

Dependencies: (click to expand)

Required and compatibility dependencies will be automatically installed by pip.

Required dependencies:

  • particle: PDG particle data and identification codes
  • Numpy: The numerical library for Python
  • pandas: Tabular data in Python
  • attrs: DataClasses for Python
  • plumbum: Command line tools
  • lark-parser: A modern parsing library for Python

Python compatibility:

Recommended dependencies:

  • graphviz to render (DOT language) graph descriptions of decay chains.
  • pydot, a Python interface to Graphviz's Dot language, used to visualize particle decay chains.


This is a quick user guide. For a full API docs, go here.

DecayLanguage is a set of tools for building and transforming particle decays. The parts are:


Particles are a key component when dealing with decays. Refer to the particle package for how to deal with particles and PDG identification codes.

Decay files

Decay .dec files can be parsed simply with

from decaylanguage import DecFileParser

parser = DecFileParser('my-decay-file.dec')

# Inspect what decays are defined

# Print decay modes, etc. ...

A copy of the master DECAY.DEC file used by the LHCb experiment is provided here for convenience.

The DecFileParser class implements a series of methods giving access to all information stored in decay files: the decays themselves, particle name aliases, definitions of charge-conjugate particles, variable and Pythia-specific definitions, etc.

Decay modeling

The most common way to create a decay chain is to read in an AmpGen style syntax from a file or a string. You can use:

from decaylanguage.modeling import AmplitudeChain
lines, parameters, constants, states = AmplitudeChain.read_ampgen(text='''
EventType D0 K- pi+ pi+ pi-

D0[D]{K*(892)bar0{K-,pi+},rho(770)0{pi+,pi-}}                            0 1 0.1 0 1 0.1

K(1460)bar-_mass  0 1460 1
K(1460)bar-_width 0  250 1

a(1)(1260)+::Spline::Min 0.18412
a(1)(1260)+::Spline::Max 1.86869
a(1)(1260)+::Spline::N 34

Here, lines will be a list of AmplitudeChain lines (pretty print supported in Jupyter notebooks), parameters will be a table of parameters (ranged parameters not yet supported), constants will be a table of constants, and states will be the list of known states (EventType).


You can output to a format (currently only GooFit supported, feel free to make a PR to add more). Use a subclass of DecayChain, in this case, GooFitChain. To use the GooFit output, type from the shell:

python -m decaylanguage -G goofit myinput.opts


DecayLanguage is free software released under a BSD 3-Clause License. It was originally developed by Henry Schreiner.

You can’t perform that action at this time.