Tractor Catalog Format

<region>/tractor/<AAA>/tractor-<brick>.fits

FITS binary table containing Tractor photometry. Before using these catalogs, note that there may be known issues regarding their content and derivation. Note that all flux-based quantities in the catalogs are on the AB system (we specify that WISE fluxes are AB in the table for clarity, as such quantities are often quoted on the Vega system).

Name

Type

Units

Description

release

int16

Integer denoting the camera and filter set used, which will be unique for a given processing run of the data (as documented here)

brickid

int32

Brick ID [1,662174]

brickname

char[8]

Name of brick, encoding the brick sky position, eg "1126p222" near RA=112.6, Dec=+22.2

objid

int32

Catalog object number within this brick; a unique identifier hash is release,brickid,objid; objid spans [0,N-1] and is contiguously enumerated within each brick

brick_primary

boolean

True if the object is within the brick boundary

maskbits

int16

Bitwise mask indicating that an object touches a pixel in the coadd/*/*/*maskbits* maps, as cataloged on the DR9 bitmasks page

fitbits

int16

Bitwise mask detailing pecularities of how an object was fit, as cataloged on the DR9 bitmasks page

type

char[3]

Morphological model: "PSF"=stellar, "REX"="round exponential galaxy", "DEV"=deVauc, "EXP"=exponential, "SER"=Sersic, "DUP"=Gaia source fit by different model.

ra

float64

deg

Right ascension at equinox J2000

dec

float64

deg

Declination at equinox J2000

ra_ivar

float32

1/deg²

Inverse variance of RA (no cosine term!), excluding astrometric calibration errors

dec_ivar

float32

1/deg²

Inverse variance of DEC, excluding astrometric calibration errors

bx

float32

pix

X position (0-indexed) of coordinates in the brick image stack (i.e. in the e.g. legacysurvey-<brick>-image-g.fits.fz coadd file)

by

float32

pix

Y position (0-indexed) of coordinates in brick image stack

dchisq

float32[5]

Difference in χ² between successively more-complex model fits: PSF, REX, DEV, EXP, SER. The difference is versus no source.

ebv

float32

mag

Galactic extinction E(B-V) reddening from SFD98, used to compute the mw_transmission_ columns

mjd_min

float64

days

Minimum Modified Julian Date of observations used to construct the model of this object

mjd_max

float64

days

Maximum Modified Julian Date of observations used to construct the model of this object

ref_cat

char[2]

Reference catalog source for this star: "T2" for Tycho-2, "G2" for Gaia DR2, "L3" for the SGA, empty otherwise

ref_id

int64

Reference catalog identifier for this star; Tyc1*1,000,000+Tyc2*10+Tyc3 for Tycho2; "sourceid" for Gaia DR2 and SGA

pmra

float32

mas/yr

Reference catalog proper motion in the RA direction

pmdec

float32

mas/yr

Reference catalog proper motion in the Dec direction

parallax

float32

mas

Reference catalog parallax

pmra_ivar

float32

1/(mas/yr)²

Reference catalog inverse-variance on pmra

pmdec_ivar

float32

1/(mas/yr)²

Reference catalog inverse-variance on pmdec

parallax_ivar

float32

1/(mas)²

Reference catalog inverse-variance on parallax

ref_epoch

float32

yr

Reference catalog reference epoch (eg, 2015.5 for Gaia DR2)

gaia_phot_g_mean_mag

float32

mag

Gaia G band mag

gaia_phot_g_mean_flux_over_error

float32

Gaia G band signal-to-noise

gaia_phot_g_n_obs

int16

Gaia G band number of observations

gaia_phot_bp_mean_mag

float32

mag

Gaia BP mag

gaia_phot_bp_mean_flux_over_error

float32

Gaia BP signal-to-noise

gaia_phot_bp_n_obs

int16

Gaia BP number of observations

gaia_phot_rp_mean_mag

float32

mag

Gaia RP mag

gaia_phot_rp_mean_flux_over_error

float32

Gaia RP signal-to-noise

gaia_phot_rp_n_obs

int16

Gaia RP number of observations

gaia_phot_variable_flag

bool

Gaia photometric variable flag

gaia_astrometric_excess_noise

float32

Gaia astrometric excess noise

gaia_astrometric_excess_noise_sig

