Source code for species.read.read_color

"""
Module with reading functionalities for photometric libraries.
"""

import os
import configparser

import h5py
import numpy as np

from species.core import box
from species.data import database
from species.util import phot_util


[docs]class ReadColorMagnitude: """ Class for reading color-magnitude data from the database. """ def __init__(self, phot_library, filters_color, filter_mag): """ Parameters ---------- phot_library : list(str, ) Photometric libraries ('vlm-plx', 'leggett', or 'mamajek'). filters_color : tuple(str, str) Filter names for the color (typically in the MKO, 2MASS, or WISE system). filter_mag : str Filter name for the absolute magnitudes (typically in the MKO, 2MASS, or WISE system). Returns ------- NoneType None """ self.phot_library = phot_library self.filters_color = filters_color self.filter_mag = filter_mag config_file = os.path.join(os.getcwd(), 'species_config.ini') config = configparser.ConfigParser() config.read_file(open(config_file)) self.database = config['species']['database'] if isinstance(self.phot_library, str): self.phot_library = [self.phot_library, ]
[docs] def get_color_magnitude(self, object_type=None): """ Function for extracting color-magnitude data from the selected photometric libraries. Parameters ---------- object_type : str, None Object type to select either field dwarfs ('field'), or young and/or low-gravity objects ('young'). All objects are selected if set to None. Returns ------- species.core.box.ColorMagBox Box with the colors and magnitudes. """ h5_file = h5py.File(self.database, 'r') indices = None for item in self.phot_library: try: h5_file['photometry/'+item] except KeyError: h5_file.close() species_db = database.Database() species_db.add_photometry(item) h5_file = h5py.File(self.database, 'r') sptype_tmp = np.asarray(h5_file['photometry/'+item+'/sptype']) distance_tmp = np.asarray(h5_file['photometry/'+item+'/distance']) # [pc] flag_tmp = np.asarray(h5_file['photometry/'+item+'/flag']) if object_type is None: indices_tmp = np.arange(0, np.size(sptype_tmp), 1) elif object_type == 'field': indices_tmp = np.where(flag_tmp == b'null')[0] elif object_type == 'young': indices_tmp = [] for j, object_flag in enumerate(flag_tmp): if b'young' in object_flag: indices_tmp.append(j) elif b'lowg' in object_flag: indices_tmp.append(j) indices_tmp = np.array(indices_tmp) if indices_tmp.size > 0: if indices is None: sptype = sptype_tmp distance = distance_tmp flag = flag_tmp indices = indices_tmp mag1 = np.asarray(h5_file['photometry/'+item+'/'+self.filters_color[0]]) mag2 = np.asarray(h5_file['photometry/'+item+'/'+self.filters_color[1]]) else: distance_tmp = np.asarray(h5_file['photometry/'+item+'/distance']) # [pc] distance = np.concatenate((distance, distance_tmp), axis=0) sptype_tmp = np.asarray(h5_file['photometry/'+item+'/sptype']) sptype = np.concatenate((sptype, sptype_tmp), axis=0) flag = np.concatenate((flag, flag_tmp), axis=0) indices = np.concatenate((indices, indices.shape+indices_tmp), axis=0) mag1_tmp = np.asarray(h5_file['photometry/'+item+'/'+self.filters_color[0]]) mag2_tmp = np.asarray(h5_file['photometry/'+item+'/'+self.filters_color[1]]) mag1 = np.concatenate((mag1, mag1_tmp), axis=0) mag2 = np.concatenate((mag2, mag2_tmp), axis=0) color = mag1 - mag2 if self.filter_mag == self.filters_color[0]: mag = phot_util.apparent_to_absolute(mag1, distance) elif self.filter_mag == self.filters_color[1]: mag = phot_util.apparent_to_absolute(mag2, distance) h5_file.close() return box.create_box(boxtype='colormag', library=self.phot_library, object_type=object_type, filters_color=self.filters_color, filter_mag=self.filter_mag, color=color[indices], magnitude=mag[indices], sptype=sptype[indices])
[docs]class ReadColorColor: """ Class for reading color-color data from the database. """ def __init__(self, phot_library, filters_colors): """ Parameters ---------- phot_library : list(str, ) Photometric libraries ('vlm-plx', 'leggett', or 'mamajek'). filters_colors : tuple(tuple(str, str), tuple(str, str)) Filter names for the two color (typically in the MKO, 2MASS, or WISE system). Returns ------- NoneType None """ self.phot_library = phot_library self.filters_colors = filters_colors config_file = os.path.join(os.getcwd(), 'species_config.ini') config = configparser.ConfigParser() config.read_file(open(config_file)) self.database = config['species']['database'] if isinstance(self.phot_library, str): self.phot_library = (self.phot_library, )
[docs] def get_color_color(self, object_type): """ Function for extracting color-color data from the selected photometric libraries. Parameters ---------- object_type : str, None Object type to select either field dwarfs ('field'), or young and/or low-gravity objects ('young'). All objects are selected if set to None. Returns ------- species.core.box.ColorColorBox Box with the colors. """ h5_file = h5py.File(self.database, 'r') indices = None for item in self.phot_library: try: h5_file['photometry/'+item] except KeyError: h5_file.close() species_db = database.Database() species_db.add_photometry(item) h5_file = h5py.File(self.database, 'r') sptype_tmp = np.asarray(h5_file['photometry/'+item+'/sptype']) distance_tmp = np.asarray(h5_file['photometry/'+item+'/distance']) # [pc] flag_tmp = np.asarray(h5_file['photometry/'+item+'/flag']) if object_type is None: indices_tmp = np.arange(0, np.size(sptype_tmp), 1) elif object_type == 'field': indices_tmp = np.where(flag_tmp == b'null')[0] elif object_type == 'young': indices_tmp = [] for j, object_flag in enumerate(flag_tmp): if b'young' in object_flag: indices_tmp.append(j) elif b'lowg' in object_flag: indices_tmp.append(j) indices_tmp = np.array(indices_tmp) if indices_tmp.size > 0: if indices is None: sptype = sptype_tmp distance = distance_tmp flag = flag_tmp indices = indices_tmp mag1 = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[0][0]]) mag2 = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[0][1]]) mag3 = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[1][0]]) mag4 = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[1][1]]) else: distance_tmp = np.asarray(h5_file['photometry/'+item+'/distance']) # [pc] distance = np.concatenate((distance, distance_tmp), axis=0) sptype_tmp = np.asarray(h5_file['photometry/'+item+'/sptype']) sptype = np.concatenate((sptype, sptype_tmp), axis=0) flag = np.concatenate((flag, flag_tmp), axis=0) indices = np.concatenate((indices, indices.shape+indices_tmp), axis=0) mag1_tmp = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[0][0]]) mag2_tmp = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[0][1]]) mag3_tmp = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[1][0]]) mag4_tmp = np.asarray(h5_file['photometry/'+item+'/'+self.filters_colors[1][1]]) mag1 = np.concatenate((mag1, mag1_tmp), axis=0) mag2 = np.concatenate((mag2, mag2_tmp), axis=0) mag3 = np.concatenate((mag3, mag3_tmp), axis=0) mag4 = np.concatenate((mag4, mag4_tmp), axis=0) color1 = mag1 - mag2 color2 = mag3 - mag4 h5_file.close() return box.create_box(boxtype='colorcolor', library=self.phot_library, object_type=object_type, filters=self.filters_colors, color1=color1[indices], color2=color2[indices], sptype=sptype[indices])