Open redeboer opened 2 years ago
Conclusion after discussion with @spflueger: write a new builder for DPD and don't let this work through dependency injection (spin_alignment
member). A core method seems to be _formulate_partial_decay()
, which is overwritten by CanonicalAmplitudeBuilder
. If this could somehow be made into a function or separate interface, we can also get of this risky inheritance-in-order-to-share-functionality.
To-do [WIP]
scalar_initial_state_mass
andstable_final_state_ids
config toHelicityAdapter
(that should untangle this mess)Problem description
The latest (unreleased) implementation of Dalitz-plot decomposition (https://github.com/ComPWA/ampform/pull/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()
:StateTransition
objects to formulate (unaligned) helicity amplitudes for each decay chain. This also takes care of particle symmetrisation, throughperform_external_edge_identical_particle_combinatorics()
.DynamicsSelector
.sympy.Symbol
in the resulting expression. The amplitude builder only generates suggested parameter values for the helicity couplings $\mathcal{H}$ (simply set to1+0j
).ResonanceDynamicsBuilder
s suggest values for the remaining parameters, like pole position or meson radius.HelicityAdapter
and computes only invariant masses and helicity angles $\phi, \theta$.StateTransition
through aNameGenerator
. For some state transitions, the coupling name is the same, for parity conservation concerns (the intelligence there comes from QRules, though). SeeHelicityAmplitudeNameGenerator
for the implementation used by theHelicityAmplitudeBuilder
.HelicityAmplitudeBuilder
is 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
andDalitzPlotDecomposition
[^3]:For DPD, the reaction needs to be relabeled:[^4]
Note 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
210
257
281
284
309
[^1]: This causes the need for 'spin alignment'. [^2]: The
CanonicalAmplitudeBuilder
forms an extension of theHelicityAmplitudeBuilder
class 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). [^3]: Yes, there is a minor bug in the second set of summations, see https://github.com/ComPWA/ampform/issues/309. [^4]: The relabeled reactions look as follows: