DotΒΆ

[1]:
from pyfeyn2.feynmandiagram import FeynmanDiagram, Leg, Propagator, Vertex
from pyfeyn2.render.tikzfeynman import TikzFeynmanRender
from pyfeyn2.render.dot import feynman_adjust_points
from pyfeyn2.render.dot import DotRender, feynman_to_dot
[2]:
fd = FeynmanDiagram()
v1 = Vertex("v1")
v2 = Vertex("v2")
v3 = Vertex("v3")
v4 = Vertex("v4")
p1 = Propagator("p1").connect(v1, v2).set_type("gluon")
p2 = Propagator("p2").connect(v1, v3).set_type("gluon")
p3 = Propagator("p3").connect(v3, v2).set_type("gluon")
p4 = Propagator("p4").connect(v4, v3).set_type("gluon")
p5 = Propagator("p5").connect(v4, v2).set_type("gluon")
l1 = Leg("l1").set_target(v1).set_type("gluon").set_incoming().set_xy(-2, 1)
l2 = Leg("l2").set_target(v1).set_type("gluon").set_incoming().set_xy(-2, -1)
l3 = Leg("l3").set_target(v2).set_type("gluon").set_outgoing().set_xy(2, -2)
l4 = Leg("l4").set_target(v3).set_type("gluon").set_outgoing().set_xy(2, 2)
l5 = Leg("l5").set_target(v4).set_type("gluon").set_outgoing().set_xy(2, 1)
l6 = Leg("l6").set_target(v4).set_type("gluon").set_outgoing().set_xy(2, -1)

fd.propagators.extend([p1, p2, p3, p4, p5])
fd.vertices.extend([v1, v2, v3, v4])
fd.legs.extend([l1, l2, l3, l4, l5, l6])
[3]:
dr= DotRender(fd)
[6]:
print(dr.get_src_dot())
graph G {
rankdir=LR;
layout=neato;
node [style="invis"];
                l1 [ pos="-2.0,1.0!"];
                l2 [ pos="-2.0,-1.0!"];
                l3 [ pos="2.0,-2.0!"];
                l4 [ pos="2.0,2.0!"];
                l5 [ pos="2.0,1.0!"];
                l6 [ pos="2.0,-1.0!"];
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v1 -- v2;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v1 -- v3;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v3 -- v2;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v4 -- v3;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v4 -- v2;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                l1 -- v1;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                l2 -- v1;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v2 -- l3;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v3 -- l4;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v4 -- l5;
edge [style="decorate,decoration=coil,aspect=0.3,segment length=1mm"];
                v4 -- l6;
{rank=min; l1 l2 }
{rank=max; l3 ;l4 ;l5 ;l6 ;}
}

Render Dot script via dot2tex, so tikz again. No need to fix points via dot here explicitly.

[7]:
dr.render(resolution=100)
[7]:
../_images/examples_Dot_6_0.png
[ ]: