The list of table formats that Gnuastro can currently read from and write to are described below. Each has their own advantage and disadvantages, so a short review of the format is also provided to help you make the best choice based on how you want to define your input tables or later use your output tables.
This is the most basic and simplest way to create, view, or edit the table by hand on a text editor. The other formats described below are less eye-friendly and have a more formal structure (for easier computer readability). It is fully described in Gnuastro text table format.
The FITS ASCII table extension is fully in ASCII encoding and thus easily
readable on any text editor (assuming it is the only extension in the FITS
file). If the FITS file also contains binary extensions (for example an
image or binary table extensions), then there will be many hard to print
characters. The FITS ASCII format doesn’t have new line characters to
separate rows. In the FITS ASCII table standard, each row is defined as a
fixed number of characters (value to the
NAXIS1 keyword), so to
visually inspect it properly, you would have to adjust your text editor’s
width to this value. All columns start at given character positions and
have a fixed width (number of characters).
Numbers in a FITS ASCII table are printed into ASCII format, they are not in binary (that the CPU uses). Hence, they can take a larger space in memory, loose their precision, and take longer to read into memory. If you are dealing with integer type columns (see Numeric data types), another issue with FITS ASCII tables is that the type information for the column will be lost (there is only one integer type in FITS ASCII tables). One problem with the binary format on the other hand is that it isn’t portable (different CPUs/compilers) have different standards for translating the zeros and ones. But since ASCII characters are defined on a byte and are well recognized, they are better for portability on those various systems. Gnuastro’s plain text table format described below is much more portable and easier to read/write/interpret by humans manually.
Generally, as the name implies, this format is useful for when your table mainly contains ASCII columns (for example file names, or descriptions). They can be useful when you need to include columns with structured ASCII information along with other extensions in one FITS file. In such cases, you can also consider header keywords (see Fits).
The FITS binary table is the FITS standard’s solution to the issues discussed with keeping numbers in ASCII format as described under the FITS ASCII table title above. Only columns defined as a string type (a string of ASCII characters) are readable in a text editor. The portability problem with binary formats discussed above is mostly solved thanks to the portability of CFITSIO (see CFITSIO) and the very long history of the FITS format which has been widely used since the 1970s.
In the case of most numbers, storing them in binary format is more memory
efficient than ASCII format. For example, to store
ASCII format, you need 9 bytes/characters. But if you keep this same number
(to the approximate precision possible) as a 4-byte (32-bit) floating point
number, you can keep/transmit it with less than half the amount of
memory. When catalogs contain thousands/millions of rows in tens/hundreds
of columns, this can lead to significant improvements in memory/band-width
usage. Moreover, since the CPU does its operations in the binary formats,
reading the table in and writing it out is also much faster than an ASCII
When you are dealing with integer numbers, the compression ratio can be
even better, for example if you know all of the values in a column are
positive and less than
255, you can use the
type which only takes one byte! If they are between
127, then you can use the (signed)
char type. So if you are
thoughtful about the limits of your integer columns, you can greatly reduce
the size of your file and also the speed at which it is read/written. This
can be very useful when sharing your results with collaborators or
publishing them. To decrease the file size even more you can name your
output as ending in .fits.gz so it is also compressed after
creation. Just note that compression/decompressing is CPU intensive and can
slow down the writing/reading of the file.
Fortunately the FITS Binary table format also accepts ASCII strings as column types (along with the various numerical types). So your dataset can also contain non-numerical columns.
|• Gnuastro text table format:||Reading plain text tables|