ComPWA / qrules

Rule-based particle reaction problem solver on a quantum number level
https://qrules.rtfd.io
Apache License 2.0
9 stars 4 forks source link

Allow filtering resonances per intermediate edge #269

Open redeboer opened 1 month ago

redeboer commented 1 month ago

In four-body decays, it becomes relevant to filter particles per intermediate state. For instance, in $B_0 \to \left(J/\psi\to\mu^-\mu^+\right) \pi^+ K^-$, it finds $J/\psi$ in both subsystems:

from qrules.transition import StateTransitionManager

stm = StateTransitionManager(
    initial_state=["B0"],
    final_state=["K-", "pi+", "mu+", "mu-"],
    formalism="helicity",
)
stm.add_final_state_grouping([["K-", "pi+"], ["mu+", "mu-"]])
stm.set_allowed_intermediate_particles(r"^(J/psi\(1S\)|f\(0\).*)$", regex=True)
problem_sets = stm.create_problem_sets()
reaction4body_full = stm.find_solutions(problem_sets)
src = qrules.io.asdot(reaction4body_full, collapse_graphs=True)
graphviz.Source(src)

figure svg

For now, the only way to avoid this, is to construct a new ReactionInfo object from filtered transition objects, e.g.:

REACTION4BODY = qrules.ReactionInfo(
    transitions=tuple(
        transition
        for transition in reaction4body_full.transitions
        if transition.states[4].particle.name == "J/psi(1S)"
    ),
    formalism=reaction4body_full.formalism,
)
src = qrules.io.asdot(REACTION4BODY, collapse_graphs=True)
graphviz.Source(src)