# Chapter 3  A FITS Primer

This section gives a brief overview of the structure of FITS files. Users should refer to the documentation available from the FITS Support Office, as described in the introduction, for more detailed information on FITS formats.

FITS was first developed in the late 1970’s as a standard data interchange format between various astronomical observatories. Since then FITS has become the defacto standard data format supported by most astronomical data analysis software packages.

A FITS file consists of one or more Header + Data Units (HDUs), where the first HDU is called the ‘Primary HDU’, or ‘Primary Array’. The primary array contains an N-dimensional array of pixels, such as a 1-D spectrum, a 2-D image, or a 3-D data cube. Six different primary datatypes are supported: Unsigned 8-bit bytes, 16, 32, and 64-bit signed integers, and 32 and 64-bit floating point reals. FITS also has a convention for storing unsigned integers (see the later section entitled ‘Unsigned Integers’ for more details). The primary HDU may also consist of only a header with a null array containing no data pixels.

Any number of additional HDUs may follow the primary array; these additional HDUs are called FITS ‘extensions’. There are currently 3 types of extensions defined by the FITS standard:

- Image Extension - a N-dimensional array of pixels, like in a primary array
- ASCII Table Extension - rows and columns of data in ASCII character format
- Binary Table Extension - rows and columns of data in binary representation

In each case the HDU consists of an ASCII Header Unit followed by an optional Data Unit. For historical reasons, each Header or Data unit must be an exact multiple of 2880 8-bit bytes long. Any unused space is padded with fill characters (ASCII blanks or zeros).

Each Header Unit consists of any number of 80-character keyword records or ‘card images’ which have the general form:

      KEYNAME = value / comment string
      NULLKEY =       / comment: This keyword has no value

The keyword names may be up to 8 characters long and can only contain uppercase letters, the digits 0-9, the hyphen, and the underscore character. The keyword name is (usually) followed by an equals sign and a space character (= ) in columns 9 - 10 of the record, followed by the value of the keyword which may be either an integer, a floating point number, a character string (enclosed in single quotes), or a boolean value (the letter T or F). A keyword may also have a null or undefined value if there is no specified value string, as in the second example.

The last keyword in the header is always the ‘END’ keyword which has no value or comment fields. There are many rules governing the exact format of a keyword record (see the FITS Standard) so it is better to rely on standard interface software like FITSIO to correctly construct or to parse the keyword records rather than try to deal directly with the raw FITS formats.

Each Header Unit begins with a series of required keywords which depend on the type of HDU. These required keywords specify the size and format of the following Data Unit. The header may contain other optional keywords to describe other aspects of the data, such as the units or scaling values. Other COMMENT or HISTORY keywords are also frequently added to further document the data file.

The optional Data Unit immediately follows the last 2880-byte block in the Header Unit. Some HDUs do not have a Data Unit and only consist of the Header Unit.

If there is more than one HDU in the FITS file, then the Header Unit of the next HDU immediately follows the last 2880-byte block of the previous Data Unit (or Header Unit if there is no Data Unit).

The main required keywords in FITS primary arrays or image extensions are:

- BITPIX – defines the datatype of the array: 8, 16, 32, 64, -32, -64 for unsigned 8–bit byte, 16–bit signed integer, 32–bit signed integer, 64–bit signed integer, 32–bit IEEE floating point, and 64–bit IEEE double precision floating point, respectively.
- NAXIS – the number of dimensions in the array, usually 0, 1, 2, 3, or 4.
- NAXISn – (n ranges from 1 to NAXIS) defines the size of each dimension.

FITS tables start with the keyword XTENSION = ‘TABLE’ (for ASCII tables) or XTENSION = ‘BINTABLE’ (for binary tables) and have the following main keywords:

- TFIELDS – number of fields or columns in the table
- NAXIS2 – number of rows in the table
- TTYPEn – for each column (n ranges from 1 to TFIELDS) gives the name of the column
- TFORMn – the datatype of the column
- TUNITn – the physical units of the column (optional)

Users should refer to the FITS Support Office at https://fits.gsfc.nasa.gov/ for further information about the FITS format and related software packages.