PSFKernel

class gammapy.cube.PSFKernel(psf_kernel_map)[source]

Bases: object

PSF kernel for Map.

This is a container class to store a PSF kernel that can be used to convolve WcsNDMap objects. It is usually computed from an EnergyDependentTablePSF.

Parameters
psf_kernel_mapMap

PSF kernel stored in a Map

Examples

import numpy as np
from gammapy.maps import Map, WcsGeom, MapAxis
from gammapy.irf import EnergyDependentMultiGaussPSF
from gammapy.cube import PSFKernel
from astropy import units as u

# Define energy axis
energy_axis = MapAxis.from_edges(np.logspace(-1., 1., 4), unit='TeV', name='energy')

# Create WcsGeom and map
geom = WcsGeom.create(binsz=0.02*u.deg, width=2.0*u.deg, axes=[energy_axis])
some_map = Map.from_geom(geom)
# Fill map at two positions
some_map.fill_by_coord([[0.2,0.4],[-0.1,0.6],[0.5,3.6]])

# 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')
table_psf = psf.to_energy_dependent_table_psf(theta=0.5*u.deg)

psf_kernel = PSFKernel.from_table_psf(table_psf,geom, max_radius=1*u.deg)

# Do the convolution
some_map_convolved = some_map.convolve(psf_kernel)

some_map_convolved.get_image_by_coord(dict(energy=0.6*u.TeV)).plot()

Attributes Summary

data

Access the PSFKernel numpy array

psf_kernel_map

The map object holding the kernel (Map)

Methods Summary

from_gauss(geom, sigma[, max_radius, …])

Create Gaussian PSF.

from_table_psf(table_psf, geom[, …])

Create a PSF kernel from a TablePSF or an EnergyDependentTablePSF on a given Geom.

make_image(self, exposures[, spectrum])

Make a 2D PSF from a PSF kernel.

read(\*args, \*\*kwargs)

Read kernel Map from file.

write(self, \*args, \*\*kwargs)

Write the Map object which contains the PSF kernel to file.

Attributes Documentation

data

Access the PSFKernel numpy array

psf_kernel_map

The map object holding the kernel (Map)

Methods Documentation

classmethod from_gauss(geom, sigma, max_radius=None, containment_fraction=0.99, factor=4)[source]

Create Gaussian PSF.

This is used for testing and examples. The map geometry parameters (pixel size, energy bins) are taken from geom. The Gaussian width sigma is a scalar,

TODO : support array input if it should vary along the energy axis.

Parameters
geomWcsGeom

Map geometry

sigmaAngle

Gaussian width.

max_radiusAngle

Desired kernel map size.

factorint

Oversample factor to compute the PSF

Returns
kernelPSFKernel

the kernel Map with reduced geometry according to the max_radius

classmethod from_table_psf(table_psf, geom, max_radius=None, factor=4)[source]

Create a PSF kernel from a TablePSF or an EnergyDependentTablePSF on a given Geom.

If the Geom is not an image, the same kernel will be present on all axes.

The PSF is estimated by oversampling defined by a given factor.

Parameters
table_psfTablePSF or EnergyDependentTablePSF

the input table PSF

geomWcsGeom

the target geometry. The PSF kernel will be centered on the central pixel. The geometry axes should contain an axis with name “energy”

max_radiusAngle

the maximum radius of the PSF kernel.

factorint

the oversample factor to compute the PSF

Returns
kernelPSFKernel

the kernel Map with reduced geometry according to the max_radius

make_image(self, exposures, spectrum=None)[source]

Make a 2D PSF from a PSF kernel.

The PSF Kernel is first weighed with a spectrum and an array of exposures. The PSF is also normalised after summation.

Parameters
exposuresndarray

An array of exposures for the same true energies as the PSF kernel

spectrumSpectralModel

Spectral model to compute the weights. Default is power-law with spectral index of 2.

Returns
psf2DMap

Weighted 2D psf

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

Read kernel Map from file.

write(self, *args, **kwargs)[source]

Write the Map object which contains the PSF kernel to file.