Nominal amplitude model
Contents
1. Nominal amplitude model#
Import Python libraries
import logging
import os
from textwrap import dedent
import sympy as sp
from IPython.display import Markdown, display
from polarimetry.amplitude import simplify_latex_rendering
from polarimetry.io import (
    as_latex,
    as_markdown_table,
    display_latex,
    perform_cached_doit,
)
from polarimetry.lhcb import load_model_builder, load_model_parameters
from polarimetry.lhcb.particle import K, Λc, Σ, load_particles, p, π
simplify_latex_rendering()
NO_TQDM = "EXECUTE_NB" in os.environ
if NO_TQDM:
    logging.getLogger().setLevel(logging.ERROR)
    logging.getLogger("polarimetry.io").setLevel(logging.ERROR)
1.1. Resonances and LS-scheme#
Particle definitions for \(\Lambda_c^+\) and \(p, \pi^+, K^-\) in the sequential order.
Show code cell source
decay_particles = [Λc, p, π, K, Σ]
Markdown(as_markdown_table(decay_particles))
name  | 
LaTeX  | 
\(J^P\)  | 
mass (MeV)  | 
width (MeV)  | 
|---|---|---|---|---|
Lambda_c+  | 
\(\Lambda_c^+\)  | 
\(\frac{1}{2}^+\)  | 
2,286  | 
0  | 
p  | 
\(p\)  | 
\(\frac{1}{2}^+\)  | 
938  | 
0  | 
pi+  | 
\(\pi^+\)  | 
\(0^-\)  | 
139  | 
0  | 
K-  | 
\(K^-\)  | 
\(0^-\)  | 
493  | 
0  | 
Sigma-  | 
\(\Sigma^-\)  | 
\(\frac{1}{2}^+\)  | 
1,189  | 
0  | 
Particle definitions as defined in particle-definitions.yaml:
Show code cell source
particles = load_particles("../data/particle-definitions.yaml")
resonances = [p for p in particles.values() if p not in set(decay_particles)]
src = as_markdown_table(resonances)
Markdown(src)
name  | 
LaTeX  | 
\(J^P\)  | 
mass (MeV)  | 
width (MeV)  | 
|---|---|---|---|---|
L(1405)  | 
\(\Lambda(1405)\)  | 
\(\frac{1}{2}^-\)  | 
1,405  | 
50  | 
L(1520)  | 
\(\Lambda(1520)\)  | 
\(\frac{3}{2}^-\)  | 
1,519  | 
15  | 
L(1600)  | 
\(\Lambda(1600)\)  | 
\(\frac{1}{2}^+\)  | 
1,630  | 
250  | 
L(1670)  | 
\(\Lambda(1670)\)  | 
\(\frac{1}{2}^-\)  | 
1,670  | 
30  | 
L(1690)  | 
\(\Lambda(1690)\)  | 
\(\frac{3}{2}^-\)  | 
1,690  | 
70  | 
L(1800)  | 
\(\Lambda(1800)\)  | 
\(\frac{1}{2}^-\)  | 
1,800  | 
300  | 
L(1810)  | 
\(\Lambda(1810)\)  | 
\(\frac{1}{2}^+\)  | 
1,810  | 
150  | 
L(2000)  | 
\(\Lambda(2000)\)  | 
\(\frac{1}{2}^-\)  | 
2,000  | 
210  | 
D(1232)  | 
\(\Delta(1232)\)  | 
\(\frac{3}{2}^+\)  | 
1,232  | 
117  | 
D(1600)  | 
\(\Delta(1600)\)  | 
\(\frac{3}{2}^+\)  | 
1,640  | 
300  | 
D(1620)  | 
\(\Delta(1620)\)  | 
\(\frac{1}{2}^-\)  | 
1,620  | 
130  | 
D(1700)  | 
\(\Delta(1700)\)  | 
\(\frac{3}{2}^-\)  | 
1,690  | 
380  | 
K(700)  | 
\(K(700)\)  | 
\(0^+\)  | 
824  | 
478  | 
K(892)  | 
\(K(892)\)  | 
\(1^-\)  | 
895  | 
47  | 
K(1410)  | 
\(K(1410)\)  | 
\(1^-\)  | 
1,421  | 
236  | 
K(1430)  | 
\(K(1430)\)  | 
\(0^+\)  | 
1,375  | 
190  | 
See also
Most models work take the minimal \(L\)-value in each \(LS\)-coupling (only model 17 works in the full \(LS\)-basis. The generated \(LS\)-couplings look as follows:
Show code cell source
def sort_chains(chains):
    return sorted(
        chains,
        key=lambda c: (c.resonance.name[0], c.resonance.mass),
    )
def render_ls_table(with_jp: bool) -> None:
    all_ls_chains = load_model_builder(
        model_file="../data/model-definitions.yaml",
        particle_definitions=particles,
        model_id=17,
    ).decay.chains
    min_ls_chains = load_model_builder(
        model_file="../data/model-definitions.yaml",
        particle_definitions=particles,
        model_id=0,
    ).decay.chains
    all_ls_chains = sort_chains(all_ls_chains)
    min_ls_chains = sort_chains(min_ls_chains)
    n_all_ls = len(all_ls_chains)
    n_min_ls = len(min_ls_chains)
    src = Rf"""
    | Only minimum $LS$ ({n_min_ls}) | All $LS$-couplings ({n_all_ls}) |
    |:------------------------------:|:-------------------------------:|
    """
    src = dedent(src).strip() + "\n"
    min_ls_chain_iter = iter(min_ls_chains)
    min_ls_chain = None
    for all_ls_chain in all_ls_chains:
        min_ls_chain_latex = ""
        if (
            min_ls_chain is None
            or min_ls_chain.resonance.name != all_ls_chain.resonance.name
        ):
            try:
                min_ls_chain = next(min_ls_chain_iter)
                min_ls_chain_latex = f"${as_latex(min_ls_chain, with_jp=with_jp)}$"
            except StopIteration:
                pass
        all_ls_chain_latex = f"${as_latex(all_ls_chain, with_jp=with_jp)}$"
        src += f"| {min_ls_chain_latex} | {all_ls_chain_latex} |\n"
    display(Markdown(src))
render_ls_table(with_jp=False)
Only minimum \(LS\) (12)  | 
All \(LS\)-couplings (26)  | 
|---|---|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Delta(1232) \xrightarrow[S=1/2]{L=1} p \pi^+ K^-\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Delta(1232) \xrightarrow[S=1/2]{L=1} p \pi^+ K^-\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=2} \Delta(1232) \xrightarrow[S=1/2]{L=1} p \pi^+ K^-\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Delta(1600) \xrightarrow[S=1/2]{L=1} p \pi^+ K^-\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Delta(1600) \xrightarrow[S=1/2]{L=1} p \pi^+ K^-\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=2} \Delta(1600) \xrightarrow[S=1/2]{L=1} p \pi^+ K^-\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Delta(1700) \xrightarrow[S=1/2]{L=2} p \pi^+ K^-\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Delta(1700) \xrightarrow[S=1/2]{L=2} p \pi^+ K^-\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=2} \Delta(1700) \xrightarrow[S=1/2]{L=2} p \pi^+ K^-\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} K(700) \xrightarrow[S=0]{L=0} \pi^+ K^- p\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} K(700) \xrightarrow[S=0]{L=0} \pi^+ K^- p\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} K(700) \xrightarrow[S=0]{L=0} \pi^+ K^- p\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} K(892) \xrightarrow[S=0]{L=1} \pi^+ K^- p\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} K(892) \xrightarrow[S=0]{L=1} \pi^+ K^- p\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} K(892) \xrightarrow[S=0]{L=1} \pi^+ K^- p\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} K(892) \xrightarrow[S=0]{L=1} \pi^+ K^- p\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=2} K(892) \xrightarrow[S=0]{L=1} \pi^+ K^- p\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} K(1430) \xrightarrow[S=0]{L=0} \pi^+ K^- p\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} K(1430) \xrightarrow[S=0]{L=0} \pi^+ K^- p\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} K(1430) \xrightarrow[S=0]{L=0} \pi^+ K^- p\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(1405) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(1405) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} \Lambda(1405) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Lambda(1520) \xrightarrow[S=1/2]{L=2} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Lambda(1520) \xrightarrow[S=1/2]{L=2} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=2} \Lambda(1520) \xrightarrow[S=1/2]{L=2} K^- p \pi^+\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(1600) \xrightarrow[S=1/2]{L=1} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(1600) \xrightarrow[S=1/2]{L=1} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} \Lambda(1600) \xrightarrow[S=1/2]{L=1} K^- p \pi^+\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(1670) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(1670) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} \Lambda(1670) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Lambda(1690) \xrightarrow[S=1/2]{L=2} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=1} \Lambda(1690) \xrightarrow[S=1/2]{L=2} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=3/2]{L=2} \Lambda(1690) \xrightarrow[S=1/2]{L=2} K^- p \pi^+\)  | 
|
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(2000) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=0} \Lambda(2000) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
\(\Lambda_c^+ \xrightarrow[S=1/2]{L=1} \Lambda(2000) \xrightarrow[S=1/2]{L=0} K^- p \pi^+\)  | 
Or with \(J^P\)-values:
Show code cell content
render_ls_table(with_jp=True)
Only minimum \(LS\) (12)  | 
All \(LS\)-couplings (26)  | 
|---|---|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Delta(1232)\left[\frac{3}{2}^+\right] \xrightarrow[S=1/2]{L=1} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Delta(1232)\left[\frac{3}{2}^+\right] \xrightarrow[S=1/2]{L=1} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=2} \Delta(1232)\left[\frac{3}{2}^+\right] \xrightarrow[S=1/2]{L=1} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Delta(1600)\left[\frac{3}{2}^+\right] \xrightarrow[S=1/2]{L=1} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Delta(1600)\left[\frac{3}{2}^+\right] \xrightarrow[S=1/2]{L=1} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=2} \Delta(1600)\left[\frac{3}{2}^+\right] \xrightarrow[S=1/2]{L=1} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Delta(1700)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Delta(1700)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=2} \Delta(1700)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right] K^-\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} K(700)\left[0^+\right] \xrightarrow[S=0]{L=0} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} K(700)\left[0^+\right] \xrightarrow[S=0]{L=0} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} K(700)\left[0^+\right] \xrightarrow[S=0]{L=0} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} K(892)\left[1^-\right] \xrightarrow[S=0]{L=1} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} K(892)\left[1^-\right] \xrightarrow[S=0]{L=1} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} K(892)\left[1^-\right] \xrightarrow[S=0]{L=1} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} K(892)\left[1^-\right] \xrightarrow[S=0]{L=1} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=2} K(892)\left[1^-\right] \xrightarrow[S=0]{L=1} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} K(1430)\left[0^+\right] \xrightarrow[S=0]{L=0} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} K(1430)\left[0^+\right] \xrightarrow[S=0]{L=0} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} K(1430)\left[0^+\right] \xrightarrow[S=0]{L=0} \pi^+\left[0^-\right] K^-\left[0^-\right] p\left[\frac{1}{2}^+\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(1405)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(1405)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} \Lambda(1405)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Lambda(1520)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Lambda(1520)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=2} \Lambda(1520)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(1600)\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(1600)\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} \Lambda(1600)\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(1670)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(1670)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} \Lambda(1670)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Lambda(1690)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=1} \Lambda(1690)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=3/2]{L=2} \Lambda(1690)\left[\frac{3}{2}^-\right] \xrightarrow[S=1/2]{L=2} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
|
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(2000)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=0} \Lambda(2000)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
\(\Lambda_c^+\left[\frac{1}{2}^+\right] \xrightarrow[S=1/2]{L=1} \Lambda(2000)\left[\frac{1}{2}^-\right] \xrightarrow[S=1/2]{L=0} K^-\left[0^-\right] p\left[\frac{1}{2}^+\right] \pi^+\left[0^-\right]\)  | 
1.2. Amplitude#
1.2.1. Spin-alignment amplitude#
The full intensity of the amplitude model is obtained by summing the following aligned amplitude over all helicity values \(\lambda_i\) in the initial state \(0\) and final states \(1, 2, 3\):
model_choice = 0
amplitude_builder = load_model_builder(
    model_file="../data/model-definitions.yaml",
    particle_definitions=particles,
    model_id=model_choice,
)
model = amplitude_builder.formulate()
Show code cell source
def simplify_notation(expr):
    def substitute_node(node):
        if isinstance(node, sp.Indexed):
            if node.indices[2:] == (0, 0):
                return sp.Indexed(node.base, *node.indices[:2])
        return node
    for node in sp.preorder_traversal(expr):
        new_node = substitute_node(node)
        expr = expr.xreplace({node: new_node})
    return expr
