D⁰ → K⁰ K⁺ K⁻#

The decay \(D^0 \to K^0K^+K^-\) has a spinless initial and final state, which means that there is no need to align spin with Dalitz-plot decomposition. This notebook shows that the model formulated by ampform is the same as that formulated by AmpForm-DPD. To simplify this comparison, we do not define any dynamics.

%matplotlib widget

Hide code cell content

Decay definition#

Hide code cell source

REACTION = qrules.generate_transitions(
    initial_state="D0",
    final_state=["K0", "K-", "K+"],
    allowed_intermediate_particles=["a(0)", "f(0)(980)", "pi(1)"],
    mass_conservation_factor=0.2,
    formalism="helicity",
)
REACTION123 = normalize_state_ids(REACTION)

Hide code cell source

src = qrules.io.asmermaid(REACTION123, collapse_graphs=True, markdown=True)
Markdown(src)
        flowchart LR
    T0_N0["$$D^{0}$$"]
    T0_1["$$1: K^{0}$$"]
    T0_2["$$2: K^{-}$$"]
    T0_3["$$3: K^{+}$$"]
    T0_N1@{ shape: text, label: " " }
    T0_4("$$a_{0}(980)^{-}$$")
    T0_N0 --- T0_4
    T0_4 --- T0_N1
    T0_N0 --- T0_3
    T0_N1 --- T0_1
    T0_N1 --- T0_2
    T1_N0["$$D^{0}$$"]
    T1_1["$$1: K^{0}$$"]
    T1_2["$$2: K^{-}$$"]
    T1_3["$$3: K^{+}$$"]
    T1_N1@{ shape: text, label: " " }
    T1_4("$$a_{0}(980)^{+}$$")
    T1_N0 --- T1_4
    T1_4 --- T1_N1
    T1_N0 --- T1_2
    T1_N1 --- T1_1
    T1_N1 --- T1_3
    T2_N0["$$D^{0}$$"]
    T2_1["$$1: K^{0}$$"]
    T2_2["$$2: K^{-}$$"]
    T2_3["$$3: K^{+}$$"]
    T2_N1@{ shape: text, label: " " }
    T2_4("$$\begin{gathered} a_{0}(980)^{0} \\\ f_{0}(980) \end{gathered}$$")
    T2_N0 --- T2_4
    T2_4 --- T2_N1
    T2_N0 --- T2_1
    T2_N1 --- T2_2
    T2_N1 --- T2_3
    

Hide code cell source

DECAY = to_three_body_decay(REACTION123.transitions, min_ls=True)
Markdown(as_markdown_table([DECAY.initial_state, *DECAY.final_state.values()]))

index

name

LaTeX

\(J^P\)

mass (MeV)

width (MeV)

0

D0

\(D^{0}\)

\(0^-\)

1,864

0

1

K0

\(K^{0}\)

\(0^-\)

497

0

2

K-

\(K^{-}\)

\(0^-\)

493

0

3

K+

\(K^{+}\)

\(0^-\)

493

0

Hide code cell source

resonances = sorted(
    {t.resonance for t in DECAY.chains},
    key=lambda p: (p.name[0], p.mass),
)
resonance_names = [p.name for p in resonances]
Markdown(as_markdown_table(resonances))

name

LaTeX

\(J^P\)

mass (MeV)

width (MeV)

a(0)(980)0

\(a_{0}(980)^{0}\)

\(0^+\)

980

75

a(0)(980)-

\(a_{0}(980)^{-}\)

\(0^+\)

980

75

a(0)(980)+

\(a_{0}(980)^{+}\)

\(0^+\)

980

75

f(0)(980)

\(f_{0}(980)\)

\(0^+\)

990

60

Hide code cell source

Latex(aslatex(DECAY, with_jp=True))
\[\begin{split}\begin{array}{c} D^{0}\left[0^-\right] \to \left(a_{0}(980)^{+}\left[0^+\right] \to K^{0}\left[0^-\right] K^{+}\left[0^-\right]\right) K^{-}\left[0^-\right] \\ D^{0}\left[0^-\right] \to \left(a_{0}(980)^{-}\left[0^+\right] \to K^{0}\left[0^-\right] K^{-}\left[0^-\right]\right) K^{+}\left[0^-\right] \\ D^{0}\left[0^-\right] \to \left(a_{0}(980)^{0}\left[0^+\right] \to K^{-}\left[0^-\right] K^{+}\left[0^-\right]\right) K^{0}\left[0^-\right] \\ D^{0}\left[0^-\right] \to \left(f_{0}(980)\left[0^+\right] \to K^{-}\left[0^-\right] K^{+}\left[0^-\right]\right) K^{0}\left[0^-\right] \\ \end{array}\end{split}\]

