DiskSpatialModel

class gammapy.modeling.models.DiskSpatialModel(lon_0, lat_0, r_0, e=0, phi='0 deg', edge='0.01 deg', frame='icrs')[source]

Bases: gammapy.modeling.models.SpatialModel

Constant disk model.

By default, the model is symmetric, i.e. a disk:

\[\begin{split}\phi(lon, lat) = \frac{1}{2 \pi (1 - \cos{r_0}) } \cdot \begin{cases} 1 & \text{for } \theta \leq r_0 \\ 0 & \text{for } \theta > r_0 \end{cases}\end{split}\]

where \(\theta\) is the sky separation. To improve fit convergence of the model, the sharp edges is smoothed using erf.

In case an eccentricity (e) and rotation angle (\(\phi\)) are passed, then the model is an elongated disk (i.e. an ellipse), with a major semiaxis of length \(r_0\) and position angle \(\phi\) (increaing counter-clockwise from the North direction).

The model is defined on the celestial sphere, with a normalization defined by:

\[\int_{4\pi}\phi(\text{lon}, \text{lat}) \,d\Omega = 1\,.\]
Parameters:
lon_0, lat_0 : Angle

Center position

r_0 : Angle

\(a\): length of the major semiaxis, in angular units.

e : float

Eccentricity of the ellipse (\(0< e< 1\)).

phi : Angle

Rotation angle \(\phi\): of the major semiaxis. Increases counter-clockwise from the North direction.

edge : Angle

Width of the edge. The width is defined as the range within the smooth edges of the model drops from 95% to 5% of its amplitude.

frame : {“icrs”, “galactic”}

Center position coordinate frame

Examples

import numpy as np
import matplotlib.pyplot as plt
from gammapy.maps import Map, WcsGeom
from gammapy.modeling.models import DiskSpatialModel

model = DiskSpatialModel("2 deg", "2 deg", "1 deg", 0.8, "30 deg", frame="galactic")

m_geom = WcsGeom.create(
    binsz=0.01, width=(3, 3), skydir=(2, 2), coordsys="GAL", proj="AIT"
)
coords = m_geom.get_coord()
vals = model(coords.lon, coords.lat)
skymap = Map.from_geom(m_geom, data=vals.value)

_, ax, _ = skymap.smooth("0.05 deg").plot()

transform = ax.get_transform("galactic")
ax.scatter(2, 2, transform=transform, s=20, edgecolor="red", facecolor="red")
ax.text(1.7, 1.85, r"$(l_0, b_0)$", transform=transform, ha="center")
ax.plot(
    [2, 2 + np.sin(np.pi / 6)],
    [2, 2 + np.cos(np.pi / 6)],
    color="r",
    transform=transform,
)
ax.vlines(x=2, color="r", linestyle="--", transform=transform, ymin=0, ymax=5)
ax.text(2.15, 2.3, r"$\phi$", transform=transform)

plt.show()

(png, hires.png, pdf)

../_images/gammapy-modeling-models-DiskSpatialModel-1.png

Attributes Summary

e
evaluation_radius Evaluation radius (Angle).
frame
lat_0
lon_0
parameters Parameters (Parameters)
phi
position Spatial model center position
r_0
tag

Methods Summary

__call__(self, lon, lat) Call evaluate method
copy(self) A deep copy.
create(tag, \*args, \*\*kwargs) Create a model instance.
evaluate(lon, lat, lon_0, lat_0, r_0, e, …) Evaluate model.
evaluate_geom(self, geom) Evaluate model on Geom.
from_dict(data)
to_dict(self)

Attributes Documentation

e
evaluation_radius

Evaluation radius (Angle).

Set to the length of the semi-major axis.

frame
lat_0
lon_0
parameters

Parameters (Parameters)

phi
position

Spatial model center position

r_0
tag = 'DiskSpatialModel'

Methods Documentation

__call__(self, lon, lat)

Call evaluate method

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
static evaluate(lon, lat, lon_0, lat_0, r_0, e, phi, edge)[source]

Evaluate model.

evaluate_geom(self, geom)

Evaluate model on Geom.

classmethod from_dict(data)
to_dict(self)