diff --git a/docs/ampform/LambdaKpi0.ipynb b/docs/ampform/LambdaKpi0.ipynb index c16c6b8..5717c4a 100644 --- a/docs/ampform/LambdaKpi0.ipynb +++ b/docs/ampform/LambdaKpi0.ipynb @@ -19,9 +19,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "jupyter": { - "source_hidden": true - }, "mystnb": { "code_prompt_show": "Import Python libraries" }, @@ -38,6 +35,7 @@ "import warnings\n", "from collections import defaultdict\n", "from fractions import Fraction\n", + "from textwrap import dedent\n", "\n", "import ampform\n", "import graphviz\n", @@ -47,7 +45,7 @@ "import qrules\n", "from ampform.dynamics.builder import RelativisticBreitWignerBuilder\n", "from ampform.io import aslatex, improve_latex_rendering\n", - "from IPython.display import Markdown, Math, display\n", + "from IPython.display import Markdown, Math\n", "from qrules.particle import Particle, Spin, create_particle, load_pdg\n", "from tensorwaves.data import (\n", " SympyDataTransformer,\n", @@ -83,129 +81,61 @@ "execution_count": null, "metadata": { "tags": [ + "scroll-output", + "full-width", "hide-input" ] }, "outputs": [], "source": [ - "particles = [\"Lambda\", \"K+\", \"pi0\", \"gamma\", \"p\"]\n", - "latex_particle_names = {\n", - " \"Lambda\": r\"$\\Lambda$\",\n", - " \"K+\": r\"$K^+$\",\n", - " \"pi0\": r\"$\\pi^0$\",\n", - " \"gamma\": r\"$\\gamma$\",\n", - " \"p\": \"p\",\n", - "}\n", + "def generate_markdown_table(particles: list[str]):\n", + " table_md = dedent(r\"\"\"\n", + " | Particle | Name | PID | $J^{PC} (I^G)$ | $I_3$ | $M$ | $\\Gamma$ | $Q$ | $S$ | $B$ |\n", + " | :------- |------|-----|----------------|-------|-----|----------|-----|-----|-----|\n", + " \"\"\")\n", + " for name in particles:\n", + " p = particle_db[name]\n", + " table_md += f\"| ${p.latex}$ | `{p.name}` | {p.pid} | {jpc_ig(p)} | {i_3(p)} | {p.mass:.3g}| {p.width:g} | {p.charge} |{p.strangeness} | {p.baryon_number}|\\n\"\n", + " return table_md\n", "\n", "\n", - "def format_parity(parity: int | None) -> str:\n", - " if parity is None:\n", - " return \"\"\n", - " if parity == -1:\n", - " return \"-\"\n", - " if parity == 1:\n", - " return \"+\"\n", - " return str(parity)\n", + "def jpc_ig(particle: Particle) -> str:\n", + " j = format_fraction(particle.spin)\n", + " p = format_parity(particle.parity)\n", + " c = format_parity(particle.c_parity)\n", + " if particle.isospin is None:\n", + " return f\"${j}^{{{p}{c}}}$\"\n", + " i = format_fraction(particle.isospin.magnitude)\n", + " g = format_parity(particle.g_parity)\n", + " return rf\"${j}^{{{p}{c}}} \\; ({i}^{{{g}}})$\"\n", "\n", "\n", - "def format_fraction(value: Fraction | None) -> str | None:\n", - " if value is None:\n", - " return None\n", - " if value.denominator == 1:\n", - " return str(value.numerator)\n", - " return rf\"\\frac{{{value.numerator}}}{{{value.denominator}}}\"\n", + "def i_3(particle: Particle) -> str:\n", + " if particle.isospin is None:\n", + " return \"N/A\"\n", + " return f\"${format_fraction(particle.isospin.projection)}$\"\n", "\n", "\n", - "def format_fraction_isospin3(value: Fraction | None) -> str | None:\n", - " if value is None:\n", - " return None\n", + "def format_fraction(value: float) -> str:\n", + " value = Fraction(value)\n", " if value.denominator == 1:\n", " return str(value.numerator)\n", - " return rf\"$\\frac{{{value.numerator}}}{{{value.denominator}}}$\"\n", - "\n", - "\n", - "def particle_extract(name: str) -> dict:\n", - " particle = particle_db[name]\n", - "\n", - " isospin_magnitude_value = (\n", - " Fraction(particle.isospin.magnitude) if particle.isospin is not None else None\n", - " )\n", - " isospin_magnitude_latex = (\n", - " format_fraction(isospin_magnitude_value)\n", - " if isospin_magnitude_value is not None\n", - " else \"0\"\n", - " if particle.isospin and particle.isospin.magnitude == 0\n", - " else \"None\"\n", - " )\n", - "\n", - " isospin_projection_value = (\n", - " Fraction(particle.isospin.projection) if particle.isospin is not None else None\n", - " )\n", - " isospin_projection_latex = (\n", - " format_fraction_isospin3(isospin_projection_value)\n", - " if isospin_projection_value is not None\n", - " else \"0\"\n", - " if particle.isospin and particle.isospin.projection == 0\n", - " else \"None\"\n", - " )\n", - "\n", - " spin_fraction_value = Fraction(particle.spin) if particle.spin is not None else None\n", - " spin_latex = (\n", - " format_fraction(spin_fraction_value)\n", - " if spin_fraction_value is not None\n", - " else \"0\"\n", - " if particle.spin == 0\n", - " else \"None\"\n", - " )\n", - "\n", - " if particle.isospin is not None:\n", - " jpc_ig = rf\"${spin_latex}^{{{format_parity(particle.parity)}{format_parity(particle.c_parity)}}} \\ ({isospin_magnitude_latex}^{{{format_parity(particle.g_parity)}}})$\"\n", - " else:\n", - " jpc_ig = rf\"${spin_latex}^{{{format_parity(particle.parity)}{format_parity(particle.c_parity)}}}$\"\n", - "\n", - " return {\n", - " \"Name\": particle.name,\n", - " \"PID\": str(particle.pid),\n", - " r\"$J^{PC} (I^G)$\": jpc_ig,\n", - " r\"$I_3$\": isospin_projection_latex,\n", - " r\"$M$\": str(round(particle.mass, 3)),\n", - " r\"$\\Gamma$\": str(particle.width),\n", - " r\"$Q$\": str(particle.charge),\n", - " r\"$S$\": str(particle.strangeness),\n", - " r\"$B$\": str(particle.baryon_number),\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "tags": [ - "scroll-output", - "full-width", - "hide-input" - ] - }, - "outputs": [], - "source": [ - "def generate_markdown_table(particles):\n", - " headers = [\"Particle\", *particle_extract(particles[0]).keys()]\n", - " rows = []\n", + " return rf\"\\frac{{{value.numerator}}}{{{value.denominator}}}\"\n", "\n", - " for name in particles:\n", - " row = [latex_particle_names.get(name, name), *particle_extract(name).values()]\n", - " rows.append(row)\n", "\n", - " table_md = \"| \" + \" | \".join(headers) + \" |\\n\"\n", - " table_md += \"| \" + \" | \".join([\"---\"] * len(headers)) + \" |\\n\"\n", - " for row in rows:\n", - " table_md += \"| \" + \" | \".join(row) + \" |\\n\"\n", - " return table_md\n", + "def format_parity(parity: int | None) -> str:\n", + " if parity is None:\n", + " return \" \"\n", + " if parity == -1:\n", + " return \"-\"\n", + " if parity == 1:\n", + " return \"+\"\n", + " return str(parity)\n", "\n", "\n", "particles = [\"Lambda\", \"K+\", \"pi0\", \"gamma\", \"p\"]\n", "markdown_table = generate_markdown_table(particles)\n", - "display(Markdown(markdown_table))" + "Markdown(markdown_table)" ] }, {