TemplateSpectralModel#

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

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

valuesndarray

Array with the values of the model at energies energy.

interp_kwargsdict

Interpolation option passed to ScaledRegularGridInterpolator. By default, all values outside the interpolation range are set to NaN. If you want to apply linear extrapolation you can pass interp_kwargs={'extrapolate': True, 'method': '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 serialisation.

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 as a Parameters object.

parameters_unique_names

pivot_energy

Pivot or decorrelation energy, for a given spectral model calculated numerically.

tag

type

Methods Summary

__call__(energy)

Call self as a function.

copy(**kwargs)

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 a given energy range.

evaluate(energy)

Evaluate the model (static function).

evaluate_error(energy[, epsilon])

Evaluate spectral model with error propagation.

freeze()

Freeze all parameters.

from_dict(data, **kwargs)

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.

spectral_index_error(energy[, epsilon])

Evaluate the error on spectral index at the given energy.

to_dict([full_output])

Create dictionary 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 as a Parameters object.

parameters_unique_names#
pivot_energy#

Pivot or decorrelation energy, for a given spectral model calculated numerically.

It is defined as the energy at which the correlation between the spectral parameters is minimized.

Returns:
pivot energyQuantity

The energy at which the statistical error in the computed flux is smallest. If no minimum is found, NaN will be returned.

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

Methods Documentation

__call__(energy)#

Call self as a function.

copy(**kwargs)#

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 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, optional

Step size of the gradient evaluation. Given as a fraction of the parameter error. Default is 1e-4.

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, optional

Step size of the gradient evaluation. Given as a fraction of the parameter error. Default is 1e-4.

Returns:
dnde, dnde_errortuple of Quantity

Tuple of flux and flux error.

freeze()#

Freeze all parameters.

classmethod from_dict(data, **kwargs)[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, optional

Step size of the gradient evaluation. Given as a fraction of the parameter error. Default is 1e-4.

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, optional

Lower energy bound of the roots finding. Default is 0.1 TeV.

energy_maxQuantity, optional

Upper energy bound of the roots finding. Default is 100 TeV.

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, optional

Lower energy bound of the roots finding. Default is 0.1 TeV.

energy_maxQuantity, optional

Upper energy bound of the roots finding. Default is 100 TeV.

Returns:
energylist of Quantity

Each element contains 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.

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:
energy_boundsQuantity, list of Quantity or MapAxis

Energy bounds between which the model is to be plotted. Or an axis defining the energy bounds between which the model is to be plotted.

axAxes, optional

Matplotlib axes. Default is None.

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

Evaluation methods of the model. Default is “dnde”.

energy_powerint, optional

Power of energy to multiply flux axis with. Default is 0.

n_pointsint, optional

Number of evaluation nodes. Default is 100.

**kwargsdict

Keyword arguments forwarded to plot.

Returns:
axAxes, optional

Matplotlib axes.

Notes

If energy_bounds is supplied as a list, tuple, or Quantity, an energy_axis is created internally with n_points bins between the given bounds.

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 matplotlib/matplotlib#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:
energy_boundsQuantity, list of Quantity or MapAxis

Energy bounds between which the model is to be plotted. Or an axis defining the energy bounds between which the model is to be plotted.

axAxes, optional

Matplotlib axes. Default is None.

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

Evaluation methods of the model. Default is “dnde”.

energy_powerint, optional

Power of energy to multiply flux axis with. Default is 0.

n_pointsint, optional

Number of evaluation nodes. Default is 100.

**kwargsdict

Keyword arguments forwarded to matplotlib.pyplot.fill_between.

Returns:
axAxes, optional

Matplotlib axes.

Notes

If energy_bounds is supplied as a list, tuple, or Quantity, an energy_axis is created internally with n_points bins between the given bounds.

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, optional

Fractional energy increment to use for determining the spectral index. Default is 1e-5.

Returns:
indexfloat

Estimated spectral index.

spectral_index_error(energy, epsilon=1e-05)#

Evaluate the error on spectral index at the given energy.

Parameters:
energyQuantity

Energy at which to estimate the index.

epsilonfloat, optional

Fractional energy increment to use for determining the spectral index. Default is 1e-5.

Returns:
index, index_errortuple of float

Estimated spectral index and its error.

to_dict(full_output=False)[source]#

Create dictionary for YAML serialisation.

unfreeze()#

Restore parameters frozen status to default.