Source code for lenstronomy.LightModel.Profiles.nie
import numpy as np
import lenstronomy.Util.param_util as param_util
from lenstronomy.LightModel.Profiles.profile_base import LightProfileBase
__all__ = ["NIE"]
[docs]class NIE(LightProfileBase):
"""Non-divergent isothermal ellipse (projected) This is effectively the convergence
profile of the NIE lens model with an amplitude 'amp' rather than an Einstein radius
'theta_E'."""
param_names = ["amp", "e1", "e2", "s_scale", "center_x", "center_y"]
lower_limit_default = {
"amp": 0,
"e1": -0.5,
"e2": -0.5,
"s_scale": 0,
"center_x": -100,
"center_y": -100,
}
upper_limit_default = {
"amp": 100,
"e1": 0.5,
"e2": 0.5,
"s_scale": 100,
"center_x": 100,
"center_y": 100,
}
[docs] def function(self, x, y, amp, e1, e2, s_scale, center_x=0, center_y=0):
"""
:param x: x-coordinate
:param y: y-coordinate
:param amp: surface brightness normalization
:param e1: eccentricity component
:param e2: eccentricity component
:param s_scale: smoothing scale (square averaged of minor and major axis)
:param center_x: center of profile
:param center_y: center of profile
:return: surface brightness of NIE profile
"""
# phi_G, q = param_util.ellipticity2phi_q(e1, e2)
# s = s_scale * np.sqrt((1 + q ** 2) / (2 * q ** 2))
x__, y__ = param_util.transform_e1e2_product_average(
x, y, e1, e2, center_x, center_y
)
f_ = amp / 2.0 * (s_scale**2 + x__**2 + y__**2) ** (-1.0 / 2)
return f_
[docs] def light_3d(self, r, amp, e1, e2, s_scale, center_x=0, center_y=0):
"""3d light distribution (in spherical regime)
:param r: 3d radius
:param amp: surface brightness normalization
:param e1: eccentricity component
:param e2: eccentricity component
:param s_scale: smoothing scale (square averaged of minor and major axis)
:param center_x: center of profile
:param center_y: center of profile
:return: light density at 3d radius
"""
rho = self._amp2rho(amp)
return rho / (r**2 + s_scale**2)
@staticmethod
def _amp2rho(amp):
"""Converts surface brightness normalization 'amp' into 3d density normalization
rho.
:param amp:
:return: rho
"""
factor = np.pi
return amp / 2 / factor