GeneralSersic2D#

class astropy.modeling.functional_models.GeneralSersic2D(amplitude=1, r_eff=1, n=4, x_0=0, y_0=0, ellip=0, theta=0.0, c=0, **kwargs)[source]#

Bases: Sersic2D

Generalized two dimensional Sersic surface brightness profile that allows for “boxy” or “disky” (kite-like) isophote shapes.

Parameters:
amplitudefloat

Surface brightness at r_eff.

r_efffloat

Effective (half-light) radius.

nfloat

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_0float, optional

x position of the center.

y_0float, optional

y position of the center.

ellipfloat, 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}\]
thetafloat 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.

cfloat, optional

Parameter controlling the shape of the generalized ellipses. Negative values correspond to disky (kite-like) isophotes and positive values correspond to boxy isophotes. Setting c=0 provides perfectly elliptical isophotes (the same model as Sersic2D).

Notes

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 “generalized” ellipse (see Athanassoula et al. 1990) defined as:

\[r(x, y)^2 = |A|^{c + 2} + \left(\frac{|B|}{1 - ellip}\right)^{c + 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

Examples

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

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

mod = GeneralSersic2D(amplitude=1, r_eff=25, n=4, x_0=50, y_0=50,
                      c=-1.0, 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.title('Disky isophote with c=-1.0')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

(png, svg, pdf)

../../_images/astropy-modeling-functional_models-GeneralSersic2D-1.png
import numpy as np
from astropy.modeling.models import GeneralSersic2D
import matplotlib.pyplot as plt

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

mod = GeneralSersic2D(amplitude=1, r_eff=25, n=4, x_0=50, y_0=50,
                      c=1.0, 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.title('Boxy isophote with c=1.0')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

(png, svg, pdf)

../../_images/astropy-modeling-functional_models-GeneralSersic2D-2.png

Attributes Summary

amplitude

c

ellip

n

param_names

Names of the parameters that describe models of this type.

r_eff

theta

x_0

y_0

Attributes Documentation

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

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)#