Source code for gaiaxpy.spectrum.sampled_spectrum

"""
sampled_spectrum.py
====================================
Module to represent a sampled spectrum.
"""

import numpy as np
from numpy import ndarray, nan

from .generic_spectrum import Spectrum


[docs] class SampledSpectrum(Spectrum): """ A spectrum defined by a set of discrete measurements. Each measurement is defined by a position in wavelength (or pseudo-wavelength), a measured flux and an associated flux error. Specific implementations of this class will define the units in use for positions and fluxes. """ def __init__(self, source_id, sampling_grid): """ Initialise a sampled spectrum. Args: source_id (str): Source identifier. sampling_grid (ndarray): 1D array containing the positions of the samples (or discrete measurements) for this spectrum. """ Spectrum.__init__(self, source_id) self.n_samples = np.size(sampling_grid) self.pos = None self.flux = None self.error = None self.covariance = None def _get_fluxes(self): """ Get the flux samples. Returns: ndarray: 1D array containing all flux samples. """ return self.flux def _get_flux_errors(self): """ Get the flux errors of each sample. Returns: ndarray: 1D array containing the error in flux for all samples. """ return self.error def _get_covariance(self): """ Get the flux covariance matrix. Returns: ndarray: 2D array containing the flux covariance matrix. """ return self.covariance
[docs] def get_positions(self): """ Get the positions of all samples. Returns: ndarray: 1D array containing the position of all samples. """ return self.pos
[docs] def get_flux_label(self): """ Get the labels describing the flux measurements. Returns: str: Short description of the flux measurements, including the units. """ return ""
[docs] def get_position_label(self): """ Get the positions of the samples, including the units. Returns: str: Short description of the positions of the samples. """ return ""
def _get_inputs(self, spectrum): return spectrum.get_positions(), spectrum._get_fluxes(), spectrum._get_flux_errors() @staticmethod def _sample_flux(coefficients, design_matrix): """ Given a set of coefficients to be applied to a set of basis functions and a design matrix containing the evaluation of each basis function at the positions corresponding to the samples, this method computes the flux values for each sample. Args: coefficients (ndarray): 1D array containing the coefficients multiplying the basis functions in the continuous representation. design_matrix (ndarray): 2D array containing the evaluation of the basis functions on the desired sampling grid. Returns: ndarray: 1D array containing the flux values for all samples. """ if coefficients.shape[0] != 0 and coefficients.shape[0] != design_matrix.shape[0]: raise ValueError("Coefficients length doesn't match the design matrix dimension. Please make sure you're " "using the correct input files and configuration.") if isinstance(coefficients, ndarray) and coefficients.size > 0: return coefficients @ design_matrix return nan @staticmethod def _sample_error(covariance, design_matrix, standard_deviation): """ Given the covariance matrix and standard deviation of the least squares solution defining the continuous representation of the spectrum in terms of basis functions and a design matrix containing the evaluation of each basis function at the positions corresponding to the samples, this method computes the error associated to the flux value for each sample. Args: covariance (ndarray): 2D array containing the elements of the covariance matrix. design_matrix (ndarray): 2D array containing the evaluation of the basis functions on the desired sampling grid. standard_deviation (float): Standard deviation. Returns: ndarray: 1D array containing the errors in flux for all samples. """ if isinstance(covariance, ndarray): return np.sqrt( np.sum(np.multiply(design_matrix.T @ covariance, design_matrix.T), axis=1)) * standard_deviation elif np.isnan(covariance): return float('NaN') else: raise TypeError('Covariance must be either a NumPy array or nan.') @staticmethod def _sample_covariance(covariance, design_matrix): """ Given the covariance matrix and a design matrix containing the evaluation of each basis function at the positions corresponding to the samples, this method computes the covariance matrix of the sampled spectrum. Args: covariance (ndarray): 2D array containing the elements of the covariance matrix of the continuous representation. design_matrix (ndarray): 2D array containing the evaluation of the basis functions on the desired sampling grid. Returns: ndarray: 2D array containing the covariance matrix of the sampled spectrum. """ return design_matrix.T @ covariance @ design_matrix