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)

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)

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:
For now, the only way to avoid this, is to construct a new
ReactionInfoobject from filtered transition objects, e.g.: