Spectrum — Spectral line data container.¶
This module defines the Spectrum class.
-
class
admit.util.Spectrum.
Spectrum
(spec=None, freq=None, chans=None, contin=None, noise=None, mask=[False])[source]¶ Class for holding a spectrum. It holds entries for the spectrum, frequency axis, channel axis, vlsr, and rest_frequency. A mask is also available to mask bad data points. The mask is common to all axes.
A spectrum needs to hold at least 2 channels.
Parameters: spec : array like
The spectrum.
freq : array like
The frequency axis, one entry per spectral point.
chans : array like
The channel axis, one entry per spectral point.
contin : array like or float
The continuum for each channel, or for all channels if it is an int.
noise : float
The rms noise of the spectrum.
mask : array like or bool
The mask for the spectrum, one entry per spectral point or a single boolean value, Defaults to all good.
Methods
calcdelta
()centerfreq
()chans
([masked])Method to get the channel axis, the mask is optionally returned contin
([masked])Method to get the continuum, the mask is optionally returned delta
()fix_invalid
([mask_value])Method to replace invalid spectral data with a specific value and mask it. freq
([masked])Method to get the frequency axis, the mask is optionally returned freqdispersion
([chanrange])Compute the frequency dispersion of the spectrum in the given channel range. fwhm
([chanrange])Compute the full-width at half-maximum velocity (km/s). getchan
(frq)Method to get the channel number given the frequency getchanindex
(chan)getfreq
(chan)Method to get the frequency of the given channel, the channel can contain a fraction of a channel (e.g. integritycheck
()Method to check that all axes are the same length. invert
()Multiply this spectrum and continuum by -1 mask
()Method to return the mask as a numpy array mask_between
(limit1, limit2[, axis])Method to mask any data bewteen the the given values. mask_equal
(value[, axis])Method to mask data equal to the given value. mask_ge
(limit[, axis])Method to mask any data less than or equal to the given value. mask_gt
(limit[, axis])Method to mask any data greater than the given value. mask_invalid
()Method to mask all invalid spectral data. mask_le
(limit[, axis])Method to mask any data less than or erqual to the given value. mask_lt
(limit[, axis])Method to mask any data less than the given value. mask_outside
(limit1, limit2[, axis])Method to mask any data less than or greater than the given values. meanfrequency
([chanrange])Compute the power-weighted mean frequency of this spectrum, aka the first moment. meanvelocity
([chanrange])Compute the power-weighted mean velocity of this spectrum. moment
([chanrange, p])Compute the power-weighted moment of a spectrum If a mask exists, this function operates on the masked spectrum. momenta
([chanrange, p])abs(intensity)-weighted moment momenti
([chanrange, p])Intensity-weighted moment noise
()Method to return the noise of the spectrum. peak
([chanrange])Return the peak intensity in the given channel range If a mask exists, this function operates on the masked spectrum. rms
()If the noise has been set, return the noise, otherwise compute and return the root-mean-square value of the spectrum. set_chans
(chans)Method to set the channel axis. set_contin
(contin)Method to set the continuum. set_freq
(freq)Method to set the frequency axis. set_mask
(mask)Method to set the mask item set_noise
(noise)Method to set the noise value for the spectrum. set_spec
(spec[, mask])Method to set the spectrum, an optionally the mask. spec
([csub, masked])Method to get the spectrum, the mask is optionally returned veldispersion
([chanrange])Compute the velocity dispersion (km/s) of the spectrum in the given channel range. -
chans
(masked=True)[source]¶ Method to get the channel axis, the mask is optionally returned
Parameters: masked : bool
If True then return the channel axis as a masked array with the current mask applied. False will return a numpy array with no masking done.
Returns: Array like object containing the channel axis
-
contin
(masked=True)[source]¶ Method to get the continuum, the mask is optionally returned
Parameters: masked : bool
If True then return the continuum as a masked array with the current mask applied. False will return a numpy array with no masking done.
Returns: Array like object containing the continuum
-
fix_invalid
(mask_value=0.0)[source]¶ Method to replace invalid spectral data with a specific value and mask it. Invalid values are: NaN, Inf, -Inf
Parameters: mask_value : float
The value to replace the invalid data with. Default: 0.0
Returns: None
-
freq
(masked=True)[source]¶ Method to get the frequency axis, the mask is optionally returned
Parameters: masked : bool
If True then return the frequency axis as a masked array with the current mask applied. False will return a numpy array with no masking done.
Returns: Array like object containing the frequency axis
-
freqdispersion
(chanrange=None)[source]¶ Compute the frequency dispersion of the spectrum in the given channel range. If a mask exists, this function operates on the masked spectrum.
Parameters: chanrange: range of channels over which to compute dispersion
[startchan, endchan]
Returns: Power-weighted frequency dispersion df as computed by
df = sqrt(mom2)
where mom2 is the 2nd moment as computed by the moment() method.
-
fwhm
(chanrange=None)[source]¶ Compute the full-width at half-maximum velocity (km/s). If a mask exists, this function operates on the masked spectrum.
Parameters: chanrange: range of channels over which to compute dispersion
[startchan, endchan]
Returns: fwhm computed by
fwhm = dv * sqrt(8*ln(2))
where dv is the velocity dispersion computered by
the veldispersion() method.
-
getchan
(frq)[source]¶ Method to get the channel number given the frequency
Parameters: frq : float
The frequency whose channel number is to be found
Returns: int containing the channel number, will be 0 or len(self.x)-1 if
the frequency is outside of the frequency range in the class
-
getfreq
(chan)[source]¶ Method to get the frequency of the given channel, the channel can contain a fraction of a channel (e.g. 1.45)
Parameters: chan : float
The channel to convert
Returns: Float of the frequency corresponding to the channel
-
integritycheck
()[source]¶ Method to check that all axes are the same length. Axes that have no data are ignored.
Parameters: None Returns: Bool, True if all match, False if there is an inconsistency
-
mask
()[source]¶ Method to return the mask as a numpy array
Parameters: None Returns: Array like object containing the mask
-
mask_between
(limit1, limit2, axis='spec')[source]¶ Method to mask any data bewteen the the given values. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: limit1 : float or int
The value above which all data of the given axis will be masked.
limit2 : float or int
The value below which all data of the given axis will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
mask_equal
(value, axis='spec')[source]¶ Method to mask data equal to the given value. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: value : float or int
The value equal to which all data of the given axis will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
mask_ge
(limit, axis='spec')[source]¶ Method to mask any data less than or equal to the given value. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: limit : float or int
The value which all data, of the given axis, greater than or equal to, will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
mask_gt
(limit, axis='spec')[source]¶ Method to mask any data greater than the given value. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: limit : float or int
The value above which all data of the given axis will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
mask_invalid
()[source]¶ Method to mask all invalid spectral data. Invalid values are: NaN, Inf, -Inf
Parameters: None Returns: None
-
mask_le
(limit, axis='spec')[source]¶ Method to mask any data less than or erqual to the given value. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: limit : float or int
The value which all data, of the given axis, less than or equal to, will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
mask_lt
(limit, axis='spec')[source]¶ Method to mask any data less than the given value. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: limit : float or int
The value below which all data of the given axis will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
mask_outside
(limit1, limit2, axis='spec')[source]¶ Method to mask any data less than or greater than the given values. Any axis can be used (“spec”, “freq”, “chans”) as the basis for the masking.
Parameters: limit1 : float or int
The value below which all data of the given axis will be masked.
limit2 : float or int
The value above which all data of the given axis will be masked.
axis : str
The axis which is used to determine the flags. Default: “spec”
Returns: None
-
meanfrequency
(chanrange=None)[source]¶ Compute the power-weighted mean frequency of this spectrum, aka the first moment. If a channel range is given, the mean frequency is computed over that channel range, otherwise over the entire spectrum. If a mask exists, this function operates on the masked spectrum.
Parameters: chanrange: range of channels over which to compute frequency
[startchan, endchan]
Returns: Power-weighted mean frequency as computed by
f_mean = Sum(spec[i]**2*f[i]])/Sum(spec[i]**2)
where spec[i] is the intensity at channel i and f[i] is
the frequency at channel i.
-
meanvelocity
(chanrange=None)[source]¶ Compute the power-weighted mean velocity of this spectrum. derived from the mean frequency and channel width:
mean_v = C * delta()/meanfrequency(chanrange)
-
moment
(chanrange=None, p=1)[source]¶ Compute the power-weighted moment of a spectrum If a mask exists, this function operates on the masked spectrum.
f_mean = Sum(spec[i]**2*(f[i]-mom{p-1})^p])/Sum(spec[i]**2)where spec[i] is the intensity at channel i (spec[i]**2 is he power) and f[i] is the frequency at channel i, p is the moment power, and mom{p-1} is the p-1-th moment [for p >1].
Parameters: chanrange: range of channels over which to compute moment
[startchan, endchan]
p: the moment to compute (the power of the frequency in the sum)
Returns:
The computed moment
-
momenta
(chanrange=None, p=1)[source]¶ abs(intensity)-weighted moment Does somewhat better than signed intensity-weighted moment.
Parameters: chanrange: range of channels over which to compute moment
[startchan, endchan]
p: the moment to compute (the power of the frequency in the sum)
Returns:
The computed moment
-
momenti
(chanrange=None, p=1)[source]¶ Intensity-weighted moment Note this moment does poorly for very narrow line segments where some channels may be negative.”
Parameters: chanrange: range of channels over which to compute moment
[startchan, endchan]
p: the moment to compute (the power of the frequency in the sum)
Returns:
The computed moment
-
noise
()[source]¶ Method to return the noise of the spectrum.
Parameters: None Returns: Float of the rms noise.
-
peak
(chanrange=None)[source]¶ Return the peak intensity in the given channel range If a mask exists, this function operates on the masked spectrum.
Parameters: chanrange: range of channels over which to compute dispersion
[startchan, endchan]
Returns: Maximum of the absolute value of the spectrum in the channel range
max(abs(spectrum[startchan:endchan]))
-
rms
()[source]¶ If the noise has been set, return the noise, otherwise compute and return the root-mean-square value of the spectrum.
-
set_chans
(chans)[source]¶ Method to set the channel axis.
Parameters: chans : array like
The channel axis to use
Returns: None
-
set_contin
(contin)[source]¶ Method to set the continuum.
Parameters: freq : array like
The continuum to use
Returns: None
-
set_freq
(freq)[source]¶ Method to set the frequency axis.
Parameters: freq : array like
The frequency axis to use
Returns: None
-
set_mask
(mask)[source]¶ Method to set the mask item
Parameters: mask : array like or bool
The mask to use, must be equal in dimmension to the spectral axis, or a single boolean value which is applied to all data.
Returns: None
-
set_noise
(noise)[source]¶ Method to set the noise value for the spectrum.
Parameters: noise : float
The noise of the spectrum
Returns: None
-
set_spec
(spec, mask=None)[source]¶ Method to set the spectrum, an optionally the mask.
Parameters: spec : array like
The spectrum to set
mask : array like or single bool
The mask to apply to the spectrum. Default: None (no mask)
Returns: None
-
spec
(csub=True, masked=True)[source]¶ Method to get the spectrum, the mask is optionally returned
Parameters: csub : bool
If True return the spectrum with the continuum subtracted, False will return the pure spectrum Default: True
masked : bool
If True then return the spectrum as a masked array with the current mask applied. False will return a numpy array with no masking done. Default: True
Returns: Array like object containing the spectrum
-
veldispersion
(chanrange=None)[source]¶ Compute the velocity dispersion (km/s) of the spectrum in the given channel range. If a mask exists, this function operates on the masked spectrum.
Parameters: chanrange: range of channels over which to compute dispersion
[startchan, endchan]
Returns: Power-weighted velocity dv as computed by
dv = C * df/mf
where df is the frequency dispersion computered by
the frequencydispersion() method,
mf is the mean frequency from the meanfrequency() method,
and C is the speed of light.
-