Source code for lenstronomy.GalKin.observation
from lenstronomy.GalKin.aperture import Aperture
from lenstronomy.GalKin.psf import PSF
import lenstronomy.Util.util as util
from scipy.signal import convolve2d
import numpy as np
__all__ = ["GalkinObservation"]
[docs]
class GalkinObservation(PSF, Aperture):
"""This class sets the base for the observational properties (aperture and seeing
condition)"""
[docs]
def __init__(self, kwargs_aperture, kwargs_psf, backend):
"""
:param kwargs_aperture: aperture parameters (see lenstronomy.GalKin.aperture)
:param kwargs_psf: psf parameters (see lenstronomy.GalKin.psf)
:param backend: either 'galkin' or 'jampy'
"""
PSF.__init__(self, **kwargs_psf)
kwargs_aperture = kwargs_aperture.copy()
if ("delta_pix" not in kwargs_aperture) and ("x_grid" not in kwargs_aperture):
# set the sampling of the aperture to FWHM / 3
kwargs_aperture["delta_pix"] = min(self.psf_fwhm / 3, 0.1)
if (self.psf_type == "PIXEL") or (backend == "galkin"):
# pixelated PSF requires padding for convolution,
# set it to 3 times the PSF sigma
if "padding_arcsec" not in kwargs_aperture:
# add a padding of 3 times the PSF sigma for convolution
padding_arcsec = util.fwhm2sigma(self.psf_fwhm) * 3
kwargs_aperture["padding_arcsec"] = padding_arcsec
if self.psf_type == "PIXEL":
self._default_supersampling_factor = kwargs_psf["supersampling_factor"]
else:
self._default_supersampling_factor = 1
Aperture.__init__(self, **kwargs_aperture)
[docs]
def convolve(self, data, supersampling_factor=1, num_pix=None):
delta_pix_psf = self.delta_pix / supersampling_factor
if num_pix is None:
if self.psf_type == "PIXEL":
num_pix = self._psf.kenrel_size
else:
num_pix = 6 * self.psf_fwhm / delta_pix_psf
# make odd
num_pix = int(np.ceil(num_pix)) // 2 * 2 + 1
kernel = self.convolution_kernel(delta_pix_psf, num_pix)
return convolve2d(data, kernel, mode="same")