The FormCalc Visitor Center


FormCalc is a Mathematica package for the calculation of tree-level and one-loop Feynman diagrams. It reads diagrams generated with FeynArts and returns the results in a way well suited for further numerical and analytical evaluation. FormCalc can in fact write out a complete Fortran (or C) subroutine to compute the squared matrix element for a given process. In addition to a comprehensive manual, several demo calculations are included in the FormCalc distribution, which show how the programs are used.

What it does

The following simplifications are performed by FormCalc:

The output is in general a linear combination of loop integrals with prefactors that contain model parameters, kinematic variables, and abbreviations introduced by FormCalc. Such abbreviations are introduced for spinor chains, scalar products of vectors, and epsilon tensors contracted with vectors. A term in the output could for instance look like

The automatic introduction of abbreviations by FormCalc is a very important feature which can drastically reduce the size of an amplitude, particularly so because the abbreviations are nested in three levels. Here is an example:

In calculations with non-scalar external particles where such objects are ubiquitous, code produced from the FormCalc output (say, in Fortran) can be significantly faster than without the abbreviations. For further evaluating spinor chains, FormCalc provides a function which calculates helicity matrix elements.

FormCalc can treat ultraviolet divergences either with dimensional regularization or with constrained differential renormalization. At the one-loop level, the latter technique is equivalent to dimensional reduction. This means that FormCalc can process also supersymmetric diagrams.

The most common way to proceed with the analytical output is to convert it to a Fortran program. FormCalc has a sophisticated Fortran code generator built in which can produce a subroutine to calculate the squared matrix element fully automatically. This subroutine has to be linked with driver programs which supply the necessary input parameters. Included in the FormCalc package are driver programs for computing cross-sections of 1 → 2, 2 → 2, and 2 → 3 processes. It is written in a very modular way so that it is fairly easy to adapt parts of it for other purposes.

How it works

Internally, FormCalc performs most of the hard work (e.g. working out fermionic traces) in FORM, by Jos Vermaseren. The concept is rather straightforward: the symbolic expressions of the diagrams are prepared in an input file for FORM, then FORM is run, and finally the results are read back into Mathematica. The interfacing is completely shielded from the user and is handled internally by the FormCalc functions. The following diagram shows schematically how FormCalc interacts with FORM:

FormCalc combines the speed of FORM with the powerful instruction set of Mathematica and the latter greatly facilitates further processing of the results. Owing to FORM's speed, FormCalc can process, for example, the 1000-odd one-loop diagrams of elastic W–W scattering in the Standard Model in less than a minute on an ordinary PC.

FormCalc has been published in Comput. Phys. Commun. 118 (1999) 153 [hep-ph/9807565].
Subsequently implemented techniques and features are described in

More information:


The installation script gets you started quickly and easily.


Downloads (hover over download link for MD5):

To run FormCalc, you need Mathematica 5 or above.
For FormCalc versions ≤ 5.2, you also need FORM 3.2 or above (later versions have a copy of FORM included).

Installation notes for the impatient:

To link the Fortran code generated by FormCalc, you also need the LoopTools library.

More detailed instructions are given in the manual contained in the FormCalc distribution.
You can obtain the manual of the current version here.

Problems with FormCalc? See the troubleshooting page before submitting a bug report.


The program FormGet is a spin-off from FormCalc. It contains just the code for reading FORM output files into Mathematica, but does not perform any simplifications like ReadForm does. More specifically, FormGet does two things: it translates the FORM syntax into Mathematica's InputForm, and it wraps a function called "bracket" around terms which are collected as a result of FORM's bracket command, i.e. FormGet preserves the structure of the FORM output.

The companion tool FortranGet reads the expressions in a Fortran 77 program into Mathematica.

Download FormGet.tm [11 kB]

Download FortranGet.tm [7 kB]

Installation instructions and usage information is given in the comments at the beginning of the source code.

More comprehensive, the FormRun package provides a Mathematica function which takes a Mathematica expression, sends it to FORM, and reads the results back. It allows to specify extra FORM declarations and commands.

Download FormRun-1.0.tar.gz [6.03 MB] of 6 Jun 2019


Thanks for looking in.

Please send bug reports, suggestions, fan mail, etc. to Thomas Hahn, hahn@feynarts.de.

Related packages: FeynArts, LoopTools, FeynCalc, FORM.

Note: FormCalc is a registered trademark of Schörghuber Spezialtüren ;-) who have kindly allowed me to keep the name of the program.
If you came here looking for special doors, please go to their fine website www.formcalc.de.

This site and the programs offered here are not commercial. FormCalc is and will stay an open-source package and free of charge.
If you want to use FormCalc in a commercial application, make sure you understand the GNU Lesser General Public License under which FormCalc is distributed.
FormCalc is being developed at the Max Planck Institute for Physics in Munich.

Data protection statement and Imprint

Last update: 30 Aug 22 Thomas Hahn