TemplateSpectralModel

class gammapy.modeling.models.TemplateSpectralModel(energy, values, norm=<Quantity 1.>, tilt=<Quantity 0.>, reference=<Quantity 1. TeV>, interp_kwargs=None, meta=None)[source]

Bases: gammapy.modeling.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.TemplateSpectralModel

Parameters:
energyQuantity

Array of energies at which the model values are given

valuesarray

Array with the values of the model at energies energy.

normfloat

Model scale that is multiplied to the supplied arrays. Defaults to 1.

interp_kwargsdict

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 pass interp_kwargs={'fill_value': 'extrapolate', 'kind': 'linear'}. If you want to choose the interpolation scaling applied to values, you can use interp_kwargs={"values_scale": "log"}.

metadict, optional

Meta information, meta[‘filename’] will be used for serialization

Attributes Summary

default_parameters
norm A model parameter.
parameters Parameters (Parameters)
reference A model parameter.
tag
tilt A model parameter.

Methods Summary

__call__(self, energy) Call self as a function.
copy(self) A deep copy.
create(tag, \*args, \*\*kwargs) Create a model instance.
energy_flux(self, emin, emax, \*\*kwargs) Compute energy flux in given energy range.
evaluate(self, energy, norm, tilt, reference) Evaluate the model (static function).
evaluate_error(self, energy) Evaluate spectral model with error propagation.
from_dict(data)
integral(self, emin, emax, \*\*kwargs) Integrate spectral model numerically.
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_xspec_model(filename, param, \*\*kwargs) Read XSPEC table model.
spectral_index(self, energy[, epsilon]) Compute spectral index at given energy.
to_dict(self) Create dict for YAML serialisation

Attributes Documentation

default_parameters = <gammapy.modeling.parameter.Parameters object>
norm

A model parameter.

Note that the parameter value has been split into a factor and scale like this:

value = factor x scale

Users should interact with the value, quantity or min and max properties and consider the fact that there is a factor` and scale an implementation detail.

That was introduced for numerical stability in parameter and error estimation methods, only in the Gammapy optimiser interface do we interact with the factor, factor_min and factor_max properties, i.e. the optimiser “sees” the well-scaled problem.

Parameters:
namestr

Name

factorfloat or Quantity

Factor

scalefloat, optional

Scale (sometimes used in fitting)

unitUnit or str, optional

Unit

minfloat, optional

Minimum (sometimes used in fitting)

maxfloat, optional

Maximum (sometimes used in fitting)

frozenbool, optional

Frozen? (used in fitting)

parameters

Parameters (Parameters)

reference

A model parameter.

Note that the parameter value has been split into a factor and scale like this:

value = factor x scale

Users should interact with the value, quantity or min and max properties and consider the fact that there is a factor` and scale an implementation detail.

That was introduced for numerical stability in parameter and error estimation methods, only in the Gammapy optimiser interface do we interact with the factor, factor_min and factor_max properties, i.e. the optimiser “sees” the well-scaled problem.

Parameters:
namestr

Name

factorfloat or Quantity

Factor

scalefloat, optional

Scale (sometimes used in fitting)

unitUnit or str, optional

Unit

minfloat, optional

Minimum (sometimes used in fitting)

maxfloat, optional

Maximum (sometimes used in fitting)

frozenbool, optional

Frozen? (used in fitting)

tag = 'TemplateSpectralModel'
tilt

A model parameter.

Note that the parameter value has been split into a factor and scale like this:

value = factor x scale

Users should interact with the value, quantity or min and max properties and consider the fact that there is a factor` and scale an implementation detail.

That was introduced for numerical stability in parameter and error estimation methods, only in the Gammapy optimiser interface do we interact with the factor, factor_min and factor_max properties, i.e. the optimiser “sees” the well-scaled problem.

Parameters:
namestr

Name

factorfloat or Quantity

Factor

scalefloat, optional

Scale (sometimes used in fitting)

unitUnit or str, optional

Unit

minfloat, optional

Minimum (sometimes used in fitting)

maxfloat, optional

Maximum (sometimes used in fitting)

frozenbool, optional

Frozen? (used in fitting)

Methods Documentation

__call__(self, energy)

Call self as a function.

copy(self)

A deep copy.

static create(tag, *args, **kwargs)

Create a model instance.

Examples

>>> from gammapy.modeling import Model
>>> spectral_model = Model.create("PowerLaw2SpectralModel", amplitude="1e-10 cm-2 s-1", index=3)
>>> type(spectral_model)
gammapy.modeling.models.spectral.PowerLaw2SpectralModel
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, emaxQuantity

Lower and upper bound of integration range.

**kwargsdict

Keyword arguments passed to func:integrate_spectrum

evaluate(self, energy, norm, tilt, reference)[source]

Evaluate the model (static function).

evaluate_error(self, energy)

Evaluate spectral model with error propagation.

Parameters:
energyQuantity

Energy at which to evaluate

Returns:
dnde, dnde_errortuple of Quantity

Tuple of flux and flux error.

classmethod from_dict(data)[source]
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 and emax is given you have to set intervals=True if you want the integral in each energy bin.

Parameters:
emin, emaxQuantity

Lower and upper bound of integration range.

**kwargsdict

Keyword arguments passed to integrate_spectrum()

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:
valueQuantity

Function value of the spectral model.

eminQuantity

Lower bracket value in case solution is not unique.

emaxQuantity

Upper bracket value in case solution is not unique.

Returns:
energyQuantity

Energies at which the model has the given value.

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.modeling.models import ExpCutoffPowerLawSpectralModel
from astropy import units as u

pwl = ExpCutoffPowerLawSpectralModel()
ax = pwl.plot(energy_range=(0.1, 100) * u.TeV)
ax.set_yscale('linear')
Parameters:
axAxes, optional

Axis

energy_rangeQuantity

Plot range

energy_unitstr, Unit, optional

Unit of the energy axis

flux_unitstr, Unit, optional

Unit of the flux axis

energy_powerint, optional

Power of energy to multiply flux axis with

n_pointsint, optional

Number of evaluation nodes

Returns:
axAxes, optional

Axis

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') and ax.set_xscale("log", nonposx='clip') to create a log-log representation. The additional argument nonposx='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() or plt.semilogy() explicitely in your plotting code and the error band extends to negative values, it is not shown correctly. To circumvent this issue also use plt.loglog(nonposx='clip', nonposy='clip') or plt.semilogy(nonposy='clip').

Parameters:
axAxes, optional

Axis

energy_rangeQuantity

Plot range

energy_unitstr, Unit, optional

Unit of the energy axis

flux_unitstr, Unit, optional

Unit of the flux axis

energy_powerint, optional

Power of energy to multiply flux axis with

n_pointsint, optional

Number of evaluation nodes

**kwargsdict

Keyword arguments forwarded to matplotlib.pyplot.fill_between

Returns:
axAxes, optional

Axis

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:
filenamestr

File containing the XSPEC model

paramfloat

Model parameter value

Examples

Fill table from an EBL model (Franceschini, 2008)

>>> from gammapy.modeling.models import TemplateSpectralModel
>>> filename = '$GAMMAPY_DATA/ebl/ebl_franceschini.fits.gz'
>>> table_model = TemplateSpectralModel.read_xspec_model(filename=filename, param=0.3)
spectral_index(self, energy, epsilon=1e-05)

Compute spectral index at given energy.

Parameters:
energyQuantity

Energy at which to estimate the index

epsilonfloat

Fractional energy increment to use for determining the spectral index.

Returns:
indexfloat

Estimated spectral index.

to_dict(self)[source]

Create dict for YAML serialisation