Source code for stellarphot.differential_photometry.vsx_mags

import numpy as np
from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.table import Table

__all__ = ["calc_multi_vmag", "calc_vmag"]


[docs] def calc_multi_vmag(var_stars, star_data, comp_stars, **kwd): """ Calculate the average magnitude and standard deviation of multiple variable stars in a field. Parameters ---------- var_stars : '~astropy.table.Table' Table of variable stars known in field star_data : '~astropy.table.Table' Table of star data from observation image comp_stars : '~astropy.table.Table' Table of known comparison stars in the field, given by AAVSO kwd : Keyword arguments passed through to calc_vmag Returns ------- vmag_table : '~astropy.table.Table' Table including the name, average magnitude, and standard deviation of multiple variable stars in a field. """ name = [] vmag = [] stdev = [] for vsx in var_stars: name.append(vsx["Name"]) avg_vmag, error = calc_vmag(vsx, star_data, comp_stars, **kwd) vmag.append(avg_vmag) stdev.append(error) vmag_table = Table([name, vmag, stdev], names=("Name", "Mag", "StDev")) return vmag_table
[docs] def calc_vmag( var_stars, star_data, comp_stars, band=None, star_data_mag_column="mag_inst" ): """ Calculate the average magnitude and standard deviation of a variable star in field. Parameters ---------- var_stars : '~astropy.table.Table' Table of variable stars known in field. It should contain a column called ``coords`` with the coordinates for each variable star as astropy ``SkyCoord`` objects. star_data : '~astropy.table.Table' Table of star data from observed image(s). One column should be named ``band`` and contain the passband in which observations were done. The column containing instrumental magnitudes is passed in with the argument ``star_data_mag_column``. comp_stars : '~astropy.table.Table' Table of known comparison stars in the field, given by AAVSO. The column containing the reference magnitudes for the filter specified by filter is passed in with the argument ``comp_star_mag_column``. band : str Filter/passband in which magnitude is being calculated. star_data_mag_column : str, optional Name of the column containing the instrumental magnitudes in ``star_data``. Returns ------- avg : float Average magnitude for the variable star stdev : float Standard deviation for variable star values """ if not band: raise ValueError("You must provide a band for this function.") # Match variable stars (essentially a list of targets) to instrumental # magnitude information. var_coords = var_stars["coords"] star_data_coords = SkyCoord(ra=star_data["RA"], dec=star_data["Dec"]) v_index, v_d2d, _ = var_coords.match_to_catalog_sky(star_data_coords) rcomps = comp_stars[comp_stars["band"] == band] # Match comparison star list to instrumental magnitude information try: comp_coords = rcomps["coords"] except KeyError: comp_coords = SkyCoord(ra=rcomps["RAJ2000"], dec=rcomps["DEJ2000"]) index, d2d, _ = comp_coords.match_to_catalog_sky(star_data_coords) good = d2d < 1 * u.arcsec good_index = index[good] vmag_image = star_data[v_index][star_data_mag_column] comp_star_mag = star_data[good_index][star_data_mag_column] a_index, a_d2d, _ = comp_coords.match_to_catalog_sky(comp_coords) good_a_index = a_index[good] accepted_comp = rcomps[good_a_index]["mag"] new_mag = vmag_image - comp_star_mag + accepted_comp avg = np.nanmean(new_mag) stdev = np.nanstd(new_mag) return avg, stdev