Ammonia Models¶
The Ammonia modeling tools include a set of constants in the
ammonia_constants
module and the following ammonia modeling tools
listed below.
There is also an ammonia fitter wrapper; see Wrappers.
Note that there are two modules described here: the multi-rotational-transition fitter, which has its own set of custom functions, and a generic hyperfine-line fitting module meant to fit a single metastable (or non-metastable) transition.
Ammonia inversion transition TROT fitter translated from Erik Rosolowsky’s http://svn.ok.ubc.ca/svn/signals/nh3fit/
Module API¶
-
pyspeckit.spectrum.models.ammonia.
ammonia
(xarr, trot=20, tex=None, ntot=14, width=1, xoff_v=0.0, fortho=0.0, tau=None, fillingfraction=None, return_tau=False, return_tau_profile=False, background_tb=2.7315, verbose=False, return_components=False, debug=False, line_names=['oneone', 'twotwo', 'threethree', 'fourfour', 'fivefive', 'sixsix', 'sevenseven', 'eighteight', 'ninenine'])[source] [github] [bitbucket]¶ Generate a model Ammonia spectrum based on input temperatures, column, and gaussian parameters
Parameters: - xarr: `pyspeckit.spectrum.units.SpectroscopicAxis`
Array of wavelength/frequency values
- trot: float
The rotational temperature of the lines. This is the excitation temperature that governs the relative populations of the rotational states.
- tex: float or None
Excitation temperature. Assumed LTE if unspecified (
None
) or if tex>trot. This is the excitation temperature for all of the modeled lines, which means we are explicitly assuming T_ex is the same for all lines.- ntot: float
Total log column density of NH3. Can be specified as a float in the range 5-25
- width: float
Line width in km/s
- xoff_v: float
Line offset in km/s
- fortho: float
Fraction of NH3 molecules in ortho state. Default assumes all para (fortho=0).
- tau: None or float
If tau (optical depth in the 1-1 line) is specified, ntot is NOT fit but is set to a fixed value. The optical depths of the other lines are fixed relative to tau_oneone
- fillingfraction: None or float
fillingfraction is an arbitrary scaling factor to apply to the model
- return_tau: bool
Return a dictionary of the optical depths in each line instead of a synthetic spectrum
- return_tau_profile: bool
Return a dictionary of the optical depth profiles in each line, i.e., the optical depths that will be used in conjunction with T_ex to produce the synthetic spectrum
- return_components: bool
Return a list of arrays, one for each hyperfine component, instead of just one array
- background_tb : float
The background brightness temperature. Defaults to TCMB.
- verbose: bool
More messages
- debug: bool
For debugging.
Returns: - spectrum: `numpy.ndarray`
Synthetic spectrum with same shape as
xarr
- component_list: list
List of
numpy.ndarray
’s, one for each hyperfine component- tau_dict: dict
Dictionary of optical depth values for the various lines (if
return_tau
is set)
-
class
pyspeckit.spectrum.models.ammonia.
ammonia_model
(npeaks=1, npars=6, parnames=['trot', 'tex', 'ntot', 'width', 'xoff_v', 'fortho'], **kwargs)[source] [github] [bitbucket]¶ - The basic Ammonia (NH3) model with 6 free parameters:
- Trot, Tex, ntot, width, xoff_v, and fortho
Trot is the rotational temperature. It governs the relative populations of the rotational states, i.e., the relative strength of different transitions
Tex is the excitation temperature. It is assumed constant across all states, which is not always a good assumption - a radiative transfer and excitation model is required to constrain this, though.
ntot is the total column density of p-NH3 integrated over all states.
width is the linewidth
xoff_v is the velocity offset / line of sight velocity
fortho is the ortho fraction (northo / (northo+npara))
-
annotations
()[source] [github] [bitbucket]¶ Return a list of TeX-formatted labels
The values and errors are formatted so that only the significant digits are displayed. Rounding is performed using the decimal package.
Parameters: - shortvarnames : list
A list of variable names (tex is allowed) to include in the annotations. Defaults to self.shortvarnames
Examples
>>> # Annotate a Gaussian >>> sp.specfit.annotate(shortvarnames=['A','\Delta x','\sigma'])
-
components
(xarr, pars, hyperfine=False, return_hyperfine_components=False, **kwargs)[source] [github] [bitbucket]¶ Ammonia components don’t follow the default, since in Galactic astronomy the hyperfine components should be well-separated. If you want to see the individual components overlaid, you’ll need to pass hyperfine to the plot_fit call
-
moments
(Xax, data, negamp=None, veryverbose=False, **kwargs)[source] [github] [bitbucket]¶ Returns a very simple and likely incorrect guess
-
multinh3fit
(xax, data, err=None, parinfo=None, quiet=True, shh=True, debug=False, maxiter=200, use_lmfit=False, veryverbose=False, **kwargs)[source] [github] [bitbucket]¶ Fit multiple nh3 profiles (multiple can be 1)
Parameters: - xax : array
x axis
- data : array
y axis
- npeaks : int
How many nh3 profiles to fit? Default 1 (this could supersede onedgaussfit)
- err : array
error corresponding to data
- params : list
Fit parameters: [trot, tex, ntot (or tau), width, offset, ortho fraction] * npeaks If len(params) % 6 == 0, npeaks will be set to len(params) / 6. These parameters (and the related fixed, limited, min/max, names below) need to have length = 6*npeaks. If npeaks > 1 and length = 6, they will be replicated npeaks times, otherwise they will be reset to defaults:
- fixed : list
Is parameter fixed?
- limitedmin : list
- minpars : list
set lower limits on each parameter (default: width>0, Tex and trot > Tcmb)
- limitedmax : list
- maxpars : list
set upper limits on each parameter
- parnames : list
default parameter names, important for setting kwargs in model [‘trot’,’tex’,’ntot’,’width’,’xoff_v’,’fortho’]
- quiet : bool
should MPFIT output each iteration?
- shh : bool
output final parameters?
Returns: - mpp : model parameter object
Fit parameters
- model : array
The model array
- errors : array
the fit errors
- chi2 : float
the chi^2 value of the fit
-
n_ammonia
(pars=None, parnames=None, **kwargs)[source] [github] [bitbucket]¶ Returns a function that sums over N ammonia line profiles, where N is the length of trot,tex,ntot,width,xoff_v,fortho OR N = len(pars) / 6
The background “height” is assumed to be zero (you must “baseline” your spectrum before fitting)
- pars [ list ]
- a list with len(pars) = (6-nfixed)n, assuming trot,tex,ntot,width,xoff_v,fortho repeated
- parnames [ list ]
- len(parnames) must = len(pars). parnames determine how the ammonia function parses the arguments
-
parse_3par_guesses
(guesses)[source] [github] [bitbucket]¶ Try to convert a set of interactive guesses (peak, center, width) into guesses appropriate to the model.
- For NH3 models, we add in several extra parameters:
- tex = 2.73 * peak trot = tex * 2 fortho = 0.5 ntot = 15
ntot is set to a constant ~10^15 because this results in optical depths near 1, so it forces the emission to be approximately significant. trot > tex so that we’re in a physical regime to begin with.
We assume tex = peak + 2.73 because most spectra are shown background-subtracted (single dish are always that way, interferometric data are intrinsically that way…) and otherwise the guessing will crash if you guess a number < 2.73.
-
class
pyspeckit.spectrum.models.ammonia.
ammonia_model_background
(**kwargs)[source] [github] [bitbucket]¶ -
moments
(Xax, data, negamp=None, veryverbose=False, **kwargs)[source] [github] [bitbucket]¶ Returns a very simple and likely incorrect guess
-
multinh3fit
(xax, data, npeaks=1, err=None, params=(20, 20, 14, 1.0, 0.0, 0.5, 2.7315), parnames=None, fixed=(False, False, False, False, False, False, True), limitedmin=(True, True, True, True, False, True, True), limitedmax=(False, False, False, False, False, True, True), minpars=(2.7315, 2.7315, 0, 0, 0, 0, 2.7315), parinfo=None, maxpars=(0, 0, 0, 0, 0, 1, 2.7315), tied=('', '', '', '', '', '', ''), quiet=True, shh=True, veryverbose=False, **kwargs)[source] [github] [bitbucket]¶ Fit multiple nh3 profiles (multiple can be 1)
Parameters: - xax : array
x axis
- data : array
y axis
- npeaks : int
How many nh3 profiles to fit? Default 1 (this could supersede onedgaussfit)
- err : array
error corresponding to data
- params : list
Fit parameters: [trot, tex, ntot (or tau), width, offset, ortho fraction] * npeaks If len(params) % 6 == 0, npeaks will be set to len(params) / 6. These parameters (and the related fixed, limited, min/max, names below) need to have length = 6*npeaks. If npeaks > 1 and length = 6, they will be replicated npeaks times, otherwise they will be reset to defaults:
- fixed : list
Is parameter fixed?
- limitedmin : list
- minpars : list
set lower limits on each parameter (default: width>0, Tex and trot > Tcmb)
- limitedmax : list
- maxpars : list
set upper limits on each parameter
- parnames : list
default parameter names, important for setting kwargs in model [‘trot’,’tex’,’ntot’,’width’,’xoff_v’,’fortho’]
- quiet : bool
should MPFIT output each iteration?
- shh : bool
output final parameters?
Returns: - mpp : model parameter object
Fit parameters
- model : array
The model array
- errors : array
the fit errors
- chi2 : float
the chi^2 value of the fit
-
-
class
pyspeckit.spectrum.models.ammonia.
ammonia_model_restricted_tex
(parnames=['trot', 'tex', 'ntot', 'width', 'xoff_v', 'fortho', 'delta'], **kwargs)[source] [github] [bitbucket]¶ -
make_parinfo
(params=(20, 20, 0.5, 1.0, 0.0, 0.5, 0), fixed=(False, False, False, False, False, False, False), limitedmin=(True, True, True, True, False, True, True), limitedmax=(False, False, False, False, False, True, False), minpars=(2.7315, 2.7315, 0, 0, 0, 0, 0), maxpars=(0, 0, 0, 0, 0, 1, 0), tied=('', 'p[0]-p[6]', '', '', '', '', ''), **kwargs)[source] [github] [bitbucket]¶ parnames=[‘trot’, ‘tex’, ‘ntot’, ‘width’, ‘xoff_v’, ‘fortho’, ‘delta’]
‘delta’ is the difference between tex and trot
-
n_ammonia
(pars=None, parnames=None, **kwargs)[source] [github] [bitbucket]¶ Returns a function that sums over N ammonia line profiles, where N is the length of trot,tex,ntot,width,xoff_v,fortho OR N = len(pars) / 6
The background “height” is assumed to be zero (you must “baseline” your spectrum before fitting)
- pars [ list ]
- a list with len(pars) = (6-nfixed)n, assuming trot,tex,ntot,width,xoff_v,fortho repeated
- parnames [ list ]
- len(parnames) must = len(pars). parnames determine how the ammonia function parses the arguments
-
-
class
pyspeckit.spectrum.models.ammonia.
ammonia_model_vtau
(parnames=['trot', 'tex', 'tau', 'width', 'xoff_v', 'fortho'], **kwargs)[source] [github] [bitbucket]¶ -
make_parinfo
(params=(20, 14, 0.5, 1.0, 0.0, 0.5), fixed=(False, False, False, False, False, False), limitedmin=(True, True, True, True, False, True), limitedmax=(False, False, False, False, False, True), minpars=(2.7315, 2.7315, 0, 0, 0, 0), maxpars=(0, 0, 0, 0, 0, 1), tied=('', '', '', '', '', ''), **kwargs)[source] [github] [bitbucket]¶ parnames=[‘trot’, ‘tex’, ‘tau’, ‘width’, ‘xoff_v’, ‘fortho’]
-
moments
(Xax, data, negamp=None, veryverbose=False, **kwargs)[source] [github] [bitbucket]¶ Returns a very simple and likely incorrect guess
-
-
class
pyspeckit.spectrum.models.ammonia.
ammonia_model_vtau_thin
(parnames=['tkin', 'tau', 'width', 'xoff_v', 'fortho'], **kwargs)[source] [github] [bitbucket]¶ -
make_parinfo
(params=(20, 14, 1.0, 0.0, 0.5), fixed=(False, False, False, False, False), limitedmin=(True, True, True, False, True), limitedmax=(False, False, False, False, True), minpars=(2.7315, 0, 0, 0, 0), maxpars=(0, 0, 0, 0, 1), tied=('', '', '', '', ''), **kwargs)[source] [github] [bitbucket]¶ parnames=[‘trot’, ‘tex’, ‘tau’, ‘width’, ‘xoff_v’, ‘fortho’]
-
moments
(Xax, data, negamp=None, veryverbose=False, **kwargs)[source] [github] [bitbucket]¶ Returns a very simple and likely incorrect guess
-
-
pyspeckit.spectrum.models.ammonia.
ammonia_thin
(xarr, tkin=20, tex=None, ntot=14, width=1, xoff_v=0.0, fortho=0.0, tau=None, return_tau=False, **kwargs)[source] [github] [bitbucket]¶ Use optical depth in the 1-1 line as a free parameter The optical depths of the other lines are then set by the kinetic temperature
tkin is used to compute trot assuming a 3-level system consisting of (1,1), (2,1), and (2,2) as in Swift et al, 2005 [2005ApJ…620..823S]
-
pyspeckit.spectrum.models.ammonia.
cold_ammonia
(xarr, tkin, **kwargs)[source] [github] [bitbucket]¶ Generate a model Ammonia spectrum based on input temperatures, column, and gaussian parameters
Parameters: - xarr: `pyspeckit.spectrum.units.SpectroscopicAxis`
Array of wavelength/frequency values
- tkin: float
The kinetic temperature of the lines in K. Will be converted to rotational temperature following the scheme of Swift et al 2005 (http://esoads.eso.org/abs/2005ApJ…620..823S, eqn A6) and further discussed in Equation 7 of Rosolowsky et al 2008 (http://adsabs.harvard.edu/abs/2008ApJS..175..509R)
-
class
pyspeckit.spectrum.models.ammonia.
cold_ammonia_model
(parnames=['tkin', 'tex', 'ntot', 'width', 'xoff_v', 'fortho'], **kwargs)[source] [github] [bitbucket]¶
Ammonia inversion transition: Hyperfine-only fitter¶
Module API¶
-
pyspeckit.spectrum.models.ammonia_hf.
nh3_vtau_multimodel_generator
(linenames)[source] [github] [bitbucket]¶ If you want to use multiple hyperfines for the same spectrum, use this generator. It is useful if you want N independent tau/tex values but the same velocity and linewidth
Parameters: - linenames : list
A list of line names from the set (‘oneone’, …, ‘eighteight’)
Returns: - model :
model.SpectralModel
A SpectralModel class build from N different metastable inversion hyperfine models