{
"cells": [
{
"cell_type": "markdown",
"id": "e6727008",
"metadata": {},
"source": [
"## Write FeynmanDiagram"
]
},
{
"cell_type": "markdown",
"id": "2c94293d",
"metadata": {},
"source": [
"Convenient saving and loading of style independent feynman diagrams as XML or FeynML."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "8fe30ac6",
"metadata": {},
"outputs": [],
"source": [
"from xsdata.formats.dataclass.parsers import XmlParser\n",
"from xsdata.formats.dataclass.serializers import XmlSerializer\n",
"from xsdata.formats.dataclass.serializers.config import SerializerConfig\n",
"\n",
"from pyfeyn2.feynmandiagram import (\n",
" FeynmanDiagram,\n",
" FeynML,\n",
" Head,\n",
" Leg,\n",
" Meta,\n",
" Propagator,\n",
" Vertex,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "48bb6b54",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" \n",
" p1\n",
" v1\n",
" v2\n",
" \n",
" \n",
" v1\n",
" \n",
" \n",
" v2\n",
" \n",
" \n",
" l1\n",
" \n",
" incoming\n",
" \n",
"\n",
"\n"
]
}
],
"source": [
"fd = FeynmanDiagram()\n",
"v1 = Vertex(\"v1\")\n",
"v2 = Vertex(\"v2\")\n",
"p1 = Propagator(\"p1\")\n",
"l1 = Leg(\"l1\").with_incoming()\n",
"p1.with_source(v1)\n",
"p1.with_target(v2)\n",
"fd.propagators.append(p1)\n",
"fd.vertices.append(v1)\n",
"fd.vertices.append(v2)\n",
"fd.legs.append(l1)\n",
"\n",
"config = SerializerConfig(pretty_print=True)\n",
"serializer = XmlSerializer(config=config)\n",
"print(serializer.render(fd))"
]
},
{
"cell_type": "markdown",
"id": "0077a833",
"metadata": {},
"source": [
"## Write FeynML"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "de4d72df",
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" \n",
" \n",
" Simple single test diagram\n",
" \n",
" \n",
" \n",
" p1\n",
" v1\n",
" v2\n",
" \n",
" \n",
" v1\n",
" \n",
" \n",
" v2\n",
" \n",
" \n",
" l1\n",
" \n",
" incoming\n",
" \n",
" \n",
"\n",
"\n"
]
}
],
"source": [
"fml = FeynML(\n",
" head=Head(\n",
" metas=[Meta(name=\"pyfeyn2\", content=\"test\")],\n",
" description=\"Simple single test diagram\",\n",
" ),\n",
" diagrams=fd,\n",
" )\n",
"\n",
"config = SerializerConfig(pretty_print=True)\n",
"serializer = XmlSerializer(config=config)\n",
"print(serializer.render(fml))"
]
},