Model formulation#

DPD model#

Note that, as opposed to Λc⁺ → pπ⁺K⁻ and J/ψ → K⁰Σ⁺p̅, there are no Wigner-\(d\) functions, because the final state is spinless.

Hide code cell source

model_builder = DalitzPlotDecompositionBuilder(DECAY, min_ls=True)
DPD_MODEL = model_builder.formulate(cleanup_summations=True)
del model_builder
DPD_MODEL.intensity.cleanup()
\[\displaystyle \left|{A^{1}_{0, 0, 0, 0} + A^{2}_{0, 0, 0, 0} + A^{3}_{0, 0, 0, 0}}\right|^{2}\]

Hide code cell source

Latex(aslatex(DPD_MODEL.amplitudes, terms_per_line=1))
\[\begin{split}\begin{aligned} A^{1}_{0, 0, 0, 0} \;&=\; \sum_{\lambda_{R}=0}{\delta_{0 \lambda_{R}} \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{0}, 0, 0} \mathcal{H}^\mathrm{production}_{a_{0}(980)^{0}, \lambda_{R}, 0} d^{0}_{\lambda_{R},0}\left(\theta_{23}\right)} \\ \;&+\; \sum_{\lambda_{R}=0}{\delta_{0 \lambda_{R}} \mathcal{H}^\mathrm{decay}_{f_{0}(980), 0, 0} \mathcal{H}^\mathrm{production}_{f_{0}(980), \lambda_{R}, 0} d^{0}_{\lambda_{R},0}\left(\theta_{23}\right)} \\ A^{2}_{0, 0, 0, 0} \;&=\; \sum_{\lambda_{R}=0}{\delta_{0 \lambda_{R}} \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{+}, 0, 0} \mathcal{H}^\mathrm{production}_{a_{0}(980)^{+}, \lambda_{R}, 0} d^{0}_{\lambda_{R},0}\left(\theta_{31}\right)} \\ A^{3}_{0, 0, 0, 0} \;&=\; \sum_{\lambda_{R}=0}{\delta_{0 \lambda_{R}} \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{-}, 0, 0} \mathcal{H}^\mathrm{production}_{a_{0}(980)^{-}, \lambda_{R}, 0} d^{0}_{\lambda_{R},0}\left(\theta_{12}\right)} \\ \end{aligned}\end{split}\]

There is an isobar Wigner-\(d\) function, which takes the following helicity angles as argument:

Hide code cell source

\[\begin{split}\begin{aligned} \theta_{23} \;&=\; \operatorname{acos}{\left(\frac{2 \sigma_{1} \left(- m_{1}^{2} - m_{2}^{2} + \sigma_{3}\right) - \left(m_{0}^{2} - m_{1}^{2} - \sigma_{1}\right) \left(m_{2}^{2} - m_{3}^{2} + \sigma_{1}\right)}{\sqrt{\lambda\left(m_{0}^{2}, m_{1}^{2}, \sigma_{1}\right)} \sqrt{\lambda\left(\sigma_{1}, m_{2}^{2}, m_{3}^{2}\right)}} \right)} \\ \theta_{31} \;&=\; \operatorname{acos}{\left(\frac{2 \sigma_{2} \left(- m_{2}^{2} - m_{3}^{2} + \sigma_{1}\right) - \left(m_{0}^{2} - m_{2}^{2} - \sigma_{2}\right) \left(- m_{1}^{2} + m_{3}^{2} + \sigma_{2}\right)}{\sqrt{\lambda\left(m_{0}^{2}, m_{2}^{2}, \sigma_{2}\right)} \sqrt{\lambda\left(\sigma_{2}, m_{3}^{2}, m_{1}^{2}\right)}} \right)} \\ \theta_{12} \;&=\; \operatorname{acos}{\left(\frac{2 \sigma_{3} \left(- m_{1}^{2} - m_{3}^{2} + \sigma_{2}\right) - \left(m_{0}^{2} - m_{3}^{2} - \sigma_{3}\right) \left(m_{1}^{2} - m_{2}^{2} + \sigma_{3}\right)}{\sqrt{\lambda\left(m_{0}^{2}, m_{3}^{2}, \sigma_{3}\right)} \sqrt{\lambda\left(\sigma_{3}, m_{1}^{2}, m_{2}^{2}\right)}} \right)} \\ \end{aligned}\end{split}\]

AmpForm model#

AmpForm does not formulate alignment Wigner-\(D\) functions. For the case of this spinless final state, this means the intensity is the same as that of the DPD model.

Hide code cell source

