Skip to main content
`Ctrl`+`K`

# Tdat

class astropy.io.ascii.Tdat

  Bases: `BaseReader`

  TDAT format

  See: https://heasarc.gsfc.nasa.gov/docs/software/dbdocs/tdat.html

  Example:

      <HEADER>
      # # and // are comments
      table_name = example_table
      table_description = "Example table"
      #
      # Table Parameters
      #
      field[id] = integer [meta.id] (key) // Unique ID
      field[ra] = float:.4f_degree [pos.eq.ra] (index) // Right Ascension
      field[name] = char12 [meta.id] // Name
      #
      # Virtual Parameters
      #
      table_author = Example et al.
      #
      # Data Format Specification
      #
      line[1] = id name ra
      <DATA>
      1|TargetOne|1.0|
      2|TargetTwo|2.0|
      <END>

  The comments and keywords defined in the header, excepting common header section titles and blank comments, are available via the output table `meta` attribute:

      >>> from astropy.io import ascii
      >>> lines = ascii.tdat.make_example_data()
      >>> data = ascii.read(lines, format='tdat')
      >>> print(data.meta['comments'])
      ['# and // are comments']
      >>> for name, keyword in data.meta['keywords'].items():
      ...   print(name, keyword)
      table_name example_table
      table_description Example table
      table_author Example et al.

  When writing to the TDAT format, the header will be auto-populated by information in the Table, prioritizing information given in the Table.meta:

  comments list or string, (optional)

    Table information which provide context. This information is included in the header preceding all other lines and commented out with #

  keywords dict, (optional, recommended)

    Header keywords which will appear in the file as “name=value” lines. Of particular importance are table_name, table_description, and table_document_url.

  If there is no Table.meta, this writer will attempt to automatically generate the appropriate header information based on the table and column properties and the recommendations for the TDAT format by HEASARC. Column `units` are written using the CDS format.

  Example:

      >>> from astropy.table import Table
      >>> import sys
      >>> t = Table(names=('reference_id', 'RA', 'Name'),
      ...           data=[[1, 2, 3], [1.0, 2.0, 3.0], ['c', 'd', 'e']])
      >>> t.meta['table_name'] = "astropy_table"
      >>> t.write(sys.stdout, format="ascii.tdat")
      <HEADER>
      table_name = astropy_table
      #
      # Table Parameters
      #
      field[reference_id] = int4
      field[RA] = float8
      field[Name] = char1
      #
      # Data Format Specification
      #
      line[1] = reference_id RA Name
      #
      <DATA>
      1|1.0|c|
      2|2.0|d|
      3|3.0|e|
      <END>

  Including relevant metadata for the table and columns separately is possible with a mixture of attribute assignment and additions to the metadata:

      >>> from astropy.table import Table
      >>> from io import StringIO
      >>> t = Table(names=('reference_id', 'RA', 'Name'),
      ...           data=[[1, 2, 3], [1.0, 2.0, 3.0], ['c', 'd', 'e']])
      >>> t.meta["table_name"] = "example_table"
      >>> t.meta["table_description"] = "An example table for the tdat writer."
      >>> t.add_index('reference_id')
      >>> t.columns['reference_id'].meta['comment'] = "For internal reference only"
      >>> t.add_index('RA')
      >>> t.columns['RA'].unit = "degree"
      >>> t.columns['RA'].format = ".4f"
      >>> t.columns['RA'].meta['ucd'] = "pos.eq.ra"
      >>> t.columns['Name'].description = "The name of the source (if available)"
      >>> t.write(sys.stdout, format="ascii.tdat")
      <HEADER>
      table_name = example_table
      table_description = An example table for the tdat writer.
      #
      # Table Parameters
      #
      field[reference_id] = int4 (key) // // For internal reference only
      field[RA] = float8:.4f_deg [pos.eq.ra] (index)
      field[Name] = char1 // The name of the source (if available)
      #
      # Data Format Specification
      #
      line[1] = reference_id RA Name
      #
      <DATA>
      1|1.0000|c|
      2|2.0000|d|
      3|3.0000|e|
      <END>