
{
"cell_type": "markdown",
"id": "a84a35de",
"metadata": {},
"source": [
"## Read FeynML"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "84801155",
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"FeynML(head=[Head(metas=[Meta(name='creator', value='PyFeyn')], description='\\n A sample diagram showing a QCD correction to the Drell-Yan process.\\n ')], diagrams=[FeynmanDiagram(propagators=[Propagator(id='Propagator5', id2=None, pdgid=None, name=None, type='photon', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), bend=None, label='Z', momentum=None, tension=None, length=None, source='', target=''), Propagator(id='Propagator7', id2=None, pdgid=None, name=None, type='fermion', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), bend=None, label=None, momentum=None, tension=None, length=None, source='', target=''), Propagator(id='Propagator9', id2=None, pdgid=None, name=None, type='fermion', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), bend=None, label=None, momentum=None, tension=None, length=None, source='', target=''), Propagator(id='Propagator10', id2=None, pdgid=None, name=None, type='gluon', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText='parallel-arrow-displace: 0.2'), bend=0.5, label='g', momentum=None, tension=None, length=None, source='', target='')], vertices=[Vertex(id='Vertex1', id2=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), x=-2.0, y=0.0, z=None, label=None), Vertex(id='Vertex2', id2=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), x=2.0, y=0.0, z=None, label=None), Vertex(id='Vertex6', id2=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), x=3.0, y=-1.0, z=None, label=None), Vertex(id='Vertex8', id2=None, style=cssutils.css.CSSStyleDeclaration(cssText=''), x=3.0, y=1.0, z=None, label=None)], legs=[Leg(id='Leg3', id2=None, pdgid=None, name=None, type='fermion', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText='arrow-pos: 0.53'), bend=None, label='e-', momentum=None, tension=None, length=None, target='', x=-4.0, y=2.0, z=None, sense=''), Leg(id='Leg4', id2=None, pdgid=None, name=None, type='fermion', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText='arrow-pos: 0.53; parallel-arrow-displace: -0.06; parallel-arrow-sense: -1'), bend=None, label='e+', momentum=None, tension=None, length=None, target='', x=-4.0, y=-2.0, z=None, sense=''), Leg(id='Leg11', id2=None, pdgid=None, name=None, type='fermion', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText='arrow-pos: 0.53; parallel-arrow-displace: -0.06; parallel-arrow-sense: -1'), bend=None, label='q+', momentum=None, tension=None, length=None, target='', x=4.0, y=-2.0, z=None, sense=''), Leg(id='Leg12', id2=None, pdgid=None, name=None, type='fermion', particle=None, style=cssutils.css.CSSStyleDeclaration(cssText='arrow-pos: 0.53'), bend=None, label='q-', momentum=None, tension=None, length=None, target='', x=4.0, y=2.0, z=None, sense='')], labels=[Label(id='Label0', id2=None, text='Drell-Yan QCD vertex correction', x=0.0, y=2.0, z=None)])])\n"
]
},
{
"ename": "UnboundLocalError",
"evalue": "local variable 'nl' referenced before assignment",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mUnboundLocalError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[4], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m fml \u001b[38;5;241m=\u001b[39m parser\u001b[38;5;241m.\u001b[39mfrom_string(xml_string, FeynML)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(fml)\n\u001b[0;32m----> 8\u001b[0m wimg \u001b[38;5;241m=\u001b[39m \u001b[43mPyxRender\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfml\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdiagrams\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrender\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m~/data/de.neuwirthinformatik.Alexander/Development/git/pyfeyn2/pyfeyn2/render/pyx/pyxrender.py:38\u001b[0m, in \u001b[0;36mPyxRender.render\u001b[0;34m(self, file, show, resolution, width, height, clean_up)\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m l\u001b[38;5;241m.\u001b[39msense[:\u001b[38;5;241m3\u001b[39m] \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mout\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m l\u001b[38;5;241m.\u001b[39msense[:\u001b[38;5;241m9\u001b[39m] \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124manti-in\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 37\u001b[0m nl \u001b[38;5;241m=\u001b[39m NamedLine[l\u001b[38;5;241m.\u001b[39mtype](Point(tar\u001b[38;5;241m.\u001b[39mx, tar\u001b[38;5;241m.\u001b[39my), Point(l\u001b[38;5;241m.\u001b[39mx, l\u001b[38;5;241m.\u001b[39my))\n\u001b[0;32m---> 38\u001b[0m nl \u001b[38;5;241m=\u001b[39m \u001b[43mnl\u001b[49m\u001b[38;5;241m.\u001b[39mbend(l\u001b[38;5;241m.\u001b[39mbend)\n\u001b[1;32m 39\u001b[0m nl \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mapply_layout(v\u001b[38;5;241m.\u001b[39mraw_style(), nl)\n\u001b[1;32m 40\u001b[0m nl \u001b[38;5;241m=\u001b[39m nl\u001b[38;5;241m.\u001b[39maddLabel(l\u001b[38;5;241m.\u001b[39mlabel)\n",
"\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'nl' referenced before assignment"
]
}
],
"source": [
"from pathlib import Path\n",
"from pyfeyn2.render.pyx.pyxrender import PyxRender\n",
"\n",
"xml_string = Path(\"test.fml\").read_text()\n",
"parser = XmlParser()\n",
"fml = parser.from_string(xml_string, FeynML)\n",
"print(fml)\n",
"wimg = PyxRender(fml.diagrams[0]).render()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c792aa32",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
},
"vscode": {
"interpreter": {
"hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}