Usage

Overview

Library of symbolic dynamics functions

AmpForm offers a number of dynamics parametrization functions. The functions are expressed with sympy, so that they can easily be visualized, simplified, or modified:

import sympy as sp

from ampform.dynamics import relativistic_breit_wigner

m, m0, w0 = sp.symbols("m m0 Gamma0")
relativistic_breit_wigner(s=m**2, mass0=m0, gamma0=w0)
\[\displaystyle \frac{\Gamma_{0} m_{0}}{- i \Gamma_{0} m_{0} - m^{2} + m_{0}^{2}}\]
from ampform.dynamics import relativistic_breit_wigner_with_ff

m1, m2, L = sp.symbols("m1 m2 L")
relativistic_breit_wigner_with_ff(
    s=m**2,
    mass0=m0,
    gamma0=w0,
    m_a=m1,
    m_b=m2,
    angular_momentum=L,
    meson_radius=1,
)
\[\displaystyle \frac{\Gamma_{0} m_{0} \sqrt{B_{L}^2\left(q^2\left(m^{2}\right)\right)}}{- m^{2} + m_{0}^{2} - i m_{0} \Gamma_{0}\left(m^{2}\right)}\]
from ampform.dynamics.kmatrix import NonRelativisticKMatrix

n_poles = sp.Symbol("n_R", integer=True, positive=True)
NonRelativisticKMatrix.formulate(
    n_poles=n_poles,
    n_channels=1,
)[0, 0]
\[\displaystyle \frac{\sum_{R=1}^{n_{R}} \frac{{\Gamma}_{R,0} {\gamma}_{R,0}^{2} {m}_{R}}{- s + {m}_{R}^{2}}}{- i \sum_{R=1}^{n_{R}} \frac{{\Gamma}_{R,0} {\gamma}_{R,0}^{2} {m}_{R}}{- s + {m}_{R}^{2}} + 1}\]
matrix = NonRelativisticKMatrix.formulate(n_poles=1, n_channels=2)
matrix[0, 0].doit().simplify()
\[\displaystyle - \frac{{\Gamma}_{1,0} {\gamma}_{1,0}^{2} {m}_{1}}{s + i {\Gamma}_{1,0} {\gamma}_{1,0}^{2} {m}_{1} + i {\Gamma}_{1,1} {\gamma}_{1,1}^{2} {m}_{1} - {m}_{1}^{2}}\]

More dynamics functions can be found in the dynamics library, as well as on the Dynamics page!

Formulate amplitude models

Together with QRules, AmpForm can automatically formulate amplitude models for generic, multi-body decays. These models can then be used as templates for faster computational back-ends with TensorWaves. Here’s an example:

import qrules

reaction = qrules.generate_transitions(
    initial_state=("psi(4160)", [-1, +1]),
    final_state=["D-", "D0", "pi+"],
    allowed_intermediate_particles=["D*(2007)0"],
    formalism="helicity",
)
\[\displaystyle \sum_{m_{A}\in\left\{1,-1\right\}} \sum_{m_{0}=0} \sum_{m_{1}=0} \sum_{m_{2}=0}{\left|{{A^{02}}_{m_{A},m_{0},m_{1},m_{2}}}\right|^{2}}\]
symbol, expr = list(model.amplitudes.items())[0]
latex = sp.multiline_latex(symbol, expr)
Math(latex)
\[\begin{split}\displaystyle \begin{align*} {A^{02}}_{-1,0,0,0} = & \frac{C_{\psi(4160) \to D^{*}(2007)^{0}_{+1} D^{0}_{0}; D^{*}(2007)^{0} \to D^{-}_{0} \pi^{+}_{0}} \Gamma_{D^{*}(2007)^{0}} m_{D^{*}(2007)^{0}} D^{1}_{-1,1}\left(- \phi_{02},\theta_{02},0\right) D^{1}_{1,0}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right)}{- i \Gamma_{D^{*}(2007)^{0}} m_{D^{*}(2007)^{0}} - m_{02}^{2} + \left(m_{D^{*}(2007)^{0}}\right)^{2}} \\ & + \frac{C_{\psi(4160) \to D^{*}(2007)^{0}_{-1} D^{0}_{0}; D^{*}(2007)^{0} \to D^{-}_{0} \pi^{+}_{0}} \Gamma_{D^{*}(2007)^{0}} m_{D^{*}(2007)^{0}} D^{1}_{-1,-1}\left(- \phi_{02},\theta_{02},0\right) D^{1}_{-1,0}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right)}{- i \Gamma_{D^{*}(2007)^{0}} m_{D^{*}(2007)^{0}} - m_{02}^{2} + \left(m_{D^{*}(2007)^{0}}\right)^{2}} \\ & + \frac{C_{\psi(4160) \to D^{*}(2007)^{0}_{0} D^{0}_{0}; D^{*}(2007)^{0} \to D^{-}_{0} \pi^{+}_{0}} \Gamma_{D^{*}(2007)^{0}} m_{D^{*}(2007)^{0}} D^{1}_{-1,0}\left(- \phi_{02},\theta_{02},0\right) D^{1}_{0,0}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right)}{- i \Gamma_{D^{*}(2007)^{0}} m_{D^{*}(2007)^{0}} - m_{02}^{2} + \left(m_{D^{*}(2007)^{0}}\right)^{2}} \end{align*}\end{split}\]

