This catalogue comes from dmu0_RCSLenS
.
In the catalogue, we keep:
id
as unique object identifier;The missing values seems to be encoded as -99. but there are also quite some 99. magnitudes.
The “sensible” range of magnitudes seems to go from 14 to 37 (depending on the bands and given that 37 is really faint and may not be reliable). In addition to that there are some very low magnitudes under -40. and very high ones above 90. We don't know the meaning of these extreme values so we are removing all the negative magnitudes and and those above 80.
We are also removing the sources for which we have no magnitude information given the modifications above.
from herschelhelp_internal import git_version
print("This notebook was run with herschelhelp_internal version: \n{}".format(git_version()))
%matplotlib inline
#%config InlineBackend.figure_format = 'svg'
import matplotlib.pyplot as plt
plt.rc('figure', figsize=(10, 6))
from collections import OrderedDict
import os
from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.table import Column, Table
import numpy as np
from herschelhelp_internal.flagging import gaia_flag_column
from herschelhelp_internal.masterlist import nb_astcor_diag_plot, remove_duplicates
from herschelhelp_internal.utils import astrometric_correction, mag_to_flux
OUT_DIR = os.environ.get('TMP_DIR', "./data_tmp")
try:
os.makedirs(OUT_DIR)
except FileExistsError:
pass
RA_COL = "rcs_ra"
DEC_COL = "rcs_dec"
imported_columns = OrderedDict({
"id": "rcs_id",
"ALPHA_J2000": "rcs_ra",
"DELTA_J2000": "rcs_dec",
"CLASS_STAR": "rcs_stellarity",
"MAG_g": "m_rcs_g",
"MAGERR_g": "merr_rcs_g",
"MAG_r": "m_rcs_r",
"MAGERR_r": "merr_rcs_r",
"MAG_i": "m_rcs_i",
"MAGERR_i": "merr_rcs_i",
"MAG_z": "m_rcs_z",
"MAGERR_z": "merr_rcs_z",
"MAG_y": "m_rcs_y",
"MAGERR_y": "merr_rcs_y"
})
catalogue = Table.read("../../dmu0/dmu0_RCSLenS/data/RCSLenS_Lockman-SWIRE.fits")[list(imported_columns)]
for column in imported_columns:
catalogue[column].name = imported_columns[column]
epoch = 2017
# Clean table metadata
catalogue.meta = None
# Adding flux and band-flag columns
for col in catalogue.colnames:
if col.startswith('m_'):
errcol = "merr{}".format(col[1:])
# Remove missing values (-99, 99?) and extreme magnitudes (see above).
mask = (catalogue[col] < 0) | (catalogue[col] > 80)
catalogue[col][mask] = np.nan
catalogue[errcol][mask] = np.nan
flux, error = mag_to_flux(np.array(catalogue[col]), np.array(catalogue[errcol]))
# Fluxes are added in µJy
catalogue.add_column(Column(flux * 1.e6, name="f{}".format(col[1:])))
catalogue.add_column(Column(error * 1.e6, name="f{}".format(errcol[1:])))
# We add NAN filled aperture columns because no aperture fluxes are present
# EDIT: Better not add empty columns if we can avoid.
#nancol = np.zeros(len(catalogue))
#nancol.fill(np.nan)
#catalogue.add_column(Column(nancol,
# name="m_ap{}".format(col[1:])))
#catalogue.add_column(Column(nancol,
# name="merr_ap{}".format(col[1:])))
#catalogue.add_column(Column(nancol,
# name="f_ap{}".format(col[1:])))
#catalogue.add_column(Column(nancol,
# name="ferr_ap{}".format(col[1:])))
# Band-flag column
if 'ap' not in col:
catalogue.add_column(Column(np.zeros(len(catalogue), dtype=bool), name="flag{}".format(col[1:])))
# TODO: Set to True the flag columns for fluxes that should not be used for SED fitting.
catalogue[:10].show_in_notebook()
orig_len = len(catalogue)
mask = ~(np.isnan(catalogue['m_rcs_g'])
& np.isnan(catalogue['m_rcs_r'])
& np.isnan(catalogue['m_rcs_i'])
& np.isnan(catalogue['m_rcs_z'])
& np.isnan(catalogue['m_rcs_y'])
)
catalogue = catalogue[mask]
print(orig_len-len(catalogue), 'out of ', orig_len, ' objects removed due to all nan magnitudes.')
We remove duplicated objects from the input catalogues.
SORT_COLS = []
FLAG_NAME = 'rcs_flag_cleaned'
nb_orig_sources = len(catalogue)
catalogue = remove_duplicates(
catalogue, RA_COL, DEC_COL,
sort_col= SORT_COLS,
flag_name=FLAG_NAME)
nb_sources = len(catalogue)
print("The initial catalogue had {} sources.".format(nb_orig_sources))
print("The cleaned catalogue has {} sources ({} removed).".format(nb_sources, nb_orig_sources - nb_sources))
print("The cleaned catalogue has {} sources flagged as having been cleaned".format(np.sum(catalogue[FLAG_NAME])))
We match the astrometry to the Gaia one. We limit the Gaia catalogue to sources with a g band flux between the 30th and the 70th percentile. Some quick tests show that this give the lower dispersion in the results.
gaia = Table.read("../../dmu0/dmu0_GAIA/data/GAIA_Lockman-SWIRE.fits")
gaia_coords = SkyCoord(gaia['ra'], gaia['dec'])
nb_astcor_diag_plot(catalogue[RA_COL], catalogue[DEC_COL],
gaia_coords.ra, gaia_coords.dec, near_ra0=True)
delta_ra, delta_dec = astrometric_correction(
SkyCoord(catalogue[RA_COL], catalogue[DEC_COL]),
gaia_coords, near_ra0=True
)
print("RA correction: {}".format(delta_ra))
print("Dec correction: {}".format(delta_dec))
catalogue[RA_COL] += delta_ra.to(u.deg)
catalogue[DEC_COL] += delta_dec.to(u.deg)
nb_astcor_diag_plot(catalogue[RA_COL], catalogue[DEC_COL],
gaia_coords.ra, gaia_coords.dec, near_ra0=True)
catalogue.add_column(
gaia_flag_column(SkyCoord(catalogue[RA_COL], catalogue[DEC_COL]), epoch, gaia)
)
GAIA_FLAG_NAME = "rcs_flag_gaia"
catalogue['flag_gaia'].name = GAIA_FLAG_NAME
print("{} sources flagged.".format(np.sum(catalogue[GAIA_FLAG_NAME] > 0)))
catalogue.write("{}/RCSLenS.fits".format(OUT_DIR), overwrite=True)