Source code for lenstronomy.LightModel.Profiles.ellipsoid

__author__ = "sibirrer"

# this file contains a class to make an Ellipsoid
import numpy as np
from lenstronomy.Util import param_util

__all__ = ["Ellipsoid"]


[docs] class Ellipsoid(object): """Class for an universal surface brightness within an ellipsoid."""
[docs] def __init__(self): self.param_names = ["amp", "radius", "e1", "e2", "center_x", "center_y"] self.lower_limit_default = { "amp": 0, "radius": 0, "e1": -0.5, "e2": -0.5, "center_x": -100, "center_y": -100, } self.upper_limit_default = { "amp": 1000, "radius": 100, "e1": 0.5, "e2": 0.5, "center_x": 100, "center_y": 100, }
[docs] def function(self, x, y, amp, radius, e1, e2, center_x, center_y): """ :param x: :param y: :param amp: surface brightness within the ellipsoid :param radius: radius (product average of semi-major and semi-minor axis) of the ellipsoid :param e1: eccentricity :param e2: eccentricity :param center_x: center :param center_y: center :return: surface brightness """ x_, y_ = param_util.transform_e1e2_product_average( x, y, e1, e2, center_x, center_y ) r2 = x_**2 + y_**2 flux = np.zeros_like(x) flux[r2 <= radius**2] = 1 area = np.pi * radius**2 return amp / area * flux
def function(x, y, amp, sigma, center_x, center_y): """Returns torus (ellipse with constant surface brightness) profile.""" x_shift = x - center_x y_shift = y - center_y area = np.pi * sigma**2 dist = (x_shift / sigma) ** 2 + (y_shift / sigma) ** 2 torus = np.zeros_like(x) torus[dist <= 1] = 1 return amp / area * torus