EDispMap

class gammapy.cube.EDispMap(edisp_map, exposure_map)[source]

Bases: object

Energy dispersion map.

Parameters
edisp_mapMap

the input Energy Dispersion Map. Should be a Map with 2 non spatial axes. migra and true energy axes should be given in this specific order.

exposure_mapMap, optional

Associated exposure map. Needs to have a consistent map geometry.

Examples

import numpy as np
from astropy import units as u
from astropy.coordinates import SkyCoord
from gammapy.maps import WcsGeom, MapAxis
from gammapy.irf import EnergyDispersion2D, EffectiveAreaTable2D
from gammapy.cube import make_edisp_map, make_map_exposure_true_energy

# Define energy dispersion map geometry
energy_axis = MapAxis.from_edges(np.logspace(-1, 1, 4), unit="TeV", name="energy")
migra_axis = MapAxis.from_edges(np.linspace(0, 3, 100), name="migra")
pointing = SkyCoord(0, 0, unit="deg")
max_offset = 4 * u.deg
geom = WcsGeom.create(
    binsz=0.25 * u.deg,
    width=10 * u.deg,
    skydir=pointing,
    axes=[migra_axis, energy_axis],
)

# Extract EnergyDispersion2D from CTA 1DC IRF
filename = "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits"
edisp2D = EnergyDispersion2D.read(filename, hdu="ENERGY DISPERSION")
aeff2d = EffectiveAreaTable2D.read(filename, hdu="EFFECTIVE AREA")

# Create the exposure map
exposure_geom = geom.to_image().to_cube([energy_axis])
exposure_map = make_map_exposure_true_energy(pointing, "1 h", aeff2d, exposure_geom)

# create the EDispMap for the specified pointing
edisp_map = make_edisp_map(edisp2D, pointing, geom, max_offset, exposure_map)

# Get an Energy Dispersion (1D) at any position in the image
pos = SkyCoord(2.0, 2.5, unit="deg")
e_reco = np.logspace(-1.0, 1.0, 10) * u.TeV
edisp = edisp_map.get_energy_dispersion(pos=pos, e_reco=e_reco)

# Write map to disk
edisp_map.write("edisp_map.fits")

Methods Summary

copy(self)

Copy EDispMap

cutout(self, position, width[, mode])

Cutout edisp map.

from_diagonal_response(energy_axis_true[, …])

Create an allsky EDisp map with diagonal response.

from_geom(geom)

Create edisp map from geom.

from_hdulist(hdulist[, edisp_hdu, …])

Convert to HDUList.

get_energy_dispersion(self, position, e_reco)

Get energy dispersion at a given position.

read(filename, \*\*kwargs)

Read an edisp_map from file and create an EDispMap object

sample_coord(self, map_coord[, random_state])

Apply the energy dispersion corrections on the coordinates of a set of simulated events.

stack(self, other[, weights])

Stack EDispMap with another one in place.

to_hdulist(self[, edisp_hdu, …])

Convert to HDUList.

write(self, filename[, overwrite])

Write to fits

Methods Documentation

copy(self)[source]

Copy EDispMap

cutout(self, position, width, mode='trim')[source]

Cutout edisp map.

Parameters
positionSkyCoord

Center position of the cutout region.

widthtuple of Angle

Angular sizes of the region in (lon, lat) in that specific order. If only one value is passed, a square region is extracted.

mode{‘trim’, ‘partial’, ‘strict’}

Mode option for Cutout2D, for details see Cutout2D.

Returns
cutoutEdispMap

Cutout edisp map.

classmethod from_diagonal_response(energy_axis_true, migra_axis=None)[source]

Create an allsky EDisp map with diagonal response.

Parameters
energy_axis_trueMapAxis

True energy axis

migra_axisMapAxis

Migra axis

Returns
edisp_mapEDispMap

Energy dispersion map.

classmethod from_geom(geom)[source]

Create edisp map from geom.

By default a diagonal edisp matrix is created.

Parameters
geomGeom

Edisp map geometry.

Returns
edisp_mapEDispMap

Energy dispersion map.

classmethod from_hdulist(hdulist, edisp_hdu='EDISPMAP', edisp_hdubands='BANDSEDISP', exposure_hdu='EXPMAP', exposure_hdubands='BANDSEXP')[source]

Convert to HDUList.

Parameters
edisp_hdustr

Name or index of the HDU with the edisp_map data.

edisp_hdubandsstr

Name or index of the HDU with the edisp_map BANDS table.

exposure_hdustr

Name or index of the HDU with the exposure_map data.

exposure_hdubandsstr

Name or index of the HDU with the exposure_map BANDS table.

get_energy_dispersion(self, position, e_reco, migra_step=0.005)[source]

Get energy dispersion at a given position.

Parameters
positionSkyCoord

the target position. Should be a single coordinates

e_recoQuantity

Reconstructed energy axis binning

migra_stepfloat

Integration step in migration

Returns
edispEnergyDispersion

the energy dispersion (i.e. rmf object)

classmethod read(filename, **kwargs)[source]

Read an edisp_map from file and create an EDispMap object

sample_coord(self, map_coord, random_state=0)[source]

Apply the energy dispersion corrections on the coordinates of a set of simulated events.

Parameters
map_coordMapCoord object.

Sequence of coordinates and energies of sampled events.

random_state{int, ‘random-seed’, ‘global-rng’, RandomState}

Defines random number generator initialisation. Passed to get_random_state.

Returns
MapCoord.

Sequence of Edisp-corrected coordinates of the input map_coord map.

stack(self, other, weights=None)[source]

Stack EDispMap with another one in place.

Parameters
otherEDispMap

Energy dispersion map to be stacked with this one.

to_hdulist(self, edisp_hdu='EDISPMAP', edisp_hdubands='BANDSEDISP', exposure_hdu='EXPMAP', exposure_hdubands='BANDSEXP')[source]

Convert to HDUList.

Parameters
edisp_hdustr

Name or index of the HDU with the edisp_map data.

edisp_hdubandsstr

Name or index of the HDU with the edisp_map BANDS table.

exposure_hdustr

Name or index of the HDU with the exposure_map data.

exposure_hdubandsstr

Name or index of the HDU with the exposure_map BANDS table.

Returns
hdu_listHDUList
write(self, filename, overwrite=False, **kwargs)[source]

Write to fits