spectrum¶
The spectrum module consists of the Spectrum class, with child classes ObsBlock and Spectra for multi-spectrum analysis of different types.
The Spectrum class is the main functional code. ObsBlocks are containers of multiple spectra of different objects The Spectra class is a container of multiple spectra of the same object at different wavelengths/frequencies
-
class
pyspeckit.spectrum.classes.
Spectrum
(filename_or_magic=None, filetype=None, xarr=None, data=None, error=None, header=None, doplot=False, maskdata=True, unit=None, plotkwargs={}, xarrkwargs={}, model_registry=None, filename=None, **kwargs)[source] [github] [bitbucket]¶ Bases:
pyspeckit.spectrum.classes.SingleSpectrum
The core class for the spectroscopic toolkit. Contains the data and error arrays along with wavelength / frequency / velocity information in various formats.
Create a Spectrum object.
Must either pass in a filename or ALL of xarr, data, and header, plus optionally error.
kwargs are passed to the file reader
Parameters: - filename_or_magic : string or something else
The filename or something with an hdu attribute. If data, xarr, and error are specified, leave filename blank.
- filetype : string
Specify the file type (only needed if it cannot be automatically determined from the filename)
- xarr :
units.SpectroscopicAxis
ornp.ndarray
The X-axis of the data. If it is an np.ndarray, you must pass
xarrkwargs
or a valid header if you want to use any of the unit functionality.- data :
np.ndarray
The data array (must have same length as xarr)
- error :
np.ndarray
The error array (must have same length as the data and xarr arrays)
- header :
pyfits.Header
or dict The header from which to read unit information. Needs to be a
pyfits.Header
instance or another dictionary-like object with the appropriate information- maskdata : boolean
turn the array into a masked array with all nan and inf values masked
- doplot : boolean
Plot the spectrum after loading it?
- plotkwargs : dict
keyword arguments to pass to the plotter
- xarrkwargs : dict
keyword arguments to pass to the SpectroscopicAxis initialization (can be used in place of a header)
- unit : str
The data unit
- filename : string
The file to read the spectrum from. If data, xarr, and error are specified, leave filename blank.
Examples
>>> sp = pyspeckit.Spectrum(data=np.random.randn(100), xarr=np.linspace(-50, 50, 100), error=np.ones(100)*0.1, xarrkwargs={'unit':'km/s', 'refX':4.829, 'refX_unit':'GHz', 'xtype':'VLSR-RAD'}, header={})
>>> xarr = pyspeckit.units.SpectroscopicAxis(np.linspace(-50,50,100), units='km/s', refX=6562.83, refX_unit='angstroms') >>> data = np.random.randn(100)*5 + np.random.rand(100)*100 >>> err = np.sqrt(data/5.)*5. # Poisson noise >>> sp = pyspeckit.Spectrum(data=data, error=err, xarr=xarr, header={})
>>> # if you already have a simple fits file >>> sp = pyspeckit.Spectrum('test.fits')
-
copy
(deep=True) [github] [bitbucket]¶ Create a copy of the spectrum with its own plotter, fitter, etc. Useful for, e.g., comparing smoothed to unsmoothed data
-
crop
(x1, x2, unit=None, **kwargs) [github] [bitbucket]¶ Replace the current spectrum with a subset from x1 to x2 in current units
Fixes CRPIX1 and baseline and model spectra to match cropped data spectrum
-
data_quantity
¶
-
downsample
(dsfactor) [github] [bitbucket]¶ Downsample the spectrum (and all of its subsidiaries) without smoothing
Parameters: - dsfactor : int
Downsampling Factor
-
error_quantity
¶
-
flux
¶ The data in the spectrum (flux = data, for compatibility with astropy’s Spectrum1D object).
-
classmethod
from_hdu
(hdu) [github] [bitbucket]¶ Create a pyspeckit Spectrum object from an HDU
-
classmethod
from_spectrum1d
(spec1d) [github] [bitbucket]¶ Tool to load a pyspeckit Spectrum from a specutils object
Examples
>>> # grab many spectra from a multiextension FITS file >>> spectra = specutils.io.fits.read_fits_spectrum1d('AAO.fits') >>> sp = pyspeckit.Spectrum.from_spectrum1d(spectra[0])
>>> # open a single spectrum that could have been opened directly with pyspeckit >>> spectrum = specutils.io.fits.read_fits_spectrum1d('gbt_1d.fits') >>> sp = pyspeckit.Spectrum.from_spectrum1d(spectrum)
-
getlines
(linetype='radio', **kwargs) [github] [bitbucket]¶ Access a registered database of spectral lines. Will add an attribute with the name linetype, which then has properties defined by the speclines module (most likely, a table and a “show” function to display the lines)
-
interpnans
() [github] [bitbucket]¶ Interpolate over NAN values, replacing them with values interpolated from their neighbors using linear interpolation.
-
measure
(z=None, d=None, fluxnorm=None, miscline=None, misctol=10.0, ignore=None, derive=True, **kwargs) [github] [bitbucket]¶ Initialize the measurements class - only do this after you have run a fitter otherwise pyspeckit will be angry!
-
moments
(unit='km/s', **kwargs) [github] [bitbucket]¶ Return the moments of the spectrum. In order to assure that the 1st and 2nd moments are meaningful, a ‘default’ unit is set. If unit is not set, will use current unit.
Documentation imported from the moments module:
Returns the gaussian parameters of a 1D distribution by calculating its moments. Depending on the input parameters, will only output a subset of the above.
Theory, from first principles (in the absence of noise): integral(gaussian) = sqrt(2*pi*sigma^2) * amp sigma = integral / amp / sqrt(2*pi)
In the presence of noise, this gets much more complicated. The noisy approach is inspired by mpfit
Parameters: - Xax : np.ndarray
The x-axis for computing the 1st and 2nd moments
- data : np.ndarray
The data from which to compute the various moments
- estimator : function
A function to estimate the “height” or “background level” of the data, e.g. mean or median. If masked arrays are being used, use the np.ma versions of the numpy functions
- negamp: bool or None
Force the peak negative (True), positive (False), or the sign of the peak will be “autodetected” (negamp=None)
- nsigcut: float or None
If specified, the code will attempt to estimate the noise and only use data above/below
n
-sigma above the noise. The noise will be estimated from the data unless the noise is specified withnoise_estimate
- noise_estimate: float or None
Guess for the noise value. Only matters if
nsigcut
is specified.- vheight : bool
Include an estimate of the background level?
Returns: - (height, amplitude, x, width_x)
- height : float
is the background level
- amplitude : float
is the maximum (or minimum) of the data after background subtraction
- x : float
is the first moment
- width_x : float
is the second moment
-
parse_hdf5_header
(hdr) [github] [bitbucket]¶ HDF5 reader will create a hdr dictionary from HDF5 dataset attributes if they exist. This routine will convert that dict to a pyfits header instance.
-
parse_header
(hdr, specname=None) [github] [bitbucket]¶ Parse parameters from a .fits header into required spectrum structure parameters
-
parse_text_header
(Table) [github] [bitbucket]¶ Grab relevant parameters from a table header (xaxis type, etc)
This function should only exist for Spectrum objects created from .txt or other atpy table type objects
-
shape
¶ Return the data shape (a property of the Spectrum)
-
slice
(start=None, stop=None, unit='pixel', copy=True, xcopy=True, preserve_fits=False) [github] [bitbucket]¶ Slicing the spectrum
Warning
this is the same as cropping right now, but it returns a copy instead of cropping inplace
Parameters: - start : numpy.float or int or astropy quantity
start of slice
- stop : numpy.float or int or astropy quantity
stop of slice
- unit : str
allowed values are any supported physical unit, ‘pixel’
- copy : bool
Return a ‘view’ of the data or a copy?
- preserve_fits : bool
Save the fitted parameters from self.fitter?
-
smooth
(smooth, downsample=True, **kwargs) [github] [bitbucket]¶ Smooth and downsample the data array. NaN data points will be replaced with interpolated values
Parameters: - smooth : float
Number of pixels to smooth by
- smoothtype : [ ‘gaussian’,’hanning’, or ‘boxcar’ ]
type of smoothing kernel to use
- downsample : bool
Downsample the data?
- downsample_factor : int
Downsample by the smoothing factor, or something else?
- convmode : [ ‘full’,’valid’,’same’ ]
see
numpy.convolve
. ‘same’ returns an array of the same length as ‘data’ (assuming data is larger than the kernel)
-
stats
(statrange=(), interactive=False) [github] [bitbucket]¶ Return some statistical measures in a dictionary (somewhat self-explanatory)
Parameters: - statrange : 2-element tuple
X-range over which to perform measures
- interactive : bool
specify range interactively in plotter
-
unit
¶
-
units
¶
-
write
(filename, type=None, **kwargs) [github] [bitbucket]¶ Write the spectrum to a file. The available file types are listed in spectrum.writers.writers
type - what type of file to write to? If not specified, will attempt to determine type from suffix
-
class
pyspeckit.spectrum.classes.
Spectra
(speclist, xunit=None, model_registry=None, **kwargs)[source] [github] [bitbucket]¶ Bases:
pyspeckit.spectrum.classes.BaseSpectrum
A list of individual Spectrum objects. Intended to be used for concatenating different wavelength observations of the SAME OBJECT. Can be operated on just like any Spectrum object, incuding fitting. Useful for fitting multiple lines on non-continguous axes simultaneously. Be wary of plotting these though…
Can be indexed like python lists.
X array is forcibly sorted in increasing order
-
fiteach
(**kwargs)[source] [github] [bitbucket]¶ Fit each spectrum within the Spectra object
-
classmethod
from_spectrum1d_list
(lst)[source] [github] [bitbucket]¶ Tool to load a collection of pyspeckit Spectra from a specutils list of Spectrum1D objects
Examples
>>> # grab many spectra from a multiextension FITS file >>> spectra = specutils.io.fits.read_fits_spectrum1d('AAO.fits') >>> sp = pyspeckit.Spectrum.from_spectrum1d_list(spectra)
-
ploteach
(xunit=None, inherit_fit=False, plot_fit=True, plotfitkwargs={}, **plotkwargs)[source] [github] [bitbucket]¶ Plot each spectrum in its own window inherit_fit - if specified, will grab the fitter & fitter properties from Spectra
-
smooth
(smooth, **kwargs)[source] [github] [bitbucket]¶ Smooth the spectrum by factor “smooth”. Options are defined in sm.smooth
because ‘Spectra’ does not have a header attribute, don’t do anything to it…
-
-
class
pyspeckit.spectrum.classes.
ObsBlock
(speclist, xtype='frequency', xarr=None, force=False, model_registry=None, **kwargs)[source] [github] [bitbucket]¶ Bases:
pyspeckit.spectrum.classes.Spectra
An Observation Block
Consists of multiple spectra with a shared X-axis. Intended to hold groups of observations of the same object in the same setup for later averaging.
ObsBlocks can be indexed like python lists.
-
average
(weight=None, inverse_weight=False, error='erravgrtn', debug=False)[source] [github] [bitbucket]¶ Average all scans in an ObsBlock. Returns a single Spectrum object
Parameters: - weight : string
a header keyword to weight by. If not specified, the spectra will be averaged without weighting
- inverse_weight : bool
Is the header keyword an inverse-weight (e.g., a variance?)
- error : [‘scanrms’,’erravg’,’erravgrtn’]
estimate the error spectrum by one of three methods. ‘scanrms’ : the standard deviation of each pixel across all scans ‘erravg’ : the average of all input error spectra ‘erravgrtn’ : the average of all input error spectra divided by sqrt(n_obs)
-
smooth
(smooth, **kwargs)[source] [github] [bitbucket]¶ Smooth the spectrum by factor “smooth”. Options are defined in sm.smooth
-
-
pyspeckit.spectrum.
register_reader
(filetype, function, suffix, default=False)[source] [github] [bitbucket]¶ Register a reader function.
Parameters: - filetype: str
The file type name
- function: function
The reader function. Should take a filename as input and return an X-axis object (see units.py), a spectrum, an error spectrum (initialize it to 0’s if empty), and a pyfits header instance
- suffix: int
What suffix should the file have?
-
pyspeckit.spectrum.
register_writer
(filetype, function, suffix, default=False)[source] [github] [bitbucket]¶ Register a writer function.
Parameters: - filetype: string
The file type name
- function: function
The writer function. Will be an attribute of Spectrum object, and called as spectrum.Spectrum.write_hdf5(), for example.
- suffix: int
What suffix should the file have?