display(simplify_notation(model.intensity.args[0].args[0].args[0].cleanup()))
Note that we simplified notation here: the amplitude indices for the spinless states are not rendered and their corresponding Wigner-\(d\) alignment functions are simply \(1\).
The relevant \(\zeta^i_{j(k)}\) angles are defined as:
Show code cell source
display_latex({k: v for k, v in model.variables.items() if "zeta" in str(k)})
1.2.2. Sub-system amplitudes#
Show code cell source
display_latex({simplify_notation(k): v for k, v in model.amplitudes.items()})
The \(\theta_{ij}\) angles are defined as:
Show code cell source
display_latex({k: v for k, v in model.variables.items() if "theta" in str(k)})
Definitions for the \(\phi_{ij}\) angles can be found under DPD angles.
1.3. Parameter definitions#
Parameter values are provided in model-definitions.yaml, but the keys of the helicity couplings have to remapped to the helicity symbols that are used in this amplitude model. The function parameter_key_to_symbol() implements this remapping, following the supplementary material of [1]. It is asserted below that:
the keys are mapped to symbols that exist in the nominal amplitude model
all parameter symbols in the nominal amplitude model have a value assigned to them.
Collect all symbols in the amplitude moddel
imported_parameter_values = load_model_parameters(
    "../data/model-definitions.yaml",
    amplitude_builder.decay,
    model_choice,
    particle_definitions=particles,
)
unfolded_intensity_expr = perform_cached_doit(model.full_expression)
model_symbols = unfolded_intensity_expr.free_symbols
non_existent = set(imported_parameter_values) - set(model_symbols)
error_message = "Imported symbols that don't exist in model:\n  "
error_message += "\n  ".join(map(str, sorted(non_existent, key=str)))
assert non_existent == set(), error_message
undefined = (
    set(model_symbols)
    - set(imported_parameter_values)
    - set(model.parameter_defaults)
    - set(model.variables)
    - set(sp.symbols("sigma1:4", nonnegative=True))
)
undefined = {
    s
    for s in undefined
    if not str(s).endswith("{decay}")
    if not str(s).endswith("production}")
}
error_message = "Symbols in model that don't have a definition:\n  "
error_message += "\n  ".join(map(str, sorted(undefined, key=str)))
assert undefined == set(), error_message
model.parameter_defaults.update(imported_parameter_values)
1.3.1. Helicity coupling values#
1.3.1.1. Production couplings#
Show code cell source
production_couplings = {
    key: value
    for key, value in model.parameter_defaults.items()
    if isinstance(key, sp.Indexed)
    if "production" in str(key.base)
    if str(value) != "1"
}
display_latex(production_couplings)
1.3.1.2. Decay couplings#
Show code cell source
decay_couplings = {
    key: value
    for key, value in model.parameter_defaults.items()
    if isinstance(key, sp.Indexed)
    if "decay" in str(key.base)
}
display_latex(decay_couplings)
1.3.2. Non-coupling parameters#
Show code cell source
couplings = set(production_couplings) | set(decay_couplings)
non_coupling_parameters = {
    symbol: model.parameter_defaults[symbol]
    for symbol in sorted(model.parameter_defaults, key=str)
    if not isinstance(symbol, sp.Indexed)
}
display_latex(non_coupling_parameters)