Function Repository Resource:

ParticleDecayChain

Source Notebook

Compute and visualize possible decays of a particle

Contributed by: Julia Gao and Joseph Brennan

ResourceFunction["ParticleDecayChain"][particle]

computes the decay chain of particle using its "DecayModes".

ResourceFunction["ParticleDecayChain"][particle,"Hypergraph"]

computes the decay chain of particle and visualize it as a hypergraph.

Details and Options

The Wolfram Knowledgebase contains the properties of over one thousand particles, accessible via ParticleData.
ResourceFunction["ParticleDecayChain"] uses the "DecayModes" property of particles to recursively generate a data structure representing a particle decay.
Returns a hypergraph, a convenient, higher-dimensional way to visualize the decay chain, since a particle and its decay products can be vertices of a single hyperedge.
The following options are supported:
"DecaySteps"2the longest sequence of decays to compute
"MinimumBranchingRatio"0.branching ratios below this are neglected
"MaximumDecayModes"Allthe largest number of distinct decay modes to retain for each particle
ResourceFunction["ParticleDecayChain"] uses the same default options as ResourceFunction["HypergraphPlot"] except for "BaseLayout" and "SubsetBoundaryScale", which are unsupported:
The particle must be a valid Entity in the ParticleData database.

Examples

Basic Examples (1) 

Find all possible decays of a neutron:

In[1]:=
ResourceFunction["ParticleDecayChain"][Entity["Particle", "Neutron"]]
Out[1]=

Scope (2) 

Find the decay chain of a more obscure particle:

In[2]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", {"ChiB2Meson2P", 0}]]
Out[2]=

Visualize as a hypergraph:

In[3]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", {"ChiB2Meson2P", 0}], "Hypergraph"]
Out[3]=

Options (4) 

Choose a custom number of decay steps:

In[4]:=
ResourceFunction["ParticleDecayChain"][Entity["Particle", "PiPlus"], "DecaySteps" -> 1]
Out[4]=

Neglect the decay modes that have a very low probability:

In[5]:=
ResourceFunction["ParticleDecayChain"][Entity["Particle", "PiPlus"], "DecaySteps" -> 1, "MinimumBranchingRatio" -> 0.01]
Out[5]=

Or, retain only a specific number of decay modes for each particle (these will be in reverse order of branching ratio by default):

In[6]:=
ResourceFunction["ParticleDecayChain"][Entity["Particle", "PiPlus"], "DecaySteps" -> 1, "MaximumDecayModes" -> 2]
Out[6]=

Use the same options when visualizing as a hypergraph. For the default number of decay steps (two), each particle has only their two highest-probability decays:

In[7]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", "PiPlus"], "Hypergraph", "MaximumDecayModes" -> 2]
Out[7]=

Use custom options for the hypergraph layout:

In[8]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", "Neutron"], "Hypergraph", "BaseLayout" -> "LayeredEmbedding", "SubsetBoundaryScale" -> 0.5]
Out[8]=

Use more than the default number of decay steps:

In[9]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", "Omega"], "Hypergraph", "MinimumBranchingRatio" -> 0.01, "DecaySteps" -> 3]
Out[9]=

Possible Issues (8) 

Some particles have unknown or missing decay modes, which returns the root particle only:

In[10]:=
Entity["Particle", {"Lambda1820F05", 0}]["DecayModes"]
Out[10]=
In[11]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", {"Lambda1820F05", 0}]]
Out[11]=

Some particles have known possible decay modes, but they are not observed. This also returns the root particle only:

In[12]:=
Entity["Particle", {"EtaMeson1295", 0}]["DecayModes"]
Out[12]=
In[13]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", {"EtaMeson1295", 0}]]
Out[13]=

If the value of "MaximumDecayModes" exceeds the actual number of decay modes, all decay modes are retained:

In[14]:=
ResourceFunction["ParticleDecayChain"][Entity["Particle", "Neutron"], "MaximumDecayModes" -> 5]
Out[14]=

If the value of "MinimumBranchingRatio" is in the uncertainty range of a branching ratio, then the branching ratio is not considered 'less than' it. The FullForm of the branching ratio shows us the Accuracy to which the branching ratio is known:

In[15]:=
uncertainChain = ResourceFunction["ParticleDecayChain"][Entity["Particle", "Neutron"],
   "MinimumBranchingRatio" -> 0.001]
Out[15]=
In[16]:=
FullForm[
 Last[uncertainChain[Entity["Particle", "Neutron"]]]["BranchingRatio"]]
Out[16]=

Similarly, if the branching ratio is given as an Interval and the upper bound exceeds the value of "MinimumBranchingRatio" then it is retained:

In[17]:=
ResourceFunction["ParticleDecayChain"][Entity["Particle", "KStarPlus"],
  "MinimumBranchingRatio" -> 0.001]
Out[17]=

Particles with no decay products return an empty hypergraph:

In[18]:=
Entity["Particle", {"Nucleon1710P11", 0}]["DecayModes"]
Out[18]=
In[19]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", {"Nucleon1710P11", 0}], "Hypergraph"]
Out[19]=

The VertexLabels option is used by default for particle names, however it can be overridden with None:

In[20]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", "Neutron"], "Hypergraph", "BaseLayout" -> "LayeredEmbedding", VertexLabels -> None]
Out[20]=

The input must be a valid Entity contained within EntityList["Particle"]:

In[21]:=
ResourceFunction["ParticleDecayChain"]["neutron"]

Neat Examples (2) 

Find where a given decay chain terminates by increasing "DecaySteps":

In[22]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", "Omega"], "Hypergraph", "MaximumDecayModes" -> 1, "DecaySteps" -> 4, "BaseLayout" -> "LayeredEmbedding"]
Out[22]=

Explore the interesting decays of the Strange B meson:

In[23]:=
ResourceFunction["ParticleDecayChain"][
 Entity["Particle", {"BSMeson", 0}], "Hypergraph", "MaximumDecayModes" -> 4]
Out[23]=

Publisher

Julia Gao

Version History

  • 1.0.0 – 03 September 2025

Related Resources

Author Notes

Thank you to Joseph Brennan for helping with this work!

License Information