ELAIS-N2 master catalogue

Preparation of Spitzer datafusion SWIRE data

The Spitzer catalogues were produced by the datafusion team are available in dmu0_DataFusion-Spitzer. Lucia told that the magnitudes are aperture corrected.

In the catalouge, we keep:

We keep:

  • The internal identifier (this one is only in HeDaM data);
  • The position;
  • The fluxes in aperture 2 (1.9 arcsec) for IRAC bands.
  • The Kron flux;
  • The stellarity in each band

A query of the position in the Spitzer heritage archive show that the ELAIS-N1 images were observed in 2004. Let's take this as epoch. Is ELAIS N2 different?

We do not use the MIPS fluxes as they will be extracted on MIPS maps using XID+.

In [1]:
from herschelhelp_internal import git_version
print("This notebook was run with herschelhelp_internal version: \n{}".format(git_version()))
This notebook was run with herschelhelp_internal version: 
44f1ae0 (Thu Nov 30 18:27:54 2017 +0000)
In [2]:
%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, flux_to_mag
In [3]:
OUT_DIR =  os.environ.get('TMP_DIR', "./data_tmp")
try:
    os.makedirs(OUT_DIR)
except FileExistsError:
    pass

RA_COL = "swire_ra"
DEC_COL = "swire_dec"

I - Column selection

In [4]:
imported_columns = OrderedDict({
        'internal_id': "swire_intid",
        'ra_spitzer': "swire_ra",
        'dec_spitzer': "swire_dec",
        'flux_ap2_36': "f_ap_irac_i1",
        'uncf_ap2_36': "ferr_ap_irac_i1",
        'flux_kr_36': "f_irac_i1",
        'uncf_kr_36': "ferr_irac_i1",
        'stell_36': "swire_stellarity",
        'flux_ap2_45': "f_ap_irac_i2",
        'uncf_ap2_45': "ferr_ap_irac_i2",
        'flux_kr_45': "f_irac_i2",
        'uncf_kr_45': "ferr_irac_i2",
        #'stell_45': "swire_stellarity_irac2",
        'flux_ap2_58': "f_ap_irac_i3",
        'uncf_ap2_58': "ferr_ap_irac_i3",
        'flux_kr_58': "f_irac_i3",
        'uncf_kr_58': "ferr_irac_i3",
        #'stell_58': "swire_stellarity_irac3",
        'flux_ap2_80': "f_ap_irac_i4",
        'uncf_ap2_80': "ferr_ap_irac_i4",
        'flux_kr_80': "f_irac_i4",
        'uncf_kr_80': "ferr_irac_i4",
        #'stell_80': "swire_stellarity_irac4",
    })


catalogue = Table.read("../../dmu0/dmu0_DataFusion-Spitzer/data/DF-SWIRE_ELAIS-N2.fits")[list(imported_columns)]
for column in imported_columns:
    catalogue[column].name = imported_columns[column]

epoch = 2004

# Clean table metadata
catalogue.meta = None
In [5]:
# Adding magnitude and band-flag columns
for col in catalogue.colnames:
    if col.startswith('f_'):
        errcol = "ferr{}".format(col[1:])
        
        magnitude, error = flux_to_mag(
            np.array(catalogue[col])/1.e6, np.array(catalogue[errcol])/1.e6)
        # Note that some fluxes are 0.
        
        catalogue.add_column(Column(magnitude, name="m{}".format(col[1:])))
        catalogue.add_column(Column(error, name="m{}".format(errcol[1:])))
        
        # Band-flag column
        if "ap" not in col:
            catalogue.add_column(Column(np.zeros(len(catalogue), dtype=bool), name="flag{}".format(col[1:])))
/opt/herschelhelp_internal/herschelhelp_internal/utils.py:76: RuntimeWarning: invalid value encountered in log10
  magnitudes = 2.5 * (23 - np.log10(fluxes)) - 48.6
