\(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 [CLEO Collaboration et al., 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 [The LHCb collaboration et al., 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.
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}(1370) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
1,350 |
350 |
0 |
0 |
\(f_{0}(1500) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
1,522 |
108 |
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}(500) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
600 |
450 |
0 |
0 |
\(f_{0}(980) \to \pi^{+} \pi^{-}\) |
\(0^+\) |
990 |
60 |
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 |
\(f_{2}(1270) \to \pi^{+} \pi^{-}\) |
\(2^+\) |
1,275 |
186 |
2 |
2 |
\(\omega(782) \to \pi^{+} \pi^{-}\) |
\(1^-\) |
782 |
8 |
1 |
1 |
\(\omega(782) \to \pi^{+} \pi^{-}\) |
\(1^-\) |
782 |
8 |
1 |
1 |
\(\rho(1450)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
1,465 |
400 |
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(1700)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
1,720 |
250 |
1 |
1 |
\(\rho(770)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
775 |
147 |
1 |
1 |
\(\rho(770)^{0} \to \pi^{+} \pi^{-}\) |
\(1^-\) |
775 |
147 |
1 |
1 |
flowchart LR
T0_N0["$$D^{+}$$"]
T0_1["$$1: \pi^{+}$$"]
T0_2["$$2: \pi^{+}$$"]
T0_3["$$3: \pi^{-}$$"]
T0_N1@{ shape: text, label: " " }
T0_4("$$\begin{array}{ll} f_{0}(500) & \omega(782) \\\ f_{0}(980) & \rho(770)^{0} \\\ f_{2}(1270) & \rho(1450)^{0} \\\ f_{0}(1370) & \rho(1700)^{0} \\\ f_{0}(1500) & \end{array}$$")
T0_N0 --- T0_4
T0_4 --- T0_N1
T0_N0 --- T0_2
T0_N1 --- T0_1
T0_N1 --- T0_3
T1_N0["$$D^{+}$$"]
T1_1["$$1: \pi^{+}$$"]
T1_2["$$2: \pi^{+}$$"]
T1_3["$$3: \pi^{-}$$"]
T1_N1@{ shape: text, label: " " }
T1_4("$$\begin{array}{ll} f_{0}(500) & \omega(782) \\\ f_{0}(980) & \rho(770)^{0} \\\ f_{2}(1270) & \rho(1450)^{0} \\\ f_{0}(1370) & \rho(1700)^{0} \\\ f_{0}(1500) & \end{array}$$")
T1_N0 --- T1_4
T1_4 --- T1_N1
T1_N0 --- T1_1
T1_N1 --- T1_2
T1_N1 --- T1_3
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. \(\hat{B}_J^2\) is AmpForm’s normalized Blatt–Weisskopf function, with \(\hat{B}_J^2(1)=1\); the hat distinguishes it from the unnormalized PDG convention. Each resonance \(R\) has its own decay radius \(R_R\) and the production vertex uses \(R_{D^+}\), all at 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 dynamics come from AmpForm-DPD’s BreitWignerBuilder with numerator="mass_width", so each propagator is multiplied by \(m_R\Gamma_R\). The decay form factor is evaluated at \(s\) and the production form factor uses the running resonance mass \(\sqrt{s}\) as daughter mass, as the rendered definitions below show. Neither is normalized at the resonance pole. The Breit–Wigner, running width, and form-factor implementations are 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.
AmpForm-DPD imposes this symmetry itself. permute_equal_final_states generates the decay chains for both \(\pi^+\) assignments, and formulate then ties the couplings of each resonance’s two subsystems together, using its symmetrization module. The cyclic pair ordering of the DPD paper writes the isobar of subsystem 1 as \((\pi^+_2\pi^-)\) and that of subsystem 2 as \((\pi^-\pi^+_1)\), so the exchange delivers the isobar’s decay products in reversed order. Writing \(z(s,t)=\cos\theta_{23}\), that means \(\cos\theta_{31}(s,t)=-z(t,s)\), and \(P_J(-z)=(-1)^J P_J(z)\) leaves a relative factor \((-1)^{J_R}\) between the two chains. The signs rendered below are exactly that factor. Only the couplings of subsystem 1 survive as free parameters, and the complex-amplitude symmetry check further down verifies the 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)
dynamics_builder = BreitWignerBuilder(numerator="mass_width")
builder = DalitzPlotDecompositionBuilder(decay)
for name in resonance_names:
builder.dynamics_choices.register_builder(name, dynamics_builder)
model = builder.formulate(use_coefficients=True)
assert len(model.amplitudes) == 2
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 production and decay form factors are those of the model, and 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
}
def substitute_kinematics(expression):
expression = expression.doit().xreplace(model.variables).doit()
expression = expression.subs(u, model.invariants[u])
return expression.xreplace(fixed_parameters)
amplitude = substitute_kinematics(sum(model.amplitudes.values()))
intensity = substitute_kinematics(model.full_expression)
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 Bose symmetry of the complex amplitude and finite nonnegative intensity. An intensity-only symmetry check would miss an antisymmetric amplitude, which is what the exchange signs prevent. The model’s own intensity expression is also compared with the squared modulus of the summed subsystem amplitudes.
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 [CLEO Collaboration et al., 2007] supplies the six original components; LHCb [The LHCb collaboration et al., 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.
One-dimensional mass projections#
The projections integrate the coherent AmpForm-DPD intensity over the physical Dalitz grid. Each has unit area in its pair-mass-squared variable. Bose symmetry makes the \(s\) and \(t\) projections identical; \(u\) describes the same-charge pion pair. Projection bins align with the integration grid to avoid binning artifacts.