Amplitude symmetrization#
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"],
)
flowchart LR
T0_0["$$0: \pi^{+}$$"]
T0_1["$$1: \pi^{+}$$"]
T0_2["$$2: \pi^{-}$$"]
T0_N0["$$D^{+}$$"]
T0_N1@{ shape: text, label: " " }
T0_3("$$\rho(770)^{0}$$")
T0_N0 --- T0_3
T0_3 --- T0_N1
T0_N0 --- T0_0
T0_N1 --- T0_1
T0_N1 --- T0_2
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])
flowchart LR
T0_0["$$0: \pi^{+}$$"]
T0_1["$$1: \pi^{+}$$"]
T0_2["$$2: \pi^{-}$$"]
T0_N0["$$D^{+}$$"]
T0_N1@{ shape: text, label: " " }
T0_3("$$\rho(770)^{0}$$")
T0_N0 --- T0_3
T0_3 --- T0_N1
T0_N0 --- T0_0
T0_N1 --- T0_1
T0_N1 --- T0_2
T1_0["$$0: \pi^{+}$$"]
T1_1["$$1: \pi^{+}$$"]
T1_2["$$2: \pi^{-}$$"]
T1_N0["$$D^{+}$$"]
T1_N1@{ shape: text, label: " " }
T1_3("$$\rho(770)^{0}$$")
T1_N0 --- T1_3
T1_3 --- T1_N1
T1_N0 --- T1_1
T1_N1 --- T1_0
T1_N1 --- T1_2
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))
but the parameters of both amplitudes are the same:
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",
)
flowchart LR
T0_0["$$0: \gamma\left[\text{+}1\right]$$"]
T0_1["$$1: \pi^{0}\left[0\right]$$"]
T0_2["$$2: \pi^{0}\left[0\right]$$"]
T0_N0["$$J/\psi(1S)\left[\text{+}1\right]$$"]
T0_N1@{ shape: text, label: " " }
T0_3("$$\omega(782)\left[\text{+}1\right]$$")
T0_N0 --- T0_3
T0_3 --- T0_N1
T0_N0 --- T0_2
T0_N1 --- T0_0
T0_N1 --- T0_1
T1_0["$$0: \gamma\left[\text{+}1\right]$$"]
T1_1["$$1: \pi^{0}\left[0\right]$$"]
T1_2["$$2: \pi^{0}\left[0\right]$$"]
T1_N0["$$J/\psi(1S)\left[\text{+}1\right]$$"]
T1_N1@{ shape: text, label: " " }
T1_3("$$\omega(782)\left[\text{+}1\right]$$")
T1_N0 --- T1_3
T1_3 --- T1_N1
T1_N0 --- T1_1
T1_N1 --- T1_0
T1_N1 --- T1_2
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()