In case of multiple decay topologies, AmpForm also takes care of spin alignment with [1]!

reaction = qrules.generate_transitions(
    initial_state="Lambda(c)+",
    final_state=["p", "K-", "pi+"],
    allowed_intermediate_particles=[
        "Lambda(1405)",
        "Delta(1232)++",
    ],
)
import graphviz

dot = qrules.io.asdot(reaction, collapse_graphs=True)
graphviz.Source(dot)
_images/usage_20_0.svg
\[\displaystyle \sum_{m_{A}=-1/2}^{1/2} \sum_{m_{0}=-1/2}^{1/2} \sum_{m_{1}=0} \sum_{m_{2}=0}{\left|{\sum_{\lambda^{01}_{0}=-1/2}^{1/2} \sum_{\mu^{01}_{0}=-1/2}^{1/2} \sum_{\nu^{01}_{0}=-1/2}^{1/2} \sum_{\lambda^{01}_{1}=0} \sum_{\mu^{01}_{1}=0} \sum_{\nu^{01}_{1}=0} \sum_{\lambda^{01}_{2}=0}{{A^{01}}_{m_{A},\lambda^{01}_{0},- \lambda^{01}_{1},- \lambda^{01}_{2}} D^{0}_{m_{1},\nu^{01}_{1}}\left(\alpha^{01}_{1},\beta^{01}_{1},\gamma^{01}_{1}\right) D^{0}_{m_{2},\lambda^{01}_{2}}\left(\phi_{01},\theta_{01},0\right) D^{0}_{\mu^{01}_{1},\lambda^{01}_{1}}\left(\phi^{01}_{0},\theta^{01}_{0},0\right) D^{0}_{\nu^{01}_{1},\mu^{01}_{1}}\left(\phi_{01},\theta_{01},0\right) D^{\frac{1}{2}}_{m_{0},\nu^{01}_{0}}\left(\alpha^{01}_{0},\beta^{01}_{0},\gamma^{01}_{0}\right) D^{\frac{1}{2}}_{\mu^{01}_{0},\lambda^{01}_{0}}\left(\phi^{01}_{0},\theta^{01}_{0},0\right) D^{\frac{1}{2}}_{\nu^{01}_{0},\mu^{01}_{0}}\left(\phi_{01},\theta_{01},0\right)} + \sum_{\lambda^{02}_{0}=-1/2}^{1/2} \sum_{\mu^{02}_{0}=-1/2}^{1/2} \sum_{\nu^{02}_{0}=-1/2}^{1/2} \sum_{\lambda^{02}_{1}=0} \sum_{\lambda^{02}_{2}=0} \sum_{\mu^{02}_{2}=0} \sum_{\nu^{02}_{2}=0}{{A^{02}}_{m_{A},\lambda^{02}_{0},- \lambda^{02}_{1},- \lambda^{02}_{2}} D^{0}_{m_{1},\lambda^{02}_{1}}\left(\phi_{02},\theta_{02},0\right) D^{0}_{m_{2},\nu^{02}_{2}}\left(\alpha^{02}_{2},\beta^{02}_{2},\gamma^{02}_{2}\right) D^{0}_{\mu^{02}_{2},\lambda^{02}_{2}}\left(\phi^{02}_{0},\theta^{02}_{0},0\right) D^{0}_{\nu^{02}_{2},\mu^{02}_{2}}\left(\phi_{02},\theta_{02},0\right) D^{\frac{1}{2}}_{m_{0},\nu^{02}_{0}}\left(\alpha^{02}_{0},\beta^{02}_{0},\gamma^{02}_{0}\right) D^{\frac{1}{2}}_{\mu^{02}_{0},\lambda^{02}_{0}}\left(\phi^{02}_{0},\theta^{02}_{0},0\right) D^{\frac{1}{2}}_{\nu^{02}_{0},\mu^{02}_{0}}\left(\phi_{02},\theta_{02},0\right)}}\right|^{2}}\]