Two beams of identical particles (electrons, muons or protons — pick the rest mass m) accelerate around the ring in opposite directions and collide head-on at the interaction point. For each beam, relativistic energy and momentum are related by E² = p²c² + m²c⁴, so once you set the beam energy E the code derives everything else exactly:
p = √(E² − m²) (natural units, c = 1)
γ = E / m
v/c = p / E
λ_dB = 2πℏc / p (ℏc = 0.19733 GeV·fm)
At each collision the two 4-momenta (E₁, p₁, 0) and (E₂, −p₂, 0) are combined into the collision's invariant mass, the quantity that actually determines what can be produced:
√s = √[ (E₁+E₂)² − (p₁−p₂)² ]
Outgoing product count scales with available energy (n ≈ 2 + 2.2·ln(1+√s), clamped 2–16), and each product's scattering angle is drawn from a real inverse-CDF sample of a tunable power-law angular distribution θ = π·u1/n (u uniform on [0,1]) — the "cross-section hardness" slider is literally the exponent n: small n scatters broadly (soft, isotropic-like), large n forward-peaks the jets the way small-angle Coulomb/Rutherford-style scattering does. Every burst's product energies are drawn to sum exactly to E₁+E₂ and its net transverse momentum to sum to zero, so the "momentum balance" readout is a live check that conservation holds burst after burst.
- Ring view — beam 1 (cyan) and beam 2 (magenta) particles orbit and collide at the interaction point; the little ripple riding each particle is its de Broglie wave, drawn at its real (scaled) wavelength.
- √s strip chart — invariant mass of each collision, most recent on the right.
- Scattering-angle rose — accumulated polar histogram of product angles, reshaped live as you drag the hardness slider.