In [6]:
catalogue[:10].show_in_notebook()
Out[6]:
<Table masked=True length=10>
idxswire_intidswire_raswire_decf_ap_irac_i1ferr_ap_irac_i1f_irac_i1ferr_irac_i1swire_stellarityf_ap_irac_i2ferr_ap_irac_i2f_irac_i2ferr_irac_i2f_ap_irac_i3ferr_ap_irac_i3f_irac_i3ferr_irac_i3f_ap_irac_i4ferr_ap_irac_i4f_irac_i4ferr_irac_i4m_ap_irac_i1merr_ap_irac_i1m_irac_i1merr_irac_i1flag_irac_i1m_ap_irac_i2merr_ap_irac_i2m_irac_i2merr_irac_i2flag_irac_i2m_ap_irac_i3merr_ap_irac_i3m_irac_i3merr_irac_i3flag_irac_i3m_ap_irac_i4merr_ap_irac_i4m_irac_i4merr_irac_i4flag_irac_i4
degdeguJyuJyuJyuJyuJyuJyuJyuJyuJyuJyuJyuJyuJyuJyuJyuJy
01233719248.27530139.72012933.694.3670.034.950.95nannannannannannannannannannannannan20.08124747250.14051082970519.28678968410.0767441698351FalsenannannannanFalsenannannannanFalsenannannannanFalse
11234159248.26913139.72833932.792.07110.683.30.0nannannannannannannannannannannannan20.11064645830.068541443850218.78982712380.0323719685192FalsenannannannanFalsenannannannanFalsenannannannanFalse
21234334248.26685139.73128928.352.0598.613.080.01nannannannannannannannannannannannan20.26861734190.078510025388218.9151976030.0339120526382FalsenannannannanFalsenannannannanFalsenannannannanFalse
31234300248.27339139.733599131.742.43147.162.410.36nannannannan117.8110.61109.838.62nannannannan18.60070585220.020026863348718.48052555210.0177808117251FalsenannannannanFalse18.722044610.097781691982718.7981975410.0852139313941FalsenannannannanFalse
41234511248.26427139.73486933.282.3698.883.680.47nannannannannannannannannannannannan20.0945417060.07699331259718.91222885560.0404076581059FalsenannannannanFalsenannannannanFalsenannannannanFalse
51234350248.27258139.73437930.411.3836.361.670.88nannannannannannannannannannannannan20.19245894960.04927050189319.99844031360.0498674219457FalsenannannannanFalsenannannannanFalsenannannannanFalse
61234418248.27072139.734939228.34.1168.463.00.99nannannannannannannannannannannannan18.00373522130.019498547698218.33375800910.0193352048811FalsenannannannanFalsenannannannanFalsenannannannanFalse
71234420248.27261139.735839246.533.02179.532.181.0nannannannannannannannannannannannan17.92032556070.013300301538818.26465742280.0131838964316FalsenannannannanFalsenannannannanFalsenannannannanFalse
81234485248.27217139.73771940.381.4653.781.980.04nannannannannannannannannannannannan19.88458421350.03925643533819.57344800530.039973181209FalsenannannannanFalsenannannannanFalsenannannannanFalse
91234494248.27484139.73913924.641.224.341.290.71nannannannannannannannannannannannan20.42089824130.052876763218720.43419856530.0575431267107FalsenannannannanFalsenannannannanFalsenannannannanFalse

II - Removal of duplicated sources

We remove duplicated objects from the input catalogues.

In [7]:
SORT_COLS = ['ferr_ap_irac_i1', 'ferr_ap_irac_i2', 'ferr_ap_irac_i3', 'ferr_ap_irac_i4']
FLAG_NAME = "swire_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])))
/opt/anaconda3/envs/herschelhelp_internal/lib/python3.6/site-packages/astropy/table/column.py:1096: MaskedArrayFutureWarning: setting an item on a masked array which has a shared mask will not copy the mask and also change the original mask array in the future.
Check the NumPy 1.11 release notes for more information.
  ma.MaskedArray.__setitem__(self, index, value)
The initial catalogue had 273650 sources.
The cleaned catalogue has 273392 sources (258 removed).
The cleaned catalogue has 258 sources flagged as having been cleaned

III - Astrometry correction

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.

In [8]:
gaia = Table.read("../../dmu0/dmu0_GAIA/data/GAIA_ELAIS-N2.fits")
gaia_coords = SkyCoord(gaia['ra'], gaia['dec'])
In [9]:
nb_astcor_diag_plot(catalogue[RA_COL], catalogue[DEC_COL], 
                    gaia_coords.ra, gaia_coords.dec)
In [10]:
delta_ra, delta_dec =  astrometric_correction(
    SkyCoord(catalogue[RA_COL], catalogue[DEC_COL]),
    gaia_coords
)

print("RA correction: {}".format(delta_ra))
print("Dec correction: {}".format(delta_dec))
RA correction: -0.03311454242975742 arcsec
Dec correction: -0.06647202361023119 arcsec
In [11]:
catalogue[RA_COL] +=  delta_ra.to(u.deg)
catalogue[DEC_COL] += delta_dec.to(u.deg)
In [12]:
nb_astcor_diag_plot(catalogue[RA_COL], catalogue[DEC_COL], 
                    gaia_coords.ra, gaia_coords.dec)

IV - Flagging Gaia objects

In [13]:
catalogue.add_column(
    gaia_flag_column(SkyCoord(catalogue[RA_COL], catalogue[DEC_COL]), epoch, gaia)
)
In [14]:
GAIA_FLAG_NAME = "swire_flag_gaia"

catalogue['flag_gaia'].name = GAIA_FLAG_NAME
print("{} sources flagged.".format(np.sum(catalogue[GAIA_FLAG_NAME] > 0)))
22663 sources flagged.

V - Flagging objects near bright stars

VI - Saving to disk

In [15]:
catalogue.write("{}/SWIRE.fits".format(OUT_DIR), overwrite=True)