Source code for astrophot.utils.conversions.units

from typing import Optional
import numpy as np

__all__ = (
    "deg_to_arcsec",
    "arcsec_to_deg",
    "flux_to_sb",
    "flux_to_mag",
    "sb_to_flux",
    "mag_to_flux",
    "magperarcsec2_to_mag",
    "mag_to_magperarcsec2",
    "PA_shift_convention",
)

deg_to_arcsec = 3600.0
arcsec_to_deg = 1.0 / deg_to_arcsec


[docs] def flux_to_sb(flux: float, pixel_area: float, zeropoint: float) -> float: """Conversion from flux units to logarithmic surface brightness units. $$\\mu = -2.5\\log_{10}(flux) + z.p. + 2.5\\log_{10}(A)$$ where $z.p.$ is the zeropoint and $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: float, zeropoint: float, fluxe: Optional[float] = None) -> float: """Converts a flux total into logarithmic magnitude units. $$m = -2.5\\log_{10}(flux) + z.p.$$ where $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: float, pixel_area: float, zeropoint: float) -> float: """Converts logarithmic surface brightness units into flux units. $$flux = A 10^{-(\\mu - z.p.)/2.5}$$ where $z.p.$ is the zeropoint and $A$ is the area of a pixel. """ return pixel_area * 10 ** (-(sb - zeropoint) / 2.5)
[docs] def mag_to_flux(mag: float, zeropoint: float, mage: Optional[float] = None) -> float: """converts logarithmic magnitude units into a flux total. $$flux = 10^{-(m - z.p.)/2.5}$$ where $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: float, a: Optional[float] = None, b: Optional[float] = None, A: Optional[float] = None ) -> float: """ Converts mag/arcsec^2 to mag **Args:** - `mu`: mag/arcsec^2 - `a`: semi major axis radius (arcsec) - `b`: semi minor axis radius (arcsec) - `A`: pre-calculated area (arcsec^2) $$m = \\mu -2.5\\log_{10}(A)$$ where $A$ is an area in arcsec^2. """ assert (A is not None) or (a is not None and b is not 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: float, a: Optional[float] = None, b: Optional[float] = None, R: Optional[float] = None, A: Optional[float] = None, ) -> float: """ Converts mag to mag/arcsec^2 **Args:** - `m`: mag - `a`: semi major axis radius (arcsec) - `b`: semi minor axis radius (arcsec) - `A`: pre-calculated area (arcsec^2) $$\\mu = m + 2.5\\log_{10}(A)$$ where $A$ is an area in arcsec^2. """ assert (A is not None) or (a is not None and b is not None) or (R is not None) if R is not 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