Source code for gaiaxpy.core.config

"""
config.py
====================================
Module to handle the calibrator and generator configuration files.
"""

from configparser import ConfigParser
from os.path import join

from gaiaxpy.config.paths import filters_path, config_ini_file
from gaiaxpy.core.satellite import BANDS
from gaiaxpy.core.xml_utils import get_file_root, get_array_text, get_xp_merge, get_xp_sampling_matrix

ADDITIONAL_SYSTEM_PREFIX = 'USER'


[docs] def get_file_path(config_file=None): if not config_file: return filters_path _config_parser = ConfigParser() _config_parser.read(config_file) try: file_path = _config_parser['filter']['filters_dir'] except KeyError: return filters_path return file_path
[docs] def get_filter_version_from_config(_config_parser): try: version = _config_parser['filter']['version'] except KeyError: version = None return version
[docs] def replace_file_name(_config_file, label, key, bp_model, rp_model, system): _config_parser = ConfigParser() _config_parser.read(_config_file) version = get_filter_version_from_config(_config_parser) if version: file_name = _config_parser.get(label, key).replace('version', version) system = system.replace(f'{ADDITIONAL_SYSTEM_PREFIX}_', '') else: file_name = _config_parser.get(label, key).format(label, key).replace('model', f'{bp_model}{rp_model}') file_name = file_name.replace('system', system) if system else file_name.replace('system_', '') return file_name
[docs] def get_file(label, key, system, bp_model, rp_model, config_file=None): """ Get the file path corresponding to the given label and key. Args: label (str): Label of the photometric system or functionality (e.g.: 'Johnson' or 'calibrator'). key (str): Type of file to load ('zeropoint', 'merge', 'sampling'). system (str): Photometric system name, can be None in which case the generic configuration is loaded. bp_model (str): BP model. rp_model (str): RP model. config_file: Path to configuration file. Returns: str: Path of a file. """ _config_file = config_ini_file if config_file is None else config_file file_name = replace_file_name(_config_file, label, key, bp_model, rp_model, system) file_path = get_file_path(config_file) return join(file_path, file_name)
[docs] def load_xpmerge_from_xml(system=None, bp_model=None, rp_model='v142r', config_file=None): """ Load the XpMerge table from the filter XML file. Args: system (str): Name of the photometric system if it corresponds. bp_model (str): BP model. rp_model (str): RP model. config_file (str): Path to configuration file. Returns: ndarray: Array containing the sampling grid values. dict: A dictionary containing the XpMerge table with one entry for BP and one for RP. """ bp_model = bp_model if bp_model else 'v375wi' label = key = 'filter' file_path = get_file(label, key, system, bp_model, rp_model, config_file=config_file) x_root = get_file_root(file_path) sampling_grid, bp_merge, rp_merge = get_xp_merge(x_root) return sampling_grid, dict(zip(BANDS, [bp_merge, rp_merge]))
[docs] def load_xpsampling_from_xml(system=None, bp_model=None, rp_model='v142r', config_file=None): """ Load the XpSampling table from the XML filter file. Args: system (str): Photometric system name, can be None in which case the generic configuration is loaded. bp_model (str): BP model. rp_model (str): RP model. config_file (str): Path to configuration file. Returns: dict: A dictionary containing the XpSampling table with one entry for BP and one for RP. """ bp_model = bp_model if bp_model else 'v375wi' xml_file = get_file('filter', 'filter', system, bp_model, rp_model, config_file=config_file) x_root = get_file_root(xml_file) _, n_bands = get_array_text(x_root, 'bands') bp_sampling = get_xp_sampling_matrix(x_root, 'bp', n_bands) rp_sampling = get_xp_sampling_matrix(x_root, 'rp', n_bands) xp_sampling = dict(zip(BANDS, [bp_sampling, rp_sampling])) return xp_sampling