« home

Feynman Diagrams Loop Regulator

physicsquantum field theoryFeynman diagramsloop correctionspropagatorsquantum fluctuationsregulator insertioncetztikz

Two Feynman diagrams showing loop corrections to a propagator. Each diagram contains a loop with momentum q₀ and two external lines with coupling g. The loops include mass terms m₁², m₂² and width terms γ₁², γ₂². The diagrams differ in the position of the regulator insertion (cross marker) which appears at the bottom vertex in the first diagram and at the top in the second.


Feynman Diagrams Loop Regulator

  Download

PNGPDFSVG

  Code

  LaTeX

feynman-diagrams-loop-regulator.tex (54 lines)

\documentclass[tikz,svgnames]{standalone}

\usetikzlibrary{patterns}

\begin{document}
\begin{tikzpicture}[
    very thick,
    q0/.style={->,DarkBlue,semithick,yshift=5pt,shorten >=5pt,shorten <=5pt},
    cross/.style={
        path picture={
            \draw[black,thick]
            (path picture bounding box.south east) -- (path picture bounding box.north west)
            (path picture bounding box.south west) -- (path picture bounding box.north east);
          }
      }
  ]

  % Loop
  \def\radius{1.5}
  \draw (0,0) circle (\radius);
  \node[above] (1) at (0,\radius) {$m_1^2$, $\gamma_1^2$};
  \node[below] (2) at (0,-\radius) {$m_2^2$, $\gamma_2^2$};
  \draw[q0] (140:0.75*\radius) arc (140:40:0.75*\radius) node[midway,below] {$q_0$};
  \draw[fill=white,cross,thick] (0,-\radius) circle (4pt);

  % External lines
  \filldraw
  (-2*\radius,0) -- (-\radius,0) circle (2pt) node[below left] {$g$}
  (\radius,0) circle (2pt) node[below right] {$g$} -- (2*\radius,0);
  \draw[q0] (-2*\radius,0) -- (-\radius,0) node[midway,above] {$q_0$};
  \draw[q0] (\radius,0) -- (2*\radius,0) node[midway,above] {$q_0$};

  \node[xshift=4cm,scale=1.5] at (0,0) {$+$};

  \begin{scope}[xshift=8cm]
    % Loop
    \def\radius{1.5}
    \draw (0,0) circle (\radius);
    \node[above=3pt] (1) at (0,\radius) {$m_1^2$, $\gamma_1^2$};
    \node[below] (2) at (0,-\radius) {$m_2^2$, $\gamma_2^2$};
    \draw[q0,yshift=-10pt] (220:0.75*\radius) arc (220:320:0.75*\radius) node[midway,above] {$q_0$};
    \draw[fill=white,cross,thick] (0,\radius) circle (4pt);

    % External lines
    \filldraw
    (-2*\radius,0) -- (-\radius,0) circle (2pt) node[below left] {$g$}
    (\radius,0) circle (2pt) node[below right] {$g$} -- (2*\radius,0);
    \draw[q0] (-2*\radius,0) -- (-\radius,0) node[midway,above] {$q_0$};
    \draw[q0] (\radius,0) -- (2*\radius,0) node[midway,above] {$q_0$};
  \end{scope}

\end{tikzpicture}
\end{document}

  Typst

feynman-diagrams-loop-regulator.typ (104 lines)

#import "@preview/cetz:0.3.4": canvas, draw
#import draw: line, content, circle, arc, group, translate

#set page(width: auto, height: auto, margin: 8pt)

#canvas({
  // Define styles and constants
  let radius = 1.5
  let dark-blue = rgb("#4040d9")
  let arrow-style = (
    mark: (end: "stealth", fill: dark-blue, scale: .5),
    stroke: (paint: dark-blue, thickness: 0.75pt),
  )

  // Helper functions
  let cross(pos, name: none) = {
    content(
      pos,
      text(size: 16pt, baseline: -0.5pt)[$times.circle$],
      stroke: none,
      fill: white,
      frame: "circle",
      padding: -2.5pt,
      name: name,
    )
  }

  let vertex(pos, label: none, rel-label: (-0.2, -0.2)) = {
    circle(pos, radius: 2pt, fill: black)
    if label != none {
      content((rel: rel-label, to: pos), $#label$)
    }
  }

  let momentum-arrow(start, end, label-pos, anchor: "south") = {
    line(start, end, ..arrow-style)
    content(label-pos, text(fill: dark-blue)[$q_0$], anchor: anchor)
  }

  let draw-diagram(offset: 0, cross-pos: "50%", arc-start: 140deg, arc-stop: 40deg) = {
    group({
      if offset != 0 { translate((offset, 0)) }

      // Main circle and labels
      circle((0, 0), radius: radius, stroke: 1pt, name: "loop")
      content((0, radius), $m_1^2, gamma_1^2$, anchor: "south", padding: (bottom: 7pt))

      // Momentum arrow on loop
      arc(
        (rel: (.23, 0), to: if arc-start > 180deg { "loop.35%" } else { "loop.15%" }),
        radius: 0.85 * radius,
        start: arc-start,
        stop: arc-stop,
        ..arrow-style,
        name: "momentum-arrow",
      )
      content(
        "momentum-arrow.mid",
        text(fill: dark-blue)[$q_0$],
        anchor: if arc-start > 180deg { "south" } else { "north" },
        padding: if arc-start > 180deg { (bottom: 3pt) } else { none },
      )

      // Cross marker
      cross("loop." + cross-pos, name: "cross")
      content(
        "loop.50%",
        $m_2^2, gamma_2^2$,
        anchor: "north",
        padding: (top: 7pt),
      )

      // External lines and vertices
      let ext-len = 2 * radius
      vertex((-radius, 0), label: "g")
      vertex((radius, 0), label: "g", rel-label: (0.2, -0.2))
      line((-ext-len, 0), (-radius, 0), stroke: 1pt)
      line((radius, 0), (ext-len, 0), stroke: 1pt)

      // External momentum arrows
      momentum-arrow(
        (-ext-len + 0.2, 0.15),
        (-radius - 0.2, 0.15),
        (-1.5 * radius, 0.3),
      )
      momentum-arrow(
        (radius + 0.2, 0.15),
        (ext-len - 0.2, 0.15),
        (1.5 * radius, 0.3),
      )
    })
  }

  // Draw diagrams
  draw-diagram()
  content((4, 0), text(size: 18pt)[$+$])
  draw-diagram(
    offset: 8,
    cross-pos: "0%",
    arc-start: 220deg,
    arc-stop: 320deg,
  )
})