Amplitude symmetrization

Amplitude symmetrization#

Hide code cell source

import graphviz
import qrules
import sympy as sp
from IPython.display import Math

import ampform
from ampform.dynamics.builder import RelativisticBreitWignerBuilder
from ampform.helicity.decay import perform_combinatorics
from ampform.io import aslatex

Amplitudes for reactions with indistinguishable particles in the final state, such as \(D^+ \to \pi^+ \pi^+ \pi^-\), should be symmetrized, meaning that the amplitudes of the different subsystems are indistinguishable but for kinematic variables.

Note that QRules removes transitions that are indistinguishable, since it only considers quantum states, not relativistic kinematics.

reaction = qrules.generate_transitions(
    initial_state="D+",
    final_state=["pi+", "pi+", "pi-"],
    allowed_intermediate_particles=["rho(770)0"],
)

Hide code cell source

src = qrules.io.asdot(reaction, strip_spin=True)
graphviz.Source(src)
../../_images/7cd1426e168a62c0f9f2df181b2d563355b4e5c40efa979e2a14a123f8ea6dce.svg

Internally, AmpForm’s HelicityAmplitudeBuilder permutates these transitions again, so that all kinematically distinguishable subsystems are available.

assert len(reaction.transitions) == 1
permutated_topologies = perform_combinatorics(reaction.transitions[0])

Hide code cell source

src = qrules.io.asdot(permutated_topologies, strip_spin=True)
graphviz.Source(src)
../../_images/6bcad17536aa4c0fb41f7f0970916da8a8d2dbca71b1a7c1673eb7fe7e72dcc0.svg

The resulting HelicityModel contains only one amplitude that contains two terms with different kinematic variables:

bw_builder = RelativisticBreitWignerBuilder()
model_builder = ampform.HelicityAmplitudeBuilder(reaction)
for name in reaction.get_intermediate_particles().names:
    model_builder.dynamics.assign(name, bw_builder)
model = model_builder.formulate()
Math(aslatex(model.amplitudes, terms_per_line=1))
\[\begin{split}\displaystyle \begin{aligned} {A^{12}}_{0,0,0,0} \;&=\; \frac{C_{D^{+} \to \pi^{+}_{0} \rho(770)^{0}_{0}; \rho(770)^{0} \to \pi^{+}_{0} \pi^{-}_{0}} \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} D^{0}_{0,0}\left(- \phi_{0},\theta_{0},0\right) D^{1}_{0,0}\left(- \phi^{12}_{1},\theta^{12}_{1},0\right)}{- i \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} - m_{12}^{2} + \left(m_{\rho(770)^{0}}\right)^{2}} \\ \;&+\; \frac{C_{D^{+} \to \pi^{+}_{0} \rho(770)^{0}_{0}; \rho(770)^{0} \to \pi^{+}_{0} \pi^{-}_{0}} \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} D^{0}_{0,0}\left(- \phi_{02},\theta_{02},0\right) D^{1}_{0,0}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right)}{- i \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} - m_{02}^{2} + \left(m_{\rho(770)^{0}}\right)^{2}} \\ \end{aligned}\end{split}\]

but the parameters of both amplitudes are the same:

Hide code cell source

assert len(model.amplitudes) == 1
((symbol, expr),) = model.amplitudes.items()
expr = sp.simplify(expr, doit=False)
Math(aslatex({symbol: expr}))
\[\begin{split}\displaystyle \begin{aligned} {A^{12}}_{0,0,0,0} \;&=\; \frac{C_{D^{+} \to \pi^{+}_{0} \rho(770)^{0}_{0}; \rho(770)^{0} \to \pi^{+}_{0} \pi^{-}_{0}} \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} \left(- \left(i \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} + m_{02}^{2} - \left(m_{\rho(770)^{0}}\right)^{2}\right) D^{0}_{0,0}\left(- \phi_{0},\theta_{0},0\right) D^{1}_{0,0}\left(- \phi^{12}_{1},\theta^{12}_{1},0\right) - \left(i \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} + m_{12}^{2} - \left(m_{\rho(770)^{0}}\right)^{2}\right) D^{0}_{0,0}\left(- \phi_{02},\theta_{02},0\right) D^{1}_{0,0}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right)\right)}{\left(i \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} + m_{02}^{2} - \left(m_{\rho(770)^{0}}\right)^{2}\right) \left(i \Gamma_{\rho(770)^{0}} m_{\rho(770)^{0}} + m_{12}^{2} - \left(m_{\rho(770)^{0}}\right)^{2}\right)} \\ \end{aligned}\end{split}\]

Hide code cell source

\[\begin{split}\displaystyle \begin{aligned} m_{\rho(770)^{0}} \;&=\; 0.77526 \\ \Gamma_{\rho(770)^{0}} \;&=\; 0.1474 \\ C_{D^{+} \to \pi^{+}_{0} \rho(770)^{0}_{0}; \rho(770)^{0} \to \pi^{+}_{0} \pi^{-}_{0}} \;&=\; 1+0i \\ \end{aligned}\end{split}\]

Some reactions result in amplitudes with sign flips. An example is \(J/\psi \to \gamma \pi^0 \pi^0\), where the parity prefactor of the \(\gamma\) results in a negative sign in some terms of the amplitude.

reaction = qrules.generate_transitions(
    initial_state="J/psi(1S)",
    final_state=["gamma", "pi0", "pi0"],
    allowed_intermediate_particles=["omega(782)"],
    formalism="helicity",
)

Hide code cell source

src = qrules.io.asdot(perform_combinatorics(reaction.transitions[-1]))
graphviz.Source(src)
../../_images/575f4a649918db32de497d8ca472e62aabe3bea601401b65030e1aa9f378d706.svg
bw_builder = RelativisticBreitWignerBuilder()
model_builder = ampform.HelicityAmplitudeBuilder(reaction)
for name in reaction.get_intermediate_particles().names:
    model_builder.dynamics.assign(name, bw_builder)
model = model_builder.formulate()

Hide code cell source

symbol, expr = next(iter(model.amplitudes.items()))
Math(aslatex({symbol: expr}, terms_per_line=1))
\[\begin{split}\displaystyle \begin{aligned} {A^{02}}_{0,-1,0,0} \;&=\; \frac{C_{J/\psi(1S) \to \omega(782)_{+1} \pi^{0}_{0}; \omega(782) \to \gamma_{+1} \pi^{0}_{0}} \Gamma_{\omega(782)} m_{\omega(782)} D^{1}_{-1,-1}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right) D^{1}_{0,-1}\left(- \phi_{02},\theta_{02},0\right)}{- i \Gamma_{\omega(782)} m_{\omega(782)} - m_{02}^{2} + m_{\omega(782)}^{2}} \\ \;&+\; \frac{C_{J/\psi(1S) \to \omega(782)_{+1} \pi^{0}_{0}; \omega(782) \to \gamma_{+1} \pi^{0}_{0}} \Gamma_{\omega(782)} m_{\omega(782)} D^{1}_{0,1}\left(- \phi_{02},\theta_{02},0\right) D^{1}_{1,-1}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right)}{- i \Gamma_{\omega(782)} m_{\omega(782)} - m_{02}^{2} + m_{\omega(782)}^{2}} \\ \;&+\; \frac{C_{J/\psi(1S) \to \omega(782)_{+1} \pi^{0}_{0}; \omega(782) \to \gamma_{+1} \pi^{0}_{0}} \Gamma_{\omega(782)} m_{\omega(782)} D^{1}_{-1,-1}\left(- \phi^{01}_{0},\theta^{01}_{0},0\right) D^{1}_{0,-1}\left(- \phi_{01},\theta_{01},0\right)}{- i \Gamma_{\omega(782)} m_{\omega(782)} - m_{01}^{2} + m_{\omega(782)}^{2}} \\ \;&+\; \frac{C_{J/\psi(1S) \to \omega(782)_{+1} \pi^{0}_{0}; \omega(782) \to \gamma_{+1} \pi^{0}_{0}} \Gamma_{\omega(782)} m_{\omega(782)} D^{1}_{0,1}\left(- \phi_{01},\theta_{01},0\right) D^{1}_{1,-1}\left(- \phi^{01}_{0},\theta^{01}_{0},0\right)}{- i \Gamma_{\omega(782)} m_{\omega(782)} - m_{01}^{2} + m_{\omega(782)}^{2}} \\ \;&+\; - \frac{C_{J/\psi(1S) \to \omega(782)_{0} \pi^{0}_{0}; \omega(782) \to \gamma_{+1} \pi^{0}_{0}} \Gamma_{\omega(782)} m_{\omega(782)} D^{1}_{0,-1}\left(- \phi^{02}_{0},\theta^{02}_{0},0\right) D^{1}_{0,0}\left(- \phi_{02},\theta_{02},0\right)}{- i \Gamma_{\omega(782)} m_{\omega(782)} - m_{02}^{2} + m_{\omega(782)}^{2}} \\ \;&+\; - \frac{C_{J/\psi(1S) \to \omega(782)_{0} \pi^{0}_{0}; \omega(782) \to \gamma_{+1} \pi^{0}_{0}} \Gamma_{\omega(782)} m_{\omega(782)} D^{1}_{0,-1}\left(- \phi^{01}_{0},\theta^{01}_{0},0\right) D^{1}_{0,0}\left(- \phi_{01},\theta_{01},0\right)}{- i \Gamma_{\omega(782)} m_{\omega(782)} - m_{01}^{2} + m_{\omega(782)}^{2}} \\ \end{aligned}\end{split}\]