Source code for pyckles.utils

# -*- coding: utf-8 -*-
"""Utility functions."""

from pathlib import Path

from astropy.io import fits
from astropy.table import Table

import pooch


catalogs = Table.read(Path(__file__).parent / "index.dat", format="ascii")
catalogs.add_index("name", unique=True)


retriever = pooch.create(
    path=(Path.home() / ".astar/pyckles"),
    base_url="https://scopesim.univie.ac.at/pyckles/",
    registry=dict(catalogs[["filename", "hash"]].iterrows()),
    retry_if_failed=3,
    # The name of an environment variable that can overwrite the path
    env="ASTAR_CACHE_DIR",
)


[docs] def load_catalog(cat_name): """ Load a catalogue file into memory. Parameters ---------- cat_name : str A valid catalogue name Returns ------- cat : astropy.fits.HDUList A handle to an astropy FITS object containing all the spectra and index information """ try: cat_filename = catalogs.loc[cat_name.lower()]["filename"] except KeyError as err: raise ValueError( f"No catalogues were found containing: '{cat_name}' \n" f"Available catalogs:\n{catalogs[['name', 'type']]}" ) from err # unique in index should take care of potential duplicates, however check assert isinstance(cat_filename, str), "Duplicates in cat name." cat_path = retriever.fetch(cat_filename) # TODO: should use context manager for file open... cat = fits.open(cat_path) cat[0].header["FILENAME"] = cat_path # pylint: disable=maybe-no-member return cat