ramanujan_qft.sunset#

The scheme-independent parts of the massive two-loop sunset. User guide: Two-loop sunset.

ramanujan_qft.sunset.sunset_threshold(m1sq, m2sq, m3sq)[source]#

The three-particle threshold \((m_1 + m_2 + m_3)^2\) of the sunset.

Parameters:
  • m1sq (number) – Squared masses.

  • m2sq (number) – Squared masses.

  • m3sq (number) – Squared masses.

Returns:

At the current mpmath.mp.dps.

Return type:

mpmath.mpf

Examples

>>> sunset_threshold(1, 2, 3)
mpf('17.191508225450303')
ramanujan_qft.sunset.sunset_im(s, m1sq, m2sq, m3sq, dps=None)[source]#

Imaginary part of the two-loop sunset, precision-checked.

\[\operatorname{Im} S(s) = -\frac{\pi}{s}\int_{(m_2+m_3)^2}^{(\sqrt s - m_1)^2} dt\, \frac{\lambda^{1/2}(s, t, m_1^2)\,\lambda^{1/2}(t, m_2^2, m_3^2)}{t}\]

above the threshold \(s > (m_1+m_2+m_3)^2\), and zero below it. The sunset is normalised with \(d^Dk\,d^Dl/(i\pi^{D/2})^2\) and propagators \(1/(q^2 - m^2 + i0)\).

Parameters:
  • s (number or str) – External momentum squared.

  • m1sq (number or str) – Internal squared masses, \(\ge 0\) (the result is symmetric in them).

  • m2sq (number or str) – Internal squared masses, \(\ge 0\) (the result is symmetric in them).

  • m3sq (number or str) – Internal squared masses, \(\ge 0\) (the result is symmetric in them).

  • dps (int, optional) – Decimal digits requested (default: mpmath.mp.dps).

Return type:

mpmath.mpf

Raises:
  • ValueError – For a negative squared mass or a non-finite input.

  • ArithmeticError – If a quadrature or the precision check fails.

Examples

>>> sunset_im(100, 1, 2, 3)
mpf('-88.184995551555915')
>>> sunset_im(10, 1, 2, 3)      # below threshold
mpf('0.0')
ramanujan_qft.sunset.sunset_subtracted(s, m1sq, m2sq, m3sq, dps=None)[source]#

The finite, scheme-independent \(S(s) - S(0) - s\,S'(0)\) of the sunset, precision-checked.

Computed from the twice-subtracted dispersion relation

\[S(s) - S(0) - s\,S'(0) = \frac{s^2}{\pi}\int_{s_{\rm th}}^\infty dt\, \frac{\operatorname{Im} S(t)}{t^2\,(t - s - i0)},\]

so the result is complex above threshold, with imaginary part sunset_im(). The constants \(S(0)\) and \(S'(0)\) themselves are not provided.

Parameters:
  • s (number or str) – External momentum squared (not exactly at threshold).

  • m1sq (number or str) – Internal squared masses, \(\ge 0\), not all zero.

  • m2sq (number or str) – Internal squared masses, \(\ge 0\), not all zero.

  • m3sq (number or str) – Internal squared masses, \(\ge 0\), not all zero.

  • dps (int, optional) – Decimal digits requested (default: mpmath.mp.dps).

Return type:

mpmath.mpc

Raises:
  • ValueError – For invalid inputs, or all masses zero (then \(S'(0)\) does not exist).

  • ArithmeticError – If a quadrature or the precision check fails, for example exactly at threshold.

Notes

A nested quadrature evaluated at two working precisions: about 10-20 s per value, up to about 40 s far above threshold.

ramanujan_qft.sunset.sunset_d2(s, m1sq, m2sq, m3sq, dps=None)[source]#

Second derivative \(S''(s)\) of the sunset below threshold, precision-checked.

\[S''(s) = \frac{2}{\pi}\int_{s_{\rm th}}^\infty dt\,\frac{\operatorname{Im} S(t)}{(t - s)^3}.\]
Parameters:
  • s (number or str) – External momentum squared, below the threshold \((m_1+m_2+m_3)^2\).

  • m1sq (number or str) – Internal squared masses, \(\ge 0\).

  • m2sq (number or str) – Internal squared masses, \(\ge 0\).

  • m3sq (number or str) – Internal squared masses, \(\ge 0\).

  • dps (int, optional) – Decimal digits requested (default: mpmath.mp.dps).

Return type:

mpmath.mpf

Raises:
  • ValueError – At or above threshold, or for invalid inputs.

  • ArithmeticError – If a quadrature or the precision check fails.

Notes

d2 denotes a second derivative, not spacetime dimension D=2. sunset_second_derivative() is an equivalent, more explicit spelling. About 10-20 s per value, like sunset_subtracted().

ramanujan_qft.sunset.sunset_second_derivative(s, m1sq, m2sq, m3sq, dps=None)[source]#

Compute \(S''(s)\) in the four-dimensional dispersive convention.

This is the explicit spelling of sunset_d2(), with the same arguments, precision checks and exceptions. s and the three masses are squared quantities; s must be below the three-particle threshold. The result is an mpmath real number. dps=None uses the current mpmath precision. This function does not evaluate a D=2 sunset integral.

Invalid inputs raise ValueError; failed quadrature or precision checks raise ArithmeticError. The existing sunset_d2 name remains supported without a deprecation warning.