Skip to main content
`Ctrl`+`K`

# Sersic2D

class astropy.modeling.functional_models.Sersic2D(amplitude=1, r_eff=1, n=4, x_0=0, y_0=0, ellip=0, theta=0.0, **kwargs)

  Bases: `Fittable2DModel`

  Two dimensional Sersic surface brightness profile.

  Parameters:
    amplitude `python:float`

      Surface brightness at `r_eff`.

    r_eff `python:float`

      Effective (half-light) radius.

    n `python:float`

      Sersic index controlling the shape of the profile. Particular values of `n` are equivalent to the following profiles:

      > - n=4 : de Vaucouleurs \(r^{1/4}\) profile

      > - n=1 : Exponential profile

      > - n=0.5 : Gaussian profile

    x_0 `python:float`, optional

      x position of the center.

    y_0 `python:float`, optional

      y position of the center.

    ellip `python:float`, optional

      Ellipticity of the isophote, defined as 1.0 minus the ratio of the lengths of the semimajor and semiminor axes:

      \[ellip = 1 - \frac{b}{a}\]
    theta `python:float` or `Quantity`, optional

      The rotation angle as an angular quantity (`Quantity` or `Angle`) or a value in radians (as a float). The rotation angle increases counterclockwise from the positive x axis.

  Other Parameters:
    fixed `python:dict`, optional

      A dictionary `{parameter_name: boolean}` of parameters to not be varied during fitting. True means the parameter is held fixed. Alternatively the `fixed` property of a parameter may be used.

    tied `python:dict`, optional

      A dictionary `{parameter_name: callable}` of parameters which are linked to some other parameter. The dictionary values are callables providing the linking relationship. Alternatively the `tied` property of a parameter may be used.

    bounds `python:dict`, optional

      A dictionary `{parameter_name: value}` of lower and upper bounds of parameters. Keys are parameter names. Values are a list or a tuple of length 2 giving the desired range for the parameter. Alternatively, the `min` and `max` properties of a parameter may be used.

    eqcons `python:list`, optional

      A list of functions of length `n` such that `eqcons[j](x0,*args) == 0.0` in a successfully optimized problem.

    ineqcons `python:list`, optional

      A list of functions of length `n` such that `ieqcons[j](x0,*args) >= 0.0` is a successfully optimized problem.

  See also

  `GeneralSersic2D`, `Gaussian2D`, `Moffat2D`

  Notes

  The `x`, `y`, `x_0`, `y_0`, and `r_eff` inputs must have compatible units or be unitless numbers.

  Model formula:

  \[I(x, y) = I_{e} \exp\left\{ -b_{n} \left[\left(\frac{r(x, y)}{r_{e}}\right)^{(1/n)} -1\right]\right\}\]

  where \(I_{e}\) is the `amplitude`, \(r_{e}\) is `reff`, and \(r(x, y)\) is a rotated ellipse defined as:

  \[r(x, y)^2 = A^2 + \left(\frac{B}{1 - ellip}\right)^2\]
  \[A = (x - x_0) \cos(\theta) + (y - y_0) \sin(\theta)\]
  \[B = -(x - x_0) \sin(\theta) + (y - y_0) \cos(\theta)\]

  The constant \(b_{n}\) is defined such that \(r_{e}\) contains half the total luminosity. It can be solved for numerically from the following equation:

  \[\Gamma(2n) = 2\gamma (2n, b_{n})\]

  where \(\Gamma(a)\) is the gamma function and \(\gamma(a, x)\) is the lower incomplete gamma function.

  References

  [1]

  http://ned.ipac.caltech.edu/level5/March05/Graham/Graham2.html

  Examples

      import numpy as np
      from astropy.modeling.models import Sersic2D
      import matplotlib.pyplot as plt

      x, y = np.meshgrid(np.arange(100), np.arange(100))

      mod = Sersic2D(amplitude=1, r_eff=25, n=4, x_0=50, y_0=50,
                     ellip=0.5, theta=-1)
      img = mod(x, y)
      log_img = np.log10(img)

      fig, ax = plt.subplots()
      im = ax.imshow(log_img, origin='lower', interpolation='nearest',
                     vmin=-1, vmax=2)
      cbar = fig.colorbar(im, ax=ax)
      cbar.set_label('Log Brightness', rotation=270, labelpad=25)
      cbar.set_ticks([-1, 0, 1, 2])
      plt.xlabel('x')
      plt.ylabel('y')
      plt.show()

  (`png`, `svg`, `pdf`)

  Attributes Summary

  `amplitude` |
  `ellip` |
  `input_units` | This property is used to indicate what units or sets of units the evaluate method expects, and returns a dictionary mapping inputs to units (or `None` if any units are accepted).
  `n` |
  `param_names` | Names of the parameters that describe models of this type.
  `r_eff` |
  `theta` |
  `x_0` |
  `y_0` |

  Methods Summary

  `evaluate`(x, y, amplitude, r_eff, n, x_0, ...) | Two dimensional Sersic profile function.

  Attributes Documentation

  amplitude = Parameter('amplitude', value=1.0)
  ellip = Parameter('ellip', value=0.0)
  input_units
  n = Parameter('n', value=4.0)
  param_names = ('amplitude', 'r_eff', 'n', 'x_0', 'y_0', 'ellip', 'theta')

    Names of the parameters that describe models of this type.

    The parameters in this tuple are in the same order they should be passed in when initializing a model of a specific type. Some types of models, such as polynomial models, have a different number of parameters depending on some other property of the model, such as the degree.

    When defining a custom model class the value of this attribute is automatically set by the `Parameter` attributes defined in the class body.

  r_eff = Parameter('r_eff', value=1.0)
  theta = Parameter('theta', value=0.0)
  x_0 = Parameter('x_0', value=0.0)
  y_0 = Parameter('y_0', value=0.0)

  Methods Documentation

  classmethod evaluate(x, y, amplitude, r_eff, n, x_0, y_0, ellip, theta, c=0)

    Two dimensional Sersic profile function.