Source code for species.data.spec_data.spec_bonnefoy2014

"""
Module for adding young, M- and L-type dwarf spectra from
`Bonnefoy et al. (2014) <https://ui.adsabs.harvard.edu/abs/
2014A%26A...562A.127B/abstract>`_ to the database.
"""

import gzip
import os
import shutil
import urllib.request

import h5py
import numpy as np

from astropy.io import fits
from typeguard import typechecked

from species.util.data_util import extract_tarfile


[docs] @typechecked def add_bonnefoy2014(input_path: str, database: h5py._hl.files.File) -> None: """ Function for adding the SINFONI spectra of young, M- and L-type dwarfs from `Bonnefoy et al. (2014) <https://ui.adsabs.harvard. edu/abs/2014A%26A...562A.127B/abstract>`_ to the database. Parameters ---------- input_path : str Path of the data folder. database : h5py._hl.files.File The HDF5 database. Returns ------- NoneType None """ print_text = "spectra of young M/L type objects from Bonnefoy et al. 2014" data_url = "http://cdsarc.u-strasbg.fr/viz-bin/nph-Cat/tar.gz?J/A+A/562/A127/" data_file = os.path.join(input_path, "J_A+A_562_A127.tar.gz") data_folder = os.path.join(input_path, "bonnefoy+2014/") if not os.path.isfile(data_file): print(f"Downloading {print_text} (2.3 MB)...", end="", flush=True) urllib.request.urlretrieve(data_url, data_file) print(" [DONE]") if os.path.exists(data_folder): shutil.rmtree(data_folder) print(f"Unpacking {print_text} (2.3 MB)...", end="", flush=True) extract_tarfile(data_file, data_folder) print(" [DONE]") spec_dict = {} with gzip.open(os.path.join(data_folder, "stars.dat.gz"), "r") as gzip_file: for line in gzip_file: name = line[:13].decode().strip() files = line[80:].decode().strip().split() sptype = line[49:56].decode().strip() if name == "NAME 2M1207A": name = "2M1207A" if len(sptype) == 0: sptype = None elif "." in sptype: sptype = sptype[:4] else: sptype = sptype[:2] if name == "Cha1109": sptype = "M9" elif name == "DH Tau B": sptype = "M9" elif name == "TWA 22A": sptype = "M6" elif name == "TWA 22B": sptype = "M6" elif name == "CT Cha b": sptype = "M9" spec_dict[name] = {"name": name, "sptype": sptype, "files": files} database.create_group("spectra/bonnefoy+2014") fits_folder = os.path.join(data_folder, "sp") print_message = "" for _, _, files in os.walk(fits_folder): for _, filename in enumerate(files): fname_split = filename.split("_") data = fits.getdata(os.path.join(fits_folder, filename)) for name, value in spec_dict.items(): if filename in value["files"]: if name == "TWA 22AB": # Binary spectrum continue if "JHK.fits" in fname_split: value["JHK"] = data elif "J" in fname_split: value["J"] = data elif "H+K" in fname_split or "HK" in fname_split: value["HK"] = data for name, value in spec_dict.items(): empty_message = len(print_message) * " " print(f"\r{empty_message}", end="") print_message = f"Adding spectra... {name}" print(f"\r{print_message}", end="") if "JHK" in value: sp_data = value["JHK"] elif "J" in value and "HK" in value: sp_data = np.vstack((value["J"], value["HK"])) else: continue dset = database.create_dataset(f"spectra/bonnefoy+2014/{name}", data=sp_data) dset.attrs["name"] = str(name).encode() dset.attrs["sptype"] = str(value["sptype"]).encode() empty_message = len(print_message) * " " print(f"\r{empty_message}", end="") print_message = "Adding spectra... [DONE]" print(f"\r{print_message}")