\(D^+\to\pi^+\pi^+\pi^-\) with Dalitz-plot decomposition#
This report demonstrates a Bose-symmetric isobar model for \(D^+\to\pi^+\pi^+\pi^-\) using QRules for transition generation, AmpForm-DPD for symbolic helicity amplitudes, and TensorWaves for numerical evaluation. The amplitude is checked for Bose symmetry and used to plot an illustrative Dalitz density.
The resonance content follows two published analyses:
CLEO [Bonvicini and others, 2007], Table II: \(\rho(770)\), \(f_2(1270)\), \(f_0(980)\), \(f_0(1370)\), \(f_0(1500)\), and a low-mass \(\sigma\) component, represented here by \(f_0(500)\).
LHCb [Aaij and others, 2023], Table 2: also includes \(\omega(782)\), \(\rho(1450)\), and \(\rho(1700)\). Its S wave is determined with a quasi-model-independent parametrization, rather than separate scalar isobars. States tested without significant improvement, such as \(\rho_3(1690)\), are not included here.
This nine-resonance example combines CLEO’s scalar-isobar content with the additional LHCb vector states. It retains the package Breit–Wigner dynamics, masses, widths, and radii. CLEO instead uses a complex \(\sigma\) pole and a Flatté function for \(f_0(980)\); LHCb uses Gounaris–Sakurai functions for the \(\rho\) states. The S wave, especially near the \(K\bar K\) threshold, therefore remains an approximation. The source fit-fraction ratios set the relative component strengths below; the result is a literature-informed illustration, not a reproduction of either fit. No CP violation is assumed.
Generate the decay chains#
Label \(D^+\) by 0 and \((\pi^+_1,\pi^+_2,\pi^-_3)\) by \((1,2,3)\). The charm decay is weak, so imposing strong-interaction conservation on the entire chain would incorrectly forbid it. We allow weak interactions in QRules; the selected neutral resonances also have strong-decay-compatible \(J^P\) for their two-pion daughters.
qrules: 0.10.12
ampform-dpd: 0.2.4
tensorwaves: 0.4.17
resonance |
\(J^P\) |
mass (MeV) |
width (MeV) |
\(L_\mathrm{dec}^\mathrm{min}\) |
\(L_\mathrm{prod}^\mathrm{min}\) |
|---|---|---|---|---|---|
\(f_{0}(1370) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
1,350 |
350 |
0 |
0 |
\(f_{0}(1500) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
1,522 |
108 |
0 |
0 |
\(f_{0}(500) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
600 |
450 |
0 |
0 |
\(f_{0}(980) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
990 |
60 |
0 |
0 |
\(f_{2}(1270) \to \pi^{+} \pi^{-}\) |
\(2^+\) |
1,275 |
186 |
2 |
2 |
\(\omega(782) \to \pi^{+} \pi^{-}\) |
\(1^-\) |
782 |
8 |
1 |
1 |
\(\rho(1450)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
1,465 |
400 |
1 |
1 |
\(\rho(1700)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
1,720 |
250 |
1 |
1 |
\(\rho(770)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
775 |
147 |
1 |
1 |
Formulate and display the model#
Define
The invariant relation, scattering angle, and dynamics definitions below are rendered from the model and package expression objects. All external spins are zero, so the Wigner functions reduce to Legendre polynomials.
The dynamics factor \(X_R\) is the product of the resonance lineshape and the production and decay form factors. \(B_J^2\) is AmpForm’s normalized Blatt–Weisskopf function, with \(B_J^2(1)=1\). Both radii retain the package default of \(1\,\mathrm{GeV}^{-1}\). Angular momentum requires \(L_\mathrm{production}=L_\mathrm{decay}=J_R\); canonical-helicity supplies these orbital angular momenta to the dynamics builder.
The installed AmpForm-DPD v0.2.4 builder passes \(s^2\) to the decay form factor and the pole mass \(m_R\) as a production daughter mass. The correction below replaces these arguments by \(s\) and \(\sqrt{s}\), respectively. The Breit–Wigner, running width, and form-factor implementations remain those of the packages.
The Bose-symmetric amplitude and intensity are
AmpForm’s HelicityAmplitudeBuilder includes identical-particle symmetrization automatically; the fix for this channel was released in v0.15.9 (see the accepted answer in discussion #475). This report uses DalitzPlotDecompositionBuilder from AmpForm-DPD instead.
In AmpForm-DPD v0.2.4, permute_equal_final_states generates both particle assignments, but their helicity couplings must account for the daughter-order convention. Writing \(z(s,t)=\cos\theta_{23}\), for equal pion masses the generated angles satisfy \(\cos\theta_{31}(s,t)=-z(t,s)\). Consequently, \(P_J(-z)=(-1)^J P_J(z)\) introduces a relative minus sign for the P wave if the two subsystems are summed with unchanged helicity couplings. Here we formulate subsystem 1 and explicitly exchange \(s\leftrightarrow t\) in its amplitude, retaining the same complex coefficient and daughter convention. The complex-amplitude symmetry check below verifies this construction.
An overall \(1/\sqrt{2!}\) amplitude convention is absorbed into normalization. The plot covers the full labelled Dalitz domain; integration for an absolute identical-particle rate requires the corresponding \(1/2!\) phase-space factor.
s, t, u = sp.symbols("sigma1:4", nonnegative=True)
m0, m1, m2, m3 = sp.symbols("m:4", nonnegative=True)
builder = DalitzPlotDecompositionBuilder(decay)
for name in resonance_names:
builder.dynamics_choices.register_builder(
name, formulate_breit_wigner_with_form_factor
)
model = builder.formulate(cleanup_summations=True, use_coefficients=True)
assert len(model.amplitudes) == 1
# Correct form-factor kinematics in AmpForm-DPD v0.2.4.
form_factor_corrections = {}
for expression in model.amplitudes.values():
for ff in expression.atoms(FormFactor):
if ff.s == s**2:
form_factor_corrections[ff] = FormFactor(
s, ff.m1, ff.m2, ff.angular_momentum, ff.meson_radius
)
elif ff.s == m0**2:
form_factor_corrections[ff] = FormFactor(
m0**2, sp.sqrt(s), ff.m2, ff.angular_momentum, ff.meson_radius
)
model.amplitudes.update({
symbol: expression.xreplace(form_factor_corrections)
for symbol, expression in model.amplitudes.items()
})
Math(aslatex(model.amplitudes, terms_per_line=1))
The kinematic definitions and spin factors are
The tensor-wave lineshape illustrates the package dynamics. Each definition is obtained by evaluating one layer of its expression object; the barrier factors are shown for all three spins.
# Retain the package coefficient names; set their numerical values below.
couplings = {
symbol: value
for symbol, value in model.parameter_defaults.items()
if isinstance(symbol, sp.Indexed)
}
fixed_parameters = {
symbol: value
for symbol, value in model.parameter_defaults.items()
if symbol not in couplings
}
subamplitude = next(iter(model.amplitudes.values())).doit()
subamplitude = subamplitude.xreplace(model.variables).doit()
subamplitude = subamplitude.subs(u, model.invariants[u])
subamplitude = subamplitude.xreplace(fixed_parameters)
# Preserve the daughter convention when exchanging the identical pions.
amplitude = subamplitude + subamplitude.xreplace({s: t, t: s})
intensity = sp.Abs(amplitude) ** 2
intensity_function = create_parametrized_function(intensity, couplings, backend="numpy")
amplitude_function = create_parametrized_function(amplitude, couplings, backend="numpy")
M = decay.states[0].mass
mpi = decay.states[1].mass
sigma_sum = M**2 + 3 * mpi**2
coefficient_symbols = {
name: next(symbol for symbol in couplings if resonance.latex in str(symbol))
for name, resonance in resonances.items()
}
assert len(set(coefficient_symbols.values())) == len(resonance_names)
component_functions = {
name: create_function(amplitude.diff(symbol), backend="numpy")
for name, symbol in coefficient_symbols.items()
}
Physical Dalitz domain and numerical checks#
For a scalar parent, three-body phase space is constant in \(ds\,dt\) inside the kinematic boundary. Thus \(I(s,t)\) is proportional to the Dalitz density without an additional momentum weight. The bounds below are rendered from the same symbolic expressions used for numerical evaluation.
We evaluate only interior points, where scattering angles are defined. The checks below verify the corrected form-factor arguments, Bose symmetry of the complex amplitude, and finite nonnegative intensity. An intensity-only symmetry check would miss an antisymmetric amplitude.
Bose symmetry and intensity checks passed at 2000 physical points.
Couplings informed by measured component strengths#
A coefficient of one has a different meaning for each unnormalized lineshape. Copying published magnitudes would also mix different angular and lineshape normalizations. Instead, let \(a_R(s,t)\) be the Bose-symmetrized amplitude with coefficient one, and define
With \(c_{\rho(770)}=1\), choose
This preserves ratios of diagonal component integrals, independently of the overall amplitude normalization. CLEO [Bonvicini and others, 2007] supplies the six original components; LHCb [Aaij and others, 2023] supplies the three additional vectors, using its own \(\rho(770)\) fraction as their reference. These are separate fits, not a combined experimental result. Their central phase values are adopted only as illustrative starting values in the DPD convention: an exact phase transfer would require matching each source’s angular signs and dynamical phase conventions. No uncertainty propagation or refit is performed.
The integrals use equal-area cells on the physical Dalitz domain. Comparing 500 and 1000 bins per axis checks numerical stability, including the narrow \(\omega\) band. The displayed model fractions are computed with the coherent denominator,
They need not equal the source fractions or sum to one because of interference and the combined resonance content.
Resonance |
Source |
Source FF [%] |
Starting phase [deg] |
\(\lvert c_R\rvert\) |
Model FF [%] |
|---|---|---|---|---|---|
\(\rho(770)^{0}\) |
CLEO |
20 |
0 |
1 |
20.817 |
\(f_{0}(500)\) |
CLEO |
41.8 |
-3 |
0.2335 |
43.508 |
\(f_{0}(980)\) |
CLEO |
4.1 |
12 |
0.156 |
4.268 |
\(f_{2}(1270)\) |
CLEO |
18.2 |
-123 |
3.46 |
18.944 |
\(f_{0}(1370)\) |
CLEO |
2.6 |
-21 |
0.0515 |
2.706 |
\(f_{0}(1500)\) |
CLEO |
3.4 |
-44 |
0.1218 |
3.539 |
\(\omega(782)\) |
LHCb |
0.103 |
-103.3 |
0.2534 |
0.082 |
\(\rho(1450)^{0}\) |
LHCb |
5.4 |
47 |
0.2673 |
4.324 |
\(\rho(1700)^{0}\) |
LHCb |
5.7 |
-65.7 |
0.5732 |
4.564 |
Largest change in component integrals on grid refinement: 0.311%.
Sum of model fit fractions: 102.75%.
Dalitz plot#
The 1000 Ă— 1000 regular grid avoids Monte Carlo fluctuations and resolves the narrow \(\omega(782)\) contribution. The color is the coherent intensity divided by its maximum on this grid, on a logarithmic scale; it is not a normalized probability density or a measured event count. The two axes distinguish the otherwise identical positive pions. Reflection about \(s=t\) must leave the density unchanged.
The \(\rho(770)\), \(f_0(980)\), and \(f_2(1270)\) bands now have strengths informed by measured component ratios. The heavier states contribute broad structures and interference; their presence does not imply separate visible bands. The small \(\omega(782)\) contribution is concentrated near the \(\rho(770)\) band. The intensity remains symmetric under exchange of the positive pions.