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>`_ to the database.
"""

import gzip

from pathlib import Path

import h5py
import numpy as np
import pooch

from astropy.io import fits
from beartype import beartype

from species.util.data_util import extract_tarfile, remove_directory


[docs] @beartype 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>`_ 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" url = "http://cdsarc.u-strasbg.fr/viz-bin/nph-Cat/tar.gz?J/A+A/562/A127/" input_file = "J_A+A_562_A127.tar.gz" data_file = Path(input_path) / input_file data_folder = Path(input_path) / "bonnefoy+2014/" if not data_file.exists(): print() pooch.retrieve( url=url, known_hash=None, fname=input_file, path=input_path, progressbar=True, ) if data_folder.exists(): remove_directory(data_folder) print(f"\nUnpacking {print_text} (2.3 MB)...", end="", flush=True) extract_tarfile(str(data_file), str(data_folder)) print(" [DONE]") spec_dict = {} data_file = Path(data_folder) / "stars.dat.gz" with gzip.open(data_file, "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} fits_folder = Path(data_folder) / "sp" print_message = "" print() spec_files = sorted(fits_folder.glob("*")) for file_item in spec_files: fname_split = file_item.stem.split("_") data = fits.getdata(file_item) for spec_key, spec_value in spec_dict.items(): if file_item.name in spec_value["files"]: if spec_key == "TWA 22AB": # Binary spectrum continue if "JHK" in fname_split: spec_value["JHK"] = data elif "J" in fname_split: spec_value["J"] = data elif "H+K" in fname_split or "HK" in fname_split: spec_value["HK"] = data for spec_key, spec_value in spec_dict.items(): empty_message = len(print_message) * " " print(f"\r{empty_message}", end="") print_message = f"Adding spectra... {spec_key}" print(f"\r{print_message}", end="") if "JHK" in spec_value: sp_data = spec_value["JHK"] elif "J" in spec_value and "HK" in spec_value: sp_data = np.vstack((spec_value["J"], spec_value["HK"])) else: # Binary spectrum continue dset = database.create_dataset( f"spectra/bonnefoy+2014/{spec_key}", data=sp_data ) dset.attrs["name"] = str(spec_key).encode() dset.attrs["sptype"] = str(spec_value["sptype"]).encode() empty_message = len(print_message) * " " print(f"\r{empty_message}", end="") print_message = "Adding spectra... [DONE]" print(f"\r{print_message}")