Analytic continuation#
Note
Improvements to analytic continuation in AmpForm are currently being developed in Chew-Mandelstam and Analyticity.
Analytic continuation allows one to handle resonances just below threshold (\(m_0 < m_1 + m_2\) in Eq. (3)). In practice, this entails using a specific function for \(\rho\) in Eq. (1).
Definitions#
Three usual choices for \(\rho\) are the following:
1) Break-up momentum#
The sqrt() or ComplexSqrt of BreakupMomentumSquared:
from ampform.dynamics import BreakupMomentumSquared
s, m1, m2, L = sp.symbols("s, m1, m2, L", nonnegative=True)
q_squared = BreakupMomentumSquared(s, m1, m2)
Math(aslatex({q_squared: q_squared.evaluate()}))
2) ‘Normal’ phase space factor#
The ‘normal’ PhaseSpaceFactor (the denominator makes the difference to (1)!):
from ampform.dynamics import PhaseSpaceFactor
rho = PhaseSpaceFactor(s, m1, m2)
Math(aslatex({rho: rho.evaluate()}))
3) ‘Complex’ phase space factor#
A PhaseSpaceFactorComplex that uses ComplexSqrt:
from ampform.dynamics import PhaseSpaceFactorComplex
rho_c = PhaseSpaceFactorComplex(s, m1, m2)
Math(aslatex({rho_c: rho_c.evaluate()}))
4) ‘Analytic continuation’ of the phase space factor#
The following ‘case-by-case’ analytic continuation for decay products with an equal mass, EqualMassPhaseSpaceFactor:
from ampform.dynamics import EqualMassPhaseSpaceFactor
rho_ac = EqualMassPhaseSpaceFactor(s, m1, m2)
Math(aslatex({rho_ac: rho_ac.evaluate()}))
with
(Mind the absolute value.)
5) Chew-Mandelstam for \(S\)-waves#
A PhaseSpaceFactorSWave that uses chew_mandelstam_s_wave():
from ampform.dynamics import PhaseSpaceFactorSWave
rho_cm = PhaseSpaceFactorSWave(s, m1, m2)
Math(aslatex({rho_cm: rho_cm.evaluate()}))
Cut structure#
When analytically continued into the complex plane, the breakup momentum and phase space factor exhibit distinct cut structures, depending on the definition of the square root in the numerator. The separated square root definition,
leads to a cleaner cut structure than
Here we investigate the cut structure of each of these definitions using AmpForm and SymPy.
Note
When defining the break-up momentum and the phasespace factor with a single square root in the numerator a more complex cut structure emerges when continuing the functions into the complex \(s\)-plane.
Dispersion integral#
To get an analytic phasespace factor for higher angular momenta, the one has to compute the dispersion integral. According to PDG, Rev. Resonances the once-substracted dispersion integral is given by:
integral_expr = ChewMandelstamIntegral(s, m1, m2, L)
integral_expr.doit(deep=False)
integral_s_wave_func = sp.lambdify(
[s, m1, m2, integral_expr.epsilon],
integral_expr.subs(L, 0).doit(),
)
integral_s_wave_func = np.vectorize(integral_s_wave_func)
Interactive visualization#
%matplotlib widget
import symplot
from ampform.sympy.math import ComplexSqrt
m = sp.Symbol("m", nonnegative=True)
rho_c = PhaseSpaceFactorComplex(m**2, m1, m2)
rho_cm = PhaseSpaceFactorSWave(m**2, m1, m2)
rho_ac = EqualMassPhaseSpaceFactor(m**2, m1, m2)
np_rho_c, sliders = symplot.prepare_sliders(plot_symbol=m, expression=rho_c.doit())
np_rho_ac = sp.lambdify((m, m1, m2), rho_ac.doit())
np_rho_cm = sp.lambdify((m, m1, m2), rho_cm.doit())
np_breakup_momentum = sp.lambdify(
(m, m1, m2),
2 * ComplexSqrt(q_squared.subs(s, m**2).doit()),
)
plot_domain = np.linspace(0, 3, 500)
sliders.set_ranges(
m1=(0, 2, 200),
m2=(0, 2, 200),
)
sliders.set_values(
m1=0.3,
m2=0.75,
)