Source code for species.util.plot_util

"""
Utility functions for plotting data.
"""

import numpy as np


[docs]def sptype_substellar(sptype, shape): """ Parameters ---------- sptype : shape : Returns ------- numpy.ndarray """ spt_disc = np.zeros(shape) for i, item in enumerate(sptype): if item[0:2] in ['M0', 'M1', 'M2', 'M3', 'M4']: spt_disc[i] = 0.5 elif item[0:2] in ['M5', 'M6', 'M7', 'M8', 'M9']: spt_disc[i] = 1.5 elif item[0:2] in ['L0', 'L1', 'L2', 'L3', 'L4']: spt_disc[i] = 2.5 elif item[0:2] in ['L5', 'L6', 'L7', 'L8', 'L9']: spt_disc[i] = 3.5 elif item[0:2] in ['T0', 'T1', 'T2', 'T3', 'T4']: spt_disc[i] = 4.5 elif item[0:2] in ['T5', 'T6', 'T7', 'T8', 'T9']: spt_disc[i] = 5.5 elif 'Y' in item: spt_disc[i] = 6.5 else: spt_disc[i] = np.nan continue return spt_disc
[docs]def sptype_stellar(sptype, shape): """ Parameters ---------- sptype : shape : Returns ------- numpy.ndarray """ spt_disc = np.zeros(shape) for i, item in enumerate(sptype): if item[0] == 'O': spt_disc[i] = 0.5 elif item[0] == 'B': spt_disc[i] = 1.5 elif item[0] == 'A': spt_disc[i] = 2.5 elif item[0] == 'F': spt_disc[i] = 3.5 elif item[0] == 'G': spt_disc[i] = 4.5 elif item[0] == 'K': spt_disc[i] = 5.5 elif item[0] == 'M': spt_disc[i] = 6.5 elif item[0] == 'L': spt_disc[i] = 7.5 elif item[0] == 'T': spt_disc[i] = 8.5 elif item[0] == 'Y': spt_disc[i] = 9.5 else: spt_disc[i] = np.nan continue return spt_disc
[docs]def update_labels(param): """ Parameters ---------- param : list Returns ------- list """ if 'teff' in param: index = param.index('teff') param[index] = r'$T_\mathregular{eff}$ (K)' if 'logg' in param: index = param.index('logg') param[index] = r'$\log\,g$ (dex)' if 'feh' in param: index = param.index('feh') param[index] = r'[Fe/H] (dex)' if 'fsed' in param: index = param.index('fsed') param[index] = r'f$_\mathregular{sed}$' if 'co' in param: index = param.index('co') param[index] = r'C/O' if 'radius' in param: index = param.index('radius') param[index] = r'$R$ ($\mathregular{R_{Jup}}$)' if 'teff' in param: index = param.index('teff') param[index] = r'$T_\mathregular{eff}$ (K)' if 'tint' in param: index = param.index('tint') param[index] = r'$T_\mathregular{int}$ (K)' for i in range(15): if f't{i}' in param: index = param.index(f't{i}') param[index] = rf'$T_\mathregular{{{i}}}$ (K)' if 'alpha' in param: index = param.index('alpha') param[index] = r'$\alpha$' if 'log_delta' in param: index = param.index('log_delta') param[index] = r'$\log\,\delta$ (dex)' if 'log_p_quench' in param: index = param.index('log_p_quench') param[index] = r'$\log\,P_\mathregular{quench}$ (dex)' for i, item in enumerate(param): if item[0:8] == 'scaling_': param[i] = rf'$a_\mathregular{{{item[8:]}}}$' elif item[0:6] == 'error_': param[i] = rf'$b_\mathregular{{{item[6:]}}}$' return param
[docs]def model_name(key): """ Parameters ---------- key : str Returns ------- str """ if key == 'drift-phoenix': name = 'DRIFT-PHOENIX' elif key == 'ames-cond': name = 'AMES-Cond' elif key == 'ames-dusty': name = 'AMES-Dusty' elif key == 'bt-settl': name = 'BT-Settl' elif key == 'bt-nextgen': name = 'BT-NextGen' elif key == 'planck': name = 'Planck radiation' elif key == 'zhu2015': name = 'Zhu (2015)' return name
[docs]def quantity_unit(param, object_type): """ Parameters ---------- param : list object_type : str Returns ------- list list list """ quantity = [] unit = [] label = [] if 'teff' in param: quantity.append('teff') unit.append('K') label.append(r'$T_\mathregular{eff}$') if 'logg' in param: quantity.append('logg') unit.append('dex') label.append(r'$\log\,g$') if 'feh' in param: quantity.append('feh') unit.append('dex') label.append(r'[Fe/H]') if 'fsed' in param: quantity.append('fsed') unit.append(None) label.append(r'f$_\mathregular{sed}$') if 'co' in param: quantity.append('co') unit.append(None) label.append(r'C/O') if 'radius' in param: quantity.append('radius') if object_type == 'planet': unit.append(r'$R_\mathregular{Jup}}$') elif object_type == 'star': unit.append(r'$R_\mathregular{\odot}}$') label.append(r'$R$') if 'distance' in param: quantity.append('distance') unit.append('pc') label.append(r'$d$') if 'mass' in param: quantity.append('mass') if object_type == 'planet': unit.append(r'$M_\mathregular{Jup}$') elif object_type == 'star': unit.append(r'$M_\mathregular{\odot}$') label.append(r'$M$') if 'luminosity' in param: quantity.append('luminosity') unit.append(r'$L_\odot$') label.append(r'$L$') return quantity, unit, label
[docs]def field_bounds_ticks(field_range): """ Parameters ---------- field_range : tuple(str, str), None Range of the discrete colorbar for the field dwarfs. The tuple should contain the lower and upper value ('early M', 'late M', 'early L', 'late L', 'early T', 'late T', 'early Y). The full range is used if set to None. Returns ------- np.ndarray np.ndarray list(str, ) """ spectral_ranges = ['M0-M4', 'M5-M9', 'L0-L4', 'L5-L9', 'T0-T4', 'T5-T9', 'Y1-Y2'] if field_range is None: index_start = 0 index_end = 7 else: if field_range[0] == 'early M': index_start = 0 elif field_range[0] == 'late M': index_start = 1 elif field_range[0] == 'early L': index_start = 2 elif field_range[0] == 'late L': index_start = 3 elif field_range[0] == 'early T': index_start = 4 elif field_range[0] == 'late T': index_start = 5 elif field_range[0] == 'early Y': index_start = 6 if field_range[1] == 'early M': index_end = 1 elif field_range[1] == 'late M': index_end = 2 elif field_range[1] == 'early L': index_end = 3 elif field_range[1] == 'late L': index_end = 4 elif field_range[1] == 'early T': index_end = 5 elif field_range[1] == 'late T': index_end = 6 elif field_range[1] == 'early Y': index_end = 7 index_range = index_end - index_start + 1 bounds = np.linspace(index_start, index_end, index_range) ticks = np.linspace(index_start+0.5, index_end-0.5, index_range-1) labels = spectral_ranges[index_start:index_end] return bounds, ticks, labels