1. Nominal amplitude model#
Import Python libraries
import logging
import os
from textwrap import dedent
import sympy as sp
from ampform.sympy import perform_cached_doit
from ampform_dpd.io import as_markdown_table, aslatex, simplify_latex_rendering
from IPython.display import Markdown, display
from polarimetry.io import display_latex
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^+\) |
\(\frac{1}{2}^+\) |
2,286 |
0 |
|
\(p\) |
\(\frac{1}{2}^+\) |
938 |
0 |
|
\(\pi^+\) |
\(0^-\) |
139 |
0 |
|
\(K^-\) |
\(0^-\) |
493 |
0 |
|
\(\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) |
---|---|---|---|---|
|
\(\Lambda(1405)\) |
\(\frac{1}{2}^-\) |
1,405 |
50 |
|
\(\Lambda(1520)\) |
\(\frac{3}{2}^-\) |
1,519 |
15 |
|
\(\Lambda(1600)\) |
\(\frac{1}{2}^+\) |
1,630 |
250 |
|
\(\Lambda(1670)\) |
\(\frac{1}{2}^-\) |
1,670 |
30 |
|
\(\Lambda(1690)\) |
\(\frac{3}{2}^-\) |
1,690 |
70 |
|
\(\Lambda(1800)\) |
\(\frac{1}{2}^-\) |
1,800 |
300 |
|
\(\Lambda(1810)\) |
\(\frac{1}{2}^+\) |
1,810 |
150 |
|
\(\Lambda(2000)\) |
\(\frac{1}{2}^-\) |
2,000 |
210 |
|
\(\Delta(1232)\) |
\(\frac{3}{2}^+\) |
1,232 |
117 |
|
\(\Delta(1600)\) |
\(\frac{3}{2}^+\) |
1,640 |
300 |
|
\(\Delta(1620)\) |
\(\frac{1}{2}^-\) |
1,620 |
130 |
|
\(\Delta(1700)\) |
\(\frac{3}{2}^-\) |
1,690 |
380 |
|
\(K(700)\) |
\(0^+\) |
824 |
478 |
|
\(K(892)\) |
\(1^-\) |
895 |
47 |
|
\(K(1410)\) |
\(1^-\) |
1,421 |
236 |
|
\(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"${aslatex(min_ls_chain, with_jp=with_jp)}$"
except StopIteration:
pass
all_ls_chain_latex = f"${aslatex(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) and 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)