Source code for scarlet.spectrum

from functools import partial

from .bbox import Box
from .constraint import PositivityConstraint
from .frame import Frame
from .model import Model
from .parameter import Parameter, relative_step


[docs]class Spectrum(Model): """Spectrum base class The class describes the 1D spectral dependence of`~scarlet.FactorizedComponent`. Parameters ---------- frame: `~scarlet.Frame` Characterization of the model parameters: list of `~scarlet.Parameter` bbox: `~scarlet.Box` 2D bounding box of this model """ def __init__(self, frame, *parameters, bbox=None): assert isinstance(frame, Frame) self.frame = frame assert isinstance(bbox, Box) self.bbox = bbox super().__init__(*parameters)
[docs]class TabulatedSpectrum(Spectrum): """Spectrum from a array/table The class uses an arbitrary array as non-parametric model. Parameters ---------- frame: `~scarlet.Frame` Characterization of the model spectrum: 1D array or `~scarlet.Parameter` Spectrum parameter bbox: `~scarlet.Box` 1D bounding box for focation of the spectrum in `frame` min_step: float Minimum absolute step size for spectrum element updates. """ def __init__(self, frame, spectrum, bbox=None, min_step=0): if isinstance(spectrum, Parameter): assert spectrum.name == "spectrum" else: # slightly positive values constraint = PositivityConstraint(zero=1e-20) # steps of 1% of mean amplitude, minimum set by noise_rms step = partial(relative_step, factor=1e-2, minimum=min_step) spectrum = Parameter( spectrum, name="spectrum", step=step, constraint=constraint ) if bbox is None: assert frame.bbox[0].shape == spectrum.shape bbox = Box(spectrum.shape) else: assert bbox.shape == spectrum.shape super().__init__(frame, spectrum, bbox=bbox)
[docs] def get_model(self, *parameters): spectrum = self.get_parameter(0, *parameters) return spectrum