Source code for lenstronomy.LensModel.Profiles.convergence
__author__ = "sibirrer"
import lenstronomy.Util.param_util as param_util
from lenstronomy.LensModel.Profiles.base_profile import LensProfileBase
__all__ = ["Convergence"]
[docs]
class Convergence(LensProfileBase):
"""A single mass sheet (external convergence)"""
model_name = "CONVERGENCE"
param_names = ["kappa", "ra_0", "dec_0"]
lower_limit_default = {"kappa": -10, "ra_0": -100, "dec_0": -100}
upper_limit_default = {"kappa": 10, "ra_0": 100, "dec_0": 100}
[docs]
def function(self, x, y, kappa, ra_0=0, dec_0=0):
"""Lensing potential.
:param x: x-coordinate
:param y: y-coordinate
:param kappa: (external) convergence
:return: lensing potential
"""
theta, phi = param_util.cart2polar(x - ra_0, y - dec_0)
f_ = 1.0 / 2 * kappa * theta**2
return f_
[docs]
def derivatives(self, x, y, kappa, ra_0=0, dec_0=0):
"""Deflection angle.
:param x: x-coordinate
:param y: y-coordinate
:param kappa: (external) convergence
:return: deflection angles (first order derivatives)
"""
x_ = x - ra_0
y_ = y - dec_0
f_x = kappa * x_
f_y = kappa * y_
return f_x, f_y
[docs]
def hessian(self, x, y, kappa, ra_0=0, dec_0=0):
"""Hessian matrix.
:param x: x-coordinate
:param y: y-coordinate
:param kappa: external convergence
:param ra_0: zero point of polynomial expansion (no deflection added)
:param dec_0: zero point of polynomial expansion (no deflection added)
:return: second order derivatives f_xx, f_xy, f_yx, f_yy
"""
gamma1 = 0
gamma2 = 0
kappa = kappa
f_xx = kappa + gamma1
f_yy = kappa - gamma1
f_xy = gamma2
return f_xx, f_xy, f_xy, f_yy