model_builder = ampform.get_builder(REACTION)
model_builder.use_helicity_couplings = False
model_builder.config.scalar_initial_state_mass = True
model_builder.config.stable_final_state_ids = {0, 1, 2}
AMPFORM_MODEL = model_builder.formulate()
AMPFORM_MODEL.intensity.cleanup()
\[\displaystyle \left|{A^{01}_{0, 0, 0, 0} + A^{02}_{0, 0, 0, 0} + A^{12}_{0, 0, 0, 0}}\right|^{2}\]

Hide code cell source

\[\begin{split}\begin{aligned} A^{01}_{0, 0, 0, 0} \;&=\; C_{D^{0} \to K^{+}_{0} {a_{0}(980)^{-}}_{0}; a_{0}(980)^{-} \to K^{-}_{0} K^{0}_{0}} D^{0}_{0,0}\left(- \phi_{01},\theta_{01},0\right) D^{0}_{0,0}\left(- \phi^{01}_{0},\theta^{01}_{0},0\right) \\ A^{02}_{0, 0, 0, 0} \;&=\; C_{D^{0} \to K^{-}_{0} {a_{0}(980)^{+}}_{0}; a_{0}(980)^{+} \to K^{+}_{0} K^{0}_{0}} D^{0}_{0,0}\left(- \phi_{02},\theta_{02},0\right) D^{0}_{0,0}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right) \\ A^{12}_{0, 0, 0, 0} \;&=\; C_{D^{0} \to K^{0}_{0} {a_{0}(980)^{0}}_{0}; a_{0}(980)^{0} \to K^{+}_{0} K^{-}_{0}} D^{0}_{0,0}\left(- \phi_{0},\theta_{0},0\right) D^{0}_{0,0}\left(- \phi^{12}_{1},\theta^{12}_{1},0\right) \\ \;&+\; C_{D^{0} \to K^{0}_{0} {f_{0}(980)}_{0}; f_{0}(980) \to K^{+}_{0} K^{-}_{0}} D^{0}_{0,0}\left(- \phi_{0},\theta_{0},0\right) D^{0}_{0,0}\left(- \phi^{12}_{1},\theta^{12}_{1},0\right) \\ \end{aligned}\end{split}\]

Hide code cell source

\[\begin{split}\begin{aligned} m_{01} \;&=\; m_{{p}_{01}} \\ m_{02} \;&=\; m_{{p}_{02}} \\ m_{12} \;&=\; m_{{p}_{12}} \\ \phi_{0} \;&=\; \phi\left({p}_{12}\right) \\ \phi^{01}_{0} \;&=\; \phi\left(\boldsymbol{B_z}\left(\frac{\left|\vec{{p}_{01}}\right|}{E\left({p}_{01}\right)}\right) \boldsymbol{R_y}\left(- \theta\left({p}_{01}\right)\right) \boldsymbol{R_z}\left(- \phi\left({p}_{01}\right)\right) p_{0}\right) \\ \phi^{02}_{0} \;&=\; \phi\left(\boldsymbol{B_z}\left(\frac{\left|\vec{{p}_{02}}\right|}{E\left({p}_{02}\right)}\right) \boldsymbol{R_y}\left(- \theta\left({p}_{02}\right)\right) \boldsymbol{R_z}\left(- \phi\left({p}_{02}\right)\right) p_{0}\right) \\ \phi_{01} \;&=\; \phi\left({p}_{01}\right) \\ \phi^{12}_{1} \;&=\; \phi\left(\boldsymbol{B_z}\left(\frac{\left|\vec{{p}_{12}}\right|}{E\left({p}_{12}\right)}\right) \boldsymbol{R_y}\left(- \theta\left({p}_{12}\right)\right) \boldsymbol{R_z}\left(- \phi\left({p}_{12}\right)\right) p_{1}\right) \\ \phi_{02} \;&=\; \phi\left({p}_{02}\right) \\ \theta_{0} \;&=\; \theta\left({p}_{12}\right) \\ \theta^{01}_{0} \;&=\; \theta\left(\boldsymbol{B_z}\left(\frac{\left|\vec{{p}_{01}}\right|}{E\left({p}_{01}\right)}\right) \boldsymbol{R_y}\left(- \theta\left({p}_{01}\right)\right) \boldsymbol{R_z}\left(- \phi\left({p}_{01}\right)\right) p_{0}\right) \\ \theta^{02}_{0} \;&=\; \theta\left(\boldsymbol{B_z}\left(\frac{\left|\vec{{p}_{02}}\right|}{E\left({p}_{02}\right)}\right) \boldsymbol{R_y}\left(- \theta\left({p}_{02}\right)\right) \boldsymbol{R_z}\left(- \phi\left({p}_{02}\right)\right) p_{0}\right) \\ \theta_{01} \;&=\; \theta\left({p}_{01}\right) \\ \theta^{12}_{1} \;&=\; \theta\left(\boldsymbol{B_z}\left(\frac{\left|\vec{{p}_{12}}\right|}{E\left({p}_{12}\right)}\right) \boldsymbol{R_y}\left(- \theta\left({p}_{12}\right)\right) \boldsymbol{R_z}\left(- \phi\left({p}_{12}\right)\right) p_{1}\right) \\ \theta_{02} \;&=\; \theta\left({p}_{02}\right) \\ \end{aligned}\end{split}\]

