Source code for species.data.isochrone_data.iso_manual

import h5py
import numpy as np

from typeguard import typechecked

from species.core import constants


[docs] @typechecked def add_manual( database: h5py._hl.files.File, tag: str, file_name: str, model_name: str = "manual" ) -> None: """ Function for adding any of the isochrones from https://phoenix.ens-lyon.fr/Grids/ or https://perso.ens-lyon.fr/isabelle.baraffe/ to the database. Parameters ---------- database : h5py._hl.files.File Database. tag : str Tag name in the database. file_name : str Filename with the isochrones data. model_name : str Model name that is stored as attribute of the isochrone dataset in the HDF5 database. Returns ------- NoneType None """ # Read in all the data, ignoring empty lines or lines with "---" data = [] check_baraffe = False baraffe_continue = False with open(file_name, encoding="utf-8") as open_file: for line in open_file: if "BHAC15" in line: check_baraffe = True continue if not baraffe_continue: if "(Gyr)" in line: baraffe_continue = True else: continue if line[0] == "!": line = line[1:] elif line[:2] == " !": line = line[2:] if "---" in line or line == "\n": continue data.append(list(filter(None, line.rstrip().split(" ")))) iso_data = [] for line in data: if "(Gyr)" in line: age = line[-1] elif "lg(g)" in line: # Isochrones from Phoenix website header = ["M/Ms", "Teff(K)"] + line[1:] elif "M/Ms" in line: # Isochrones from Baraffe et al. (2015) header = line.copy() else: line.insert(0, age) iso_data.append(line) header = np.asarray(header, dtype=str) iso_data = np.asarray(iso_data, dtype=float) iso_data[:, 0] *= 1e3 # (Myr) iso_data[:, 1] *= constants.M_SUN / constants.M_JUP # (Mjup) iso_data[:, 5] *= 1e9 # (cm) iso_data[:, 5] *= 1e-2 / constants.R_JUP # (cm) -> (Rjup) index_sort = np.argsort(iso_data[:, 0]) iso_data = iso_data[index_sort, :] print(f"\nAdding isochrones: {tag}...", end="", flush=True) if check_baraffe: filters = header[6:] else: filters = header[7:] dtype = h5py.string_dtype(encoding="utf-8", length=None) dset = database.create_dataset( f"isochrones/{tag}/filters", (np.size(filters),), dtype=dtype ) dset[...] = filters dset = database.create_dataset( f"isochrones/{tag}/age", data=iso_data[:, 0] ) # (Myr) database.create_dataset(f"isochrones/{tag}/mass", data=iso_data[:, 1]) # (Mjup) database.create_dataset(f"isochrones/{tag}/teff", data=iso_data[:, 2]) # (K) database.create_dataset( f"isochrones/{tag}/log_lum", data=iso_data[:, 3] ) # log(L/Lsun) database.create_dataset(f"isochrones/{tag}/log_g", data=iso_data[:, 4]) # log(g) database.create_dataset(f"isochrones/{tag}/radius", data=iso_data[:, 5]) # (Rjup) database.create_dataset(f"isochrones/{tag}/deuterium", data=iso_data[:, 6]) database.create_dataset(f"isochrones/{tag}/lithium", data=iso_data[:, 7]) database.create_dataset(f"isochrones/{tag}/magnitudes", data=iso_data[:, 8:]) dset.attrs["model"] = model_name print(" [DONE]") print(f"Database tag: {tag}")