- 
                Notifications
    You must be signed in to change notification settings 
- Fork 6
Description
To-do [WIP]
-  Move scalar_initial_state_massandstable_final_state_idsconfig toHelicityAdapter(that should untangle this mess)
Problem description
The latest (unreleased) implementation of Dalitz-plot decomposition (#307) makes use of the existing HelicityAmplitudeBuilder. This is problematic, because the choice of spin alignment method influences the way the 'unaligned' amplitudes are formulated. In particular, in the case of DPD, there should be no 'isobar Wigner-D'.
Here's an attempt to summarize the processes that go on when calling HelicityAmplitudeBuilder.formulate():
- 
[Core] Loop over QRules' StateTransitionobjects to formulate (unaligned) helicity amplitudes for each decay chain. This also takes care of particle symmetrisation, throughperform_external_edge_identical_particle_combinatorics().
- The helicity formalism assumes a decay proceeds through a chain of isobar decays, so that the 'unaligned' amplitude for, for example, a three-body decay $0 \to R (\to 12) 3$ can be formulated as a product of two couplings for the two isobars:
 
 with$\mathcal{H}$ some scalar, complex coupling strength for each isobar,$D$ a Wigner-D function over helicity angles$\left(\phi^i_j, \theta^i_j\right)$ (polar angles of$j$ in the rest frame of$i$ ),$s_i$ the spin magnitude of particle$i$ ,$\lambda_i$ its helicity1, and$\mathcal{D}$ a dynamics lineshape that depends on kinematic variables$\tau$ (usually Mandelstam variable, widths, masses of decay products and angular momentum of the decaying pair).2
- Keep track of lineshape choices $\mathcal{D}\left(\tau\right)$ for each isobar node. This is outsourced toDynamicsSelector.
- Generate suggested parameter values for each parameter sympy.Symbolin the resulting expression. The amplitude builder only generates suggested parameter values for the helicity couplings$\mathcal{H}$ (simply set to1+0j).ResonanceDynamicsBuilders suggest values for the remaining parameters, like pole position or meson radius.
- Formulate conversion from four-momentum to kinematic variables. This currently done through the HelicityAdapterand computes only invariant masses and helicity angles$\phi, \theta$ .
- Generate coefficient/coupling names for each StateTransitionthrough aNameGenerator. For some state transitions, the coupling name is the same, for parity conservation concerns (the intelligence there comes from QRules, though). SeeHelicityAmplitudeNameGeneratorfor the implementation used by theHelicityAmplitudeBuilder.
- Align spin (see 1). This is currently to be done through an external class that the HelicityAmplitudeBuilderis unaware of. This class also has the responsibility to compute any additional kinematic variables, like$\zeta^i_{j(k)}$ for Dalitz-plot decomposition.
Example
All in all, as of 148c8c9, this results in the following amplitudes, using NoAlignment and DalitzPlotDecomposition3:
import ampform
import qrules
from ampform.helicity.align import NoAlignment
reaction = qrules.generate_transitions(
    initial_state=("J/psi(1S)", [-1, +1]),
    final_state=["K0", "Sigma+", "p~"],
    allowed_intermediate_particles=["Sigma(1660)", "N(1650)"],
    allowed_interaction_types=["strong"],
    formalism="helicity",
)
builder = ampform.get_builder(reaction)
builder.config.spin_alignment = NoAlignment()
builder.config.use_helicity_couplings = True
non_aligned_model = builder.formulate()
non_aligned_model.intensitynon_aligned_model.amplitudesFor DPD, the reaction needs to be relabeled:4
from ampform.helicity.align.dpd import DalitzPlotDecomposition, relabel_edge_ids
reaction_123 = relabel_edge_ids(reaction)
builder_123 = ampform.get_builder(reaction_123)
builder_123.config.spin_alignment = DalitzPlotDecomposition(reference_subsystem=1)
builder_123.config.use_helicity_couplings = True
dpd_model = builder_123.formulate()
dpd_model.intensitydpd_model.amplitudesNote that the choice for DPD does not affect the individual amplitudes. This is incorrect, if I understand @mmikhasenko correctly. In combination with #309, this points in the direction of a fundamental design problem, namely the assumption that the choice of 'spin alignment method' does not affect the form of the 'unaligned' amplitudes.
Related issues
- Describe helicity formalism #210
- Formulate amplitudes with SymPy bra-ket states #257
- Remove QRules from interface #281
- Improve documentation of parity prefactor #284
- Sum DPD Wigner-D functions over all allowed helicities #309
Footnotes
- 
The CanonicalAmplitudeBuilderforms an extension of theHelicityAmplitudeBuilderclass that (only) inserts Clebsch-Gordan coefficients (formulate_clebsch_gordan_coefficients()). Amplitude $\mathcal{A}^R$ then becomes a sum over all allowed $LS$-couplings for $0 \to R (\to 12) 3$ with two CG coefficients for each node (four in the case of a three-body decay). ↩
- 
Yes, there is a minor bug in the second set of summations, see https://github.com/ComPWA/ampform/issues/309. ↩ 
- 
The relabeled reactions look as follows: 
 ↩Standard labeling DPD labeling 
Metadata
Metadata
Assignees
Labels
Type
Projects
Status