Source code for species.data.isochrone_data.iso_sonora

import os
import urllib.request

import numpy as np

from species.core import constants
from species.util.data_util import extract_tarfile


[docs] def add_sonora(database, input_path): """ Function for adding the `Sonora Bobcat <https://zenodo.org/record/5063476>`_ isochrone data to the database. Parameters ---------- database : h5py._hl.files.File Database. input_path : str Folder where the data is located. Returns ------- NoneType None """ if not os.path.exists(input_path): os.makedirs(input_path) url = "https://zenodo.org/record/5063476/files/evolution_and_photometery.tar.gz" input_file = "evolution_and_photometery.tar.gz" data_file = os.path.join(input_path, input_file) sub_folder = input_file.split(".", maxsplit=1)[0] data_folder = os.path.join(input_path, sub_folder) if not os.path.exists(data_folder): os.makedirs(data_folder) if not os.path.isfile(data_file): print("Downloading Sonora Bobcat evolution (929 kB)...", end="", flush=True) urllib.request.urlretrieve(url, data_file) print(" [DONE]") print("Unpacking Sonora Bobcat evolution (929 kB)...", end="", flush=True) extract_tarfile(data_file, data_folder) print(" [DONE]") iso_files = [ "evo_tables+0.0/nc+0.0_co1.0_age", "evo_tables+0.5/nc+0.5_co1.0_age", "evo_tables-0.5/nc-0.5_co1.0_age", ] labels = ["[M/H] = +0.0", "[M/H] = +0.5", "[M/H] = -0.5"] for i, item in enumerate(iso_files): iso_file = f"evolution_tables/{item}" iso_path = os.path.join(data_folder, iso_file) iso_data = [] with open(iso_path, encoding="utf-8") as open_file: for j, line in enumerate(open_file): if j == 0 or " " not in line.strip(): continue # age(Gyr) M/Msun log(L/Lsun) Teff(K) log(g) R/Rsun param = list(filter(None, line.strip().split(" "))) param = list(map(float, param)) param[0] = 1e3 * param[0] # (Gyr) -> (Myr) param[1] = ( param[1] * constants.M_SUN / constants.M_JUP ) # (Msun) -> (Mjup) param[5] = ( param[5] * constants.R_SUN / constants.R_JUP ) # (Rsun) -> (Rjup) iso_data.append( [param[0], param[1], param[2], param[3], param[4], param[5]] ) print(f"Adding isochrones: Sonora {labels[i]}...", end="", flush=True) iso_data = np.array(iso_data) metallicity = labels[i].split(" ")[2] dset = database.create_dataset( f"isochrones/sonora{metallicity}/age", data=iso_data[:, 0] ) # (Myr) database.create_dataset( f"isochrones/sonora{metallicity}/mass", data=iso_data[:, 1] ) # (Mjup) database.create_dataset( f"isochrones/sonora{metallicity}/log_lum", data=iso_data[:, 2] ) # log(L/Lsun) database.create_dataset( f"isochrones/sonora{metallicity}/teff", data=iso_data[:, 3] ) # (K) database.create_dataset( f"isochrones/sonora{metallicity}/log_g", data=iso_data[:, 4] ) # log(g) database.create_dataset( f"isochrones/sonora{metallicity}/radius", data=iso_data[:, 5] ) # (Rjup) dset.attrs["model"] = "sonora" print(" [DONE]") print(f"Database tag: sonora{metallicity}")