Public Interface
QEDFeynmanDiagrams.FeynmanDiagram
QEDFeynmanDiagrams.VirtualParticle
ComputableDAGs.graph
QEDFeynmanDiagrams.external_particles
QEDFeynmanDiagrams.feynman_diagrams
QEDFeynmanDiagrams.virtual_particles
QEDbase.process
Types
QEDFeynmanDiagrams.FeynmanDiagram
— TypeFeynmanDiagram{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
: AFlatMatrix
type to efficiently store the diagram layout in serial memory.
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
.
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
.
QEDFeynmanDiagrams.VirtualParticle
— TypeVirtualParticle{
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
orQEDcore.Electron
. - I: NTuple of Bools with the incoming momentum contributions
- O: NTuple of Bools with the outgoing momentum contributions
Functions
QEDFeynmanDiagrams.external_particles
— Functionexternal_particles(diagram::AbstractTreeLevelFeynmanDiagram)
Return a tuple of the incoming and outgoing particles (QEDbase.AbstractParticleType
) of the diagram.
QEDFeynmanDiagrams.feynman_diagrams
— Functionfeynman_diagrams(proc::AbstractProcessDefinition)
Return all tree-level Feynman diagrams that contribute to the given process, in perturbative QED.
ComputableDAGs.graph
— FunctionComputableDAGs.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.
QEDbase.process
— Functionprocess(::AbstractTreeLevelFeynmanDiagram)::QEDbase.AbstractProcessDefinition
Interface function that must be implemented for an instance of AbstractTreeLevelFeynmanDiagram
.
Return the specific QEDbase.AbstractProcessDefinition
which the given diagram is for.
QEDFeynmanDiagrams.virtual_particles
— Functionvirtual_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 Tuple
s, 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 NTuple
ss are equivalent to their inverse, i.e., BitArray
s 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.
This function is usually costly to compute and used across multiple functions. Therefore, it caches its results using Memoization.jl
.