phasespace#

Functions for determining phase space boundaries.

See also

Kinematics

class BreakupMomentum(s, m1, m2, name, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Break-up momentum of a two-body decay.

For a two-body decay \(R \to 12\), the break-up momentum is the absolute value of the momentum of both \(1\) and \(2\) in the rest frame of \(R\). See Equation (50.7) on PDG2024, §Resonances, p.7.

In AmpForm’s standard implementation, the numerator is represented as a single square root. This results in better computational performance, as the expression tree has fewer computational nodes, but comes at the cost of a more complicated cut structure when the function is continued to the complex plane. The square root itself is defined as the standard sympy.sqrt.

Alternative implementations:

(1)#\[\begin{split} \begin{aligned} q\left(s\right) \;&=\; \frac{\sqrt{\left(s - \left(m_{1} - m_{2}\right)^{2}\right) \left(s - \left(m_{1} + m_{2}\right)^{2}\right)}}{2 \sqrt{s}} \\ \end{aligned}\end{split}\]
class BreakupMomentumKallen(s, m1, m2, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Two-body break-up momentum with a Källén function.

This version of the BreakupMomentum represents the numerator using the Kallen function. This is common practice in literature (e.g. PDG2024, §Resonances, p.7), but results in a more complicated cut and worse numerical performance than BreakupMomentum.

(2)#\[\begin{split} \begin{aligned} q\left(s\right) \;&=\; \frac{\sqrt{\frac{\lambda\left(s, m_{1}^{2}, m_{2}^{2}\right)}{s}}}{2} \\ \end{aligned}\end{split}\]

with \(\lambda\left(x, y, z\right)\) defined by Kallen.

class BreakupMomentumSplitSqrt(s, m1, m2, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Two-body break-up momentum with cut structure.

This version of the BreakupMomentum represents the numerator as two separate square roots. This results in a cleaner cut structure at the cost of slightly worse numerical performance than BreakupMomentum.

(3)#\[\begin{split} \begin{aligned} q\left(s\right) \;&=\; \frac{\sqrt{s - \left(m_{1} - m_{2}\right)^{2}} \sqrt{s - \left(m_{1} + m_{2}\right)^{2}}}{2 \sqrt{s}} \\ \end{aligned}\end{split}\]
class BreakupMomentumComplex(s, m1, m2, name, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Two-body break-up momentum with a square root that is defined on the real axis.

In this version of the BreakupMomentumSplitSqrt, the square roots are replaced by ComplexSqrt, which has a defined behavior for negative input values, so that it can be evaluated on the entire real axis.

(4)#\[\begin{split} \begin{aligned} q^\mathrm{c}\left(s\right) \;&=\; \frac{\sqrt[\mathrm{c}]{s - \left(m_{1} - m_{2}\right)^{2}} \sqrt[\mathrm{c}]{s - \left(m_{1} + m_{2}\right)^{2}}}{2 \sqrt{s}} \\ \end{aligned}\end{split}\]

with \(\sqrt[\mathrm{c}]{x}\) defined by ComplexSqrt.

class BreakupMomentumSquared(s, m1, m2, name, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Squared value of the two-body BreakupMomentum.

It’s up to the caller in which way to take the square root of this break-up momentum, because \(q^2\) can have negative values for non-zero \(m_1,m_2\). In this case, one may want to use ComplexSqrt instead of the standard sqrt().

(5)#\[\begin{split} \begin{aligned} q^2\left(s\right) \;&=\; \frac{\left(s - \left(m_{1} - m_{2}\right)^{2}\right) \left(s - \left(m_{1} + m_{2}\right)^{2}\right)}{4 s} \\ \end{aligned}\end{split}\]
class Kibble(sigma1, sigma2, sigma3, m0, m1, m2, m3, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Kibble function for determining the phase space region.

(6)#\[\begin{split} \begin{aligned} \phi\left(\sigma_{1}, \sigma_{2}\right) \;&=\; \lambda\left(\lambda\left(\sigma_{2}, m_{2}^{2}, m_{0}^{2}\right), \lambda\left(\sigma_{3}, m_{3}^{2}, m_{0}^{2}\right), \lambda\left(\sigma_{1}, m_{1}^{2}, m_{0}^{2}\right)\right) \\ \end{aligned}\end{split}\]

with \(\lambda\) defined by (7).

class Kallen(x, y, z, *args, evaluate: bool = False, **kwargs)[source]#

Bases: Expr

Källén function, used for computing break-up momenta.

(7)#\[\begin{split} \begin{aligned} \lambda\left(x, y, z\right) \;&=\; x^{2} - 2 x y - 2 x z + y^{2} - 2 y z + z^{2} \\ \end{aligned}\end{split}\]
is_within_phasespace(sigma1, sigma2, m0, m1, m2, m3, outside_value=nan) Piecewise[source]#

Determine whether a set of masses lie within phase space.

(8)#\[\begin{split}\begin{cases} 1 & \text{for}\: \phi\left(\sigma_{1}, \sigma_{2}\right) \leq 0 \\\text{NaN} & \text{otherwise} \end{cases}\end{split}\]

with \(\phi\) defined by (6).

compute_third_mandelstam(sigma1, sigma2, m0, m1, m2, m3) Add[source]#

Compute the third Mandelstam variable in a three-body decay.

(9)#\[\sigma_3 = m_{0}^{2} + m_{1}^{2} + m_{2}^{2} + m_{3}^{2} - \sigma_{1} - \sigma_{2}\]

Note that this expression is symmetric in \(\sigma_{1,2,3}\).