Public Interface

Types

QEDFeynmanDiagrams.FeynmanDiagramType
FeynmanDiagram{N,E,U,T,M,FM} <: AbstractTreeLevelFeynmanDiagram

An implementation of AbstractTreeLevelFeynmanDiagram, representing Feynman diagrams of tree-level perturbative QED.

The type parameters are:

  • N: The total number of fermion lines in the diagram, i.e., N := E + U + T
  • E: The total number of external electrons/positron pairs in the scattering process.
  • U: The total number of external muon/antimuon pairs in the scattering process.
  • T: The total number of external tauon/antitauon pairs in the scattering process.
  • M: The total number of external photons in the scattering process.
  • FM: A FlatMatrix type to efficiently store the diagram layout in serial memory.
Note

E, U, and T are numbers of Fermion lines while M is the number of individual external photons. This means the number of external legs is 2(E + U + T) + M.

Warning

While U and T can be non-zero in this type and the rest of the code in this package is ready to deal with muons and tauons, no types for them exist yet in the QEDjl-project. Therefore, some functions will throw unimplemented errors when used with non-zero values for U and T.

source
QEDFeynmanDiagrams.VirtualParticleType
VirtualParticle{
    PROC<:AbstractProcessDefinition,
    NTuple{I,Bool},
    NTuple{O,Bool},
}

Representation of a virtual particle and the return type of the virtual_particles function. The type parameters are:

  • PROC: The process this particle is a process of.
  • PT: The particle type of this virtual particle, e.g. QEDcore.Photon or QEDcore.Electron.
  • I: NTuple of Bools with the incoming momentum contributions
  • O: NTuple of Bools with the outgoing momentum contributions
source

Functions

ComputableDAGs.graphFunction
ComputableDAGs.graph(proc::AbstractProcessDefinition)

Generate and return a ComputableDAGs.DAG, representing the computation for the squared matrix element of this scattering process, summed over spin and polarization combinations allowed by the process.

source
QEDFeynmanDiagrams.virtual_particlesFunction
virtual_particles(::QEDbase.AbstractProcessDefinition, ::AbstractTreeLevelFeynmanDiagram)::Vector{VirtualParticle}

Interface function that must be implemented for an instance of AbstractTreeLevelFeynmanDiagram.

Return an NTuple with N elements, where N is the number of virtual particles in this diagram. For tree-level Feynman diagrams, $N = k - 3$, where $k$ is the number of external particles. The elements of the NTuple are themselves Tuples, containing for each virtual particle its QEDbase.AbstractParticleType and an NTuple{, Bool} indicating with a 1 that an incoming external particle's momentum contributes to the virtual particle's momentum, and a 0 otherwise. The second NTuple{, Bool} does the same for the outgoing external particles, which contribute their momentum negatively. From this definition follows that a particles' Boolean NTupless are equivalent to their inverse, i.e., BitArrays where every bit is negated.

Example: Consider the Compton scattering process $e^- + \gamma \to e^- + \gamma$ with the diagram where the incoming electron interacts with the incoming photon first. For this diagram there is exactly one virtual particle, which is an electron. This electron's momentum can be represented as the sum of the two incoming particles' momenta, or that of the two outgoing particles. In the second possible diagram, where the incoming electron interacts with the outgoing photon first, the virtual particle is still an electron but its momentum is the sum of the momenta of the incoming electron and the outgoing photon, or, equivalently, the outgoing electron and the incoming photon.

virtual_particles(::AbstractProcessDefinition)::Vector{VirtualParticle}

Function that returns all unique virtual particles of the given process.

Note

This function is usually costly to compute and used across multiple functions. Therefore, it caches its results using Memoization.jl.

source