TemplateSpectralModel

class gammapy.modeling.models.TemplateSpectralModel(energy, values, interp_kwargs=None, meta=None)[source]

Bases: gammapy.modeling.models.SpectralModel

A model generated from a table of energy and value arrays.

For more information see Template spectral model.

Parameters
energyQuantity

Array of energies at which the model values are given

valuesarray

Array with the values of the model at energies energy.

interp_kwargsdict

Interpolation keyword arguments passed to scipy.interpolate.RegularGridInterpolator. 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

covariance

default_parameters

frozen

Frozen status of a model, True if all parameters are frozen

is_norm_spectral_model

Whether model is a norm spectral model

parameters

Parameters (Parameters)

tag

type

Methods Summary

__call__(energy)

Call self as a function.

copy()

A deep copy.

energy_flux(energy_min, energy_max, **kwargs)

Compute energy flux in given energy range.

energy_flux_error(energy_min, energy_max[, …])

Evaluate the error of the energy flux of a given spectrum in

evaluate(energy)

Evaluate the model (static function).

evaluate_error(energy[, epsilon])

Evaluate spectral model with error propagation.

freeze()

Freeze all parameters

from_dict(data)

from_parameters(parameters, **kwargs)

Create model from parameter list

from_region_map(map, **kwargs)

Create model from region map

integral(energy_min, energy_max, **kwargs)

Integrate spectral model numerically if no analytical solution defined.

integral_error(energy_min, energy_max[, epsilon])

Evaluate the error of the integral flux of a given spectrum in a given energy range.

inverse(value[, energy_min, energy_max])

Return energy for a given function value of the spectral model.

inverse_all(values[, energy_min, energy_max])

Return energies for multiple function values of the spectral model.

plot(energy_bounds[, ax, sed_type, …])

Plot spectral model curve.

plot_error(energy_bounds[, ax, sed_type, …])

Plot spectral model error band.

read_xspec_model(filename, param, **kwargs)

Read XSPEC table model.

reassign(datasets_names, new_datasets_names)

Reassign a model from one dataset to another

reference_fluxes(energy_axis)

Get reference fluxes for a given energy axis.

spectral_index(energy[, epsilon])

Compute spectral index at given energy.

to_dict([full_output])

Create dict for YAML serialisation

unfreeze()

Restore parameters frozen status to default

Attributes Documentation

covariance
default_parameters = <gammapy.modeling.parameter.Parameters object>
frozen

Frozen status of a model, True if all parameters are frozen

is_norm_spectral_model

Whether model is a norm spectral model

parameters

Parameters (Parameters)

tag = ['TemplateSpectralModel', 'template']
type

Methods Documentation

__call__(energy)

Call self as a function.

copy()

A deep copy.

energy_flux(energy_min, energy_max, **kwargs)

Compute energy flux in given energy range.

\[G(E_{min}, E_{max}) = \int_{E_{min}}^{E_{max}} E \phi(E) dE\]
Parameters
energy_min, energy_maxQuantity

Lower and upper bound of integration range.

**kwargsdict

Keyword arguments passed to func:integrate_spectrum

energy_flux_error(energy_min, energy_max, epsilon=0.0001, **kwargs)
Evaluate the error of the energy flux of a given spectrum in

a given energy range.

Parameters
energy_min, energy_maxQuantity

Lower and upper bound of integration range.

epsilonfloat

Step size of the gradient evaluation. Given as a fraction of the parameter error.

Returns
energy_flux, energy_flux_errtuple of Quantity

Energy flux and energy flux error between energy_min and energy_max.

evaluate(energy)[source]

Evaluate the model (static function).

evaluate_error(energy, epsilon=0.0001)

Evaluate spectral model with error propagation.

Parameters
energyQuantity

Energy at which to evaluate

epsilonfloat

Step size of the gradient evaluation. Given as a fraction of the parameter error.

Returns
dnde, dnde_errortuple of Quantity

Tuple of flux and flux error.

freeze()

Freeze all parameters

classmethod from_dict(data)[source]
classmethod from_parameters(parameters, **kwargs)

Create model from parameter list

Parameters
parametersParameters

Parameters for init

Returns
modelModel

Model instance

classmethod from_region_map(map, **kwargs)[source]

Create model from region map

integral(energy_min, energy_max, **kwargs)

Integrate spectral model numerically if no analytical solution defined.

\[F(E_{min}, E_{max}) = \int_{E_{min}}^{E_{max}} \phi(E) dE\]
Parameters
energy_min, energy_maxQuantity

Lower and upper bound of integration range.

**kwargsdict

Keyword arguments passed to integrate_spectrum()

integral_error(energy_min, energy_max, epsilon=0.0001, **kwargs)

Evaluate the error of the integral flux of a given spectrum in a given energy range.

Parameters
energy_min, energy_maxQuantity

Lower and upper bound of integration range.

epsilonfloat

Step size of the gradient evaluation. Given as a fraction of the parameter error.

Returns
flux, flux_errtuple of Quantity

Integral flux and flux error between energy_min and energy_max.

inverse(value, energy_min=<Quantity 0.1 TeV>, energy_max=<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.

energy_minQuantity

Lower energy bound of the roots finding

energy_maxQuantity

Upper energy bound of the roots finding

Returns
energyQuantity

Energies at which the model has the given value.

inverse_all(values, energy_min=<Quantity 0.1 TeV>, energy_max=<Quantity 100. TeV>)

Return energies for multiple function values of the spectral model.

Calls the scipy.optimize.brentq numerical root finding method.

Parameters
valuesQuantity

Function values of the spectral model.

energy_minQuantity

Lower energy bound of the roots finding

energy_maxQuantity

Upper energy bound of the roots finding

Returns
energylist of Quantity

each element contain the energies at which the model has corresponding value of values.

plot(energy_bounds, ax=None, sed_type='dnde', 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_bounds=(0.1, 100) * u.TeV)
ax.set_yscale('linear')
Parameters
axAxes, optional

Axis

energy_boundsQuantity

Plot energy bounds passed to MapAxis.from_energy_bounds

sed_type{“dnde”, “flux”, “eflux”, “e2dnde”}

Evaluation methods of the model

energy_powerint, optional

Power of energy to multiply flux axis with

n_pointsint, optional

Number of evaluation nodes

**kwargsdict

Keyword arguments forwarded to plot

Returns
axAxes, optional

Axis

plot_error(energy_bounds, ax=None, sed_type='dnde', energy_power=0, n_points=100, **kwargs)

Plot spectral model error band.

Note

This method calls ax.set_yscale("log", nonpositive='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() explicitly 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', nonpositive='clip') or plt.semilogy(nonpositive='clip').

Parameters
axAxes, optional

Axis

energy_boundsQuantity

Plot energy bounds passed to MapAxis.from_energy_bounds

sed_type{“dnde”, “flux”, “eflux”, “e2dnde”}

Evaluation methods of the model

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)
reassign(datasets_names, new_datasets_names)

Reassign a model from one dataset to another

Parameters
datasets_namesstr or list

Name of the datasets where the model is currently defined

new_datasets_namesstr or list

Name of the datasets where the model should be defined instead. If multiple names are given the two list must have the save length, as the reassignment is element-wise.

Returns
modelModel

Reassigned model.

reference_fluxes(energy_axis)

Get reference fluxes for a given energy axis.

Parameters
energy_axisMapAxis

Energy axis

Returns
fluxesdict of Quantity

Reference fluxes

spectral_index(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(full_output=False)[source]

Create dict for YAML serialisation

unfreeze()

Restore parameters frozen status to default