Confirm equivalence#

AMPFORM_EXPR = cached.unfold(AMPFORM_MODEL)
AMPFORM_EXPR
\[\displaystyle \left|{C_{D^{0} \to K^{+}_{0} {a_{0}(980)^{-}}_{0}; a_{0}(980)^{-} \to K^{-}_{0} K^{0}_{0}} + C_{D^{0} \to K^{-}_{0} {a_{0}(980)^{+}}_{0}; a_{0}(980)^{+} \to K^{+}_{0} K^{0}_{0}} + C_{D^{0} \to K^{0}_{0} {a_{0}(980)^{0}}_{0}; a_{0}(980)^{0} \to K^{+}_{0} K^{-}_{0}} + C_{D^{0} \to K^{0}_{0} {f_{0}(980)}_{0}; f_{0}(980) \to K^{+}_{0} K^{-}_{0}}}\right|^{2}\]
DPD_EXPR = cached.unfold(DPD_MODEL)
DPD_EXPR
\[\displaystyle \left|{\mathcal{H}^\mathrm{decay}_{a_{0}(980)^{+}, 0, 0} \mathcal{H}^\mathrm{production}_{a_{0}(980)^{+}, 0, 0} + \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{-}, 0, 0} \mathcal{H}^\mathrm{production}_{a_{0}(980)^{-}, 0, 0} + \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{0}, 0, 0} \mathcal{H}^\mathrm{production}_{a_{0}(980)^{0}, 0, 0} + \mathcal{H}^\mathrm{decay}_{f_{0}(980), 0, 0} \mathcal{H}^\mathrm{production}_{f_{0}(980), 0, 0}}\right|^{2}\]

Hide code cell source

coefficients = {s for s in AMPFORM_MODEL.parameter_defaults if str(s).startswith("C")}
couplings = {s for s in DPD_MODEL.parameter_defaults if "production" in str(s)}
substitutions = {s: 1 for s in DPD_MODEL.parameter_defaults if "decay" in s.name}
for c in coefficients:
    resonance_name = str(c)[24:].split(";", maxsplit=1)[0]
    resonance_name = resonance_name.rsplit("_", maxsplit=1)[0][:-1]
    coupling, *_ = {s for s in couplings if resonance_name in str(s)}
    substitutions[coupling] = c
Latex(aslatex(substitutions))
\[\begin{split}\begin{aligned} \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{0}, 0, 0} \;&=\; 1 \\ \mathcal{H}^\mathrm{decay}_{f_{0}(980), 0, 0} \;&=\; 1 \\ \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{+}, 0, 0} \;&=\; 1 \\ \mathcal{H}^\mathrm{decay}_{a_{0}(980)^{-}, 0, 0} \;&=\; 1 \\ \mathcal{H}^\mathrm{production}_{a_{0}(980)^{0}, 0, 0} \;&=\; C_{D^{0} \to K^{0}_{0} {a_{0}(980)^{0}}_{0}; a_{0}(980)^{0} \to K^{+}_{0} K^{-}_{0}} \\ \mathcal{H}^\mathrm{production}_{f_{0}(980), 0, 0} \;&=\; C_{D^{0} \to K^{0}_{0} {f_{0}(980)}_{0}; f_{0}(980) \to K^{+}_{0} K^{-}_{0}} \\ \mathcal{H}^\mathrm{production}_{a_{0}(980)^{-}, 0, 0} \;&=\; C_{D^{0} \to K^{+}_{0} {a_{0}(980)^{-}}_{0}; a_{0}(980)^{-} \to K^{-}_{0} K^{0}_{0}} \\ \mathcal{H}^\mathrm{production}_{a_{0}(980)^{+}, 0, 0} \;&=\; C_{D^{0} \to K^{-}_{0} {a_{0}(980)^{+}}_{0}; a_{0}(980)^{+} \to K^{+}_{0} K^{0}_{0}} \\ \end{aligned}\end{split}\]
assert DPD_EXPR.xreplace(substitutions) == AMPFORM_EXPR