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:
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()