Source code for species.data.companion_data.companion_spectra

"""
Module for getting spectra of directly imaged planets and brown dwarfs.
"""

import json
import pooch

from pathlib import Path

from beartype import beartype
from beartype.typing import Dict, Optional, Tuple

from species.util.core_util import print_section


[docs] @beartype def companion_spectra( input_path: Path, comp_name: str, verbose: bool = True ) -> Optional[Dict[str, Tuple[str, Optional[str], float]]]: """ Function for extracting a dictionary with the spectra of directly imaged planets and brown dwarfs. These data can be added to the database with the :func:`~species.data.database.Database.add_companion` method of :class:`~species.data.database.Database`. Parameters ---------- input_path : Path Path of the data folder. comp_name : str Companion name for which the spectra will be returned. verbose : bool Print details on the companion data that are added to the database. Returns ------- dict, None Dictionary with the spectra of ``comp_name``. A ``None`` will be returned if there are not any spectra available. The dictionary includes the spectrum, (optional) covariances, spectral resolution, and filename. """ data_folder = input_path / "companion_data" spec_file = Path(__file__).parent.resolve() / "companion_spectra.json" with open(spec_file, "r", encoding="utf-8") as json_file: comp_spec = json.load(json_file) if comp_name in comp_spec: if verbose: print_section("Get companion spectra") if not data_folder.exists(): data_folder.mkdir() spec_dict = {} for spec_key, spec_value in comp_spec[comp_name].items(): if verbose: print(f"Getting {spec_key} spectrum of {comp_name}...", end="", flush=True) spec_url = ( f"https://home.strw.leidenuniv.nl/~stolker/species/spectra/{spec_value[0]}" ) spec_file = data_folder / spec_value[0] if spec_value[1] is None: cov_file = None else: cov_file = data_folder / spec_value[1] if not spec_file.exists(): pooch.retrieve( url=spec_url, known_hash=None, fname=spec_value[0], path=data_folder, progressbar=True, ) if cov_file is None: spec_dict[spec_key] = (str(spec_file), cov_file, spec_value[2]) else: spec_dict[spec_key] = (str(spec_file), str(cov_file), spec_value[2]) if verbose: print(" [DONE]") print( f"Please cite {spec_value[3]} when making " "use of this spectrum in a publication" ) else: spec_dict = None return spec_dict