NaimaSpectralModel

class gammapy.modeling.models.NaimaSpectralModel(radiative_model, distance=<Quantity 1. kpc>, seed=None, nested_models=None)[source]

Bases: gammapy.modeling.models.SpectralModel

A wrapper for Naima models.

For more information see Naima Spectral Model.

Parameters
radiative_modelBaseRadiative

An instance of a radiative model defined in models

distanceQuantity, optional

Distance to the source. If set to 0, the intrinsic differential luminosity will be returned. Default is 1 kpc

seedstr or list of str, optional

Seed photon field(s) to be considered for the radiative_model flux computation, in case of a InverseCompton model. It can be a subset of the seed_photon_fields list defining the radiative_model. Default is the whole list of photon fields

nested_modelsdict

Additionnal parameters for nested models not supplied by the radiative model, for now this is used only for synchrotron self-compton model

Attributes Summary

covariance

default_parameters

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.

create(tag[, model_type])

Create a model instance.

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, **kwargs)

Evaluate the model.

evaluate_error(energy[, epsilon])

Evaluate spectral model with error propagation.

from_dict(data)

from_parameters(parameters, **kwargs)

Create model from parameter list

integral(energy_min, energy_max, **kwargs)

Integrate spectral model numerically if no analytical solution defined.

integral_error(energy_min, energy_max)

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.

plot(energy_range[, ax, energy_unit, …])

Plot spectral model curve.

plot_error(energy_range[, ax, energy_unit, …])

Plot spectral model error band.

spectral_index(energy[, epsilon])

Compute spectral index at given energy.

to_dict([full_output])

Create dict for YAML serialisation

Attributes Documentation

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

Whether model is a norm spectral model

parameters

Parameters (Parameters)

tag = ['NaimaSpectralModel', 'naima']
type

Methods Documentation

__call__(energy)

Call self as a function.

copy()

A deep copy.

static create(tag, model_type=None, *args, **kwargs)

Create a model instance.

Examples

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

Returns
energy_flux, energy_flux_errtuple of Quantity

Energy flux and energy flux error betwen energy_min and energy_max.

evaluate(energy, **kwargs)[source]

Evaluate the model.

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.

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

Create model from parameter list

Parameters
parametersParameters

Parameters for init

Returns
modelModel

Model instance

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)

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.

Returns
flux, flux_errtuple of Quantity

Integral flux and flux error betwen 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 bracket value in case solution is not unique.

energy_maxQuantity

Upper bracket value in case solution is not unique.

Returns
energyQuantity

Energies at which the model has the given value.

plot(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(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

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=True)[source]

Create dict for YAML serialisation