Source code for gaiaxpy.spectrum.single_synthetic_photometry

"""
single_synthetic_photometry.py
====================================
Module to represent a synthetic photometry in a single photometric system.
"""

import warnings

import numpy as np

from .photometric_absolute_sampled_spectrum import PhotometricAbsoluteSampledSpectrum

# Ignore negative flux, handled in the code.
warnings.filterwarnings('ignore', category=RuntimeWarning)


[docs] class SingleSyntheticPhotometry(PhotometricAbsoluteSampledSpectrum): """ Synthetic photometry derived from Gaia spectra in one photometric system. """ def __init__(self, source_id, xp_spectra, sampled_bases, merge, photometric_system): """ Initialise a synthetic photometry in a single photometric system. Args: source_id (str): Source identifier. xp_spectra (dict): A dictionary containing the BP and RP continuous spectra. sampled_bases (dict): The set of basis functions sampled onto the grid defining the resolution of the final sampled spectrum. merge (dict): The weighting factors for BP and RP sampled onto the grid defining the resolution of the final sampled spectrum. photometric_system (PhotometricSystem): The photometric system of the synthetic photometry. """ PhotometricAbsoluteSampledSpectrum.__init__(self, source_id, xp_spectra, sampled_bases, merge) self.photometric_system = photometric_system.value # Correct flux if necessary (regular Photometric systems return the original value) aux_flux = self.flux self.flux = self.photometric_system._correct_flux(aux_flux) # Correct the errors self.error = self.photometric_system._correct_error(aux_flux, self.error) # Magnitude is computed from self.flux which is the corrected flux self.mag = self._compute_mag() def _photometry_to_dict(self): """ Represent the photometry as a dictionary. Returns: dict: A dictionary containing the source identifier and the synthetic photometry. """ phot = {'source_id': self.source_id} mag = self._field_to_dict(self.mag, 'mag') flux = self._field_to_dict(self.flux, 'flux') error = self._field_to_dict(self.error, 'flux_error') return {**phot, **mag, **flux, **error} def _field_to_dict(self, field, name): """ Represent the field as a dictionary. Returns: dict: A dictionary containing a particular field of the synthetic photometry. """ bands = self.photometric_system.get_bands() values = field return {f'{name}_{band}': values[i] for i, band in enumerate(bands)} def _compute_mag(self): def flux_to_mag(flux, zero_point): """ Convert flux to magnitude. Args: flux (float): Flux value. zero_point (float): Photometric zero-point. Returns: float: The magnitude. """ if flux <= 0: return np.nan result = -2.5 * np.log10(flux) + zero_point return result return [flux_to_mag(flux, zero_point) for flux, zero_point in zip(self.flux, self.photometric_system.get_zero_points())]