Source code for specviz.analysis.models.spline

from scipy.interpolate import UnivariateSpline

from astropy.modeling import Fittable1DModel
from astropy.modeling.parameters import Parameter

__all__ = ['Spline1D']


[docs]class Spline1D(Fittable1DModel): """ Perform a spline fit Notes ----- See `~astropy.modeling.Fittable1DModel` for further details. The spline function is based on `~scipy.interpolate.UnivariateSpline` """ degree = Parameter(default=3, fixed=True) smooth = Parameter(default=1, fixed=True) # default=None crashes the app
[docs] def evaluate(self, x, degree, smooth): """ Evaluate the spline Parameters ---------- x: numpy.ndarray The wavelengths to evaluate over. degree: int The degree of spline to evaluate. smooth: float or None The smoothing factor used to choose the number of knots. Returns ------- The evaluated spline """ _f = UnivariateSpline(self.wave, self.flux, k=degree, s=smooth) return _f(x)
class Spline1DInitializer(object): """ `Spline1D` model initializer """ def initialize(self, instance, wave, flux): """ Initialize the `Spline1D` model. Parameters ---------- instance: `Spline1D` instance The `Spline1D` model. wave: numpy.ndarray The wavelength range. flux: numpy.ndarray The source flux. """ instance.wave = wave instance.flux = flux # these override the defaults to something sensible. instance.smooth.value = len(wave)