Source code for autogalaxy.profiles.mass.point.point

import copy
import numpy as np
from typing import Tuple

import autoarray as aa

from autogalaxy.profiles.mass.abstract.abstract import MassProfile


[docs]class PointMass(MassProfile): def __init__( self, centre: Tuple[float, float] = (0.0, 0.0), einstein_radius: float = 1.0 ): """ Represents a point-mass. Parameters ---------- centre The (y,x) arc-second coordinates of the profile centre. einstein_radius The arc-second Einstein radius of the point-mass. """ super().__init__(centre=centre, ell_comps=(0.0, 0.0)) self.einstein_radius = einstein_radius def convergence_2d_from(self, grid: aa.type.Grid2DLike): squared_distances = np.square(grid[:, 0] - self.centre[0]) + np.square( grid[:, 1] - self.centre[1] ) central_pixel = np.argmin(squared_distances) convergence = np.zeros(shape=grid.shape[0]) # convergence[central_pixel] = np.pi * self.einstein_radius ** 2.0 return convergence @aa.grid_dec.grid_2d_to_structure def potential_2d_from(self, grid: aa.type.Grid2DLike): return np.zeros(shape=grid.shape[0]) @aa.grid_dec.grid_2d_to_vector_yx @aa.grid_dec.grid_2d_to_structure @aa.grid_dec.transform @aa.grid_dec.relocate_to_radial_minimum def deflections_yx_2d_from(self, grid: aa.type.Grid2DLike): grid_radii = self.radial_grid_from(grid=grid) return self._cartesian_grid_via_radial_from( grid=grid, radius=self.einstein_radius**2 / grid_radii ) @property def is_point_mass(self): return True