diff --git a/docs/usage/dynamics/analytic-continuation.ipynb b/docs/usage/dynamics/analytic-continuation.ipynb index 7151ad7dd..1a82cfe01 100644 --- a/docs/usage/dynamics/analytic-continuation.ipynb +++ b/docs/usage/dynamics/analytic-continuation.ipynb @@ -357,7 +357,7 @@ "np_rho_cm = sp.lambdify((m, m_a, m_b), rho_cm.doit())\n", "np_breakup_momentum = sp.lambdify(\n", " (m, m_a, m_b),\n", - " ComplexSqrt(q_squared.subs(s, m**2).doit()) / (8 * sp.pi),\n", + " 2 * ComplexSqrt(q_squared.subs(s, m**2).doit()),\n", ")" ] }, @@ -417,7 +417,7 @@ "for ax in [ax_rho_cm, ax_rho_ac]:\n", " ax.set_yticks([])\n", "\n", - "ylim = (-0.002, 0.03)\n", + "ylim = (-0.1, 1.4)\n", "\n", "\n", "def func_imag(func, *args, **kwargs):\n", @@ -547,8 +547,16 @@ "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", - "version": "3.8.17" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" } }, "nbformat": 4, diff --git a/src/ampform/dynamics/phasespace.py b/src/ampform/dynamics/phasespace.py index 1e5902b31..75a424a5d 100644 --- a/src/ampform/dynamics/phasespace.py +++ b/src/ampform/dynamics/phasespace.py @@ -92,9 +92,10 @@ def _latex_repr_(self, printer: LatexPrinter, *args) -> str: @unevaluated class PhaseSpaceFactor(sp.Expr): - """Standard phase-space factor, using :func:`BreakupMomentumSquared`. + r"""Standard phase-space factor, using :func:`BreakupMomentumSquared`. - See :pdg-review:`2021; Resonances; p.6`, Equation (50.9). + See :pdg-review:`2021; Resonances; p.6`, Equation (50.9). We ignore the factor + :math:`\frac{1}{16\pi}` as done in :cite:`chungPrimerKmatrixFormalism1995`, p.5. """ s: Any @@ -105,8 +106,7 @@ class PhaseSpaceFactor(sp.Expr): def evaluate(self) -> sp.Expr: s, m1, m2 = self.args q_squared = BreakupMomentumSquared(s, m1, m2) - denominator = _phase_space_factor_denominator(s) - return sp.sqrt(q_squared) / denominator + return 2 * sp.sqrt(q_squared) / sp.sqrt(s) def _latex_repr_(self, printer: LatexPrinter, *args) -> str: s_symbol = self.args[0] @@ -136,8 +136,7 @@ class PhaseSpaceFactorAbs(sp.Expr): def evaluate(self) -> sp.Expr: s, m1, m2 = self.args q_squared = BreakupMomentumSquared(s, m1, m2) - denominator = _phase_space_factor_denominator(s) - return sp.sqrt(sp.Abs(q_squared)) / denominator + return 2 * sp.sqrt(sp.Abs(q_squared)) / sp.sqrt(s) def _latex_repr_(self, printer: LatexPrinter, *args) -> str: s_symbol = self.args[0] @@ -163,8 +162,7 @@ class PhaseSpaceFactorComplex(sp.Expr): def evaluate(self) -> sp.Expr: s, m1, m2 = self.args q_squared = BreakupMomentumSquared(s, m1, m2) - denominator = _phase_space_factor_denominator(s) - return ComplexSqrt(q_squared) / denominator + return 2 * ComplexSqrt(q_squared) / sp.sqrt(s) def _latex_repr_(self, printer: LatexPrinter, *args) -> str: s_symbol = self.args[0] @@ -212,7 +210,7 @@ def chew_mandelstam_s_wave(s, m1, m2): right_term = (m1**2 - m2**2) * (1 / s - 1 / (m1 + m2) ** 2) * sp.log(m1 / m2) # evaluate=False in order to keep same style as PDG return sp.Mul( - 1 / (16 * sp.pi**2), + 1 / sp.pi, left_term - right_term, evaluate=False, ) @@ -265,10 +263,6 @@ def _analytic_continuation(rho, s, s_threshold) -> sp.Piecewise: ) -def _phase_space_factor_denominator(s) -> sp.Mul: - return 8 * sp.pi * sp.sqrt(s) - - def _indices_to_subscript(indices: Sequence[int]) -> str: """Create a LaTeX subscript from a list of indices.