Source code for nenupytf.process.fits_conversion

#! /usr/bin/python3
# -*- coding: utf-8 -*-


"""
    ***************
    fits_conversion
    ***************
"""


__author__ = ['Alan Loh']
__copyright__ = 'Copyright 2019, nenupytf'
__credits__ = ['Alan Loh']
__maintainer__ = 'Alan Loh'
__email__ = 'alan.loh@obspm.fr'
__status__ = 'Production'
__all__ = [
    'get_bst_metadata',
    'to_fits'
    ]


from astropy.io import fits
from os.path import isdir, basename, join, abspath
from glob import glob

from nenupytf.other import bst_exts
from nenupytf.stokes import SpecData


# ============================================================= #
# --------------------- get_bst_metadata ---------------------- #
# ============================================================= #
[docs]def get_bst_metadata(tfrepo): """ In order to understand a TF observation, one must refer to the corresponding BST file where all relevant meta-data are stored. This method searches for the corresponding BST file, assuming the path to the BST repository is the same as the one containing TF data but for the 'nenufar' key intstead of 'nenufar-tf'. This is how data are stored in nancep. Parameters ---------- tfrepo : str Absolute or relative path of the TF data. Returns ------- metadata : dict Dictionnary of metadata as they are stored in the BST fits file. """ tfrepo = abspath(tfrepo) if not isdir(tfrepo): raise NotADirectoryError( 'Unable to locate {}'.format(tfrepo) ) # Find the corresponding BST file bstrepo = tfrepo.replace('nenufar-tf', 'nenufar') bstfiles = glob(join(bstrepo, '*BST.fits')) if len(bstfiles) == 0: raise FileNotFoundError( 'Unable to find a BST file in {}'.format(bstrepo) ) elif len(bstfiles) > 1: raise IndexError( 'Too many BST files in {}'.format(bstrepo) ) else: bst = bstfiles[0] # Retrieve all metadata from the BST file metadata = { e[0]: fits.getdata(bst, ext=e[1]) for e in bst_exts } metadata['header'] = fits.getheader(bst) return metadata
# ============================================================= # # -------------------------- to_fits -------------------------- # # ============================================================= #
[docs]def to_fits(specdata): """ """ if not isinstance(specdata, SpecData): raise TypeError( 'Not a SpecData object' ) return