pythonpandasastropyfits

Undo Table Conversion with Astropy


I have a FITS file with a BinTableHDU that has many entries that have been converted from digital numbers various units like Volts and Currents. I would like to turn off this conversion and access the original digital number value that was stored in the table.

This table makes use of TTYPE, TSCAL, TZERO, and TUNIT keys in the header to accomplish the conversions. So I could use these header keys to undo the conversion manually.

undo = (converted - tzero ) / tscal 

Since the astropy.table.Table and astropy.table.QTable class automatically interpret these fields I can't help but think I'm overlooking a way to use astropy functions to undo the conversion. Is there an attribute or function in the astropy QTable or Table class that could let me undo the conversion automatically. (or perhaps another easier way) to undo this conversion?

EDIT: Thanks to the answer by Tom Aldcroft below.

In my situation a FITS binary table can be grabbed and put into a pandas.DataFrame either converted or unconverted using the following code:

import pandas as pd
from astropy.table import Table
from astropy.io import fits

# grab converted data in various scaled values and units volts / current
converted = Table(fits.getdata(file, 2)).to_pandas()

# grab unconverted data in its original raw form
unconverted = Table(fits.getdata(file, 2)._get_raw_data()).to_pandas()

Solution

  • You'll need to be using the direct astropy.io.fits interface instead of the high-level Table interface. From there something like this might work:

    from astropy.io import fits
    with fits.open('data.fits') as hdus:
        hdu1 = hdus[1].data
    raw = hdu1._get_raw_data()
    

    See https://github.com/astropy/astropy/blob/645a6f96b86238ee28a7057a4a82adae14885414/astropy/io/fits/fitsrec.py#L1022