TableModel¶
-
class
gammapy.spectrum.models.
TableModel
(energy, values, norm=1, values_scale='log', interp_kwargs=None, meta=None)[source]¶ Bases:
gammapy.spectrum.models.SpectralModel
A model generated from a table of energy and value arrays.
the units returned will be the units of the values array provided at initialization. The model will return values interpolated in log-space, returning 0 for energies outside of the limits of the provided energy array.
Class implementation follows closely what has been done in
naima.models.TableModel
Parameters: - energy :
Quantity
array Array of energies at which the model values are given
- values : array
Array with the values of the model at energies
energy
.- norm : float
Model scale that is multiplied to the supplied arrays. Defaults to 1.
- values_scale : {‘log’, ‘lin’, ‘sqrt’}
Interpolation scaling applied to values. If the values vary over many magnitudes a ‘log’ scaling is recommended.
- interp_kwargs : dict
Interpolation keyword arguments pass to
scipy.interpolate.interp1d
. By default all values outside the interpolation range are set to zero. If you want to apply linear extrapolation you can passinterp_kwargs={'fill_value': 'extrapolate', 'kind': 'linear'}
- meta : dict, optional
Meta information, meta[‘filename’] will be used for serialization
Attributes Summary
energy
meta
norm
parameters
Parameters ( Parameters
)values
Methods Summary
__call__
(self, energy)Call self as a function. copy
(self)A deep copy. energy_flux
(self, emin, emax, \*\*kwargs)Compute energy flux in given energy range. energy_flux_error
(self, emin, emax, \*\*kwargs)Compute energy flux in given energy range with error propagation. evaluate
(self, energy, norm)Evaluate the model (static function). evaluate_error
(self, energy)Evaluate spectral model with error propagation. from_dict
(data)Create from dict. integral
(self, emin, emax, \*\*kwargs)Integrate spectral model numerically. integral_error
(self, emin, emax, \*\*kwargs)Integrate spectral model numerically with error propagation. inverse
(self, value[, emin, emax])Return energy for a given function value of the spectral model. plot
(self, energy_range[, ax, energy_unit, …])Plot spectral model curve. plot_error
(self, energy_range[, ax, …])Plot spectral model error band. read_fermi_isotropic_model
(filename, \*\*kwargs)Read Fermi isotropic diffuse model. read_xspec_model
(filename, param, \*\*kwargs)Read XSPEC table model. spectral_index
(self, energy[, epsilon])Compute spectral index at given energy. to_dict
(self[, selection])Attributes Documentation
-
energy
¶
-
meta
¶
-
norm
¶
-
parameters
¶ Parameters (
Parameters
)
-
values
¶
Methods Documentation
-
__call__
(self, energy)¶ Call self as a function.
-
copy
(self)¶ A deep copy.
-
energy_flux
(self, emin, emax, **kwargs)¶ Compute energy flux in given energy range.
\[G(E_{min}, E_{max}) = \int_{E_{min}}^{E_{max}} E \phi(E) dE\]Parameters: - emin, emax :
Quantity
Lower and upper bound of integration range.
- **kwargs : dict
Keyword arguments passed to func:
integrate_spectrum
- emin, emax :
-
energy_flux_error
(self, emin, emax, **kwargs)¶ Compute energy flux in given energy range with error propagation.
\[G(E_{min}, E_{max}) = \int_{E_{min}}^{E_{max}} E \phi(E) dE\]Parameters: - emin, emax :
Quantity
Lower bound of integration range.
- **kwargs : dict
Keyword arguments passed to
integrate_spectrum()
Returns: - energy_flux, energy_flux_error : tuple of
Quantity
Tuple of energy flux and energy flux error.
- emin, emax :
-
evaluate_error
(self, energy)¶ Evaluate spectral model with error propagation.
Parameters: - energy :
Quantity
Energy at which to evaluate
Returns: - flux, flux_error : tuple of
Quantity
Tuple of flux and flux error.
- energy :
-
classmethod
from_dict
(data)¶ Create from dict.
-
integral
(self, emin, emax, **kwargs)¶ Integrate spectral model numerically.
\[F(E_{min}, E_{max}) = \int_{E_{min}}^{E_{max}} \phi(E) dE\]If array input for
emin
andemax
is given you have to setintervals=True
if you want the integral in each energy bin.Parameters: - emin, emax :
Quantity
Lower and upper bound of integration range.
- **kwargs : dict
Keyword arguments passed to
integrate_spectrum()
- emin, emax :
-
integral_error
(self, emin, emax, **kwargs)¶ Integrate spectral model numerically with error propagation.
Parameters: - emin, emax :
Quantity
Lower adn upper bound of integration range.
- **kwargs : dict
Keyword arguments passed to func:
integrate_spectrum
Returns: - integral, integral_error : tuple of
Quantity
Tuple of integral flux and integral flux error.
- emin, emax :
-
inverse
(self, value, emin=<Quantity 0.1 TeV>, emax=<Quantity 100. TeV>)¶ Return energy for a given function value of the spectral model.
Calls the
scipy.optimize.brentq
numerical root finding method.Parameters: Returns: - energy :
Quantity
Energies at which the model has the given
value
.
- energy :
-
plot
(self, energy_range, ax=None, energy_unit='TeV', flux_unit='cm-2 s-1 TeV-1', energy_power=0, n_points=100, **kwargs)¶ Plot spectral model curve.
kwargs are forwarded to
matplotlib.pyplot.plot
By default a log-log scaling of the axes is used, if you want to change the y axis scaling to linear you can use:
from gammapy.spectrum.models import ExponentialCutoffPowerLaw from astropy import units as u pwl = ExponentialCutoffPowerLaw() ax = pwl.plot(energy_range=(0.1, 100) * u.TeV) ax.set_yscale('linear')
Parameters: Returns: - ax :
Axes
, optional Axis
- ax :
-
plot_error
(self, energy_range, ax=None, energy_unit='TeV', flux_unit='cm-2 s-1 TeV-1', energy_power=0, n_points=100, **kwargs)¶ Plot spectral model error band.
Note
This method calls
ax.set_yscale("log", nonposy='clip')
andax.set_xscale("log", nonposx='clip')
to create a log-log representation. The additional argumentnonposx='clip'
avoids artefacts in the plot, when the error band extends to negative values (see also https://github.com/matplotlib/matplotlib/issues/8623).When you call
plt.loglog()
orplt.semilogy()
explicitely in your plotting code and the error band extends to negative values, it is not shown correctly. To circumvent this issue also useplt.loglog(nonposx='clip', nonposy='clip')
orplt.semilogy(nonposy='clip')
.Parameters: - ax :
Axes
, optional Axis
- energy_range :
Quantity
Plot range
- energy_unit : str,
Unit
, optional Unit of the energy axis
- flux_unit : str,
Unit
, optional Unit of the flux axis
- energy_power : int, optional
Power of energy to multiply flux axis with
- n_points : int, optional
Number of evaluation nodes
- **kwargs : dict
Keyword arguments forwarded to
matplotlib.pyplot.fill_between
Returns: - ax :
Axes
, optional Axis
- ax :
-
classmethod
read_fermi_isotropic_model
(filename, **kwargs)[source]¶ Read Fermi isotropic diffuse model.
Parameters: - filename : str
filename
-
classmethod
read_xspec_model
(filename, param, **kwargs)[source]¶ Read XSPEC table model.
The input is a table containing absorbed values from a XSPEC model as a function of energy.
TODO: Format of the file should be described and discussed in https://gamma-astro-data-formats.readthedocs.io/en/latest/index.html
Parameters: - filename : str
File containing the XSPEC model
- param : float
Model parameter value
Examples
Fill table from an EBL model (Franceschini, 2008)
>>> from gammapy.spectrum.models import TableModel >>> filename = '$GAMMAPY_DATA/ebl/ebl_franceschini.fits.gz' >>> table_model = TableModel.read_xspec_model(filename=filename, param=0.3)
- energy :