Source code for feynml.interface.hepmc

import pyhepmc
from pyhepmc import GenEvent

from feynml.feynmandiagram import FeynmanDiagram
from feynml.feynml import FeynML, Head, Meta
from feynml.leg import Leg
from feynml.propagator import Propagator
from feynml.util import leg_id_wrap, propagator_id_wrap, vertex_id_wrap
from feynml.vertex import Vertex

# TODO add momenta?


[docs]def hepmc_event_to_feynman(event: GenEvent) -> FeynmanDiagram: """ Convert a GenEvent to a FeynmanDiagram. Args: event: The GenEvent to convert. Returns: A FeynmanDiagram object. """ fd = FeynmanDiagram() for v in event.vertices: v = Vertex(id=vertex_id_wrap(v.id)) fd.add(v) for p in event.particles: # TODO first create all vertices? if p.status == 4: # incoming Leg fd.add( Leg( id=leg_id_wrap(p.id), pdgid=p.pid, target=vertex_id_wrap(p.end_vertex.id), sense="incoming", ) ) elif p.status == 1: # outgoing Leg fd.add( Leg( id=leg_id_wrap(p.id), pdgid=p.pid, target=vertex_id_wrap(p.production_vertex.id), sense="outgoing", ) ) else: # Propagator fd.add( Propagator( id=propagator_id_wrap(p.id), pdgid=p.pid, source=vertex_id_wrap(p.production_vertex.id), target=vertex_id_wrap(p.end_vertex.id), ) ) return fd
[docs]def hepmc_to_feynml( hepmc_file: str, creator="pyfeyn2", tool="pyfeyn2.interface.hepmc", title="", description="", ) -> FeynML: """ Convert a HepMC file to a FeynML object. Args: hepmc_file: The path to the HepMC file. creator: The creator of the file. tool: The tool used to create the file. title: The title of the file. description: The description of the file. Returns: A FeynML object. """ fds = [] with pyhepmc.open(hepmc_file) as f: for event in f: fds.append(hepmc_event_to_feynman(event)) return FeynML( diagrams=fds, head=Head( metas=[ Meta(name="creator", content=creator), Meta(name="tool", content=tool), Meta(name="description", content=description), Meta(name="title", content=title), ] ), )