Source code for pyspeckit.spectrum.models.inherited_gaussfitter

"""
===============
Gaussian Fitter
===============

The simplest and most useful model.

Until 12/23/2011, gaussian fitting used the complicated and somewhat bloated
gaussfitter.py code.  Now, this is a great example of how to make your own
model!  Just make a function like gaussian and plug it into the SpectralModel
class.

Module API
^^^^^^^^^^
"""
import numpy as np
import warnings
from . import model
from . import fitter
from ...specwarnings import PyspeckitWarning

[docs]def gaussian(xarr, amplitude, dx, width, return_components=False, normalized=False, return_hyperfine_components=False): """ Returns a 1-dimensional gaussian of form A*np.exp(-(x-dx)**2/(2*w**2)) Area is sqrt(2*pi*sigma^2)*amplitude - i.e., this is NOT a normalized gaussian, unless normalized=True in which case A = Area Parameters ---------- xarr : np.ndarray array of x values amplitude : float Amplitude of the Gaussian, i.e. its peak value, unless normalized=True then A is the area of the gaussian dx : float Center or "shift" of the gaussian width : float Width of the gaussian (sigma) return_components : bool dummy variable; return_components does nothing but is required by all fitters return_hyperfine_components : bool dummy variable; does nothing but is required by all fitters normalized : bool Return a normalized Gaussian? """ if width == 0: return np.nan elif width < 0: warnings.warn("Negative width in Gaussian: {0}.".format(width), PyspeckitWarning) xarr = np.array(xarr) # make sure xarr is no longer a spectroscopic axis model = amplitude*np.exp(-(xarr-dx)**2/(2.0*width**2)) if normalized: return model / (np.sqrt(2*np.pi) * width**2) else: return model
def gaussian_fwhm(sigma): return np.sqrt(8*np.log(2)) * sigma
[docs]def gaussian_integral(amplitude, sigma): """ Integral of a Gaussian """ return amplitude * np.sqrt(2*np.pi*sigma**2)
def _integral_modelpars(modelpars=None): """ light wrapper to match requirements for model.analytic_integral """ amplitude = modelpars[0] sigma = modelpars[2] return gaussian_integral(amplitude,sigma)
[docs]def gaussian_fitter(): """ Generator for Gaussian fitter class """ myclass = model.SpectralModel(gaussian, 3, parnames=['amplitude','shift','width'], parlimited=[(False,False),(False,False),(True,False)], parlimits=[(0,0), (0,0), (0,0)], shortvarnames=('A',r'\Delta x',r'\sigma'), centroid_par='shift', fwhm_func=gaussian_fwhm, fwhm_pars=['width'], integral_func=_integral_modelpars, ) myclass.__name__ = "gaussian" return myclass
[docs]def gaussian_vheight_fitter(): """ Generator for Gaussian fitter class """ vhg = fitter.vheightmodel(gaussian) myclass = model.SpectralModel(vhg, 4, parnames=['height','amplitude','shift','width'], parlimited=[(False,False),(False,False),(False,False),(True,False)], parlimits=[(0,0),(0,0), (0,0), (0,0)], shortvarnames=('B','A',r'\Delta x',r'\sigma'), centroid_par='shift', fwhm_func=gaussian_fwhm, fwhm_pars=['width'], ) myclass.__name__ = "vheightgaussian" return myclass