FCGuide-pre4 2 0
FCGuide-pre4 2 0
***DRAFT***
Rolf Mertig
and
Frederik Orellana
AF
Guide to FeynCalc 4.2
CERN
March 1st, 2002
DR
T
Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2
1.1
1.2
2.3
2.4
2.5
2.6
2.7
AF
Version History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Input Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
2.2
Lorentz Tensors and Scalar Products . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dirac Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Spinors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SU(N) Matrices and Structure Constants . . . . . . . . . . . . . . . . . . . . . . . . . .
Denominators of Propagators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Small Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Quantum Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
4
6
7
9
10
11
13
14
14
3 Inside FeynCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1 Startup Sequence, Modules, Add-ons and Extensibility . . . . . . . . . . . . . . . . . . 16
3.2 Configuration and Runtime Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Output Forms and Internal Representation . . . . . . . . . . . . . . . . . . . . . . . . . 21
DR
3.5 Help system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4 Elementary Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1 Lorentz Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Dirac Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3 Dirac Traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.4 SU(N) Traces and Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Green’s functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5 One-Loop Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.1 Passarino-Veltman Integrals and Reduction of Coefficient Functions . . . . . . . . . . . 54
5.2 A One-Loop Self Energy Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
¢
5.3 Generic Diagrams for W ® fi f̄ j with OneLoop . . . . . . . . . . . . . . . . . . . . . . 64
5.4 The Options of OneLoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.5 OneLoopSum and Its Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
I
5.6 Box Graphs of e+ e- ® ZH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.7 Processing Amplitudes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
T
6 Advanced Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1 QCD with FeynCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2 ChPT with FeynCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.3 Two-Loop Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.4 Amplitude and Integral Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7 Miscellaneous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.1 Low Level Dirac Algebra Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7.10
AF
Functions for Polynomial Manipulations . . . . . . . . . . . . . . . . . . . . . . . . .
An Isolating Function for Automatically Introducing Abbreviations . . . . . . . . . . .
An Extension of FreeQ and Two Other Useful Functions . . . . . . . . . . . . . . . . .
Writing Out to Mathematica, Fortran, Macsyma and Maple . . . . . . . . . . . . . . . .
More on Levi-Civita Tensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Simplifications of Expressions with Mandelstam Variables . . . . . . . . . . . . . . . .
Manipulation of Propagators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Polarization Sums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Permuting the Arguments of the Four-Point Function . . . . . . . . . . . . . . . . . . .
Reference Guide for FeynCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
85
87
88
90
92
93
94
94
96
Bibliography 120
DR
1. Introduction 1
1 Introduction
T
FeynCalc is a (³ 3) collection of utilities for algebraic calculations in high energy physics. It is implemented as
a Mathematica package; that is, a number of extensions to the programming language Mathematica, themselves
written in Mathematica. In the section below are described some of the main new capabilities provided.
This document is the technical manual of FeynCalc; explanations are sometimes rather short. The user is assumed
to know Quantum Field Theory and Mathematica. It is strongly recommended to study the Mathematica book [1]
by Stephen Wolfram before starting with FeynCalc.
The original idea of FeynCalc was to provide convenient tools for radiative corrections in the Standard Model
of particle physics. The input for FeynCalc, the analytical expressions for the diagrams, can be entered by
hand or can be taken directly from the output of another package, FeynArts [2] . The user can provide certain
AF
additional information about the process under consideration, i.e. the kinematics and the choice of the standard
matrix elements may be defined. Once this is done, FeynCalc performs the algebraic calculations like tensor
algebra, tensor integral decomposition and reduction, yielding a polynomial in standard matrix elements, special
functions, kinematical variables and scalars.
FeynCalc also provides calculator-type like features. You enter a Dirac trace in a very similar notation you use
by hand and get back an answer, suitable for further manipulation. These features include basic operations like
contraction of tensors, simplification of products of Dirac matrices and trace calculation.
More complex algebraic operations have also been implemented, notably derivation of polynomials in quantum
fields with respect to such fields.
Over the years, the detailed course of and motivation for the development of FeynCalc has changed somewhat
both in scope and focus. This has several reasons: 1) the different research interests of the two authors; 2) the
relative slowness of Mathematica and the rapid development of multi-loop calculations carried out with tools
more suited for very large scale calculations; 3) the rapid development of the raw computing power of hardware.
The first two points have had as consequence that the focus has moved away from providing cutting edge results
of loop calculations in the Standard Model and in QCD. The last point has had as consequence that it has been
possible to explore other types of calculations, namely complex algebraic manipulations of quantum fields and
lagrangians, traditionally done by hand only.
DR
Despite the motivations driving development, the central vision remains largely the same: FeynCalc was con-
ceived as and continues to be developed as a general-purpose modular package for quantum field theory calcula-
tions. Dirac algebra utilities, functional derivation utilities, integral tables etc. have been clearly separated off in
distinct functions which do well-defined operations. Such basic functions can then be used on a higher level to
build sophisticated model dependent functions.
In the following we list what we consider the most important missions of the FeynCalc project:
Code reuse. In calculations as complex as quantum field theory calculations, the code used should be
thoroughly checked and reinventing the wheel for every calculation should be avoided.
Standardization. In order to reuse code, clear standards should be formulated, thoroughly documented
and followed. This should also make it easier to reach common standards with other similar or related
projects (using other programming languages) for fields, lagrangians, 4-vectors, etc. in the end allowing
easy comparison of calculations of the same process.
Repository of lagrangians, amplitudes and integrals. The agreement on standards allows the creation
of a database of quantum field theory results stored in a standardized electronic form. We encourage users
1. Introduction 2
T
Algorithm optimization. The more people using (an implementation of) an algorithm, the better the
chances of improving (the implementation of) it.
Fast prototyping. Quickly trying out new quantum field theory models should be made easier by using
the building blocks provided by a clear standardization as well as a set of functions for the most common
calculational tasks.
Notice in this connection that the standards put forth in this document are what we consider to be the most general
but still useful standards for doing quantum fields theory with Mathematica. This means that that standards are to
be considered as relatively fixed, but not that we are unwilling to change them given sufficiently good arguments.
AF
From all of the above it should be clear that we consider interaction with users to be crucial for the further evolv-
ing of FeynCalc. Therefore, suggestions and in particular code contributions are warmly welcomed. Smaller
contributions can be emailed to [email protected]; larger contributions should be coordinated with the de-
velopers who can be reached at the same email address. Though much testing of the code has been done, there is
absolutely no claim that FeynCalc is bug-free. You should be sceptical about the results, and when you are sure
the program returned a wrong answer, you are encouraged to send email to [email protected].
Passarino-Veltman - tensor integral decomposition. Applications of these tools included complete 1-loop
processes in the Standard Model, e+ e- ® Z H , e+ e- ® W +W - and the 2-loop photon self-energy in
QED.
However, at the end of 1989 several problems showed up with the Macsyma implementation. The purely func-
tional programming style proved to be difficult to debug and, in fact, inappropriate. The rudimentary pattern
matcher in Macsyma was not useful. There was no way to incorporate new functions easily into the whole
1. Introduction 3
Macsyma system, and no possibility of providing online documentation. Furthermore, Macsyma’s memory
managment ("garbage collection") was slow when handling large expressions.
T
In early 1990 it became clear that Mathematica was a much more natural (programming) environment for Feyn-
Calc.
In 1990, user-friendly packages were built with extended automatic capabilities (OneLoop, OneLoopSum), and
SU(3) algebra capabilities were added (SU3Simplify).
In 1991 initial documentation was written and the program was made available on anonymous ftp-servers: math-
AF
source.wolfram.com and canc.can.nl
Applications from 1990 - 1996 included:
High-energy approximation of e+ e- ® W+ W- .
No attempt was made to provide tools for tree-level calculations. For this purpose other programs appeared,
among them another Mathematica package, HIP [4], developed at SLAC.
During this period of development the SU(3) algebra was changed to SU(N). Several tools for automatic tree-
was not updated.) All sub-packages were put into one file I > 10 4 lines). The result was FeynCalc2.2beta.m.
level calculation were added, for example the function SquareAmplitude. (Unfortunately, the documentation
DR
1993-1996 : FeynCalc 3.0, modularization, typesetting
Due to the rapidly increasing amount of code, FeynCalc has been reorganized in a completely modular way. Each
function in a package is a file which is loaded only on demand. For the maintenance of hundreds of packages,
totalling 2.5 MegaByte, software engineering was needed.
The new typesetting capabilities of Mathematica 3 (TraditionalForm) were used to substantially improve
®
the look of the output. Typesetting rules were added for e.g., ¶ Μ .
1. Introduction 4
Code was written to allow new abstract datatypes, for example for noncommutative algebra and for special
integrals.
T
QCD tools for the Operator Product Expansion (OPE) were added.
Automatic Feynman rule derivation (with functional differentation) was coded, in order to get special
Feynman rules for twist-2 (and higher) operators.
In these years Rolf Mertig made many improvements to the code, driven by his own work in perturbative Quan-
tum Chromo Dynamics (QCD).
AF
One effort was to build data bases: Convolutions, integrals, tensor integral transformation formulas, Feyn-
man rules, and Feynman parameterizations. Applications include 2-loop spin-dependent and spin-independent
Altarelli-Parisi Splitting functions.
Another was the package TARCER, which was initially an independent project, but then integrated into Feyn-
Calc. TARCER [6] adds two-loop functionality for propagator-type integrals using the recurrence relations of
Tarasov [5].
In 2000, maintanance of the package was taken over by Frederik Orellana. He worked in Chiral Perturbation
Theory [7] (ChPT) and made some changes, as well as adding code to FeynCalc in order to support ChPT and
effective theories in general, and interfacing with FeynArts. Also, a first implementation of the ’tHooft-Veltman
formulae [8] for numerical evaluation of the one-loop integrals B0, C0 and D0 was added.
1.2 Installation
Download the file "HighEnergyPhysics-4.2.tar.gz" or "HighEnergyPhysics-4.2.zip" (if you’re using using
Windows you’ll probably want the zip file).
Place the file in the directory "mathhome/AddOns/Applications", where "mathhome" is the direc-
DR
tory containing your Mathematica installation. If you’re on a Unix system, "mathhome" can also
be " /.Mathematica/x", where x is the version of your Mathematica installation. (if " /.Mathemat-
ica/x/AddOns/Applications" does not exist, you can safely create it).
Make sure there is not already a directory "HighEnergyPhysics" (and move it out of the way if there is).
Unpack the file: Under UNIX, type tar -xvzf HighEnergyPhysics-4.2.tar.gz; under Win-
dows and MacOS, use some utility like WinZip or StuffIt Expander.
If you’ve made any customizations in the configuration file FCConfig.m, merge them from the file you’ve
moved away into the new file.
1. Introduction 5
Start Mathematica.
T
Choose ’Rebuild Help Index’ from the ’Help’ menu.
AF
DR
2. Input Functions 6
2 Input Functions
T
The FeynCalc syntax for metric tensors, four-vectors, Dirac matrices, etc., is such that the positioning of the
arguments automatically defines the nature of the variables. No declaration of Lorentz indices or four-vectors
has to be made. Covariant and contravariant Lorentz indices are treated on an equal basis, assuming summation
over (twice) repeated indices, where each pair of indices are assumed to be co- and contravariant respectively.
Since explicit components of Lorentz tensors are not used, this convention causes no problems. The ambiguity
in the sign of the Levi-Civita tensor can be fixed by an option of the function DiracTrace and EpsChisholm,
see page 42.
The input functions are macros that are immediately translated into the internal representation of FeynCalc. But
AF
these sometimes lengthy internal representations are difficult to recognize when working interactively. Therefore,
some effort has been put into making the output of FeynCalc look as much as possible like typeset formulas. The
typesetting of FeynCalc depends on the input/output interface in use.
Terminal interface. Per default FeynCalc sets the global Mathematica variable $PrePrint to
FeynCalcForm, forcing the display to be in a more readable manner. It is important to realize that the
display given by FeynCalcForm is different from the input syntax. Thus, you may not give as input, for
example, a scalar product in the result of a trace calculation by copying the form you see on the screen.
To have the output be the internal representation, set $PrePrint=.. To return to formatted output, set
$PrePrint = FeynCalcForm.
Notebook interface. FeynCalc per default automatically sets the Mathematica default output format type
to TraditionalForm. Because FeynCalc defines the TraditionalForm-look of its objects, the output
looks very much like typeset formulas. Again, the screen output cannot be copied and used as input. If the
Mathematica default output format type 1 is set to InputForm or StandardForm, the screen output is the
internal representation of FeynCalc and can be copied and used as input. To obtain the same output as with
a terminal interface, set the Mathematica default output format type to OutputForm and set $PrePrint
= FeynCalcForm. To return to formatted output, set the Mathematica default output format type to
TraditionalForm.
DR
In the rest of this guide, the examples given will use the notebook interface.
The internal structure of FeynCalc is explained briefly in section 3 and in the reference section 8. Usually it is
not necessary to know it. Notice simply that there are three layers of FeynCalc: The input functions, an output
representation of those and the internal structure.
In order to do calculations in the framework of D-dimensional regularization, FeynCalc can be used for calcula-
tions in 4, D dimensions. The dimension of metric tensors, Dirac matrices and four-vectors is specified by setting
the option Dimension of the corresponding input functions. The default is four. If FeynCalc is used for interac-
tive D-dimensional calculations, you should change the option of the input functions. Note that Lorentz indices,
1
The Mathematica default output format type is set using the menu "Cell" ® "Default Output Format Type".
2. Input Functions 7
momenta and Dirac matrices carry their dimension locally, i.e., for calculating a Dirac trace in D dimensions the
dimension of the Dirac matrices has to be set accordingly, thus there is no need of a dimension option for e.g.
T
the function DiracTrace.
FourVector[p, Μ] four-vector pΜ
AF
LeviCivita[Μ, Ν, Ρ, Σ]
MetricTensor[Μ, Ν]
ScalarProduct[p, q]
option name
Levi-Civita tensor ¶ΜΝΡΣ
metric tensor gΜΝ
p×q
default value
T
The number of dimensions is
suppressed in the screen output
(for notebook output. For
terminal output, the number of
dimensions is displayed as an
index, g [mu, nu]).
D
This is a D-dimensional qΜ .
In[8]:= PolarizationVector[k, Μ]
Out[8]= ¶Μ (k)
Polarization vectors are represented in a special way (see page 42). The transversality condition ¶(k) × k = 0 is
automatically fulfilled (see page 31). Polarization vectors are defined in FeynCalc in four dimensions only. For
FourVector, MetricTensor, LeviCivita, and ScalarProduct other dimensions may be specified with
the option Dimension.
DR
PolarizationVector[k, ¶Μ (k)
mu]
Conjugate[ ¶*Μ (k)
PolarizationVector[k, mu]]
T
DiracMatrix[mu, nu, Dirac matrices ΓΜ ΓΝ . . .
...]
DiracSlash[p, q, ...] Feynman slashes p/ q/ . . .
DiracMatrix[5] Γ5
AF
ChiralityProjector[+1]
DiracMatrix[6]
ChiralityProjector[-1]
DiracMatrix[7]
A Dirac matrix ΓΜ is represented by DiracMatrix[mu]. For p/ = pΜ ΓΜ you may use DiracSlash[p]. Prod-
ucts of Dirac matrices or slashes can either be entered by adding subsequent arguments, i.e., DiracMatrix[mu,
nu, ...] and DiracSlash[p, q, ...], or by multiplying the DiracMatrix and DiracSlash with the
Mathematica Dot, “.”.
The Mathematica Dot, “.”, is used in the input as noncommutative multiplication operator for the objects
DiracMatrix, DiracSlash, Spinor, LeptonSpinor, QuarkSpinor and GellMannMatrix. The “.”
may also be used as a delimiter instead of the “,” within the functions DiracMatrix, DiracSlash and
GellMannMatrix.
In the output with FeynCalcForm the “.” as noncommutative multiplication operator is suppressed.
DR
This is how you enter In[10]:= (DiracSlash[p + q] + m) . DiracMatrix[Μ]
(p/ + /q + m) ΓΜ .
Out[10]= (m + Γ × (p + q)) ΓΜ
T
option name default value
Entering of a D-dimensional ΓΜ .
The number of dimensions is
suppressed in the screen output
(for notebook output).
This is ΓΜ ΓΜ in D - 4 dimensions.
AF
Option for DiracMatrix and DiracSlash.
2.3 Spinors
In FeynCalc spinors are entered with the four functions SpinorU, SpinorUBar, SpinorV, SpinorVBar. Prod-
ucts of spinors with spinors or Dirac matrices (Fermion chains) are built with the Mathematica Dot, “.”.
DR
2. Input Functions 11
T
SpinorU[p, m] u(p, m)
SpinorUBar[p,m] u(p, m)
SpinorV[p, m] v(p, m)
SpinorVBar[p,m] v(p, m)
T
SUNT[a] the a’th generator, Ta , of SU(N) in the fundamental
representation
For noncommutative multiplication of SU(N) matrices, use the Mathematica Dot, “.”.
This is Ta Tb Tc .
In[23]:= SUNT[a, b, c]
Out[23]= Ta Tb Tc
T
option name default value
Antisymmetry, f a c b = - fa b c .
AF
In[25]:= SUNF[a, b, c]
Out[25]= fa b c
In[26]:= SUND[a, b, c]
Out[26]= da b c
with q as loop momentum and the pi denoting linear combinations of the external four-vectors.
2. Input Functions 14
T
2 2
FeynAmpDenominator[ 1/ ([q2 - m0 ][(q + p)2 - m1 ]) . . .
PropagatorDenominator[q,
m0 ],
PropagatorDenominator[q +
p, m1 ], ...]
This is
1/ ([q2 - m21 ][(q + p)2 - m22 ]).
Out[30]=
m1], PropagatorDenominator[q + p, m2]]
2 2
1
(q - m1 )((q + p)2 - m22 )
For radiative corrections in the standard model, fermionic masses often can be neglected with respect to the
gauge boson masses. Since, however, some of the Passarino-Veltman integrals may be infrared divergent, the
fermionic (and photonic) small masses must remain as arguments of them and cannot be set to 0. In order to
achieve this behavior, these small masses have to be entered with head Small. The idea is that every variable
with head Small evaluates to 0, unless it is an argument of a scalar integral.
You can avoid to explicitly wrap the head Small around a mass by using the option SmallVariables of the
function OneLoop (the function OneLoop is described in section 5.1).
DR
Small[m] head of a small mass m, m M
momenta, Dirac and SU(N) structures, propagators, etc., but also for the quantities needed to work out the input
to such calculations, namely quantum fields and lagrangians.
T
QuantumField[par1, par2, denotes a quantum field of type ftype with possible Lorentz
... , ftype, {lorind}, indices lorind and SU(N) indices sunind. The optional first
{sunind}] arguments par1, par2, × × × , are partial derivatives acting on the
field
PartialD[Μ] denotes a space-time derivative when given as first argument
Some field Ψ.
AF
If the field is considered as part of
an SU(N) multiplet and the
SU(N) index is i, this is the
notation.
to QuantumField
In[31]:= QuantumField[Ψ]
Out[31]= Ψ
3 Inside FeynCalc
T
This section, which may be skipped on a first read, deals with the internals of FeynCalc. For advanced users and
people considering contributing to FeynCalc, it is a must-read. ??? fill in some more bla bla ???
AF
This causes the program file "FeynCalc.m" to be loaded. This file contains definitions of the core
objects, used by higher level, functions. The more important of these objects are: DiracGamma,
FeynAmpDenominator, FourVector, LorentzIndex, Momentum, NonCommutative, Pair, PartialD,
PropagatorDenominator, QuantumField, SUNIndex, ScalarProduct, Spinor.
"FeynCalc.m" also scans the subdirectories of the directory "HighEnergyPhysics" for files with an extension
".m". Each such file, e.g. "FeynRule.m", should contain the definition of a function, e.g. FeynRule.
Each definition, whether in one of these files or in "FeynCalc.m" is, however, not loaded into memory. Instead the
function name is declared using DeclarePackage, so that when this function is used the first time, the definition
is loaded into memory. This standard technique significantly reduces startup time and memory consumption.
Which subdirectories are scanned is defined in "FeynCalc.m". The idea is that each directory corresponds to a
module, that is, a group of functions pertaining to some subject within quantum field theory. The core modules
are:
fctables. Databases of lagrangians, amplitudes and integrals. The more important functions are: B0, C0,
Lagrangian, Amplitude, Integrate2.
fcloops. Tools for calculating loop integrals. The more important functions are: OneLoop,
PaVeReduce.
fctools. Various tools for working with quantum fields and amplitudes. The more important functions are:
Contract, DiracReduce, FunctionalD, FeynRule, Tr, FermionSpinSum.
DR
general. Mathematical tools of a general nature that are used by one or more functions of the other
subpackages, but may be useful in other contexts as well.
qcd. Tools for working with QCD. The more important functions are: ???.
The governing idea of the file layout of FeynCalc is modularity. The files belonging to each module are in a
separate directory; each file corresponds to one function. If a function uses some support functions or options
that are not used by other functions but desirable to have globally accessible, one may put these in the same
context as the function and add them to the list multifunpack in "FeynCalc.m". The dependence on functions
in other contexts should be clearly stated with MakeContext statements at the beginning of each file.
The modules listed above all adhere to these conventions.
3. Inside FeynCalc 17
As will be noticed there are some files and directories not mentioned so far. Apart from the directory "Documen-
tation", which is a directory for standard Mathematica package documentation, they are listed below under the
T
packages to which they belong. These packages are not loaded by default, but must be enabled by setting certain
configuration variables (see section 3.2). The reasons for this are: These packages are not considered essential
for all users and also don’t follow the loading conventions described above, but load all definitions on startup
and thus take up memory and take some time in loading (still of the order of seconds though).
FeynArts is made up of the file "FeynArts.m" , the directories "GraphInfo", "Models" and some more files
on the top level of "HighEnergyPhysics". It is an independent package by Sepp Kueblbeck, Hagen Eck
and Thomas Hahn for generating Feynman graphs and corresponding amplitudes with Feynman rules as
input. Integration within FeynCalc is not intended, but can, with a few modifications, be achieved (see
PHI below). For more information on FeynArts, see ref 2.
AF
PHI is a package by Frederik Orellana providing utilities for working with effective field theories and
interacting with FeynArts. All files belonging to PHI are contained in the directory "Phi". It was not
conceived as a FeynCalc subpackage and the file layout does not adhere to the FeynCalc conventions.
Never the less, it has been modified to effectively act as a FeynCalc subpackage and is now distributed
only with FeynCalc. For more information on PHI, see ref. ??? and the PHI user’s guide ???.
TARCER is a package by Rolf Mertig for working with 2-loop propagator type integrals. Its file layout
also does not adhere to the FeynCalc conventions, but it also is integrated tightly within FeynCalc. The
files belonging to TARCER are contained in the directory "Tarcer". For more information on FeynArts,
see ref. 6.
fcdevel is code which is not considered production ready and is meant to be used by developers only.
Others can be set at runtime; e.g. $Color, $Covariant, $Gauge, $NonComm, $Abbreviations.
$BreitMaison and $Larin are special cases in that they are set at runtime, but, once set cannot be changed.
T
variable name default value
$NonComm
$Abbreviations
$BreitMaison
$Larin
$VeryVerbose
AF {DiracGamma,
DiracGammaT,
..., OPESum}
{"ˆ" ® "", "*"
® "", ...,
"Vector" ® "V"}
False
False
0
gauge. Notice that $Gauge is used by some func-
tions, the option Gauge by others
a list of all noncommutative heads
The variable $VeryVerbose may be set to 0, 1, 2 or 3. The higher the setting the more intermediate information
is printed during the calculations.
FeynCalc is designed in such a way that certain intermediate results are stored in order to speed up the com-
putations. This of course may become too memory consuming. The storing stops, when the value of 10ˆ
(-6)*MemoryInUse[ ] gets bigger than $MemoryAvailable-1.
The default of FeynCalc is to use the naive Γ 5 prescription, i.e., Γ5 anticommutes with D - dimensional Dirac
3. Inside FeynCalc 19
matrices. Setting $BreitMaison to True changes the commutation behavior of Γ 52 : It anti-commutes with
Dirac matrices in four dimensions, but commutes with the (D-4)-dimensional part. The basic features of the
T
Breitenlohner-Maison scheme are implemented in FeynCalc, but they have not very thoroughly been tested
(some simple calculations are given in section 4.2). Therefore one should check the results for correctness.
DataType[__, _] := False
AF
is carried by the function DataType. The default setting is
2
In fact, how FeynCalc treats Γ5 depends on the setting of the variables $BreitMaison, $Larin and $West. They are all
boolean variables; the first two specify the Γ5 scheme. None of them have been neither thoroughly implemented nor tested. If $West
DR
is set to True (which is the default), traces involving more than 4 Dirac matrices and a Γ5 are calculated recursively according to formula
(A.5) from [11], which is based on the Breitenlohner Maison -scheme.
3. Inside FeynCalc 20
T
NonCommutative a variable treated as noncommutative by Dot, “.”
PositiveInteger a positive integer variable
NegativeInteger a negative integer variable
PositiveNumber a positive number variable
FreeIndex a Lorentz index not to be contracted by contract
GrassmannParity DataType[F, GrassmannParity] = 1 declares a field F
FeynCalc data-types.
Out[36]= f .g - g.(2a). f
In[42]:= ptest2[%]
T
Out[42]= (-1)z
AF
y, ...]
3.4
DataType[y, NonCommutative] = True ; ...
T
Pair[a, b] is a special pairing used in the internal representation: a and
b may have heads LorentzIndex or Momentum. If both a
and b have head LorentzIndex, the metric tensor is
understood. If a and b have head Momentum, a scalar product
is meant. If one of a and b has head LorentzIndex and the
other Momentum, a Lorentz vector (e.g. pΜ ) is understood
Momentum[p] is a four-dimensional momentum. For other than four
ExplicitLorentzIndex[Μ]
AF
LorentzIndex[Μ]
Now we shall study the internal representation through a few examples. FeynCalcInternal shall be applied
when necessary.
T
D-dimensional q/.
Out[47]= DiracGamma[Momentum[q]] . DiracGamma[Momentum[q,
D], D]
By applying
FeynCalcInternal we
force the internal representation
to be used: A four-vector is also
represented as a Pair internally.
AF
Out[49]= Pair[LorentzIndex[Μ, D], LorentzIndex[Ν, D]]
In[50]:= % /. D ® 4
In[51]:= FourVector[p, Μ]
Out[51]= FourVector[p, Μ]
T
the internal representation of Out[56]= Pair[LorentzIndex[Μ], Momentum[Polarization[k]]]
these.
AF
Internal representation of Dirac matrices.
Polarization[k]
Internally in FeynCalc, all spinors are represented with the same function, Spinor. Which of the Dirac spinors
u, v and the conjugate spinors u, v are understood, depends on the position of the spinors in the Dirac chain and
the sign of the momentum argument.
DR
Spinor[p, m] u(p, m) or u(p, m)
Spinor[-p,m] v(p, m) or v(p, m)
T
Out[57]= 0
Analogously to Lorentz indices, SU(N) indices are also in the internal representation wrapped with a head.
AF
SUNIndex[i]
ExplicitSUNIndex[i]
After having completed a calculation with FeynCalc and obtained some screen output, a natural question will
often arise: How does one export the results to a file or to some other application. The screen output in
TraditionalForm is not very useful; copying and pasting it to a text editor will produce some very gar-
bled string with all the typesetting codes of Mathematica included. Saving an expression with Put or save will
produce the same as copying the screen output in InputForm, namely the internal representation of FeynCalc,
which is also not very useful, because it contains all the heads, options, etc. FeynCalc needs to make sense of
the expression. For these reasons the FeynCalc external output format exists. An expression in the internal rep-
resentation is translated to the FeynCalc external output format with the command FeynCalcExternal. The
inverse translation is done with FeynCalcInternal.
DR
FeynCalcExternal[exp] translates exp from the internal FeynCalc representation to
the simpler external one (i.e., FV, GA, GS, etc.)
FeynCalcInternal[exp] translates exp into the internal FeynCalc representation
T
option name default value
Out[58]= GA[mu]
Out[59]= DiracGamma[LorentzIndex[Σ]]
In[60]:= SetOptions[$FrontEnd,
"CommonDefaultFormatTypes"->"Output"
-> TraditionalForm]
More in-depth information about e.g. FeynRule can be obtained by typing in FeynRule in the AddOns part of
the help browser (see figure 1).
The files configuring what appears in the help browser are: "FeynCalcBook.nb" and "BrowserCategories.m" in
the directory "HighEnergyPhysics/Documentation/English". The first file is a notebook containing the actual
3. Inside FeynCalc 27
content organized in cells, all of which carry a cell tag. The second file defines the organization of the contents
in terms of the cell tags. After a new install of FeynCalc or a change to one of these files the, "Rebuild Help
T
Index" from the "Help" menu must be selected. Then, after clicking the navigation button "Add-ons" in the help
browser window, in the left pane "High Energy Physics" will appear. Clicking this and the resulting fields in
the other three panes will cause FeynCalc help information to appear. The second pane has various introductory
material and the field "Functions". Clicking this field causes the appearance in the third pane of the fields
"Core", "Tools", "Loops", "Tables", "QCD" and "General" corresponding to the file organization of FeynCalc
as described in section 3.1. Clicking each of these will display a list of the corresponding objects in the fourth
pane. Each of these lists is organized in groups of objects, with the groups in the following order: Functions,
abbreviations, constants, options and finally internal functions which are described only for completeness, but
are of no interest for other than developers.
AF
DR
3. Inside FeynCalc 28
T
AF
DR
Figure 1: The help system of FeynCalc.
4. Elementary Calculations 29
4 Elementary Calculations
T
You can use FeynCalc for basic calculations like Lorentz algebra and Dirac and color trace evaluations. This
chapter contains simple examples of such calculations.
Out[62]= 4
contract double Lorentz indices in expr
Out[63]= D
Out[65]= (p - q) × q
T
Out[67]= ΓΒ
Out[68]= Γ × q
option name
AF
Out[69]= ¶ΜΝΡp
In[70]:= Contract[LeviCivita[Α, Ν, Ρ, Σ]
LeviCivita[Β, Ν, Ρ, Σ], ]
Out[70]= -6 gΑΒ
default value
T
polarization vectors.
Out[72]= 0
(a + b) × (c - 2d).
AF
MomentumExpand[expr]
MomentumCombine[expr]
expand Momentum[a+b+ ...] in expr into Momentum[a]
+ Momentum[b] + ...
invert the operation of MomentumExpand and
ExpandScalarProduct
Out[73]= a × c - 2 a × d + b × c - 2 b × d
Instead of substituting scalar products at the end of the calculation another possibility is to assign special values
for scalar products first. These special values are inserted immediately whenever possible during the calculation.
T
Out[78]= p × q
Out[80]= aΜ + bΜ
AF
For the manipulation of noncommutative products of Dirac matrices and spinors, a number of functions are
provided (see also section 7.1). DiracEquation applies the Dirac equation without expanding. DiracOrder
orders products of Dirac matrices in a canonical way: Basically it is just the implementation of the anticommu-
tator relation {ΓΜ , ΓΝ } = 2 gΜΝ . Chisholm substitutes products of three Dirac matrices or slashes in expr using the
Chisholm identity.
All functions take as expr any expression with "." as the noncommutative multiplication operator between Dirac
matrices or Dirac slashes.
T
Out[82]= ΓΜ ΓΝ ΓΡ ä Γ$MU$26 . Γ5 ΕΜΜΡ$MU$26 + ΓΡ gΜΝ - ΓΝ gΜΡ + ΓΜ gΝΡ
Out[84]= ΓΒ ΓΑ
Simplifications like
ΓΜ ΓΜ /p /p = 4 p2 are built in.
ΓΑ ΓΜ ΓΑ = (2 - D) ΓΜ in D
dimensions.
-p/ /q /p = /q p2 - 2 /p (p × q).
AF In[85]:= DiracOrder[DiracMatrix[Μ, Μ],
DiracSlash[p, p]]
Out[85]= 4 p2
In[86]:= DiracOrder[DiracMatrix[a, m, a,
Dimension ® D]]
Out[86]= 2 Γm - D Γm
Out[87]= Γ × q p2 - 2 Γ × p p × q
DotSimplify expands and reorders noncommutative terms using relations specified by the option
DotSimplifyRelations or by Commutator and/or AntiCommutator definitions. Whether noncommu-
tative expansion is done depends on the option Expanding. Notice that in the rules of the setting of
DotSimplifyRelations, Condition should not be used and patterns should be avoided on the right-
hand sides. Also, the performance of DotSimplify scales inversely and very badly with the complexity of
DotSimplifyRelations and the number of terms of the expression to be simplified.
DR
DotSimplify[expr] expand and reorder noncommutative terms
T
option name default value
This is a four-dimensional
product:
2b/ a/ 2 (d/ - /c) (6 q/ - 3 p/).
DotSimplify pulls common
numerical factors out.
Out[88]= -12 Γ × b Γ × a Γ × (d - c) Γ × (p - 2 q)
Out[89]= ΓΜ . (a Γ × p - b Γ × q) . (Γ × q) . ΓΝ
T
Out[94]= a . b . a - z (a + c . a . a)
AF
DiracSimplify[expr]
DiracSimplify2[expr]
DiracReduce[expr]
DiracTrick[expr]
contract all Lorentz indices and simplify
like DiracSimplify but leaves any Γ5 untouched. Γ6 and
Γ7 are replaced with their definitions
reduce Dirac matrices to the standard basis (S, P, V , A, T )
using the Chisholm identity
contracts gamma matrices with each other and performs
several simplifications, but no expansion
All functions take as expr any expression with "." as the noncommutative multiplication operator between Dirac
matrices or Dirac slashes.
DR
DiracBasis a head wrapped around Dirac structures (and 1) by
DiracReduce)
DiracSimplify contracts Dirac matrices with equal indices, moves Γ 5 , Γ6 and Γ7 to the right, applies the
Dirac equation and expands noncommutative products (see section 3.2). The Dirac matrices in the result of
DiracSimplify are only ordered in a canonical way if they are between spinors. See below and section 3.2 for
the treatment of Γ5 in D dimensions.
4. Elementary Calculations 36
T
Out[96]= D
This is
/p (m-q
This is Γ5 ΓΜ = -ΓΜ Γ5 .
Γ6 ΓΝ Γ7 ΓΜ = Γ Ν ΓΜ Γ6 .
AF
/ ) /p = /q p2 + p2 m-2 /p (p×q).
Out[98]= ΓΓ . ΓΒ . ΓΑ . Γ∆ + Γ∆ . ΓΑ . ΓΒ . ΓΓ
In[99]:= DiracSimplify[DiracSlash[p],
DiracSlash[-q] + m, DiracSlash[p]]
Out[99]= Γ × q p2 + m p2 - 2 Γ × p p × q
In[100]:= DiracSimplify[DiracMatrix[5],
DiracMatrix[Μ]]
Out[100]= -ΓΜ Γ5
Out[101]= ΓΝ ΓΜ Γ6
Out[102]= 0
DR
Here is the Dirac equation for In[103]:= DiracSimplify[(DiracSlash[p] + m) .
v(p): (p/ + m) v(p) = 0. SpinorV[p, m]]
Out[103]= 0
Out[104]= 0
4. Elementary Calculations 37
T
Out[105]= 2 p × q j(-p, m)
The behaviour of DiracSimplify may be tuned with the setting of various options.
option name
DiracCanonical
DiracSigmaExplicit
DiracSimpCombine
DiracSubstitute67
Expanding
AF
default value
False
True
False
False
True
use DiracOrder internally
substitute the explicit representation of Σ (also a
function )
try merging DiracGamma’s in DiracGamma[ ..
+ .. + ]’s
substitute the explicit representation of Γ 6 and Γ7
when set to False only a limited set of simplifica-
tion rules are used
Factoring False factor canonically
InsideDiracTrace False assume the expression being simplified is inside a
Dirac trace
DR
Options for DiracSimplify.
DiracReduce reduces all four-dimensional Dirac matrices to the standard basis (S, P, V , A, T ) using the
Chisholm identity. In the result the basic Dirac structures are wrapped with a head DiracBasis. I.e., S corre-
sponds to DiracBasis[1], P : DiracBasis[DiracMatrix[5]], V : DiracBasis[DiracMatrix[Μ]],
A: DiracBasis[DiracMatrix[Μ, 5]], T : DiracBasis[DiracSigma[DiracMatrix[Μ, Ν]]]. By
default DiracBasis is substituted with Identity. Notice that the result of DiracReduce is given in
FeynCalcExternal notation, i.e., evtl. you may want to use FeynCalcInternal on the result.
4. Elementary Calculations 38
T
option name default value
Out[110]= -128
Out[111]= -128
DR
Calc[expr] applies DotSimplify, DiracSimplify, EpsEvaluate,
Contract and other functions to expr, trying to reduce to
the simplest form
As mentioned in section 3.2, basic features of the Breitenlohner-Maison scheme [14] (for a short explanation
of the Breitenlohner-Maison symbols like Γ̂ Μ , see e.g. ref. 15) are implemented. Below are given some simple
T
illustrations.
Out[113]= Γ5 . ΓΜ
Out[115]= Γ6 . ΓΜ
In[116]:= DiracSimplify[%]
Out[116]=
ΓΜ
2
+ Γ̂Μ . Γ5 -
ΓΜ . Γ 5
2
In[117]:= $BreitMaison = True;
is necessary).
T
DiracTrace[expr] head of a Dirac trace
Tr[expr] calculate the trace directly
tr( Γa Γb Γc Γd Γ5 ) = -4 i ¶a b c d .
Out[119]= 4 (a × d b × c - a × c b × d + a × b c × d)
Out[120]= -4 ä ¶Α Β Γ ∆
Out[121]= pΒ
If you want to do more complicated traces it is often convenient to introduce your own abbreviations. The
following examples, some of which verify results given in [19], show how to do this.
DR
Consider a trace corresponding to the square of the s-channel diagram for Γe scattering:
1
T1 = tr[ (p/ ¢ + m) ΓΑ (p/ + k/ + m) ΓΒ (p/ + m) ΓΒ (p/ + k/ + m) ΓΑ ]
16
This is the input for the trace T1 . In[123]:= Tr[(pps + m).a.(ps + ks + m).b.(ps +
The CPU time needed for the m).b.(ps + ks + m).a/16]//Expand
T
calculation is of the order of
seconds. Out[123]= 4 m4 + 4 k2 m2 + 4 k × p m2 - 4 k × p¢ m2 - 3 p × p¢ m2 +
2 k × p k × p¢ + 2 k × p¢ p2 - k2 p × p¢ + p2 p × p¢
Clear symbols used. In[124]:= Clear[pps, ps, ks, a, b];
You may then contract, e.g., with In[130]:= Contract[% MetricTensor[Α, Β]]
gΑΒ .
Out[130]= tr(ΓΒ ΓΒ ΓΡ ΓΣ )
4. Elementary Calculations 42
T
Out[131]= 16 gΡΣ
Factoring
Mandelstam
PairCollect
Schouten
TraceOfOne
FeynCalcExternal
EpsContract
AF
-1
False
{}
True
0
0
0
False
which sign convention to use in the result of
tr( Γa Γb Γc Γd Γ5 ). The default gives (-1)4 i ¶a b c d
factor canonically
utilize the Mandelstam relation
collect Pairs
maximum number of terms on which to apply the
Schouten identity
the trace of an identity matrix
give output in FeynCalcExternal form (see sec-
tion 3.4)
contract Levi-Civita Eps
Tr takes the options of DiracTrace, but the default setting of DiracTraceEvaluate is True. Additionally, Tr
takes the two options SUNTrace and SUNNToCACF, which control if and how SU(N) traces are evaluated. This
is elaborated upon in section 4.4.
DR
The option PairCollect determines whether the resulting polynomial is collected with respect to metric ten-
sors, four-vectors and scalar products. In the internal representation these three objects have the same head Pair,
hence the name PairCollect.
For 2 ® 2 processes the traces are often expressed in terms of Mandelstam variables. In order to replace these
for the scalar products you can use SetMandelstam.
4. Elementary Calculations 43
T
SetMandelstam[s, t, u, define scalar products in terms of Mandelstam variables and
p1 , p2 , p3 , p4 , m1 , m2 , m3 , put the pi on-shell
m4 ]
can often be used to get a compact result. If you set the option
Mandelstam ® {s, t, u, m1ˆ2 + m2ˆ2 + m3ˆ2 + m4ˆ2}
FeynCalc tries to figure out the best choice of s, t or u in each factor of the result.
As an example for calculating a trace in terms of Mandelstam variables, consider the following squared amplitude
ΑΡ ΒΡ
from the process gg ® tt, with S1 and S2 as polarization sums for the gluons.
Α Β ΑΡ ΒΣ
T3 = tr( ΓΣ (k/1 - p/1 - mt ) ΓΡ (p/1 + mt )(p/2 - mt ) ) p1 p2 S1 S2 ,
ΑΡ Α Ρ Ρ Α
S1 = -gΑΡ + 4 Α Ρ
2 (4 mt - s) k1 k1 + u-t [k1 (p1 - p2 ) + k1 (p1 - p2 ) ]
2 2
DR
(u-t)
ΒΣ Β Σ Σ Β
S2 = -gΒΣ + 4
(t-u)
Β Σ
2 (4 mt - s) k2 k2 + t-u [k2 (p1 - k2 ) + k2 (p1 - p2 ) ]
2 2
4. Elementary Calculations 44
T
fermion momenta. Again {ks1, ps1, ps2} = Map[ DiracSlash, {k1,
abbreviations with capital letters p1, p2} ];
are introduced for the Dirac {si, ro} = Map[ DiracMatrix,{Σ, Ρ} ];
matrices and slashes. polsum1 polsum1 = PolarizationSum[Α, Ρ, k1, p1 -
and polsum2 are the polarization p2];
sums for the gluons. As external polsum2 = PolarizationSum[Β, Σ, k2, p1 -
momentum the choice p2];
n = p1 - p2 has been made. p1al = FourVector[p1, alpha];
p2be = FourVector[p2, Β];
This is a possible input for trace In[133]:= Tr[ (polsum1 polsum2 p1al p2be si) .
T3 . FeynCalc contracts first all
Lorentz indices and then
calculates the trace.
Since the option Mandelstam
has been specified, the result is
given in a factored form, where in
each factor one of s, t or u is
eliminated via the Mandelstam
relation. Note that a factor (t - u)
has been cancelled.
Out[133]= -
2 m s (m4 - t u) (8 m4 - t 2 - u2 - 6 t u)
(t - u)3
Since Dirac matrices can be given in any dimensions, FeynCalc is also able to calculate traces in D-4 dimensions.
Defining T (n) = tr(ΓΜ1 ΓΜ2 ...ΓΜn ΓΜ1 ΓΜ2 ...ΓΜn ) we give a list of timings and results for T (8) to T (11). The trace
T (10) is a verification of the result given in [18].
4. Elementary Calculations 45
T
Dirac matrix is set to d - 4. DiracMatrix[a[i], Dimension ® (d - 4)],
The calculations were done with {i, 1, n} ];
Mathematica 4.2 under Linux on calc = Timing[ Tr[ gammas . gammas ] //
a 1.8 GHz Pentium 4 box with Expand ];
256 MB of RAM. Print["Time = ", calc[[1]] ];
calc[[2]]];
In[139]:= T[9]
Time = 1.6 Second
In[140]:= T[10]
Time = 5.88 Second
3-dimensional flavor space (Pauli and Gell-Mann matrices) are proveded by the subpackage PHI. These are
described in the PHI user’s guide ???.
T
SUNTrace[expr] calculate the trace of SU(N) matrices
Explicit
Functions for simplifying expressions with SU(N) matrices and structure functions.
The result of SUNSimplify involves either N or the Casimir invariants CA and CF . Which, depends on the
setting of the option SUNNToCACF.
4. Elementary Calculations 47
T
SUNN the N of SU(N)
CA CA = N in the funcamental representation
CF CF = (N 2 - 1)/ (2N) in the funcamental representation
option name
SUNTrace
Explicit
Factoring
AF default value
False
False
False
if set to False, then any SUNT-matrices are taken
out of DiracTrace[...]; otherwise a color-trace
is taken (by SUNTrace) before taking the SU(N)
objects in front of DiracTrace[...]
express structure functions ( f i jk , di jk ) in terms of
traces of generator matrices (Ti )
factor the result
SUNIndexRename True rename contracted SU(N) indices systematically
SUNFJacobi False use the Jacobi identity
SUNNToCACF True express the result in terms of the Casimir invariants
CA and CF instead of N
Expanding False do noncommutative expansion
DR
Options for SUNSimplify.
T
∆a b
Out[143]=
2
1 N
Out[144]= -
4N 4
tr(Ta Tb Tc fa b c ) = i CA2 CF / 2.
tr( fa r s fb r s ) = CA fa r s fb r s =
CA2 ∆a b .
Out[146]=
// SUNSimplify
1
2
ä CA2 CF
Out[147]= CA2 ∆a b
Out[148]= 0
1
Out[150]= äC T
2 A a
4. Elementary Calculations 49
T
Quantum fields (see section 2.7) can be combined in polynomials to form lagrangians. From such lagrangians,
the Green’s function or Feynman rule of an interaction vertex can be found by calculating functional derivatives
with respect to the fields of the vertex. As a very simple example, consider the vertex obtained from the following
term of the QED lagrangian:
¯ Μ Ψ.
for eAΜ ΨΓ DiracMatrix[{ }].QuantumField[ ]
¯ ΜΨ
Out[151]= eAΜ ΨΓ
rule.
AF
Calculation of the ΨΨΓΜ3 Feynman In[152]:= FeynRule[%,
{QuantumField[ ][p1],
QuantumField[Ψ][p2],
Out[152]= ieΓΜ3
QuantumField[ , { 3}][p3]}]
Notice that FeynRule does not write out the momentum conserving ∆(p 1 + p2 + p3 ). As we shall see later, this
is anyway enforced if the vertex is used for Feynman diagram calculations.
Besides calculating the functional derivative, FeynRule does some simplification on the result and transforms to
momentum space. To calculate the functional derivative FeynRule uses a lower level function: FunctionalD.
Contrary to FeynRule FunctionalD does do any cleaning up on the result and therefore may be faster but
return longer expressions.
By default FunctionalD operates in position space. However, no explicit space-time symbols should be given
and none will be returned. Thus, a few conventions are used: Instead of the usual ∆Φ(x)/ ∆Φ(y) = ∆ (D) (x - y) the
arguments and the ∆ function are omitted, i.e., for simplicity ∆Φ/ ∆Φ is taken to be 1. Similarly, instead of the
usual ∆¶Μ Φ(x)/ ∆Φ(y) = ¶Μ ∆(D) (x - y) the arguments are omitted, and the ¶ Μ operator is specified by default to be
-
®
an integration by parts operator, i.e., the right-hand side will be just -¶ Μ or, more precisely (by default), -¶Μ .
If the QuantumFields of the first argument (e.g. a lagrangian) of FunctionalD are given an extra argument
DR
(e.g. QuantumField[...][p]), the argument is assumed to be a momentum and transformation to momentum
space is done.
4. Elementary Calculations 50
T
FunctionalD[expr, calculates the functional derivative of expr with respect to
fi1[p1], fi2[p2], ...] quantum fields fi1, fi2, × × × and does the Fourier transform to
field momenta p1, p2, × × ×
FunctionalD[expr, fi1, calculates the functional derivative of expr and does partial
fi2, ...] integration but omits the x-space delta functions.
FeynRule[lag, fi1[p1], calculates the Feynman rule of lag with respect to fields fi1,
fi2[p2], ...] fi2, × × × and momenta p1, p2, × × ×
In[154]:= dd = FunctionalD[aa,
-
®- ®
Out[154]= -2¶Β .¶Β gΜ1Μ2 ∆i1i2
See the internal representation. In[155]:= dd // StandardForm
Notice the symbol
DR
RightPartialD. Out[155]= -2 RightPartialD[LorentzIndex[ ]] .
RightPartialD[LorentzIndex[ ]]
Pair[LorentzIndex[ 1], LorentzIndex[ 2]]
SUNDelta[SUNIndex[i1], SUNIndex[i2]]
We can apply dd to some other In[156]:= dd . QuantumField[ , { 1}, {i1}] //
field Ψ. ExpandPartialD
T
ExpandPartialD causes Out[157]= -2 RightPartialD[LorentzIndex[ ]] .
RightPartialD to RightPartialD[LorentzIndex[ ]]
disappear in favour of Pair[LorentzIndex[ 1], LorentzIndex[ 2]]
AF
In[159]:= Clear[aa];
RightPartialD[Μ]
LeftPartialD[Μ]
LeftRightPartialD[Μ]
denotes partial space-time differentiation ¶/ ¶x Μ , acting to the
right.
denotes partial space-time differentiation ¶/ ¶x Μ , acting to the
left.
denotes partial space-time differentiation ¶/ ¶x Μ , acting to the
left and right.
ExplicitPartialD[LeftRightPartialD[Μ]] gives 1/
2 (RightPartialD[Μ] - LeftPartialD[Μ])
LeftRightPartialD2[Μ] denotes partial space-time differentiation ¶/ ¶x Μ , acting to the
left and right.
DR
ExplicitPartialD[LeftRightPartialD[Μ]] gives
(RightPartialD[Μ] + LeftPartialD[Μ])
ExplicitPartialD[exp] inserts in exp the definitions for LeftRightPartialD and
LeftRightPartialD2.
ExpandPartialD[exp] expands DOT products of RightPartialD’s and/or
LeftPartialD’s with QuantumField’s in exp using the
Leibniz rule.
As another example consider the strong QCD 4-gluon vertex. The relevant part of the QCD lagrangian is already
known by FeynCalc.
T
The gluon self-interaction part of In[160]:= Lagrangian["QCD"]
the QCD lagrangian .
1 a a
Out[160]= - FΑΒ . FΑΒ
4
We can write out the field strength In[161]:= Lagrangian["QCD"] /.
tensors. FieldStrength[x__] ¦
FieldStrength[x, Explicit ® True] //
DotExpand
I - Ab11
{i1}][p1],
a
c15 b12 c16
Α .AΒ .AΑ .AΒ
Α .AΒ
a
In[162]:= FeynRule[Lagrangian["QCD"], {
QuantumField[GaugeField, { 1},
QuantumField[GaugeField, { 2},
{i2}][p2],
QuantumField[GaugeField, { 3},
{i3}][p3],
QuantumField[GaugeField, { 4},
{i4}][p4]}]
a
c16
fab11c15 fab12c16 g2s -
AΑ .AΒ .¶Α AΒ fab11c15 gs + Ab11
b11 c15
c15
Α .AΒ .¶Β AΑ
fab11c15 gs - ¶Α AΒ .AΑ .AΒ fab12c16 gs +
a b12 c16
The function Lagrangian reads a database of lagrangians and returns the one corresponding to the name (a
string) given as argument. Currently the following names are known by Lagrangian:
DR
Lagrangian["oqu"] gives the unpolarized OPE quark operator.
Lagrangian["QCD"] gives the gluon self interaction part of the QCD lagrangian.
4. Elementary Calculations 53
More can be added easily (as done e.g. by the optional subpackage PHI).
T
Lagrangian["name"] returns a lagrangian name in FeynCalc notation.
A database of lagrangians.
AF
DR
5. One-Loop Calculations 54
5 One-Loop Calculations
T
In this section is described the capabilities of FeynCalc to reduce one-loop Feynman diagrams. If is also dis-
cussed how to provide input for FeynCalc and how to further process the output of FeynCalc.
The methods and conventions implemented in FeynCalc for the evaluation of one-loop diagrams are described
in [9] and [10]. The usual Passarino-Veltman scheme for the one-loop integrals is adapted to a large extent [9].
The coefficient functions of the tensor integrals are defined similar to [9], except that the Passarino-Veltman
integrals take internal masses squared as arguments.
FeynCalc can reduce all n-point integrals with n £ 4 to scalar integrals A 0 , B0 , C0 and D0 .
For the numerical evaluation of scalar integrals, several possibilities exist: 1) The program FormF by M. Veltman.
Unfortunately this only runs in CDC and 68000 assembler and is thus not a realistic alternative. 2) The library FF
5.1
AF
by G.J. van Oldenborgh [12] written in Fortran 77. The library can be put to use with the LoopTools package [13]
written by Thomas Hahn, which features a Fortran, C++, and Mathematica interface. Loading the mathematica
package will simply cause the functions A 0 , B0 , C0 and D0 (and E0 and F0 ) to return numerical values when given
numerical arguments. This is the recommended procedure for obtaining numerical output from FeynCalc results.
A more simple wrapper Fortran program to link FF and FeynCalc is available from Rolf Mertig. 3) The optional
subpackage PHI provides some functions for evaluating B 0 and C0 . These are written purely in Mathematica but
T
(iΠ2 )-1 Ù d D q(q2 - m0 )-1
2
A0[m02]
(iΠ2 )-1 Ù d D q([(q2 - m0 ][(q + p1 )2 - m1 ])-1
2 2
B0[p10,m02,m12]
2 2 2 2
DB0[p10,m02,m12] ¶B0 (p1 , m0 , m1 )/ ¶p1
(iΠ2 )-1 Ù d D q([q2 - m0 ][(q + p1 )2 - m1 ][(q + p2 )2 - m2 ])-1
2 2 2
C0[p10,p12,p20,m02,m12,
m22]
D0[p10,p12,p23,p30,p20,p13, (iΠ2 )-1 Ù d D q([q2 - m0 ][(q + p1 )2 - m1 ][(q + p2 )2 - m2 ][(q +
2 2 2
AF
m02,m12,m22,m32] p )2 - m23 ])-1
3
In FeynCalc and in the mathematical definitions given above, the factor (2ΠΜ) (4-D) with the scaling variable Μ is
2 2
suppressed. The convention for the scalar arguments is pi0 = p i pi j = (pi - p j )2 , mi2 = mi .
In[164]:= D[%, s]
to the first argument yields DB0.
Out[164]= DB0(s, mw2, mz2)
The tensor-integral decomposition is automatically done by FeynCalc when calculating one-loop amplitudes, but
extra functions are provided to reduce the coefficients of the tensor-integral decomposition.
DR
For fixing the conventions of the coefficient functions the definitions of the tensor-integrals and the decomposi-
tion are given below. In general the one-loop tensor integral is
à
(2ΠΜ)4-D q Μ1 × × × q ΜP
TΜN1 ...ΜP (p1 , . . . , pN-1 , m0 , . . . , mN-1 ) = d D
q
iΠ2 D0 D1 × × × DN-1
with the denominator factors
D0 = q2 - m20 Di = (q + pi )2 - m2i , i = 1, . . . , N - 1
originating from the propagators in the Feynman diagram. The i¶ part of the denominator factors is suppressed.
The tensor integral decompositions for the integrals that FeynCalc can do are listed below. The coefficient
functions Bi , Bi j , Ci , Ci j , Ci jk , Di , Di j , Di jk and Di jkl are totally symmetric in their indices.
5. One-Loop Calculations 56
T
BΜ = p1Μ B1
CΜΝ = gΜΝC00 + p1Μ p1ΝC11 + p2Μ p2ΝC22 + (p1Μ p2Ν + p2Μ p1Ν )C12
CΜΝΡ
AF i, j=1
= (gΜΝ p1Ρ + gΝΡ p1Μ + gΜΡ p1Ν )C001 + (gΜΝ p2Ρ + gΝΡ p2Μ + gΜΡ p2Ν )C002
+ (p1Μ p1Ν p2Ρ + p1Μ p2Ν p1Ρ + p2Μ p1Ν p1Ρ )C112
+ (p2Μ p2Ν p1Ρ + p2Μ p1Ν p2Ρ + p1Μ p2Ν p2Ρ )C122
i=1
2
i, j,k=1
= â piΜ Di
3
DΜ
i=1
+ â (gΜΝ piΡ p jΣ + gΝΡ piΜ p jΣ + gΜΡ piΝ p jΣ + gΜΣ piΝ p jΡ + gΝΣ piΜ p jΡ + gΡΣ piΜ p jΝ )D00i j
3
i, j=1
i, j,k,l=1
All coefficient functions and the scalar integrals are summarized in one generic function, PaVe.
5. One-Loop Calculations 57
T
PaVe[i, j, ..., {P10, Passarino-Veltman coefficient functions
P12, ...}, {m02, m12,
...}]
The first set of arguments i, j, ... are exactly those indices of the coefficient functions of the tensor integral
PaVe with one 0 as first In[171]:= PaVe[0, {p10, p12, p20}, {m12, m22,
argument are scalar m32}]
T
Passarino-Veltman integrals.
Out[171]= C0 (p10, p12, p20, m12, m22, m32)
This is D0 with 10 arguments. In[172]:= PaVe[0, {p10, p12, p23, p30, p20, p13},
{m12, m22, m32, m42}]
Out[172]= D0 (p10, p12, p23, p30, p20, p13, m12, m22, m32, m42)
AF
B1[p10, m02, m12]
B00[p10, m02, m12]
B11[p10, m02, m12]
2
2
The two-point coefficient functions can be reduced to lower-order ones. For special arguments also B 0 is ex-
pressed in terms of A0 , if the option BReduce is specified. Setting the option B0Unique to True simplifies
B0 (m2 , 0, m2 ) ® 2 + B0 (0, m2 , m2 ) and B0 (0, 0, m2 ) ® 1 + B0 (0, m2 , m2 ).
T
B0 (pp, m12, m22)
Out[173]= - +
2
Arguments of two-point functions with head Small are replaced by 0, if the other arguments have no head
Out[174]= -
B0 (pp, 0, m22)
2
+
In[175]:= B1[SmallVariable[me2],
SmallVariable(me2), 0]
Any mass with head SmallVariable is neglected if it appears in a sum, but not as an argument of Passarino-
Veltman (PaVe) functions or PropagatorDenominator.
5. One-Loop Calculations 60
T
SmallVariable[var] is a small (negligible) variable
AF
PaVeReduce[expr]
KK[i]
reduces coefficient functions PaVe to A0, B0, C0, D0
abbreviations in HoldForm in the result of PaVeReduce
Depending on the option BReduce B1, B00 and B11 may also remain in the result of PaVeReduce.
Break down the coefficient In[178]:= c12 = PaVeReduce[ PaVe[1, 2, {s, m2,
function m2}, {m2, m2, M2}],
T
C12 (s, m2 , m2 , m2 , m2 , M 2 ). IsolateNames ® c ]
This is the result in HoldForm.
Out[178]= c(11)
Repeated application of
ReleaseHold reinserts all K.
AF Out[181]=
c(6) 2
1
2 (4 m2 - s)
+
+
2 c(6)
Out[182]= f[16]
5. One-Loop Calculations 62
Write the result out into a Fortran In[183]:= Write2[ "d122.for", d122res = d122,
file. FormatType ® FortranForm ];
T
This shows the resulting Fortran In[184]:= !!d122.for
file.
The first abbreviations are always f(1)= B0(mw2,me2,0D0)
f(2)= B0(s,0D0,0D0)
the scalar integrals.
f(3)= B0(t,me2,me2)
The partially recursive definitions f(4)= C0(mw2,mw2,t,me2,0D0,me2)
of the abbreviations are not fully f(5)= C0(mw2,s,me2,me2,0D0,0D0)
optimized. f(6)= C0(t,me2,me2,me2,me2,0D0)
The function Write2 is f(7)= D0(mw2,mw2,me2,me2,t,s,me2,0D0,me2,0D0)
explained in Section 7. f(8)= mw2 + s
Note that the head f(9)= 4*mw2 - t
SmallVariable is
eliminated in the Fortran output
automatically.
T
OneLoop[q, amp] calculates the one-loop amplitude amp with q as loop
momentum
OneLoop[name, q, amp] calculates the one-loop amplitude amp and gives it a name
PropagatorDenominator[
Momentum[q], m]
PropagatorDenominator[
Momentum[q, D], m]
FeynAmpDenominator[
PropagatorDenominator[ ...
], PropagatorDenominator[
... ]]
AF a factor of the denominator of a propagator
a propagator
Representation of integrands.
The first argument to OneLoop is optional. It indicates a name for the amplitude for bookkeeping reasons. The
second argument q is the loop momentum, i.e., the integration variable.
DR
As last argument the analytical expression for the graph is given. It may be given in four dimensions. OneLoop
performs the necessary extension to D dimensions automatically.
corresponding to a tadpole ä
diagram. Out[186]= -
Π2 (q2 - m2 )
The scaling variable Μ is
suppressed in FeynCalc.
5. One-Loop Calculations 64
T
Out[187]= A0 (m2 )
tr[ (m f + /q - /k) ΓΝ (q
=
/ + m f ) ΓΝ ]
Note that in this example, where the dimension is entered explicitly as a parameter (D), the option Dimension
of OneLoop must also be set to D (this is the default).
DR
¢
5.3 Generic Diagrams for W ® fi¯
f j with OneLoop
As an example for calculating triangle diagrams the result for two generic one-loop diagrams of the decay W
® fi f¯¢j for massless fermions given in [9] is verified with FeynCalc.
For the two diagrams different approaches are taken. In the first one FeynCalc introduces standard matrix el-
ements, i.e., that part of the diagram containing polarization dependencies. In the other approach the set of
standard matrix elements is defined by the user before FeynCalc calculates the diagrams. The last possibility is
usually preferable, since the choices of FeynCalc for the standard matrix elements may have physical significance
only by accident.
5. One-Loop Calculations 65
T
Figure 2: Two generic diagrams for the decay of W ® f i f¯j¢ , generated by FeynArts.
T
1
Out[195]=
Here the
StandardMatrixElements
are set to some abbreviations.
In this way you can generate a
Fortran file.
With replacements you can adapt
the result to your other Fortran
code.
Show the content of the file.
AF (Head[#]===StandardMatrixElement)&]
In[199]:= !!wff1a.for
T
StandardMatrixElement[ head of a standard matrix element
expr]
SetStandardMatrixElements[{ set abbreviations for standard matrix elements
{sm1 ® abb1}, {sm2 ®
abb2}, ...}]
SetStandardMatrixElements[{ set abbreviations for standard matrix elements by using
{sm1 ® abb1}, {sm2 ® energy momentum conservation
AF
abb2}, ...}, k2 ® p1 + p2 - k1 ]
A head for identifying standard matrix elements; sm1, sm2 are the standard matrixelements, abb1, abb2 the abbreviations.
T
Note that in the result m2}] *
StandardMatrixElement Spinor[p1] . DiracMatrix[nu] .
is replaced by mat, as specified (g[1, "-"] l + g[1, "+"] r) .
in the option DiracSlash[-q] . DiracMatrix[ro] .
FinalSubstitutions of (g[2, "-"] l + g[2, "+"] r) .
OneLoop on the previous page. Spinor[p2] *
g3 ( mt[ro, mu] fv[p1 + 2 p2 - q, nu] -
mt[mu, nu] fv[2 p1 + p2 + q, ro] +
mt[nu, ro] fv[2 q + p1 - p2, mu] ) *
PolarizationVector[k, mu]
] /. (m1ˆ2) ® m12 /. (m2ˆ2) ® m22
T
ically extended to D dimensions inside OneLoop. In case you want to calculate a finite amplitude, you can set
Dimension ® 4.
The option FinalSubstitutions indicates substitutions that are done at the very end of the calculation, which
may be useful to adapt the output to your Fortran program.
The Factoring option should be used only for relatively small problems, since it may be very time consuming to
factor the result. Unless the result of OneLoop is very short, only the coefficients of StandardMatrixElement
are factored.
FormatType takes InputForm, FortranForm, MacsymaForm or MapleForm as settings. If the option
WriteOut is set to True, the result is written out into a file using Write2 with the setting of FormatType.
loop.
AF
Replacements are done with InitialSubstitutions and FinalSubstitutions. Especially energy mo-
mentum conservation should be included, e.g., InitialSubstitutions ® {k2 ® - k1 + p1 + p3}.
Note that the rules listed in FinalSubstitutions are not applied as one list of rules, but sequentially in a
If IsolateNames is set to c, for example, the result will be given as a c[i] in HoldForm. See Isolate for
more information. The setting of Mandelstam may be, e.g., Mandelstam ® {s, t, u, m1ˆ2 + m2ˆ2 +
2 2
m3ˆ2 + m4ˆ2}, where s + t + u = m1 + m2 + m3 + m4 .
2 2
The option ReduceToScalars should not be set to True when calculating several complicated diagrams in-
volving DΜΝΡ or DΜΝΡΣ . Depending on the computer you are using it may nevertheless work, but it is usually better
to use OneLoopSum with the appropriate options. Note that depending on the setting of the option BReduce also
two-point coefficient functions may remain in the result.
For processes with light external fermions it is best not to neglect the fermion masses everywhere, but to keep
them in the arguments of the scalar Passarino-Veltman functions. This set of masses should be supplied as a list
to the option SmallVariables, see section 5.6.
If WriteOut is set to True, the result is written out into a file composed of the first argument of OneLoop, i.e.,
the name. In which language, i.e., Mathematica, Fortran, Macsyma or Maple the result is written, depends on
the setting of the option FormatType. You may also set WriteOut to a string, which denotes the directory to
write the result files to (actually this string is simply prepended to the file names).
DR
5. One-Loop Calculations 70
T
option name default value
Mandelstam
OneLoopSimplify
Prefactor
ReduceGamma
ReduceToScalars
AF
IntermediateSubstitutions {}
IsolateNames
{}
InputForm
{}
False
{}
False
1
False
False
substitutions done at the end of the calculation
how to write out the result file
substitutions done at the beginning of the calcula-
tion, i.e., energy momentum conservation
substitutions done at an intermediate stage of the
calculation
use Isolate on the result
indicate the Mandelstam relation
use OneLoopSimplify at the beginning of the
calculation
extra prefactor of the amplitude
insert for Γ6 and Γ7 their definitions
reduce to B0 , C0 , D0
SmallVariables {} a list of masses, which will get wrapped with the
head SmallVariable
WriteOut False write out a result file carrying the name of the op-
tional first argument of OneLoop
WriteOutPaVe False store PaVes in files
compatibility with FeynArts; sum terms multiplied
DR
Sum True
with FeynArts’s SumOver
Options of OneLoop.
T
OneLoopSum[List[FeynAmp[ calculate a list of amplitudes
GraphName[..., N1], q,
amp1],
FeynAmp[GraphName[...,
N2], q, amp2], ...]]
OneLoopSum[expr] sum already calculated amplitudes
AF
A function for summing one-loop amplitudes.
The input of OneLoopSum is adapted to the output of FeynArts 3 . After saving a list of Feynman di-
agrams (that is, unintegrated amplitudes) created with FeynArts using the function CreateFeynAmp, i.e.
CreateFeynAmp[ins] // PickLevel[Particles] // ToFA1Conventions » filename , you can start a
new Mathematica session 4 , load FeynCalc, get the amplitudes by amps = « filename , calculate the amplitude
with OneLoopSum and finally save the result e.g. as a Fortran file.
To actually use the Fortran file, obviously the constants and functions used, like masses and scalar integrals, have
to be defined. This is discussed in section 5.7.
Instead of supplying a list of not yet calculated amplitudes you can also give the sum of already calculated ones
as argument (expr) to OneLoopSum.
The output of OneLoopSum is typically given as a short expression wrapped in HoldForm. In order to get the
full expression, the function FRH can be applied.
3
Actually to version 1 of FeynArts, but the current version 3 provides translation to version 1 syntax (ToFA1Conventions).
The examples given here all use FeynArts version 3,
4
It is not possible to load FeynCalc and FeynArts simultaneously into one Mathematica session because some functions of FeynArts
and FeynCalc have the same name but are in different contexts (name spaces). A more sophisticated approach is provided by the optional
subpackage PHI, which patches FeynArts slightly, allowing the two packages to be loaded simultaneously.
5. One-Loop Calculations 72
T
option name default value
Mandelstam
Prefactor
ReduceToScalars
SelectGraphs
WriteOutPaVe
AF
IntermediateSubstitutions {}
IsolateNames
InputForm
{}
KK
{}
1
True
All
False
format used when saving results
substitutions done at the beginning of the calcula-
tion
substitutions done at an intermediate stage in the
calculation
Isolate the result
use the Mandelstam relation
multiply the result by a pre-factor
reduce to scalar integrals
which graphs to select
write out the reduced PaVe
Options of OneLoopSum.
With the default options OneLoopSum calculates each amplitude separately by substituting OneLoop for
FeynAmp. Then each single PaVe is reduced to scalar integrals. The hard final part consists in the simplifi-
cation of the rational coefficients of the scalar integrals. This may involve thousands of factorizations and can
therefore take hours of CPU time. But the algebraic simplifications achieved by putting all coefficients of the
DR
scalar integrals over a common denominator and to factor them, possibly cancelling factors and reducing the
singularity structure, may be very significant. These calculations may need quite a lot of RAM space, therefore
the options of OneLoopSum allow you to split up the task of summing lots of diagrams.
First you can select a certain subclass of diagrams with the option SelectGraphs. You may set, e.g.,
SelectGraphs ® {1, 2, 5, 8}, which selects the amplitudes at positions 1, 2, 5 and 8 of the argument
list of OneLoopSum. The setting SelectGraphs ® {1, 2, 5, 8, {10, 40}} also includes the range of
all amplitudes from position 10 to 40.
With the option CombineGraphs a possibility is given to sum the graphs before calculation. This is especially
useful for combining a graph with its crossed counterpart. In general it makes sense to combine all graphs with
the same propagators before calculation, but for very big sums this may reduce the performance considerably.
The possible settings for CombineGraphs are the same as for SelectGraphs. If you use the FeynArts syntax
5. One-Loop Calculations 73
for the first argument of FeynAmp, i.e. GraphName[..., N1], the last arguments of GraphName for combined
graphs are concatenated and a new GraphName for the summed amplitude is created.
T
By setting the option WriteOutPaVe you can save the result of the reduction of each PaVe in a file for later use.
The names of the corresponding files are generated automatically. In case you use OneLoopSum several times
it recognizes previously saved reductions and loads these results automatically. This may save a considerable
amount of time. Instead of setting the option WriteOutPaVe to an empty string (which means that the files are
written in the current directory), you can specify another directory (a string prepended to the file names).
Note that these options together with the possibility of using OneLoopSum on already calculated graphs gives
you a lot freedom to split up the calculation, which may be necessary in order to avoid memory overflow. It can
also be a good idea to set $VeryVerbose to 1 or 2 for monitoring the calculation.
The option Prefactor may be used to extract global factors. You can, i.e., put SetOptions[OneLoop,
factor 1/ (2s2w ).
5.6
AF
Prefactor ® (2 SWˆ2), which multiplies each single amplitude by 2s 2w , and set simultaneously
SetOptions[OneLoopSum, Prefactor ® 1/(2 SWˆ2). The result of OneLoopSum has then as a global
Box Graphs of e+ e- ® ZH
In this section it is shown how to calculate a sum of amplitudes with OneLoopSum. The input consists of a
one page program with process-dependent definitions. This program reads in a file with unmodified output of
FeynArts for the amplitudes. The Fortran file produced is obtained without any interactive action.
The six standard matrix elements are:
M0 = v(p1 ) /¶ Ω+ u(p2 )
1
M0 = v(p1 ) /¶ Ω- u(p2 )
2
T
e W Z e W Z e W Z
Νe G Νe W Νe G
e W H e W H e W H
e W e Z e Z
Z
Νe
AF Νe
e
W
W H e
e e
Z
Z
H
Νe
e W
W
H
Figure 3: Box diagrams of e+ e- ® ZH, generated by FeynArts. G denotes the unphysical charged Higgs.
DR
5. One-Loop Calculations 75
T
ExcludeTopologies -> {SelfEnergies, WFCorrections, Tadpoles,
Boxes[3]}];
(*Insert fields*)
inserttops =
InsertFields[tops, {F[2, {1}], -F[2, {1}]} -> {V[2], S[1]}, Model -> "SM",
GenericModel -> "Lorentz", InsertionLevel -> Particles,
(*Generate amplitude*) AF
ExcludeFieldPoints -> {FieldPoint[F, -F, S]}];
For completeness here is the input program for generating boxes of e+ e- ® ZH with FeynArts.
DR
5. One-Loop Calculations 76
T
SmallVariable[ME], MZ, MH];
AF
(*The option for OneLoopSum introduces abbreviations at the end*)
SetOptions[OneLoopSum, Prefactor -> 2 ALP4PI FLUFAC,
Mandelstam -> {s, t, u, MH^2 + MZ^2},
FinalSubstitutions -> {SW -> Sqrt[SW2], ME -> Sqrt[ME2], MW -> Sqrt[MW2],
MZ -> Sqrt[MZ2], MH -> Sqrt[MH2],
ME2^n_ :> ME^(2 n) /; Head[n] =!= Integer,
MZ2^n_ :> MZ^(2 n) /; Head[n] =!= Integer,
MW2^n_ :> MW^(2 n) /; Head[n] =!= Integer,
MH2^n_ :> MH^(2 n) /; Head[n] =!= Integer,
SW2^n_ :> SW^(2 n) /; Head[n] =!= Integer,
StandardMatrixElement -> MBM}, WriteOutPaVe -> ""];
KK(1)= B0(MH2,MZ2,MZ2)
KK(2)= B0(MZ2,ME2,ME2)
T
KK(3)= B0(MH2,MW2,MW2)
KK(4)= B0(MZ2,0D0,0D0)
KK(5)= B0(MZ2,MW2,MW2)
KK(6)= D0(MH2,ME2,MZ2,ME2,t,u,MZ2,MZ2,ME2,ME2)
KK(7)= D0(MH2,MZ2,ME2,ME2,s,t,MW2,MW2,MW2,0D0)
KK(8)= D0(MH2,MZ2,ME2,ME2,s,u,MW2,MW2,MW2,0D0)
KK(9)= D0(MH2,ME2,MZ2,ME2,t,u,MW2,MW2,0D0,0D0)
KK(10)= C0(MH2,t,ME2,MZ2,MZ2,ME2)
KK(11)= C0(MH2,u,ME2,MZ2,MZ2,ME2)
KK(12)= C0(MZ2,t,ME2,ME2,ME2,MZ2)
KK(13)= C0(MZ2,u,ME2,ME2,ME2,MZ2)
KK(14)= C0(MH2,MZ2,s,MW2,MW2,MW2)
KK(15)= C0(MH2,t,ME2,MW2,MW2,0D0)
KK(25)= B0(u,MW2,0D0)
KK(26)= 2*MH2 - MZ2
KK(27)= MH2 - 5*MZ2
KK(28)= 1 - 2*SW2
KK(29)= MW2 + MZ2
KK(30)= 2*MH2 - MW2
KK(31)= MW2 + 2*MZ2
AF
KK(16)= C0(MH2,u,ME2,MW2,MW2,0D0)
KK(17)= C0(MZ2,t,ME2,0D0,0D0,MW2)
KK(18)= C0(MZ2,t,ME2,MW2,MW2,0D0)
KK(19)= C0(MZ2,u,ME2,0D0,0D0,MW2)
KK(20)= C0(MZ2,u,ME2,MW2,MW2,0D0)
KK(21)= C0(s,ME2,ME2,MW2,MW2,0D0)
KK(22)= B0(t,ME2,MZ2)
KK(23)= B0(u,ME2,MZ2)
KK(24)= B0(t,MW2,0D0)
T
KK[2] = (B0[MZ2, SmallVariable[ME2], SmallVariable[ME2]]
);
KK[3] = (B0[MH2, MW2, MW2]
);
KK[4] = (B0[MZ2, 0, 0]
);
KK[5] = (B0[MZ2, MW2, MW2]
);
KK[6] = ( D0[MH2, SmallVariable[ME2], MZ2, SmallVariable[ME2], t, u, MZ2, MZ2,
SmallVariable[ME2], SmallVariable[ME2]]
);
KK[7] = ( D0[MH2, MZ2, SmallVariable[ME2], SmallVariable[ME2], s, t, MW2, MW2, MW2, 0]
);
);
AF
KK[8] = ( D0[MH2, MZ2, SmallVariable[ME2], SmallVariable[ME2], s, u, MW2, MW2, MW2, 0]
);
KK[9] = ( D0[MH2, SmallVariable[ME2], MZ2, SmallVariable[ME2], t, u, MW2, MW2, 0, 0]
T
Calculating loop integrals will in most cases lead to very large expressions. The same goes for the application
of other algorithms like Dirac tracing algorithms. The systematization and reduction of such expressions is
a process which requires much more human planing, control and intervention than the process leading to the
expressions. However, the computer is still of help. In this section we shall consider a few examples of how one
may proceed, taking advantage of both tools provided by FeynCalc as well as constructing small Mathematica
programs.
Clean up.
AF Out[207]= 10415
In[208]:= eezhoxes = Collect[EEZHBOXES // Expand,
ALP4PI, FLUFAC, _MBM, _D0, _C0, _B0,
If[FreeQ[#, _MBM | _D0 | _C0 | _B0 |
_PaVe], FullSimplify[#], #] &];
In the example above, notice that instead of simply applying Simplify to the whole expression, some group-
ing is first done and then Simplify is applied to individual terms. This is often advantageous because the
performance of Simplify naturally scales very badly with the size of expressions. We remark that although
OneLoopSum does a decent job in structuring the expression, it can still be reduced somewhat.
In the one-loop calculations considered thus far, amplitudes have been computed. The extra step of computing
the (differential) cross section can, however, also be done with FeynCalc. To demonstrate this we pick a very
simple example, namely the famous Møller cross section. This example also demonstrates that a full calculation
from Feynman rules to cross section can be carried out with FeynArts and FeynCalc 5 .
DR
5
In fact, as we have seen in section 4.5, the calculation of the Feynman rule from the lagrangian can also be automatized with
FeynCalc.
5. One-Loop Calculations 80
(*Construction of topologies*)
tops = CreateTopologies[0, 2 -> 2, Adjacencies -> {3},
T
ExcludeTopologies -> {SelfEnergies, WFCorrections}];
(*Check*)
Paint[tops, ColumnsXRows -> {3, 1}, AutoEdit -> False];
(*Field insertion*)
inserttops =
InsertFields[tops, {F[1, {1}], F[1, {1}]} -> {F[1, {1}], F[1, {1}]},
Model -> "QED", GenericModel -> "QED", InsertionLevel -> Particles];
(*Check*)
treegraphs =
(*Save result*)
PickLevel[Classes][amps] // ToFA1Conventions >> "moelleramps.m"
For completeness here is the input program for generating the (leading order) diagrams of Møller scattering with FeynArts.
DR
5. One-Loop Calculations 81
T
(*get the amplitudes, which have been written to a file by FeynArts*)
amps = << moelleramps.m;
(*The full differential cross section in the center of mass frame expressed \
in terms of Mandelstam variables*)
dcrosssection = 1/4*kinfac*squaredamp1 // Simplify
(*Shift to other variables : Scattering angle and half the CMS energy*)
dc = dcrosssection /. u -> 4ME^2 - s - t /. {s -> 4 \[Omega]^2,
t -> -2 q2(1 - Sqrt[1 - sin[\[Theta]]^2])} /.
q2 -> \[Omega]^2 - ME^2 // Simplify
(*Clean up*)
DeleteFile["moelleramps.m"];
T
ComplexConjugate[exp] conjugates the expression exp, operating on fermion lines
FermionSpinSum[exp] constructs traces out of squared amplitudes
AF
DR
6. Advanced Calculations 83
6 Advanced Calculations
T
6.1 QCD with FeynCalc
7 Miscellaneous Functions
7.1
AF
Low Level Dirac Algebra Functions
There are a number of lower level functions for doing Dirac algebra accessible (defined in contexts belongint to
$Path). Some are used by the functions described in section 4.2, some may be useful to perform more controlled
calculations. They are described here also for completeness: DiracGammaCombine DiracGammaExpand
DiracGammaT DiracSigma DiracSigmaExplicit DiracSpinor EpsChisholm ChisholmSpinor
This collects f[x] and p[y]. In[211]:= Collect2[ (b - 2) d f[x] + f[x] + c p[y]
The default setting is not to + p[y], {f, y}]
T
expand terms like (b - 2)d.
Out[211]= (1 + (-2 + b) d) f[x] + (1 + c) p[y]
If a canonical factorization is
AF In[213]:= Combine[(a - b) (c - d)/e + g]
Out[213]=
(a - b) (c - d) + e g
e
In[214]:= test = (a - b) x + (b - a) y
Out[214]= (a - b) x + (-a + b) y
Out[215]= (a - b) x + (-a + b) y
T
option name default value
AF
Isolate[expr]
Isolate[expr, {x1 , x2 ,
...}]
if Length[expr] > 0, substitute an abbreviation
K[i] for expr
substitute abbreviations for subsums free of x 1 , x2 , ...
T
bracketed subsums.
Out[220]= e + f K[1] + f K[2]
e + (a + b) f + (c + d) f}
The importance of Isolate is significant, since it gives you a means to handle very big expressions. The use of
Isolate on big polynomials before writing them to a file is especially recommended.
T
A subtle issue of the option IsolateSplit, whose setting refers to the
Length[Characters[ToString[FortranForm[expr]]]], is that it inhibits too many continuation lines in
the Fortran file when writing out expressions involving K[i] with Write2. See Section 7.5 for the usage of
Write2.
You may want to change IsolateSplit when working with big rational polynomials in order to optimize the
successive (FixedPoint) application of functions like Combine[ReleaseHold[#]]&.
AF
FreeQ2[expr, {f1 , f2 ,
...}]
NumericalFactor[expr]
PartitHead[expr, h]
T
The Mathematica functions Write and Save may on rare occasions create files that cannot be read in again
correctly. What sometimes happens is that, for example, a division operator is written out as the first character of
a line. When the file is loaded again, Mathematica may simply ignore that part of the file before this character.
You can easily work around this bug by editing the file and wrapping the expressions with brackets “( )”. Since
this is a cumbersome procedure for lots of expressions, it has been automatized in Write2 for writing out
expressions. If you want to use Save, you have to check the output file for correctness.
An option can be given to Write2 allowing the output to be written in FortranForm, MacsymaForm or
MapleForm. These facilities are elementary and mostly limited to the type of polynomials usually encountered
in FeynCalc.
The FortranForm option should not be used if the expression to be written out contains a term (-x) n , where
AF
n is a symbol, (which is never produced by FeynCalc, unless you enter it). The Mathematica FortranForm is
also incapable of recognizing some elementary functions like Exp[x]. Therefore if you want to generate more
elaborate Fortran code you may want to use Maple, which provides an optimization option when translating
Maple code to Fortran, or the most sophisticated package for Fortran code generation from computer algebra
systems: Gentran (by B. Gates and H. van Hulzen), which is available in some Macsyma versions. To this end
the Write2 option FormatType may be set to MacsymaForm or MapleForm. You may achieve a rudimentary
optimization by applying Isolate on the expression to be written out. With the option setting FortranForm
and InputForm the function Write2 recognizes variables in HoldForm and writes these out with their defini-
tions first.
A modification of Write.
DR
option name default value
With the default setting 0 of D0Convention the arguments of the scalar integrals are not changed when written
into a Fortran program. Another possible setting is 1, which interchanges the fifth and sixth arguments of D0 and
T
writes the mass arguments of A0, B0, C0 and D0 without squares.
The output possibilities for the two other computer algebra systems Macsyma and Maple are very limited: square
brackets in Mathematica are changed to round brackets, additional replacements are for MacsymaForm { Pi ®
%pi, I ® %i, = ® : } and for MapleForm { = ® := }.
The reasons to include these interface abilities are to utilize the Fortran optimization possibility of Maple and the
excellent package Gentran for Fortran code generation.
Out[232]= z + K[2]
test = z + HoldForm[K[2]]
T
Out[236]= K(1) = a - b
K(2) = (0,2)*Pi + f(x)*K(1)
test = z + K(2)
In[240]:= !!test.map
Out[241]= eps[m, n, r, p + q]
T
Out[243]= eps[a, b, c, c]
option name
LeviCivitaSign
AF
EpsChisholm[expr]
default value
T
Eps[a, b, c, d] internal representation of Levi-Civita tensors, where the
arguments must have head LorentzIndex or Momentum
The internal function for Levi-Civita tensors, see also section 3.4.
Contracting ¶Μ Ν Ρ Σ pΣ yields
¶Μ Ν Ρ p .
In the internal representation the
p has the head Momentum
wrapped around it.
7.7
AFIn[247]:= LeviCivita[m, n, r, s]
T
2 2
Out[250]= 2 M (M - s)
AF
FeynAmpDenominatorCombine[expr]
FeynAmpDenominatorSimplify[expr]
FeynAmpDenominatorSimplify[expr,
expands expr w.r.t. to FeynAmpDenominator and combines
products of FeynAmpDenominator into one
FeynAmpDenominator
T
PolarizationSum[mu, nu] -gΜΝ
PolarizationSum[mu, nu, -gΜΝ + kΜ kΝ / k2
k]
PolarizationSum[mu, nu, -gΜΝ - kΜ kΝ n2 / (k × n)2 + (nΜ kΝ + nΝ kΜ )/ (k × n)
k, n]
Polarization sums.
T
PaVeOrder[expr] order the arguments of C0 and D0 in expr canonically.
option name
PaVeOrderList
{}
T
A0
A0[0] and
A0[Small[massˆ2]] give 0. The following option can be given:
A0ToB0
B0
given:
BReduce
2
p)2 - m2 ])-1 .
AF
A0ToB0 is an option for A0. If set to True, A0 (m2 ) is replaced by m2 (1 + B0 (0, m2 , m2 )).
B0[pp,m1 ˆ2,m2 ˆ2] is an abbreviation for B0 (p2 , m1 , m2 ) = -iΠ-2 Ù d D q (2ΜΠ)4-D ([q2 -m1 ][(q+
2 2
False
B00
B00[pp,m1 ˆ2,m2 ˆ2] is the coefficient of gΜΝ of the tensor integral decomposition of B ΜΝ .
DR
Sometimes it is useful to set this option to True, since only then all simplifications between
different B0 occur.
8. Reference Guide for FeynCalc 97
B1
T
B1[pp,m1 ˆ2,m2 ˆ2] is the coefficient of pΜ of the tensor integral decomposition of B Μ .
If a variable of B1 has head Small and at least one other variable does not (and is different
from 0), the variable with head Small is set to 0. If the option BReduce is set to True, B1
simplifies in the following way, where a, b, c are m 2 with no head Small. The same simplifications
are performed if instead of 0 a Small variable is supplied as an argument.
B1 (a, b, c) = 1/ 2(A0 (b) - A0 (b) - (a - c + b)B0 (a, b, c)).
B11
AF
B1 (a, b, b) = -1/ 2B0 (a, b, b).
B1 (a, a, 0) = -1/ 2B0 (a, a, 0) - 1/ 2.
B1 (a, 0, a) = 1/ 2 - 1/ 2B0 (a, 0, m).
B1 (0, 0, a) = -1/ 2B0 (0, 0, a) + 1/ 4.
B1 (0, a, 0) = -1/ 2B0 (0, a, 0) - 1/ 4.
If the option BReduce is set to True, B11 simplifies in the following way, where a, b, c are m 2
with no head Small.
B11 (a, b, c) = 1/ (3a)(A0 (b) - 2(a - c + b)B1 (a, b, c) - aB0 (a, b, c) - 1/ 2(a + b - c/ 3)).
B11 (0, a, a) = 1/ 3B0 (0, a, a).
BReduce
DR
BReduce is an option for B0, B00, B1 and B11, determining whether reductions to lower-order A
and B are done.
CancelQ2 is an option for OneLoop. If set to True, cancellation of all q 2 with the first propagator
via q2 ® ((q2 - m2 ) + m2 ) is performed, where q denotes the integration momentum.
With the default True the translation of the integration momentum in the lower order Passarino
Veltman functions is done such that the third mass argument of the 4-point integral is put at position
1.
8. Reference Guide for FeynCalc 98
CancelQP
T
CancelQP is an option for OneLoop. If set to True, cancellation of q × p with propagators is per-
formed, where q denotes the integration momentum.
ChiralityProjector
C0
AF
ChiralityProjector[1] is identical to DiracMatrix[6]. ChiralityProjector[-1]
is identical to DiracMatrix[7].
DiracGamma[7].
The internal representation is DiracGamma[6] and
C0[p10 ,p12 ,p20 ,m1 ˆ2,m2 ˆ2,m3 ˆ2] is the scalar Passarino-Veltman three-point function. The first
2
three arguments of C0 are the scalar products p 10 = p1 , p12 = (p1 - p2 )2 , p20 = p2 .
2
C0[p10 ,p12 ,p20 ,m1 ˆ2,m2 ˆ2,m3 ˆ2] is an abbreviation for C0 = -iΠ-2 Ù d D q (2ΜΠ)4-D ([q2 -
2 2 2
m1 ][(q + p1 )2 - m2 ][(q + p2 )2 - m3 ])-1 .
permutations is chosen.
Collect2
Collect2[expr, x] collects together terms which are not free of any occurrence of x.
Collect2[expr, {x1 , x2 , ...}] collects together terms which are not free of x 1 , x2 , . . . .
DR
Combine
T
ProductExpand False expand products
CombineGraphs
The utilization of this option may speed up FeynCalc. But depending on the available memory
there is a turning point where FeynCalc becomes quite inefficient when forced to calculate too may
complicated diagrams at once.
Contract
Expanding
Factoring
Examples:
AF
Contract[expr] contracts pairs of Lorentz indices in expr.
EpsContract False
True
False
The result of
If big expressions are contracted and substitutions for the resulting scalar products are made, it
is best not to do these replacements after contraction, but to set the values of the relevant scalar
T
products before invoking Contract; in this way the intermediate expression swell is minimized.
D0
D0[p10 , p12 , p23 , p30 , p20 , p13 , m1 ˆ2, m2 ˆ2, m3 ˆ2, m4 ˆ2] is the scalar Passarino-
2
Veltman four-point function. The first six arguments of D0 are the scalar products p 10 = p1 , p12 =
2 2
(p1 - p2 )2 , p23 = (p2 - p3 )2 , p30 = p3 , p20 = p2 , p13 = (p1 - p3 )2 .
D0[p10 , p12 , p23 , p30 , p20 , p13 , m1 ˆ2, m2 ˆ2, m3 ˆ2, m4 ˆ2] is an abbreviation for D0 =
-iΠ-2 Ù d 4 q ([q2 - m1 ][(q + p1 )2 - m2 ][(q + p2 )2 - m3 ][(q + p3 )2 - m4 ])-1 .
DB0
AF
2
D0Convention
2 2 2
D0Convention is an option for Write2. Possible settings are 0 or 1. With the last setting the
fifth and sixth arguments of D0 are interchanged and all (internal) mass arguments of the scalar
Passarino Veltman integrals are given square free.
2 2
DB0[p10 , m0 ˆ2, m1 ˆ2] is the derivative ¶B0 (p2 , m0 , m1 )/ ¶p2 of the two-point function B0 .
DenominatorOrder
You may want to set this option to False when checking hand calculations.
Dimension
The setting of Dimension may be 4, dim or dim-4, where dim must be a Mathematica Symbol
.
DiracGamma
8. Reference Guide for FeynCalc 101
DiracGamma[x, optdim] is the head of all Dirac matrices and Feynman slashes p/ (= ΓΜ pΜ ) in the
internal representation.
T
A four-dimensional Dirac matrix ΓΜ is DiracGamma[ LorentzIndex[mu] ], a four-
dimensional Feynman slash is DiracGamma[ Momentum[p] ].
Γ5 is represented as DiracGamma[5], the helicity projectors Γ6 = (1 + Γ5 )/ 2 and Γ7 = (1 - Γ5 )/ 2
as DiracGamma[6] and DiracGamma[7] respectively.
For other than four dimensions an additional argument is necessary: DiracGamma[
LorentzIndex[mu, Dim], Dim ] and DiracGamma[ Momentum[q, Dim], Dim ].
For standard input DiracMatrix and DiracSlash are more convenient. Note that
DiracGamma[exp, Dim] projects out the smaller dimension of the objects exp and Dim. There
DiracMatrix
AF
are special relationships if Dim takes the form D-4, e.g., DiracGamma[ LorentzIndex[mu,
D-4],4 ] ® 0.
DiracOrder
Γ5 , Γ6 and Γ7 are not ordered; use DiracSimplify to push them all to the right. Example:
This function is just the implementation of the anticommutator relation for Dirac matrices.
See also: DiracSimplify.
DiracSimplify
DiracMatrix[6] and DiracMatrix[7] are moved to the right. The order of the Dirac matrices
is not changed.
T
(p/ - m) u(p) = 0, (p/ + m) v(p) = 0 and u(p)(p/ - m) = 0, v(p)(p/ + m) = 0 are represented by:
DiracSimplify[ (DiracSlash[p] - m) . Spinor[p, m] ] ® 0, DiracSimplify[
(DiracSlash[p] + m) . Spinor[-p,m] ] ® 0, DiracSimplify[ Spinor[p, m] .
(DiracSlash[p] - m ) ] ® 0, DiracSimplify[ Spinor[-p,m] . (DiracSlash[p]
+ m ) ] ® 0
Examples:
DiracSimplify[ DiracMatrix[mu, mu] ] ® 4.
DiracSimplify[ DiracSlash[p, p] ] ® p.p.
DiracSimplify[ DiracMatrix[al, be, al] ] ® -2 ga[be].
ga[be].
AF
DiracSimplify[ DiracMatrix[al, be, al, Dimension®D] ]//Factor
DiracSlash
® (2-D)
DiracTrace[expr] is the head of a Dirac trace. Whether the trace is evaluated depends on the
option DiracTraceEvaluate. The argument expr may be a product of Dirac matrices or slashes
separated by “.”.
T
Examples:
DiracTrace[ DiracMatrix[al, be] ] ® 4 g[al, be].
DiracTrace[ DiracSlash[p, q] ] ® 4 p.q.
DiracTrace[ DiracMatrix[mu, al, be, mu, Dimension®D] ] ® 4 D g[al, be].
DiracTrace[ DiracMatrix[a, b, c, d, 5] ] ® -4 I Eps[a, b, c, d].
DiracTrace[ MetricTensor[al, be] DiracMatrix[si, al, ro, si] ] ® 16 g[be,
ro].
DiracTrace[ DiracSlash[p - q] . (DiracSlash[q] + m) + DiracSlash[k, 2 p]
] ® 8 k.p + 4 p.q - 4 q.q.
With PP=DiracSlash[p’]; P=DiracSlash[p]; MU=DiracMatrix[mu]; K=DiracSlash[k];
AF
NU=DiracMatrix[nu]: DiracTrace[ (PP+m).MU.(P+K+m).NU.(P+m).NU.(P+K+m).MU/16
]/.mˆ2®m2/.mˆ4®m4 ® 4 m4 + k.p (4 m2 + 2 k.p’) + k.p’ (-4 m2 + 2 p.p) +
k.k (4 m2 - p.p’) - 3 m2 p.p’ + p.p p.p’.
To replace scalar products two possibilities exist: either set the corresponding ScalarProduct
before calculating the trace: ScalarProduct[p, q] = t/2; (DiracTrace[p . q]) ®
2 t, which is preferable, or substitute afterwards: (DiracTrace[ DiracSlash[a, b]
]/.ScalarProduct[a, b]®s/2) ® 2 s.
The resaon for this option is that OneLoop needs traces in unevaluated form.
Eps
Eps[a, b, c, d] is the head of the totally antisymmetric four-dimensional epsilon (Levi-Civita)
tensor. The a, b, c, d must have head LorentzIndex or Momentum.
Eps is just a head not having any functional properties. In order to exploit
linearity (¶ΜΝΡ(p+q) ® ¶ΜΝΡp + ¶ΜΝΡq ) and the total antisymmetric property of the Levi-Civita tensor
use EpsEvaluate.
EpsChisholm
EpsChisholm[expr] substitutes for a gamma matrix contracted with a Levi Civita tensor (Eps)
the Chisholm identity: ΓΜ ¶ΜΝΡΣ = +i (ΓΝ ΓΡ ΓΣ - gΝΡ ΓΣ - gΡΣ ΓΝ + gΝΣ ΓΡ )Γ5 .
With the option LeviCivitaSign the sign of the right hand side of the equation above can be
altered. The following option can be given:
8. Reference Guide for FeynCalc 104
T
EpsContract
EpsContract is an option for Contract specifying whether Levi-Civita tensors Eps will be con-
tracted, i.e., products of two Eps are replaced via the determinant formula.
EpsEvaluate
EpsEvaluate[expr] applies total antisymmetry and linearity (with respect to Momentum) to all
AF
Levi-Civita tensors (Eps) in expr.
EvaluateDiracTrace
Expanding
Expanding is an option for Contract specifying whether expansion will be done in Contract.
If set to False, not all Lorentz indices might get contracted.
ExpandScalarProduct
Example:
DR
At the interal level ExpandScalarProduct expands actually everything with head Pair.
Factor2
Factor2[expr] factors a polynomial in a standard way. Factor2 works better than Factor on
polynomials involving rationals with sums in the denominator.
Factoring
T
Factoring is an option for Contract, DiracTrace, DiracSimplify and OneLoop. If set to
True the result will be factored, using Factor2.
FeynAmp
FeynAmp[name, amp, q] is the head of the Feynman amplitude given by FeynArts. The first
argument name is for bookkeeping, amp is the analytical expression for the amplitude, and q is
the integration variable. In order to calculate the amplitute replace FeynAmp by OneLoop. In the
FeynAmpDenominator
Example:
2
AF
output of FeynArts name has the head GraphName.
2
1/ ([q2 -m1 ][(q+p1 )2 -m2 ]) is represented as FeynAmpDenominator[ PropagatorDenominator[q,m1],
PropagatorDenominator[q+p1,m2] ].
FeynAmpList
FeynAmpList[info ... ]FeynAmp[ ... ], FeynAmp[ ... ], ...] is the head of a list
of FeynAmp in the result of FeynArts.
FeynCalcForm[expr] changes the printed output of expr to an easy to read form. The default
setting of $PreRead is $PreRead = FeynCalcForm, which forces to display everything after
applying FeynCalcForm.
Small, Momentum and LorentzIndex are set to Identity by FeynCalcForm. PaVe are
DiracSlash[p] ® gs[p].
FeynAmpDenominator[ PropagatorDenominator[q,m1], PropagatorDenominator[q+p,m2]
] ® 1/(qˆ2 - m1ˆ2) ((p + q)ˆ2 - m2ˆ2).
FourVector[p, mu] ® p[mu].
8. Reference Guide for FeynCalc 106
T
GellMannTrace[x] ® tr[x].
DiracTrace[x] ® tr[x].
LeviCivita[a, b, c, d] ® eps[a, b, c, d].
MetricTensor[mu, nu] ® g[mu nu].
Momentum[ Polarization[p] ] ® ep[p].
Conjugate[PolarizationVector[k, mu]] ® ep(*)[k, mu].
PolarizationVector[p, mu] ® ep[p][mu].
ScalarProduct[p, q] ® p.q.
Spinor[p, m] ® u[p, m].
Spinor[-p, m] ® v[p, m].
AF
QuarkSpinor[p, m] ® u[p, m].
QuarkSpinor[-p, m] ® v[p, m].
SU3F[i, j, k] ® f[i, j, k].
FinalSubstitutions
FourVector
FreeQ2[expr, {form1, form2, ...}] yields True if expr does not contain any occurrence of
f orm1, f orm2, . . . . FreeQ2[expr, form] is the same as FreeQ[expr, {form1, form2, ...}].
Stephen Wolfram pointed out that you can use alternatively FreeQ[expr, form1 || form2 ||
...].
GellMannMatrix
T
GellMannTrace
GellMannTrace[expr] calculates the trace of expr. All color indices should occur twice and expr
must be a product of SU3F, SU3Delta and GellMannMatrix.
GraphName
under consideration.
InitialSubstitutions
AF
GraphName[a, b, c, d] is the first argument of FeynAmp given by FeynArts. It may be used
also as first argument of OneLoop. The arguments a, b, c, d indicate information of the graph
Isolate
Isolate[expr, {x1 , x2 , ... }] substitutes K[i] for all subsums in expr which are free of any
DR
occurrence of x1 , x2 , ..., if Length[expr]>0.
Isolate[expr] substitutes an abbreviation K[i] in HoldForm for expr, if Length[expr]>0.
IsolateSplit is the maximum of the characters of the FortranForm of the expression being
isolated by Isolate. The default setting inhibits Write2 from producing too many continuation
8. Reference Guide for FeynCalc 108
lines when writing out in FortranForm. The result of Isolate can always be recovered by
T
{a,d} ] ® a[z] K[1] + d[f] K[2].
IsolateHead
IsolateSplit
K
AF
IsolateSplit is an option for Isolate.
K[i] are abbreviations which may result from PaVeReduce, depending on the option
IsolateHead. The K[i] are returned in HoldForm and may be recovered by ReleaseHold.
LeptonSpinor
LeviCivita
LeviCivita[mu, nu, ro, si] is an input function for the totally antisymmetric Levi-Civita ten-
sor.
LeviCivita[mu, nu, ro, si] transforms to the internal representation Eps[ LorentzIndex[mu],
LorentzIndex[nu], LorentzIndex[ro],
LorentzIndex[si] ]. For simplification of Levi-Civita tensors use EpsEvaluate.
LeviCivitaSign
T
LeviCivitaSign is an option for DiracTrace. The possible settings are (+1) or (-1). This op-
tion determines the sign convention of the result of tr( Γ a Γb Γc Γd Γ5 ).
LorentzIndex
LorentzIndex[mu, optdim] is the head of Lorentz indices. The internal representation of a four-
dimensional Μ is LorentzIndex[mu]. For other than four dimensions enter LorentzIndex[mu,
dim].
MacsymaForm
Mandelstam
AF
LorentzIndex[mu, 4] simplifies to LorentzIndex[mu].
MapleForm
MetricTensor
Momentum
8. Reference Guide for FeynCalc 110
T
extra argument must be given: Momentum[q, dim].
NumericalFactor
OneLoop
DenominatorOrder
Dimension
FinalSubstitutions
Factoring
InitialSubstitutions
Mandelstam
Prefactor
CancelQ2
AF
OneLoop[name, q, amplitude] calculates the one-loop Feynman diagram amplitude. The ar-
gument q denotes the integration variable, i.e., the loop momentum.
ReduceToScalars False
False
True
{}
False
{}
{}
1
True
reduce to B0 , C0 , D0
order the entries of FeynAmpDenominator
dimension of integration
substitutions done at the end of the calculation
factor the result
substitutions done at the beginning of the calculation
indicate the Mandelstam relation
additional prefactor of the amplitude
cancel q2
CancelQP False cancel q × p
ReduceGamma False eliminate Γ6 and Γ7
SmallVariables {} a list of masses, which will get wrapped around the head
Small
WriteOut True write out a result file name.m
OneLoopResult
OneLoopResult[name] is the variable in the result file written out by OneLoop to which the cor-
responding result is assigned. name is constructed from the first argument of OneLoop.
OneLoopSum
T
CombineGraphs {} which amplitudes to sum before invoking OneLoop
FinalSubstitutions {} substitutions done at the end of the calculation
IsolateHead K Isolate the result
Mandelstam {} use the Mandelstam relation
Prefactor 1 multiply the result by a pre-factor
ReduceToScalars True reduce the summed result to scalar integrals
SelectGraphs All which amplitudes to select
WriteOutPaVe False write out the reduced PaVe
Possible settings for CombineGraphs and SelectGraphs are lists of integers. For indicating a
range of graphs also a list {i, j} instead of a single integer may be provided.
Pair
AF
Pair[a, b] is the head of a special pairing used in the internal representation. The arguments a
and b may have heads LorentzIndex or Momentum. If both a and b have head LorentzIndex,
the metric tensor is understood. If a and b have head Momentum, a scalar product is meant. If one of
a and b has head LorentzIndex and the other head Momentum, a Lorentz vector pΜ is understood.
Pair has only one functional definition: any integers multiplied with a or b will be pulled out.
See also: FourVector, LorentzIndex, MetricTensor, ExpandScalarProduct,
ScalarProduct.
PairCollect
PairCollect is an option for Contract.
PaVe[i, j, ..., plist, mlist] denotes the Passarino-Veltman integrals. The length of the mass
list mlist indicates if a one-, two-, three- or four-point integral is understood. The first set of
Μ Ν
DR
arguments i, j, . . . signifies that the coefficient of p i p j , . . . of the tensor integral decomposition is
Μ Ν
meant, where p0 p0 = gΜΝ . Joining plist and mlist gives the same conventions as for A0, B0, C0 and
D0.
For the corresponding arguments of PaVe the special cases A0, B0, C0, D0, B1, B00, B11 are
returned.
PaVeOrder
T
PaVeOrderList
PaVeOrderList is an option for PaVeOrder allowing to specify a specific order of the D0 func-
tions.
Possible settings are a sublist of the arguments of a D0, or a list of such lists.
PaVeReduce
PaVeReduce[expr] reduces Passarino-Veltman integrals PaVe to scalar integrals B0, C0 and D0,
Mandelstam
AF
depending on the option BReduce eventually also A0, B1, B00 and B11.
The class of invariant Passarino-Veltman integrals which can be currently reduced consists of all
coefficients of the Lorentz invariant decomposition of B Μ , BΜΝ , CΜ , CΜΝ , CΜΝΡ , DΜ , DΜΝ , DΜΝΡ , DΜΝΡΣ .
IsolateHead
PolarizationSum does not calculate any polarization sum, it is just an abbreviation function.
Conjugate{PolarizationVector[p, mu]} is the input for ¶*Μ (k). The internal rep-
T
Prefactor
Prefactor is an option for OneLoop and OneLoopSum. If set as option of OneLoop, the am-
plitude is multiplied by Prefactor before calculation; if specified as option of OneLoopSum, it
appears in the final result as a global factor.
A possible setting is 1/ (1 - D) for calculating the transvere part of self energies. The option
Dimension of OneLoop must then be set to D.
ProductExpand
AF
ProductExpand is an option for Collect2 and Combine.
PropagatorDenominator
m].
If q is supposed to be D-dimensional enter: PropagatorDenominator[ Momentum[q,D],
QuarkSpinor
ReduceGamma
ReduceGamma is an option for OneLoop determining whether Γ6 and Γ7 are removed by their
definitions 1/ 2(1 + Γ5 ) and 1/ 2(1 - Γ5 ).
ReduceToScalars
T
ReduceToScalars is an option for OneLoop and OneLoopSum that specifies whether the result
is reduced to scalar integrals.
Depending on the option BReduce the Passarino-Veltman functions B1, B11, B00 and B11 may
also remain.
ScalarProduct
Dimension
AF
The following option can be given:
4 space-time dimension
SelectGraphs
SelectGraphs is an option for OneLoopSum. The default setting is All. It may be set to a list
indicating that only a subclass of all graphs supplied to OneLoopSum should be calculated.
SetMandelstam
SetStandardMatrixElements
most conveniently used in a separate specification batch file. In this file also the settings of
the scalar products should be done either directly and/or with SetMandelstam before applying
T
SetStandardMatrixElements. It is not necessary to predefine standard matrix elements.
Small
Small[me] is the head of a small mass me. The effect is that masses with this head are set to zero,
if they occur outside a Passarino-Veltman function.
SmallVariables
Spinor
AF
SmallVariables is an option for OneLoop.
The setting of SmallVariables is a list containing masses which are small compared to others.
If present the photon mass should always be listed.
Spinor[p, mass] specifies a Dirac spinor. Which of the spinors u, v, u or v is understood, de-
pends on the sign of the mass argument and the relative position of DiracSlash[p]: Spinor[p,
mass] is that spinor which yields mass*Spinor[p, mass] if the Dirac equation is applied to
DiracSlash[p] . Spinor[p, mass] or Spinor[p, mass] . DiracSlash[p].
If a spinor is multiplied by a Dirac matrix or another spinor, the multiplication operator "." must be
used.
StandardMatrixElement
SU3Delta
8. Reference Guide for FeynCalc 116
T
SU3Delta[i, i] ® 8.
SU3F
Tr
SU3FToTraces
AF
See also: SU3Delta, GellMannMatrix, GellMannTrace.
Tr[expr] calculates the Dirac trace of expr directly. Tr is identical to DiracTrace up to the
default setting of DiracTraceEvaluate.
Write2[channel, val1 = expr1 , val2 = expr2 , ...] writes the settings val1 = expr1 , val2 =
expr2 in sequence followed by a newline, to the specified output channel.
T
Other possible settings for FormatForm are FortranForm, MacsymaForm and MapleForm. Be
careful on the ouput when generating Fortran files. There might be problems like powers of ratios
of integers which you have to correct by hand. If the expressions contain variables in HoldForm,
True
False
"/usr/hep/weinberg/"
AF
their values are written out first, if the output language is Mathematica or Fortran.
WriteOut
write output into a file name, where name is the first argu-
ment of OneLoop
write no output
write result files in your local directory
WriteOutPaVe
WriteOutPave is an option for OneLoopSum. If set to a string the reduced PaVe are written into
the file indicated.
DR
$BreitMaison
The default setting is False, which implies the ”naive” Γ5 prescription: Γ5 is assumed to
anticommute with Dirac matrices in all dimensions. If $BreitMaison is set to True,
Γ5 will anticommute with the four-dimensional part of a Dirac matrix and commute with the
(D-4)-dimensional part. Reset $PrePrint for experimenting with the Breitenlohner-Maison
scheme. $BreitMaison must be set to True before loading FeynCalc. The command is :
FeynCalc‘$BreitMaison = True. Not every operation has been tested thoroughly, there-
fore beware!
8. Reference Guide for FeynCalc 118
$MemoryAvailable
T
$MemoryAvailable is a global variable which is set to an integer n, where n is the available
amount of main memory in MB. The default is 8. It should be increased if possible. The higher
$MemoryAvailable can be, the more intermediate steps do not have to be repeated by FeynCalc.
$VeryVerbose
$VeryVerbose is a global variable with default setting 0. If set to 1, 2, ..., more and more
AF
intermediate comments and informations are displayed during calculations.
DR
8. Reference Guide for FeynCalc 119
T
AF
DR
T
Bibliography
[3] R. D. Drinkard and N. K. Sulinski, “Macsyma: A Program For Computer Algebraic Manipulation (Demon-
strations And Analysis),” NUSC-6401 "SPIRES entry".
[4] E. Yehudai and A. C. K. Hsieh, HIP — Symbolic High-Energy Physics Calculations,
SLAC-PUB- 5576 July 1991.
[5] O. V. Tarasov, “Generalized recurrence relations for two-loop propagator integrals with arbitrary masses,”
Nucl. Phys. B 502 (1997) 455 "arXiv:hep-ph/9703319".
[6] R. Mertig and R. Scharf, “TARCER: A mathematica program for the reduction of two-loop propagator
integrals,” Comput. Phys. Commun. 111 (1998) 265 "arXiv:hep-ph/9801383".
[7] J. Gasser and H. Leutwyler, “Chiral Perturbation Theory: Expansions In The Mass Of The Strange Quark,”
Nucl. Phys. B 250 (1985) 465.
DR
[8] G. ’t Hooft and M. J. Veltman, “Scalar One Loop Integrals,” Nucl. Phys. B 153 (1979) 365.
[9] A. Denner, Techniques for the Calculation of Electroweak Radiative Corrections at the One-Loop Level
and Results for W -Physics at LEP200, to appear in Fortschritte der Physik 1992, 41 and references therein.
[10] R. Mertig, M. Böhm, and A. Denner, Comp. Phys. Comm. 64 (1991) 345.
[11] Comp. Phys. Comm 77 (1993) 286-298
[12] G. J. van Oldenborgh, FF – a package to evaluate one-loop Feynman diagrams, Comp. Phys. Comm. 66
(1991) 1.
Z. Phys. C 46 (1990) 425,
"Scanned version from KEK".
120
Bibliography 121
[13] T. Hahn and M. Perez-Victoria, “Automatized one-loop calculations in four and D dimensions,” Comput.
Phys. Commun. 118 (1999) 153 "arXiv:hep-ph/9807565".
T
[14] P. Breitenlohner and D. Maison, Commun. Math. Phys. 52 (1977) 11.
[15] C. P. Martin and D. Sanchez-Ruiz, renormalization with a non-anticommuting gamma(5),” Nucl. Phys. B
572 (2000) 387 [arXiv:hep-th/9905076].
[16] P.Cvitanovic, Phys. Rev. D 14 (1976) 1536.
[17] A.P. Kryukov and A.Ya. Rodionov, Comp. Phys. Comm. 48 (1988) 327.
[18] Matthias Jamin and E. Lautenbacher, TRACER, A Mathematica Package for Γ-Algebra in Arbitrary Di-
AF
mensions, preprint Technische Universität München, TUM-T31-20/91.
[19] S. Wolfram, MACSYMA Tools for Feynman Diagram Calculations, Proceedings of the 1979 MACSYMA
Users Conference.
DR