Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing states for certain allowed_intermediate_particles (h(1)(1415)) #165

Closed
redeboer opened this issue Mar 30, 2022 · 4 comments · Fixed by #166
Closed

Missing states for certain allowed_intermediate_particles (h(1)(1415)) #165

redeboer opened this issue Mar 30, 2022 · 4 comments · Fixed by #166
Assignees
Labels
🐛 Bug Something isn't working
Milestone

Comments

@redeboer
Copy link
Member

redeboer commented Mar 30, 2022

Original report by @Junliihep

When I generate a transition with intermediate state "h(1)(1415)", if I only add this state, it's ok.

For example:

reaction = qrules.generate_transitions(
    initial_state=("psi(2S)", [+1, -1]),
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)"],
    allowed_interaction_types=["strong", "EM"],
    mass_conservation_factor=1,
    formalism="helicity",
)

will work. But if I add any other state, it will fail.

For example:

reaction = qrules.generate_transitions(
    initial_state=("psi(2S)", [+1, -1]),
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)", "omega(1420)"],
    allowed_interaction_types=["strong", "EM"],
    mass_conservation_factor=1,
    formalism="helicity",
)

will ignore h(1)(1415) and only generate a transition with omega(1420),

and

reaction = qrules.generate_transitions(
    initial_state=("psi(2S)", [+1, -1]),
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)", "K*(892)+"],  # <-- BOTH!
    allowed_interaction_types=["strong", "EM"],
    mass_conservation_factor=1,
    formalism="helicity",
)

will ignore h(1)(1415) and fail.

reaction = qrules.generate_transitions(
    initial_state=[("psi(2S)", [+1, -1])],
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)"],
)
dot = qrules.io.asdot(reaction, collapse_graphs=True)
graphviz.Source(dot)

reaction = qrules.generate_transitions(
    initial_state=[("psi(2S)", [+1, -1])],
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["omega(1650)"],
)
dot = qrules.io.asdot(reaction, collapse_graphs=True)
graphviz.Source(dot)

reaction = qrules.generate_transitions(
    initial_state=[("psi(2S)", [+1, -1])],
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)", "omega(1650)"],
)
dot = qrules.io.asdot(reaction, collapse_graphs=True)
graphviz.Source(dot)

@redeboer redeboer added the 🐛 Bug Something isn't working label Mar 30, 2022
@redeboer
Copy link
Member Author

Seems to be related to #33 and possibly #160

@redeboer
Copy link
Member Author

redeboer commented Mar 31, 2022

Currently working out a fix in #166. The problem seems to originate from the point where QRules finds particle candidates for each of the quantum number sets it has found. A method will be extracted so that those quantum numbers can be inspected first (#168).

Until then, if you use QRules for building amplitude models with AmpForm, a quick fix is to merge the solutions you have found as follows:

import qrules
reaction1 = qrules.generate_transitions(
    initial_state=("psi(2S)", [+1, -1]),
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)"],
)
reaction2 = qrules.generate_transitions(
    initial_state=("psi(2S)", [+1, -1]),
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["omega(1420)"],
)
reaction = qrules.ReactionInfo(
    reaction1.transitions + reaction2.transitions,
    formalism=reaction1.formalism,
)

It doesn't solve the underlying problem, but at least you have a ReactionInfo object with all the resonances.

--> This requires pre-release 0.10.0a1, or at least c6c35de.

pip install qrules==0.10.0a1

@redeboer redeboer changed the title Missing states for certain combinations of allowed_intermediate_particles Missing states for certain combinations of allowed_intermediate_particles Apr 11, 2022
@redeboer redeboer modified the milestones: 0.10.0, 0.9.8 Apr 3, 2023
@redeboer
Copy link
Member Author

redeboer commented Apr 4, 2023

I suspect it has something to do with the fact that the graph settings are affected by the choice of allowed_intermediate_particles here:

intermediate_edge_domains[EdgeQuantumNumbers.spin_projection].update(
self.interaction_type_settings[InteractionType.WEAK][0].qn_domains[
EdgeQuantumNumbers.spin_projection
]
)
for particle_props in self.__allowed_intermediate_states:
for edge_qn, qn_value in particle_props.items():
intermediate_edge_domains[edge_qn].add(qn_value)

"h(1)(1415)" does not have isospin, while "omega(1650)" does. This may mean that choosing only "h(1)(1415)" as allowed intermediate resonance removes the isospin domain.

only $h_1(1415)$

$h_1(1415)$ and $\omega(1650)$

@redeboer
Copy link
Member Author

redeboer commented Apr 5, 2023

Solution for now (see also scikit-hep/particle#486):

import graphviz
import qrules

PDG = qrules.load_pdg()
h1415 = PDG["h(1)(1415)"]
new_h1415 = qrules.particle.create_particle(
    h1415,
    isospin=qrules.particle.Spin(0, 0),
)
PDG.remove(h1415)
PDG.add(new_h1415)

reaction = qrules.generate_transitions(
    initial_state=[("psi(2S)", [+1, -1])],
    final_state=["eta", "K-", "K*(892)+"],
    allowed_intermediate_particles=["h(1)(1415)", "omega(1650)"],
    particle_db=PDG,
)
dot = qrules.io.asdot(reaction, collapse_graphs=True)
graphviz.Source(dot)

Another solution might be to extend the quantum number domains for edge numbers that are not there, for instance by adding something like this:

                for edge_qn, domain in self.interaction_type_settings[
                    InteractionType.WEAK
                ][0].items():
                    if edge_qn not in intermediate_edge_domains:
                        intermediate_edge_domains[edge_qn].update(domain)

after this line

for particle_props in self.__allowed_intermediate_states:
for edge_qn, qn_value in particle_props.items():
intermediate_edge_domains[edge_qn].add(qn_value)

This will, however, remove the original h(1)(1415) (with isospin==None) from the allowed transitions.

@redeboer redeboer changed the title Missing states for certain combinations of allowed_intermediate_particles Missing states for certain combinations of allowed_intermediate_particles (h(1)(1415)) Apr 19, 2023
@redeboer redeboer changed the title Missing states for certain combinations of allowed_intermediate_particles (h(1)(1415)) Missing states for certain allowed_intermediate_particles (h(1)(1415)) Apr 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 Bug Something isn't working
Projects
Status: Upcoming
Development

Successfully merging a pull request may close this issue.

1 participant