import numpy as np
deg_to_arcsec = 3600.
[docs]
def flux_to_sb(flux, pixel_area, zeropoint):
"""Conversion from flux units to logarithmic surface brightness
units.
.. math::
\\mu = -2.5\\log_{10}(flux) + z.p. + 2.5\\log_{10}(A)
where :math:`z.p.` is the zeropoint and :math:`A` is the area of a pixel.
"""
return -2.5 * np.log10(flux) + zeropoint + 2.5 * np.log10(pixel_area)
[docs]
def flux_to_mag(flux, zeropoint, fluxe=None):
"""Converts a flux total into logarithmic magnitude units.
.. math::
m = -2.5\\log_{10}(flux) + z.p.
where :math:`z.p.` is the zeropoint.
"""
if fluxe is None:
return -2.5 * np.log10(flux) + zeropoint
else:
return -2.5 * np.log10(flux) + zeropoint, 2.5 * fluxe / (np.log(10) * flux)
[docs]
def sb_to_flux(sb, pixel_area, zeropoint):
"""Converts logarithmic surface brightness units into flux units.
.. math::
flux = A 10^{-(\\mu - z.p.)/2.5}
where :math:`z.p.` is the zeropoint and :math:`A` is the area of a pixel.
"""
return pixel_area * 10 ** (-(sb - zeropoint) / 2.5)
[docs]
def mag_to_flux(mag, zeropoint, mage=None):
"""converts logarithmic magnitude units into a flux total.
.. math::
flux = 10^{-(m - z.p.)/2.5}
where :math:`z.p.` is the zeropoint.
"""
if mage is None:
return 10 ** (-(mag - zeropoint) / 2.5)
else:
I = 10 ** (-(mag - zeropoint) / 2.5)
return I, np.log(10) * I * mage / 2.5
[docs]
def magperarcsec2_to_mag(mu, a=None, b=None, A=None):
"""
Converts mag/arcsec^2 to mag
mu: mag/arcsec^2
a: semi major axis radius (arcsec)
b: semi minor axis radius (arcsec)
A: pre-calculated area (arcsec^2)
returns: mag
.. math::
m = \\mu -2.5\\log_{10}(A)
where :math:`A` is an area in arcsec^2.
"""
assert (not A is None) or (not a is None and not b is None)
if A is None:
A = np.pi * a * b
return mu - 2.5 * np.log10(
A
) # https://en.wikipedia.org/wiki/Surface_brightness#Calculating_surface_brightness
[docs]
def mag_to_magperarcsec2(m, a=None, b=None, R=None, A=None):
"""
Converts mag to mag/arcsec^2
m: mag
a: semi major axis radius (arcsec)
b: semi minor axis radius (arcsec)
A: pre-calculated area (arcsec^2)
returns: mag/arcsec^2
.. math::
\\mu = m + 2.5\\log_{10}(A)
where :math:`A` is an area in arcsec^2.
"""
assert (not A is None) or (not a is None and not b is None) or (not R is None)
if not R is None:
A = np.pi * (R ** 2)
elif A is None:
A = np.pi * a * b
return m + 2.5 * np.log10(
A
) # https://en.wikipedia.org/wiki/Surface_brightness#Calculating_surface_brightness
[docs]
def PA_shift_convention(pa, unit="rad"):
"""
Alternates between standard mathematical convention for angles, and astronomical position angle convention.
The standard convention is to measure angles counter-clockwise relative to the positive x-axis
The astronomical convention is to measure angles counter-clockwise relative to the positive y-axis
"""
if unit == "rad":
shift = np.pi
elif unit == "deg":
shift = 180.0
return (pa - (shift / 2)) % shift