Combining reactions#

This notebooks shows how to combine two ReactionInfo objects that describe transitions for one equivalent initial-to-final state reaction. In this example, we have one ReactionInfo object that is generated all selection rules for the strong force and one that is generated for with specific interaction types per node.

import qrules

initial_state = [("J/psi(1S)", [-1, +1])]
final_state = ["eta", "p", "p~"]
reaction = qrules.generate_transitions(
    initial_state,
    final_state,
    allowed_intermediate_particles=["N"],
    allowed_interaction_types="strong",
)
Hide code cell source
import graphviz

src = qrules.io.asdot(reaction.transitions, collapse_graphs=True)
graphviz.Source(src)
../_images/41f0713c46ac517f39c02f534ce9a47353c83d76c83c90bf9a367e3666d10e6e.svg
from qrules.particle import Particle

PDG = qrules.load_pdg()
X1835 = Particle(
    # https://pdglive.lbl.gov/Particle.action?init=0&node=M085&home=MXXX005
    name="X(1835)",
    pid=9999991,
    mass=1.8265,
    width=0.242,
    spin=0,
    parity=-1,
    c_parity=+1,
)
PDG.add(X1835)
reaction_x1835 = qrules.generate_transitions(
    initial_state,
    final_state,
    allowed_intermediate_particles=[X1835.name],
    particle_db=PDG,
)
Hide code cell source
import graphviz

src = qrules.io.asdot(reaction_x1835.transitions, collapse_graphs=True)
graphviz.Source(src)
../_images/cd34c0da36a552d1669a6e141b7e67243fe025e833aa167f038fc7d3655c6d33.svg
from collections import defaultdict

from qrules.transition import ReactionInfo, StateTransitionCollection


def merge_reactions(*reactions: ReactionInfo) -> ReactionInfo:
    old_groups = []
    for reaction in reactions:
        old_groups.extend(reaction.transition_groups)
    merged_transitions = defaultdict(list)
    for group in old_groups:
        merged_transitions[group.topology].extend(group.transitions)
    transition_groups = {
        topology: StateTransitionCollection(transitions)
        for topology, transitions in merged_transitions.items()
    }
    return ReactionInfo(transition_groups.values(), formalism=reaction.formalism)


merged_reaction = merge_reactions(reaction, reaction_x1835)
Hide code cell source
import graphviz

src = qrules.io.asdot(merged_reaction.transitions, collapse_graphs=True)
graphviz.Source(src)
../_images/d03f24bea27a064c98b658e0e85768ccb6e620676cbf33f3da8bc57530ff7b88.svg