float32

Gaia astrometric excess noise uncertainty

gaia_astrometric_n_obs_al

int16

Gaia number of astrometric observations along scan direction

gaia_astrometric_n_good_obs_al

int16

Gaia number of good astrometric observations along scan direction

gaia_astrometric_weight_al

float32

Gaia astrometric weight along scan direction

gaia_duplicated_source

bool

Gaia duplicated source flag

gaia_a_g_val

float32

magnitudes

Gaia line-of-sight extinction in the G band

gaia_e_bp_min_rp_val

float32

magnitudes

Gaia line-of-sight reddening E(BP-RP)

gaia_phot_bp_rp_excess_factor

float32

Gaia BP/RP excess factor

gaia_astrometric_sigma5d_max

float32

mas

Gaia longest semi-major axis of the 5-d error ellipsoid

gaia_astrometric_params_solved

uint8

which astrometric parameters were estimated for a Gaia source

flux_g

float32

nanomaggies

model flux in $g$

flux_r

float32

nanomaggies

model flux in $r$

flux_z

float32

nanomaggies

model flux in $z$

flux_w1

float32

nanomaggies

WISE model flux in $W1$ (AB system)

flux_w2

float32

nanomaggies

WISE model flux in $W2$ (AB)

flux_w3

float32

nanomaggies

WISE model flux in $W3$ (AB)

flux_w4

float32

nanomaggies

WISE model flux in $W4$ (AB)

flux_ivar_g

float32

1/nanomaggies²

Inverse variance of flux_g

flux_ivar_r

float32

1/nanomaggies²

Inverse variance of flux_r

flux_ivar_z

float32

1/nanomaggies²

Inverse variance of flux_z

flux_ivar_w1

float32

1/nanomaggies²

Inverse variance of flux_w1 (AB system)

flux_ivar_w2

float32

1/nanomaggies²

Inverse variance of flux_w2 (AB)

flux_ivar_w3

float32

1/nanomaggies²

Inverse variance of flux_w3 (AB)

flux_ivar_w4

float32

1/nanomaggies²

Inverse variance of flux_w4 (AB)

fiberflux_g

float32

nanomaggies

Predicted $g$-band flux within a fiber of diameter 1.5 arcsec from this object in 1 arcsec Gaussian seeing

fiberflux_r

float32

nanomaggies

Predicted $r$-band flux within a fiber of diameter 1.5 arcsec from this object in 1 arcsec Gaussian seeing

fiberflux_z

float32

nanomaggies

Predicted $z$-band flux within a fiber of diameter 1.5 arcsec from this object in 1 arcsec Gaussian seeing

fibertotflux_g

float32

nanomaggies

Predicted $g$-band flux within a fiber of diameter 1.5 arcsec from all sources at this location in 1 arcsec Gaussian seeing

fibertotflux_r

float32

nanomaggies

Predicted $r$-band flux within a fiber of diameter 1.5 arcsec from all sources at this location in 1 arcsec Gaussian seeing

fibertotflux_z

float32

nanomaggies

Predicted $z$-band flux within a fiber of diameter 1.5 arcsec from all sources at this location in 1 arcsec Gaussian seeing

apflux_g

float32[8]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [0.5, 0.75, 1.0, 1.5, 2.0, 3.5, 5.0, 7.0] arcsec in $g$, masked by $invvar=0$ (inverse variance of zero [1])

apflux_r

float32[8]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [0.5, 0.75, 1.0, 1.5, 2.0, 3.5, 5.0, 7.0] arcsec in $r$, masked by $invvar=0$

apflux_z

float32[8]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [0.5, 0.75, 1.0, 1.5, 2.0, 3.5, 5.0, 7.0] arcsec in $z$, masked by $invvar=0$

apflux_resid_g

float32[8]

nanomaggies

Aperture fluxes on the co-added residual images in $g$, masked by $invvar=0$

apflux_resid_r

float32[8]

nanomaggies

Aperture fluxes on the co-added residual images in $r$, masked by $invvar=0$

apflux_resid_z

float32[8]

nanomaggies

Aperture fluxes on the co-added residual images in $z$, masked by $invvar=0$

apflux_blobresid_g

float32[8]

nanomaggies

Aperture fluxes on $image-blobmodel$ residual maps in $g$ [2], masked by $invvar=0$

apflux_blobresid_r

float32[8]

nanomaggies

Aperture fluxes on $image-blobmodel$ residual maps in $r$, masked by $invvar=0$

apflux_blobresid_z

float32[8]

nanomaggies

Aperture fluxes on $image-blobmodel$ residual maps in $z$, masked by $invvar=0$

apflux_ivar_g

float32[8]

1/nanomaggies²

Inverse variance of apflux_resid_g, masked by $invvar=0$

apflux_ivar_r

float32[8]

1/nanomaggies²

Inverse variance of apflux_resid_r, masked by $invvar=0$

apflux_ivar_z

float32[8]

1/nanomaggies²

Inverse variance of apflux_resid_z, masked by $invvar=0$

apflux_masked_g

float32[8]

Fraction of pixels masked in $g$-band aperture flux measurements; 1 means fully masked (ie, fully ignored; contributing zero to the measurement)

apflux_masked_r

float32[8]

Fraction of pixels masked in $r$-band aperture flux measurements; 1 means fully masked (ie, fully ignored; contributing zero to the measurement)

apflux_masked_z

float32[8]

Fraction of pixels masked in $z$-band aperture flux measurements; 1 means fully masked (ie, fully ignored; contributing zero to the measurement)

apflux_w1

float32[5]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [3, 5, 7, 9, 11] [3] arcsec in $W1$, masked by $invvar=0$

apflux_w2

float32[5]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [3, 5, 7, 9, 11] arcsec in $W2$, masked by $invvar=0$

apflux_w3

float32[5]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [3, 5, 7, 9, 11] arcsec in $W3$, masked by $invvar=0$

apflux_w4

float32[5]

nanomaggies

Aperture fluxes on the co-added images in apertures of radius [3, 5, 7, 9, 11] arcsec in $W4$, masked by $invvar=0$

apflux_resid_w1

float32[5]

nanomaggies

Aperture fluxes on the co-added residual images in $W1$, masked by $invvar=0$

apflux_resid_w2

float32[5]

nanomaggies

Aperture fluxes on the co-added residual images in $W2$, masked by $invvar=0$

apflux_resid_w3

float32[5]

nanomaggies

Aperture fluxes on the co-added residual images in $W3$, masked by $invvar=0$

apflux_resid_w4

float32[5]

nanomaggies

Aperture fluxes on the co-added residual images in $W4$, masked by $invvar=0$

apflux_ivar_w1

float32[5]

1/nanomaggies²

Inverse variance of apflux_resid_w1, masked by $invvar=0$

apflux_ivar_w2

float32[5]

1/nanomaggies²

Inverse variance of apflux_resid_w2, masked by $invvar=0$

apflux_ivar_w3

float32[5]

1/nanomaggies²

Inverse variance of apflux_resid_w3, masked by $invvar=0$

apflux_ivar_w4

float32[5]

1/nanomaggies²

Inverse variance of apflux_resid_w4, masked by $invvar=0$

mw_transmission_g

float32

Galactic transmission in $g$ filter in linear units [0, 1]

mw_transmission_r

float32

Galactic transmission in $r$ filter in linear units [0, 1]

mw_transmission_z

float32

Galactic transmission in $z$ filter in linear units [0, 1]

mw_transmission_w1

float32

Galactic transmission in $W1$ filter in linear units [0, 1]

mw_transmission_w2

float32

Galactic transmission in $W2$ filter in linear units [0, 1]

mw_transmission_w3

float32

Galactic transmission in $W3$ filter in linear units [0, 1]

mw_transmission_w4

float32

Galactic transmission in $W4$ filter in linear units [0, 1]

nobs_g

int16

Number of images that contribute to the central pixel in $g$ filter for this object (not profile-weighted)

nobs_r

int16

Number of images that contribute to the central pixel in $r$ filter for this object (not profile-weighted)

nobs_z

int16

Number of images that contribute to the central pixel in $z$ filter for this object (not profile-weighted)

nobs_w1

int16

Number of images that contribute to the central pixel in $W1$ filter for this object (not profile-weighted)

nobs_w2

int16

Number of images that contribute to the central pixel in $W2$ filter for this object (not profile-weighted)

nobs_w3

int16

Number of images that contribute to the central pixel in $W3$ filter for this object (not profile-weighted)

nobs_w4

int16

Number of images that contribute to the central pixel in $W4$ filter for this object (not profile-weighted)

rchisq_g

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $g$

rchisq_r

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $r$

rchisq_z

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $z$

rchisq_w1

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $W1$

rchisq_w2

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $W2$

rchisq_w3

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $W3$

rchisq_w4

float32

Profile-weighted χ² of model fit normalized by the number of pixels in $W4$

fracflux_g

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $g$ (typically [0,1])

fracflux_r

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $r$ (typically [0,1])

fracflux_z

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $z$ (typically [0,1])

fracflux_w1

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $W1$ (typically [0,1])

fracflux_w2

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $W2$ (typically [0,1])

fracflux_w3

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $W3$ (typically [0,1])

fracflux_w4

float32

Profile-weighted fraction of the flux from other sources divided by the total flux in $W4$ (typically [0,1])

fracmasked_g

float32

Profile-weighted fraction of pixels masked from all observations of this object in $g$, strictly between [0,1]

fracmasked_r

float32

Profile-weighted fraction of pixels masked from all observations of this object in $r$, strictly between [0,1]

fracmasked_z

float32

Profile-weighted fraction of pixels masked from all observations of this object in $z$, strictly between [0,1]

fracin_g

float32

Fraction of a source's flux within the blob in $g$, near unity for real sources

fracin_r

float32

Fraction of a source's flux within the blob in $r$, near unity for real sources

fracin_z

float32

Fraction of a source's flux within the blob in $z$, near unity for real sources

anymask_g

int16

Bitwise mask set if the central pixel from any image satisfies each condition in $g$ as cataloged on the DR9 bitmasks page

anymask_r

int16

Bitwise mask set if the central pixel from any image satisfies each condition in $r$ as cataloged on the DR9 bitmasks page

anymask_z

int16

Bitwise mask set if the central pixel from any image satisfies each condition in $z$ as cataloged on the DR9 bitmasks page

allmask_g

int16

Bitwise mask set if the central pixel from all images satisfy each condition in $g$ as cataloged on the DR9 bitmasks page

allmask_r

int16

Bitwise mask set if the central pixel from all images satisfy each condition in $r$ as cataloged on the DR9 bitmasks page

allmask_z

int16

Bitwise mask set if the central pixel from all images satisfy each condition in $z$ as cataloged on the DR9 bitmasks page

wisemask_w1

uint8

W1 bitmask as cataloged on the DR9 bitmasks page

wisemask_w2

uint8

W2 bitmask as cataloged on the DR9 bitmasks page

psfsize_g

float32

arcsec

Weighted average PSF FWHM in the $g$ band

psfsize_r

float32

arcsec

Weighted average PSF FWHM in the $r$ band

psfsize_z

float32

arcsec

Weighted average PSF FWHM in the $z$ band

psfdepth_g

float32

1/nanomaggies²

For a $5\sigma$ point source detection limit in $g$, $5/\sqrt(\mathrm{psfdepth\_g})$ gives flux in nanomaggies and $-2.5[\log_{10}(5 / \sqrt(\mathrm{psfdepth\_g})) - 9]$ gives corresponding AB magnitude

psfdepth_r

float32

1/nanomaggies²

For a $5\sigma$ point source detection limit in $r$, $5/\sqrt(\mathrm{psfdepth\_r})$ gives flux in nanomaggies and $-2.5[\log_{10}(5 / \sqrt(\mathrm{psfdepth\_r})) - 9]$ gives corresponding AB magnitude

psfdepth_z

float32

1/nanomaggies²

For a $5\sigma$ point source detection limit in $z$, $5/\sqrt(\mathrm{psfdepth\_z})$ gives flux in nanomaggies and $-2.5[\log_{10}(5 / \sqrt(\mathrm{psfdepth\_z})) - 9]$ gives corresponding AB magnitude

galdepth_g

float32

1/nanomaggies²

As for psfdepth_g but for a galaxy (0.45" exp, round) detection sensitivity

galdepth_r

float32

1/nanomaggies²

As for psfdepth_r but for a galaxy (0.45" exp, round) detection sensitivity

galdepth_z

float32

1/nanomaggies²

As for psfdepth_z but for a galaxy (0.45" exp, round) detection sensitivity

nea_g

float32

arcsec²

Noise equivalent area in $g$.

nea_r

float32

arcsec²

Noise equivalent area in $r$.

nea_z

float32

arcsec²

Noise equivalent area in $z$.

blob_nea_g

float32

arcsec²

blob_nea_r

float32

arcsec²

blob_nea_z

float32

arcsec²

psfdepth_w1

float32

1/nanomaggies²

As for psfdepth_g (and also on the AB system) but for WISE W1

psfdepth_w2

float32

1/nanomaggies²

As for psfdepth_g (and also on the AB system) but for WISE W2

psfdepth_w3

float32

1/nanomaggies²

As for psfdepth_g (and also on the AB system) but for WISE W3

psfdepth_w4

float32

1/nanomaggies²

As for psfdepth_g (and also on the AB system) but for WISE W4

wise_coadd_id

char[8]

unWISE coadd brick name (corresponding to the, e.g., legacysurvey-<brick>-image-W1.fits.fz coadd file) for the center of each object

wise_x

float32

pix

X position of coordinates in the brick image stack that corresponds to wise_coadd_id (see the DR9 updates page for transformations between wise_x and bx)

wise_y

float32

pix

Y position of coordinates in the brick image stack that corresponds to wise_coadd_id (see the DR9 updates page for transformations between wise_y and by)

lc_flux_w1

float32[15]

nanomaggies

flux_w1 in each of up to fifteen unWISE coadd epochs (AB system; defaults to zero for unused entries)

lc_flux_w2

float32[15]

nanomaggies

flux_w2 in each of up to fifteen unWISE coadd epochs (AB; defaults to zero for unused entries)

lc_flux_ivar_w1

float32[15]

1/nanomaggies²

Inverse variance of lc_flux_w1 (AB system; defaults to zero for unused entries)

lc_flux_ivar_w2

float32[15]

1/nanomaggies²

Inverse variance of lc_flux_w2 (AB; defaults to zero for unused entries)

lc_nobs_w1

int16[15]

nobs_w1 in each of up to fifteen unWISE coadd epochs

lc_nobs_w2

int16[15]

nobs_w2 in each of up to fifteen unWISE coadd epochs

lc_fracflux_w1

float32[15]

fracflux_w1 in each of up to fifteen unWISE coadd epochs (defaults to zero for unused entries)

lc_fracflux_w2

float32[15]

fracflux_w2 in each of up to fifteen unWISE coadd epochs (defaults to zero for unused entries)

lc_rchisq_w1

float32[15]

rchisq_w1 in each of up to fifteen unWISE coadd epochs (defaults to zero for unused entries)

lc_rchisq_w2

float32[15]

rchisq_w2 in each of up to fifteen unWISE coadd epochs (defaults to zero for unused entries)

lc_mjd_w1

float64[15]

mjd_w1 in each of up to fifteen unWISE coadd epochs (defaults to zero for unused entries)

lc_mjd_w2

float64[15]

mjd_w2 in each of up to fifteen unWISE coadd epochs (defaults to zero for unused entries)

lc_epoch_index_w1

int16[15]

Index number of unWISE epoch for W1 (defaults to -1 for unused entries)

lc_epoch_index_w2

int16[15]

Index number of unWISE epoch for W2 (defaults to -1 for unused entries)

sersic

float32

Power-law index for the Sersic profile model (type="SER")

sersic_ivar

float32

Inverse variance of sersic

shape_r

float32

arcsec

Half-light radius of galaxy model for galaxy type type (>0)

shape_r_ivar

float32

1/arcsec²

Inverse variance of shape_r

shape_e1

float32

Ellipticity component 1 of galaxy model for galaxy type type

shape_e1_ivar

float32

Inverse variance of shape_e1

shape_e2

float32

Ellipticity component 2 of galaxy model for galaxy type type

shape_e2_ivar

float32

Inverse variance of shape_e2

Goodness-of-Fits and Morphological type

The dchisq values represent the χ² sum of all pixels in the source's blob for various models. This 5-element vector contains the χ² difference between the best-fit point source (type="PSF"), round exponential galaxy model ("REX"), de Vaucouleurs model ("DEV"), exponential model ("EXP"), and a Sersic model ("SER"), in that order. Note that the Sersic model replaces the composite ("COMP") model used in DR8 (and before). The "REX" model is a round exponential galaxy profile with a variable radius and is meant to capture slightly-extended but low signal-to-noise objects. The dchisq values are the χ² difference versus no source in this location---that is, it is the improvement from adding the given source to our model of the sky. The first element (for PSF) corresponds to a traditional notion of detection significance. Note that the dchisq values are negated so that positive values indicate better fits. We penalize models with negative flux in a band by subtracting rather than adding its χ² improvement in that band.

The rchisq values are interpreted as the reduced χ² pixel-weighted by the model fit, computed as the following sum over pixels in the blob for each object:

\begin{equation*} \chi^2 = \frac{\sum \left[ \left(\mathrm{image} - \mathrm{model}\right)^2 \times \mathrm{model} \times \mathrm{inverse\, variance}\right]}{\sum \left[ \mathrm{model} \right]} \end{equation*}

The above sum is over all images contributing to a particular filter, and can be negative-valued for sources that have a flux measured as negative in some bands where they are not detected.

The final, additional moropholigical type is "DUP." This type is set for Gaia sources that are coincident with, and so have been fit by, an extended source. No optical flux is assigned to DUP sources, but they are retained to ensure that all Gaia sources appear in the catalogs even if Tractor prefers an alternate fit.

Galactic Extinction Coefficients

The Galactic extinction values are derived from the SFD98 maps, but with updated coefficients to convert E(B-V) to the extinction in each filter. These are reported in linear units of transmission, with 1 representing a fully transparent region of the Milky Way and 0 representing a fully opaque region. The value can slightly exceed unity owing to noise in the SFD98 maps, although it is never below 0.

Eddie Schlafly has computed the extinction coefficients for the DECam filters through airmass=1.3, computed for a 7000K source spectrum as was done in the Appendix of Schlafly & Finkbeiner (2011). These coefficients are $A / E(B-V)$ = 3.995, 3.214, 2.165, 1.592, 1.211, 1.064 for the DECam $u$, $g$, $r$, $i$, $z$, $Y$ filters, respectively. Note that these are slightly different from the coefficients in Schlafly & Finkbeiner (2011). The coefficients are multiplied by the SFD98 E(B-V) values at the coordinates of each object to derive the $g$, $r$ and $z$ mw_transmission values in the Legacy Surveys catalogs. The coefficients at different airmasses only change by a small amount, with the largest effect in $g$-band where the coefficient would be 3.219 at airmass=1 and 3.202 at airmass=2.

We calculate Galactic extinction for BASS and MzLS as if they are on the DECam filter system.

The coefficients for the four WISE filters are derived from Fitzpatrick (1999), as recommended by Schlafly & Finkbeiner (2011), considered better than either the Cardelli et al. (1989) curves or the newer Fitzpatrick & Massa (2009) NIR curve (which is not vetted beyond 2 microns). These coefficients are A / E(B-V) = 0.184, 0.113, 0.0241, 0.00910.

Ellipticities

The ellipticities for each galaxy type (i.e. shape_e1, shape_e2) are different from the usual eccentricity, $e \equiv \sqrt{1 - (b/a)^2}$. In gravitational lensing studies, the ellipticity is taken to be a complex number:

\begin{equation*} \epsilon = \frac{a-b}{a+b} \exp( 2i\phi ) = \epsilon_1 + i \epsilon_2 \end{equation*}

Where ϕ is the position angle with a range of 180°, due to the ellipse's symmetry. Going between $r, \epsilon_1, \epsilon_2$ and $r, b/a, \phi$:

\begin{align*} r & = & r \\ |\epsilon| & = & \sqrt{\epsilon_1^2 + \epsilon_2^2} \\ \frac{b}{a} & = & \frac{1 - |\epsilon|}{1 + |\epsilon|} \\ \phi & = & \frac{1}{2} \arctan \frac{\epsilon_2}{\epsilon_1} \\ |\epsilon| & = & \frac{1 - b/a}{1 + b/a} \\ \epsilon_1 & = & |\epsilon| \cos(2 \phi) \\ \epsilon_2 & = & |\epsilon| \sin(2 \phi) \\ \end{align*}

Footnotes