« home

Scattering Detailed Balance

physicskinematicsparticle-physicsscatteringFeynman-diagramscetztikz

A simple diagram representing a scattering process in particle physics, where two incoming particles with momenta pp and kk interact and produce two outgoing particles with momenta pp' and kk'. The principle of detailed balance states that at equilibrium, each scattering process is in equilibrium with its reverse process.


Scattering Detailed Balance

  Download

PNGSVG

  Code

  LaTeX

scattering-detailed-balance.tex (27 lines)

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}[
    very thick,font=\huge,
    col/.style={circle,draw=gray!90,fill=gray!30,minimum size=15},
    incom/.style={<-,shorten <=2},
    outgo/.style={->,shorten <=2}
  ]

  \node[scale=2] (eq) at (0,0) {=};
  \coordinate[col] (col1) at eq++(-4,0);
  \coordinate[col] (col2) at eq++(4,0);

  \draw[outgo] (col1) -- ++(2,1) node[right] {$p^\prime$};
  \draw[outgo] (col1) -- ++(2,-1) node[right] {$k^\prime$};
  \draw[incom] (col1) -- ++(-2,1) node[left] {$p$};
  \draw[incom] (col1) -- ++(-2,-1) node[left] {$k$};

  \draw[outgo] (col2) -- ++(2,1) node[right] {$p$};
  \draw[outgo] (col2) -- ++(2,-1) node[right] {$k$};
  \draw[incom] (col2) -- ++(-2,1) node[left] {$p^\prime$};
  \draw[incom] (col2) -- ++(-2,-1) node[left] {$k^\prime$};

\end{tikzpicture}
\end{document}

  Typst

scattering-detailed-balance.typ (54 lines)

#import "@preview/cetz:0.3.2": canvas, draw, coordinate

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

#canvas({
  import draw: line, content, circle

  // Diagram dimensions
  let circle_radius = 0.3
  let circle_spacing = 3 // distance of circles from center
  let arrow_length = 2
  let arrow_rise = 1 // vertical displacement of arrows
  let equals_size = 24pt // font size for equals sign

  // Colors and styles
  let arrow_style = (
    mark: (start: "stealth", fill: black, scale: 0.5),
    stroke: (paint: black, thickness: 1.5pt),
  )

  // Draw equals sign at center
  content((0, 0), text(size: equals_size)[=])

  // Draw circles on either side
  circle((-circle_spacing, 0), radius: circle_radius, fill: gray.lighten(50%), stroke: gray, name: "left-circle")
  circle((circle_spacing, 0), radius: circle_radius, fill: gray.lighten(50%), stroke: gray, name: "right-circle")

  // Left node arrows and labels
  line((rel: (arrow_length, arrow_rise), to: "left-circle"), "left-circle", ..arrow_style, name: "left-ne")
  content("left-ne.start", $p'$, anchor: "west")

  line((rel: (arrow_length, -arrow_rise), to: "left-circle"), "left-circle", ..arrow_style, name: "left-se")
  content("left-se.start", $k'$, anchor: "west")

  line("left-circle", (rel: (-arrow_length, arrow_rise), to: "left-circle"), ..arrow_style, name: "left-nw")
  content("left-nw.end", $p$, anchor: "east")

  line("left-circle", (rel: (-arrow_length, -arrow_rise), to: "left-circle"), ..arrow_style, name: "left-sw")
  content("left-sw.end", $k$, anchor: "east")

  // Right node arrows and labels
  line((rel: (arrow_length, arrow_rise), to: "right-circle"), "right-circle", ..arrow_style, name: "right-ne")
  content("right-ne.start", $p$, anchor: "west")

  line((rel: (arrow_length, -arrow_rise), to: "right-circle"), "right-circle", ..arrow_style, name: "right-se")
  content("right-se.start", $k$, anchor: "west")

  line("right-circle", (rel: (-arrow_length, arrow_rise), to: "right-circle"), ..arrow_style, name: "right-nw")
  content("right-nw.end", $p'$, anchor: "east")

  line("right-circle", (rel: (-arrow_length, -arrow_rise), to: "right-circle"), ..arrow_style, name: "right-sw")
  content("right-sw.end", $k'$, anchor: "east")
})