Helicity versus canonical#
In this notebook, we have a look at the decay
in order to see the difference between a HelicityModel formulated in the canonical basis and one formulated in the helicity basis. To simplify things, we only look at spin projection \(+1\) for \(D_1(2420)^0\), because the intensities for each of the spin projections of \(D_1(2420)^0\) are incoherent, no matter which spin formalism we choose.
Tip
For more information about the helicity formalism, see [Chung, 2014], [Richman, 1984], and [Kutschke, 1996].
First, we use qrules.generate_transitions() to generate a ReactionInfo instance for both formalisms:
def generate_transitions(formalism: str):
reaction = qrules.generate_transitions(
initial_state=("D(1)(2420)0", [+1]),
final_state=["K+", "K-", "K~0"],
allowed_intermediate_particles=["a(1)(1260)+"],
formalism=formalism,
)
builder = ampform.get_builder(reaction)
return builder.formulate()
cano_model = generate_transitions("canonical-helicity")
heli_model = generate_transitions("helicity")
From components and parameter_defaults, we can see that the canonical formalism has a larger number of amplitudes.
Formalism |
Coefficients |
Amplitudes |
|---|---|---|
Canonical |
3 |
8 |
Helicity |
3 |
3 |
The reason for this is that canonical basis distinguishes amplitudes over their \(LS\)-combinations. This becomes clear if we define \(a\) to be the amplitude without coefficient (\(A = C a\)), and consider what the full, coherent intensity looks like.
If we write the full intensity as \(I = \left|\sum_i A_i\right|^2\), then we have, in the case of the canonical basis:
In the helicity basis, the \(LS\)-combinations have been summed over already and we can only see an amplitude for each helicity:
Amplitudes in the canonical basis are formulated with regard to their \(LS\)-couplings. As such, they contain additional Clebsch–Gordan coefficients that serve as expansion coefficients.
In the helicity basis, these Clebsch–Gordan coefficients and Wigner-\(D\) functions have been summed up, leaving only a Wigner-\(D\) for each node in the decay chain (two in this case):
See formulate_isobar_wigner_d() and formulate_isobar_cg_coefficients() for how these Wigner-\(D\) functions and Clebsch–Gordan coefficients are computed for each node on a Transition.
We can see this also from the original ReactionInfo objects. Let’s select only the transitions where the \(a_1(1260)^+\) resonance has spin projection \(-1\) (taken to be helicity \(-1\) in the helicity formalism). We then see just one Transition in the helicity basis and three transitions in the canonical basis:
Helicity basis:
flowchart LR
T0_0["$$K^{+}\left[0\right]$$"]
T0_1["$$K^{-}\left[0\right]$$"]
T0_2["$$\overline{K}^{0}\left[0\right]$$"]
T0_A["$$D_{1}(2420)^{0}\left[\text{+}1\right]$$"]
T0_N0@{ shape: text, label: " " }
T0_N1@{ shape: text, label: " " }
T0_3("$$a_{1}(1260)^{+}\left[\text{-}1\right]$$")
T0_A --- T0_N0
T0_N0 --- T0_3
T0_3 --- T0_N1
T0_N0 --- T0_1
T0_N1 --- T0_0
T0_N1 --- T0_2
Canonical basis:
flowchart LR
T0_0["$$K^{+}\left[0\right]$$"]
T0_1["$$K^{-}\left[0\right]$$"]
T0_2["$$\overline{K}^{0}\left[0\right]$$"]
T0_A["$$D_{1}(2420)^{0}\left[\text{+}1\right]$$"]
T0_N0(("$$\begin{gathered} L = \left|2,0\right\rangle \\\ S = \left|1,\text{+}1\right\rangle \end{gathered}$$"))
T0_N1(("$$\begin{gathered} L = \left|1,0\right\rangle \\\ S = \left|0,0\right\rangle \end{gathered}$$"))
T0_3("$$a_{1}(1260)^{+}\left[\text{-}1\right]$$")
T0_A --- T0_N0
T0_N0 --- T0_3
T0_3 --- T0_N1
T0_N0 --- T0_1
T0_N1 --- T0_0
T0_N1 --- T0_2
T1_0["$$K^{+}\left[0\right]$$"]
T1_1["$$K^{-}\left[0\right]$$"]
T1_2["$$\overline{K}^{0}\left[0\right]$$"]
T1_A["$$D_{1}(2420)^{0}\left[\text{+}1\right]$$"]
T1_N0(("$$\begin{gathered} L = \left|1,0\right\rangle \\\ S = \left|1,\text{+}1\right\rangle \end{gathered}$$"))
T1_N1(("$$\begin{gathered} L = \left|1,0\right\rangle \\\ S = \left|0,0\right\rangle \end{gathered}$$"))
T1_3("$$a_{1}(1260)^{+}\left[\text{-}1\right]$$")
T1_A --- T1_N0
T1_N0 --- T1_3
T1_3 --- T1_N1
T1_N0 --- T1_1
T1_N1 --- T1_0
T1_N1 --- T1_2
T2_0["$$K^{+}\left[0\right]$$"]
T2_1["$$K^{-}\left[0\right]$$"]
T2_2["$$\overline{K}^{0}\left[0\right]$$"]
T2_A["$$D_{1}(2420)^{0}\left[\text{+}1\right]$$"]
T2_N0(("$$\begin{gathered} L = \left|0,0\right\rangle \\\ S = \left|1,\text{+}1\right\rangle \end{gathered}$$"))
T2_N1(("$$\begin{gathered} L = \left|1,0\right\rangle \\\ S = \left|0,0\right\rangle \end{gathered}$$"))
T2_3("$$a_{1}(1260)^{+}\left[\text{-}1\right]$$")
T2_A --- T2_N0
T2_N0 --- T2_3
T2_3 --- T2_N1
T2_N0 --- T2_1
T2_N1 --- T2_0
T2_N1 --- T2_2
Coefficient names#
In the previous section, we saw that the HelicityAmplitudeBuilder by default generates coefficient names that only contain helicities of the decay products, while coefficients generated by the CanonicalAmplitudeBuilder contain only \(LS\)-combinations. It’s possible to tweak this behavior with the naming attribute. Here are two extreme examples, where we generate coefficient names that contain \(LS\)-combinations, the helicities of each parent state, and the helicity of each decay product, as well as a HelicityModel of which the coefficient names only contain information about the resonances:
reaction = qrules.generate_transitions(
initial_state=("D(1)(2420)0", [+1]),
final_state=["K+", "K-", "K~0"],
allowed_intermediate_particles=["a(1)(1260)+"],
formalism="canonical-helicity",
)
builder = ampform.get_builder(reaction)
builder.naming.insert_parent_helicities = True
builder.naming.insert_child_helicities = True
builder.naming.insert_ls_combinations = True
model = builder.formulate()
builder.naming.insert_parent_helicities = False
builder.naming.insert_child_helicities = False
builder.naming.insert_ls_combinations = False
model = builder.formulate()