PSFMap

class gammapy.cube.PSFMap(psf_map, exposure_map=None)[source]

Bases: object

Class containing the Map of PSFs and allowing to interact with it.

Parameters:
psf_map : Map

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

exposure_map : Map

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 Map, WcsGeom, MapAxis
from gammapy.irf import EnergyDependentMultiGaussPSF, EffectiveAreaTable2D
from gammapy.cube import make_psf_map, PSFMap, make_map_exposure_true_energy

# Define energy axis. Note that the name is fixed.
energy_axis = MapAxis.from_edges(np.logspace(-1., 1., 4), unit='TeV', name='energy')
# Define rad axis. Again note the axis name
rads = np.linspace(0., 0.5, 100) * u.deg
rad_axis = MapAxis.from_edges(rads, unit='deg', name='theta')

# Define parameters
pointing = SkyCoord(0., 0., unit='deg')
max_offset = 4 * u.deg

# Create WcsGeom
geom = WcsGeom.create(binsz=0.25*u.deg, width=10*u.deg, skydir=pointing, axes=[rad_axis, energy_axis])

# Extract EnergyDependentTablePSF from CTA 1DC IRF
filename = '$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits'
psf = EnergyDependentMultiGaussPSF.read(filename, hdu='POINT SPREAD FUNCTION')
psf3d = psf.to_psf3d(rads)
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 PSFMap for the specified pointing
psf_map = make_psf_map(psf3d, pointing, geom, max_offset, exposure_map)

# Get an EnergyDependentTablePSF at any position in the image
psf_table = psf_map.get_energy_dependent_table_psf(SkyCoord(2., 2.5, unit='deg'))

# Write map to disk
psf_map.write('psf_map.fits')

Methods Summary

containment_radius_map(self, energy[, fraction]) Containment radius map.
from_hdulist(hdulist[, psf_hdu, …]) Convert to HDUList.
get_energy_dependent_table_psf(self, position) Get energy-dependent PSF at a given position.
get_psf_kernel(self, position, geom[, …]) Returns a PSF kernel at the given position.
read(filename, \*\*kwargs) Read a psf_map from file and create a PSFMap object
stack(self, other) Stack PSFMap with another one.
to_hdulist(self[, psf_hdu, psf_hdubands, …]) Convert to HDUList.
write(self, filename[, overwrite]) Write to fits

Methods Documentation

containment_radius_map(self, energy, fraction=0.68)[source]

Containment radius map.

Parameters:
energy : Quantity

Scalar energy at which to compute the containment radius

fraction : float

the containment fraction (range: 0 to 1)

Returns:
containment_radius_map : Map

Containment radius map

classmethod from_hdulist(hdulist, psf_hdu='PSFMAP', psf_hdubands='BANDSPSF', exposure_hdu='EXPMAP', exposure_hdubands='BANDSEXP')[source]

Convert to HDUList.

Parameters:
psf_hdu : str

Name or index of the HDU with the psf_map data.

psf_hdubands : str

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

exposure_hdu : str

Name or index of the HDU with the exposure_map data.

exposure_hdubands : str

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

get_energy_dependent_table_psf(self, position)[source]

Get energy-dependent PSF at a given position.

Parameters:
position : SkyCoord

the target position. Should be a single coordinates

Returns:
psf_table : EnergyDependentTablePSF

the table PSF

get_psf_kernel(self, position, geom, max_radius=None, factor=4)[source]

Returns a PSF kernel at the given position.

The PSF is returned in the form a WcsNDMap defined by the input MapGeom.

Parameters:
position : SkyCoord

the target position. Should be a single coordinate

geom : MapGeom

the target geometry to use

max_radius : Angle

maximum angular size of the kernel map

factor : int

oversampling factor to compute the PSF

Returns:
kernel : PSFKernel

the resulting kernel

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

Read a psf_map from file and create a PSFMap object

stack(self, other)[source]

Stack PSFMap with another one.

The other PSFMap is projected on the current PSFMap geometry.

Parameters:
other : PSFMap

the psfmap to be stacked with this one.

Returns:
new : PSFMap

the stacked psfmap

to_hdulist(self, psf_hdu='PSFMAP', psf_hdubands='BANDSPSF', exposure_hdu='EXPMAP', exposure_hdubands='BANDSEXP')[source]

Convert to HDUList.

Parameters:
psf_hdu : str

Name or index of the HDU with the psf_map data.

psf_hdubands : str

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

exposure_hdu : str

Name or index of the HDU with the exposure_map data.

exposure_hdubands : str

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

Returns:
hdu_list : HDUList
write(self, filename, overwrite=False, **kwargs)[source]

Write to fits