class astropy.io.ascii.Ipac(definition='ignore', DBMS=False)[source]

Bases: astropy.io.ascii.Basic

IPAC format table.

See: https://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html


\\ Comment
|  column1 |   column2 | column3 | column4  |    column5    |
|  double  |   double  |   int   |   double |     char      |
|  unit    |   unit    |   unit  |    unit  |     unit      |
|  null    |   null    |   null  |    null  |     null      |
 2.0978     29.09056    73765     2.06000    B8IVpMnHg


  2.09708   29.09056     73765   2.06000    B8IVpMnHg

The comments and keywords defined in the header are available via the output table meta attribute:

>>> import os
>>> from astropy.io import ascii
>>> filename = os.path.join(ascii.__path__[0], 'tests/data/ipac.dat')
>>> data = ascii.read(filename)
>>> print(data.meta['comments'])
['This is an example of a valid comment']
>>> for name, keyword in data.meta['keywords'].items():
...     print(name, keyword['value'])
intval 1
floatval 2300.0
date Wed Sp 20 09:48:36 1995
key_continue IPAC keywords can continue across lines

Note that there are different conventions for characters occurring below the position of the | symbol in IPAC tables. By default, any character below a | will be ignored (since this is the current standard), but if you need to read files that assume characters below the | symbols belong to the column before or after the |, you can specify definition='left' or definition='right' respectively when reading the table (the default is definition='ignore'). The following examples demonstrate the different conventions:

  • definition='ignore':

    |   ra  |  dec  |
    | float | float |
      1.2345  6.7890
  • definition='left':

    |   ra  |  dec  |
    | float | float |
       1.2345  6.7890
  • definition='right':

    |   ra  |  dec  |
    | float | float |
    1.2345  6.7890

IPAC tables can specify a null value in the header that is shown in place of missing or bad data. On writing, this value defaults to null. To specify a different null value, use the fill_values option to replace masked values with a string or number of your choice as described in Parameters for write():

>>> from astropy.io.ascii import masked
>>> fill = [(masked, 'N/A', 'ra'), (masked, -999, 'sptype')]
>>> ascii.write(data, format='ipac', fill_values=fill)
\ This is an example of a valid comment
|          ra|         dec|      sai|          v2|            sptype|
|      double|      double|     long|      double|              char|
|        unit|        unit|     unit|        unit|              ergs|
|         N/A|        null|     null|        null|              -999|
          N/A     29.09056      null         2.06               -999
 2345678901.0 3456789012.0 456789012 4567890123.0 567890123456789012

When writing a table with a column of integers, the data type is output as int when the column dtype.itemsize is less than or equal to 2; othewise the data type is long. For a column of floating-point values, the data type is float when dtype.itemsize is less than or equal to 4; otherwise the data type is double.

definitionstr, optional

Specify the convention for characters in the data table that occur directly below the pipe (|) symbol in the header column definition:

  • ‘ignore’ - Any character beneath a pipe symbol is ignored (default)

  • ‘right’ - Character is associated with the column to the right

  • ‘left’ - Character is associated with the column to the left

DBMSbool, optional

If true, this verifies that written tables adhere (semantically) to the IPAC/DBMS definition of IPAC tables. If ‘False’ it only checks for the (less strict) IPAC definition.

Methods Summary


Write table as list of strings.

Methods Documentation


Write table as list of strings.


Input table data


List of strings corresponding to ASCII table