{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# HATLAS-NGP master catalogue\n",
    "\n",
    "This notebook presents the merge of the various pristine catalogues to produce HELP mater catalogue on GAMA-12."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This notebook was run with herschelhelp_internal version: \n",
      "017bb1e (Mon Jun 18 14:58:59 2018 +0100)\n",
      "This notebook was executed on: \n",
      "2019-02-04 18:06:03.294306\n"
     ]
    }
   ],
   "source": [
    "from herschelhelp_internal import git_version\n",
    "print(\"This notebook was run with herschelhelp_internal version: \\n{}\".format(git_version()))\n",
    "import datetime\n",
    "print(\"This notebook was executed on: \\n{}\".format(datetime.datetime.now()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/pyenv/versions/3.7.2/lib/python3.7/site-packages/matplotlib/__init__.py:855: MatplotlibDeprecationWarning: \n",
      "examples.directory is deprecated; in the future, examples will be found relative to the 'datapath' directory.\n",
      "  \"found relative to the 'datapath' directory.\".format(key))\n",
      "/opt/pyenv/versions/3.7.2/lib/python3.7/site-packages/matplotlib/__init__.py:846: MatplotlibDeprecationWarning: \n",
      "The text.latex.unicode rcparam was deprecated in Matplotlib 2.2 and will be removed in 3.1.\n",
      "  \"2.2\", name=key, obj_type=\"rcparam\", addendum=addendum)\n",
      "/opt/pyenv/versions/3.7.2/lib/python3.7/site-packages/seaborn/apionly.py:9: UserWarning: As seaborn no longer sets a default style on import, the seaborn.apionly module is deprecated. It will be removed in a future version.\n",
      "  warnings.warn(msg, UserWarning)\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "#%config InlineBackend.figure_format = 'svg'\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rc('figure', figsize=(10, 6))\n",
    "\n",
    "import os\n",
    "import time\n",
    "\n",
    "from astropy import units as u\n",
    "from astropy.coordinates import SkyCoord\n",
    "from astropy.table import Column, Table\n",
    "import numpy as np\n",
    "from pymoc import MOC\n",
    "\n",
    "from herschelhelp_internal.masterlist import merge_catalogues, nb_merge_dist_plot, specz_merge\n",
    "from herschelhelp_internal.utils import coords_to_hpidx, ebv, gen_help_id, inMoc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "TMP_DIR = os.environ.get('TMP_DIR', \"./data_tmp\")\n",
    "OUT_DIR = os.environ.get('OUT_DIR', \"./data\")\n",
    "SUFFIX = os.environ.get('SUFFIX', time.strftime(\"_%Y%m%d\"))\n",
    "\n",
    "try:\n",
    "    os.makedirs(OUT_DIR)\n",
    "except FileExistsError:\n",
    "    pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## I - Reading the prepared pristine catalogues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "decals = Table.read(\"{}/DECaLS.fits\".format(TMP_DIR))\n",
    "ps1 = Table.read(\"{}/PS1.fits\".format(TMP_DIR))\n",
    "las = Table.read(\"{}/UKIDSS-LAS.fits\".format(TMP_DIR))\n",
    "legacy = Table.read(\"{}/LegacySurvey.fits\".format(TMP_DIR))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## II - Merging tables\n",
    "\n",
    "We first merge the optical catalogues and then add the infrared ones: DECaLS, HSC, KIDS, PanSTARRS, UKIDSS-LAS, and VISTA-VIKING.\n",
    "\n",
    "At every step, we look at the distribution of the distances separating the sources from one catalogue to the other (within a maximum radius) to determine the best cross-matching radius."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DECaLS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue = decals\n",
    "master_catalogue['decals_ra'].name = 'ra'\n",
    "master_catalogue['decals_dec'].name = 'dec'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Add PanSTARRS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "nb_merge_dist_plot(\n",
    "    SkyCoord(master_catalogue['ra'], master_catalogue['dec']),\n",
    "    SkyCoord(ps1['ps1_ra'], ps1['ps1_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 0.8 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, ps1, \"ps1_ra\", \"ps1_dec\", radius=0.8*u.arcsec)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Add UKIDSS LAS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "nb_merge_dist_plot(\n",
    "    SkyCoord(master_catalogue['ra'], master_catalogue['dec']),\n",
    "    SkyCoord(las['las_ra'], las['las_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 0.8 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, las, \"las_ra\", \"las_dec\", radius=0.8*u.arcsec)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Add Legacy Survey"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "nb_merge_dist_plot(\n",
    "    SkyCoord(master_catalogue['ra'], master_catalogue['dec']),\n",
    "    SkyCoord(legacy['legacy_ra'], legacy['legacy_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 0.8 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, legacy, \"legacy_ra\", \"legacy_dec\", radius=0.8*u.arcsec)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cleaning\n",
    "\n",
    "When we merge the catalogues, astropy masks the non-existent values (e.g. when a row comes only from a catalogue and has no counterparts in the other, the columns from the latest are masked for that row). We indicate to use NaN for masked values for floats columns, False for flag columns and -1 for ID columns."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for col in master_catalogue.colnames:\n",
    "    if \"m_\" in col or \"merr_\" in col or \"f_\" in col or \"ferr_\" in col or \"stellarity\" in col:\n",
    "        master_catalogue[col].fill_value = np.nan\n",
    "    elif \"flag\" in col:\n",
    "        master_catalogue[col].fill_value = 0\n",
    "    elif \"id\" in col:\n",
    "        master_catalogue[col].fill_value = -1\n",
    "        \n",
    "master_catalogue = master_catalogue.filled()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<i>Table length=10</i>\n",
       "<table id=\"table139676683393568-587642\" class=\"table-striped table-bordered table-condensed\">\n",
       "<thead><tr><th>idx</th><th>decals_id</th><th>ra</th><th>dec</th><th>f_decam_z</th><th>ferr_decam_z</th><th>f_ap_decam_z</th><th>ferr_ap_decam_z</th><th>m_decam_z</th><th>merr_decam_z</th><th>flag_decam_z</th><th>m_ap_decam_z</th><th>merr_ap_decam_z</th><th>decals_stellarity</th><th>decals_flag_cleaned</th><th>decals_flag_gaia</th><th>flag_merged</th><th>ps1_id</th><th>m_ap_gpc1_g</th><th>merr_ap_gpc1_g</th><th>m_gpc1_g</th><th>merr_gpc1_g</th><th>m_ap_gpc1_r</th><th>merr_ap_gpc1_r</th><th>m_gpc1_r</th><th>merr_gpc1_r</th><th>m_ap_gpc1_i</th><th>merr_ap_gpc1_i</th><th>m_gpc1_i</th><th>merr_gpc1_i</th><th>m_ap_gpc1_z</th><th>merr_ap_gpc1_z</th><th>m_gpc1_z</th><th>merr_gpc1_z</th><th>m_ap_gpc1_y</th><th>merr_ap_gpc1_y</th><th>m_gpc1_y</th><th>merr_gpc1_y</th><th>f_ap_gpc1_g</th><th>ferr_ap_gpc1_g</th><th>f_gpc1_g</th><th>ferr_gpc1_g</th><th>flag_gpc1_g</th><th>f_ap_gpc1_r</th><th>ferr_ap_gpc1_r</th><th>f_gpc1_r</th><th>ferr_gpc1_r</th><th>flag_gpc1_r</th><th>f_ap_gpc1_i</th><th>ferr_ap_gpc1_i</th><th>f_gpc1_i</th><th>ferr_gpc1_i</th><th>flag_gpc1_i</th><th>f_ap_gpc1_z</th><th>ferr_ap_gpc1_z</th><th>f_gpc1_z</th><th>ferr_gpc1_z</th><th>flag_gpc1_z</th><th>f_ap_gpc1_y</th><th>ferr_ap_gpc1_y</th><th>f_gpc1_y</th><th>ferr_gpc1_y</th><th>flag_gpc1_y</th><th>ps1_flag_cleaned</th><th>ps1_flag_gaia</th><th>las_id</th><th>m_ukidss_y</th><th>merr_ukidss_y</th><th>m_ap_ukidss_y</th><th>merr_ap_ukidss_y</th><th>m_ukidss_j</th><th>merr_ukidss_j</th><th>m_ap_ukidss_j</th><th>merr_ap_ukidss_j</th><th>m_ap_ukidss_h</th><th>merr_ap_ukidss_h</th><th>m_ukidss_h</th><th>merr_ukidss_h</th><th>m_ap_ukidss_k</th><th>merr_ap_ukidss_k</th><th>m_ukidss_k</th><th>merr_ukidss_k</th><th>las_stellarity</th><th>f_ukidss_y</th><th>ferr_ukidss_y</th><th>flag_ukidss_y</th><th>f_ap_ukidss_y</th><th>ferr_ap_ukidss_y</th><th>f_ukidss_j</th><th>ferr_ukidss_j</th><th>flag_ukidss_j</th><th>f_ap_ukidss_j</th><th>ferr_ap_ukidss_j</th><th>f_ap_ukidss_h</th><th>ferr_ap_ukidss_h</th><th>f_ukidss_h</th><th>ferr_ukidss_h</th><th>flag_ukidss_h</th><th>f_ap_ukidss_k</th><th>ferr_ap_ukidss_k</th><th>f_ukidss_k</th><th>ferr_ukidss_k</th><th>flag_ukidss_k</th><th>las_flag_cleaned</th><th>las_flag_gaia</th><th>legacy_id</th><th>f_90prime_g</th><th>ferr_90prime_g</th><th>f_ap_90prime_g</th><th>ferr_ap_90prime_g</th><th>f_90prime_r</th><th>ferr_90prime_r</th><th>f_ap_90prime_r</th><th>ferr_ap_90prime_r</th><th>f_mosaic_z</th><th>ferr_mosaic_z</th><th>f_ap_mosaic_z</th><th>ferr_ap_mosaic_z</th><th>legacy_stellarity</th><th>m_90prime_g</th><th>merr_90prime_g</th><th>flag_90prime_g</th><th>m_ap_90prime_g</th><th>merr_ap_90prime_g</th><th>m_90prime_r</th><th>merr_90prime_r</th><th>flag_90prime_r</th><th>m_ap_90prime_r</th><th>merr_ap_90prime_r</th><th>m_mosaic_z</th><th>merr_mosaic_z</th><th>flag_mosaic_z</th><th>m_ap_mosaic_z</th><th>merr_ap_mosaic_z</th><th>legacy_flag_cleaned</th><th>legacy_flag_gaia</th></tr></thead>\n",
       "<thead><tr><th></th><th></th><th>deg</th><th>deg</th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th>uJy</th><th>uJy</th><th></th><th></th><th>uJy</th><th>uJy</th><th></th><th></th><th>uJy</th><th>uJy</th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead>\n",
       "<tr><td>0</td><td>46819201918</td><td>204.24623364690666</td><td>24.61381656471025</td><td>4373397.5</td><td>267.88895</td><td>28302.258</td><td>0.96506745</td><td>7.2979507</td><td>6.65059e-05</td><td>False</td><td>12.770447</td><td>3.7022088e-05</td><td>0.05</td><td>False</td><td>0</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>1</td><td>46819201636</td><td>204.24675135690572</td><td>24.610793285560703</td><td>1200680.0</td><td>46.788673</td><td>28211.62</td><td>0.9650656</td><td>8.701431</td><td>4.230949e-05</td><td>False</td><td>12.77393</td><td>3.714096e-05</td><td>0.05</td><td>False</td><td>0</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>2</td><td>46687401831</td><td>203.20147414690618</td><td>24.347074624808485</td><td>1879845.8</td><td>390.5642</td><td>21504.203</td><td>0.9615319</td><td>8.214695</td><td>0.00022557685</td><td>False</td><td>13.068691</td><td>4.8547256e-05</td><td>0.05</td><td>False</td><td>0</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>3</td><td>46687401830</td><td>203.20057828563196</td><td>24.346788885174476</td><td>1396961.5</td><td>525.3209</td><td>19180.127</td><td>0.96153474</td><td>8.537041</td><td>0.00040828608</td><td>False</td><td>13.192871</td><td>5.4429933e-05</td><td>0.05</td><td>False</td><td>0</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>4</td><td>46948800218</td><td>200.16491173005764</td><td>24.64899114443905</td><td>696066.5</td><td>161.31393</td><td>16602.887</td><td>0.9747043</td><td>9.293373</td><td>0.00025162016</td><td>False</td><td>13.349541</td><td>6.3740226e-05</td><td>0.05</td><td>False</td><td>1</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>5</td><td>47077600545</td><td>194.36668287423763</td><td>24.95205984077053</td><td>329692.22</td><td>103.88864</td><td>17586.297</td><td>1.091898</td><td>10.104729</td><td>0.00034212408</td><td>False</td><td>13.287064</td><td>6.741119e-05</td><td>0.05</td><td>False</td><td>1</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>6</td><td>47338802190</td><td>195.29230358740864</td><td>25.62136692030569</td><td>54734.02</td><td>12.249889</td><td>12506.658</td><td>0.7930579</td><td>12.054359</td><td>0.000242996</td><td>False</td><td>13.657146</td><td>6.884746e-05</td><td>0.05</td><td>False</td><td>0</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>7</td><td>46024501095</td><td>197.18236774650055</td><td>22.971935378933907</td><td>435286.62</td><td>127.99526</td><td>12290.724</td><td>0.7820842</td><td>9.803062</td><td>0.00031925878</td><td>False</td><td>13.676056</td><td>6.908765e-05</td><td>0.05</td><td>False</td><td>1</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>8</td><td>47338802047</td><td>195.33366919081163</td><td>25.60112372717672</td><td>325552.97</td><td>87.970245</td><td>12161.985</td><td>0.7930568</td><td>10.11845</td><td>0.00029338535</td><td>False</td><td>13.687489</td><td>7.079851e-05</td><td>0.05</td><td>False</td><td>2</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "<tr><td>9</td><td>45890801759</td><td>194.96413242814165</td><td>22.77119624983628</td><td>106064.09</td><td>16.611065</td><td>12114.346</td><td>0.79904735</td><td>11.336082</td><td>0.00017004089</td><td>False</td><td>13.69175</td><td>7.1613824e-05</td><td>0.05</td><td>False</td><td>0</td><td>False</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>False</td><td>0</td><td>-1</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>False</td><td>nan</td><td>nan</td><td>False</td><td>0</td></tr>\n",
       "</table><style>table.dataTable {clear: both; width: auto !important; margin: 0 !important;}\n",
       ".dataTables_info, .dataTables_length, .dataTables_filter, .dataTables_paginate{\n",
       "display: inline-block; margin-right: 1em; }\n",
       ".paginate_button { margin-right: 5px; }\n",
       "</style>\n",
       "<script>\n",
       "\n",
       "var astropy_sort_num = function(a, b) {\n",
       "    var a_num = parseFloat(a);\n",
       "    var b_num = parseFloat(b);\n",
       "\n",
       "    if (isNaN(a_num) && isNaN(b_num))\n",
       "        return ((a < b) ? -1 : ((a > b) ? 1 : 0));\n",
       "    else if (!isNaN(a_num) && !isNaN(b_num))\n",
       "        return ((a_num < b_num) ? -1 : ((a_num > b_num) ? 1 : 0));\n",
       "    else\n",
       "        return isNaN(a_num) ? -1 : 1;\n",
       "}\n",
       "\n",
       "require.config({paths: {\n",
       "    datatables: 'https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min'\n",
       "}});\n",
       "require([\"datatables\"], function(){\n",
       "    console.log(\"$('#table139676683393568-587642').dataTable()\");\n",
       "    \n",
       "jQuery.extend( jQuery.fn.dataTableExt.oSort, {\n",
       "    \"optionalnum-asc\": astropy_sort_num,\n",
       "    \"optionalnum-desc\": function (a,b) { return -astropy_sort_num(a, b); }\n",
       "});\n",
       "\n",
       "    $('#table139676683393568-587642').dataTable({\n",
       "        order: [],\n",
       "        pageLength: 50,\n",
       "        lengthMenu: [[10, 25, 50, 100, 500, 1000, -1], [10, 25, 50, 100, 500, 1000, 'All']],\n",
       "        pagingType: \"full_numbers\",\n",
       "        columnDefs: [{targets: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 48, 49, 50, 51, 53, 54, 55, 56, 58, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 127, 128, 129, 130, 132, 133, 135], type: \"optionalnum\"}]\n",
       "    });\n",
       "});\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "master_catalogue[:10].show_in_notebook()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## III - Merging flags and stellarity\n",
    "\n",
    "Each pristine catalogue contains a flag indicating if the source was associated to a another nearby source that was removed during the cleaning process.  We merge these flags in a single one."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "flag_cleaned_columns = [column for column in master_catalogue.colnames\n",
    "                        if 'flag_cleaned' in column]\n",
    "\n",
    "flag_column = np.zeros(len(master_catalogue), dtype=bool)\n",
    "for column in flag_cleaned_columns:\n",
    "    flag_column |= master_catalogue[column]\n",
    "    \n",
    "master_catalogue.add_column(Column(data=flag_column, name=\"flag_cleaned\"))\n",
    "master_catalogue.remove_columns(flag_cleaned_columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each pristine catalogue contains a flag indicating the probability of a source being a Gaia object (0: not a Gaia object, 1: possibly, 2: probably, 3: definitely).  We merge these flags taking the highest value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "flag_gaia_columns = [column for column in master_catalogue.colnames\n",
    "                     if 'flag_gaia' in column]\n",
    "\n",
    "master_catalogue.add_column(Column(\n",
    "    data=np.max([master_catalogue[column] for column in flag_gaia_columns], axis=0),\n",
    "    name=\"flag_gaia\"\n",
    "))\n",
    "master_catalogue.remove_columns(flag_gaia_columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each prisitine catalogue may contain one or several stellarity columns indicating the probability (0 to 1) of each source being a star.  We merge these columns taking the highest value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "decals_stellarity, las_stellarity, legacy_stellarity\n"
     ]
    }
   ],
   "source": [
    "stellarity_columns = [column for column in master_catalogue.colnames\n",
    "                      if 'stellarity' in column]\n",
    "\n",
    "print(\", \".join(stellarity_columns))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n",
    "# We create an masked array with all the stellarities and get the maximum value, as well as its\n",
    "# origin.  Some sources may not have an associated stellarity.\n",
    "stellarity_array = np.array([master_catalogue[column] for column in stellarity_columns])\n",
    "stellarity_array = np.ma.masked_array(stellarity_array, np.isnan(stellarity_array))\n",
    "\n",
    "max_stellarity = np.max(stellarity_array, axis=0)\n",
    "max_stellarity.fill_value = np.nan\n",
    "\n",
    "no_stellarity_mask = max_stellarity.mask\n",
    "\n",
    "master_catalogue.add_column(Column(data=max_stellarity.filled(), name=\"stellarity\"))\n",
    "\n",
    "stellarity_origin = np.full(len(master_catalogue), \"NO_INFORMATION\", dtype=\"S20\")\n",
    "stellarity_origin[~no_stellarity_mask] = np.array(stellarity_columns)[np.argmax(stellarity_array, axis=0)[~no_stellarity_mask]]\n",
    "\n",
    "master_catalogue.add_column(Column(data=stellarity_origin, name=\"stellarity_origin\"))\n",
    "\n",
    "master_catalogue.remove_columns(stellarity_columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## IV - Adding E(B-V) column"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue.add_column(\n",
    "    ebv(master_catalogue['ra'], master_catalogue['dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## V - Adding HELP unique identifiers and field columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue.add_column(Column(gen_help_id(master_catalogue['ra'], master_catalogue['dec']),\n",
    "                                   name=\"help_id\"))\n",
    "master_catalogue.add_column(Column(np.full(len(master_catalogue), \"NGP\", dtype='<U18'),\n",
    "                                   name=\"field\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OK!\n"
     ]
    }
   ],
   "source": [
    "# Check that the HELP Ids are unique\n",
    "if len(master_catalogue) != len(np.unique(master_catalogue['help_id'])):\n",
    "    print(\"The HELP IDs are not unique!!!\")\n",
    "else:\n",
    "    print(\"OK!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## V.b Add specz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "specz =  Table.read(\"../../dmu23/dmu23_NGP/data/NGP-specz-v2.0.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "specz.rename_column('RA', 'ra')\n",
    "specz.rename_column('DEC', 'dec')\n",
    "specz.rename_column('OBJID', 'specz_id')\n",
    "specz.rename_column('Z_SPEC', 'z_spec')\n",
    "specz.rename_column('Z_SOURCE', 'z_source')\n",
    "specz.rename_column('Z_QUAL', 'z_qual')\n",
    "specz.rename_column('REL', 'rel')\n",
    "specz.rename_column('AGN', 'agn')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEKCAYAAADpfBXhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAH95JREFUeJzt3Xt0nHd95/H3dy662JYlXxTbkmzLzt12YidRYmdDIQukCWwg5RBKoJDSA2ugsFw2bLfptqFwypbunqVdSFuaDSyBEggnyQEnOKFeCA3Q2IniOL47Mbbjq2xZsiVZ1m1mvvvHPGOPZUkzkkYz9qPP65w58zzP/OZ5vuPLZ37ze27m7oiISLhESl2AiIgUnsJdRCSEFO4iIiGkcBcRCSGFu4hICCncRURCSOEuIhJCCncRkRBSuIuIhFCsVBuePXu2NzY2lmrzIiIXpZdffvm4u9fmaleycG9sbKS5ublUmxcRuSiZ2Rv5tNOwjIhICCncRURCKGe4m1mFmb1oZq+a2TYz+9IQbT5iZq1mtil4fGxiyhURkXzkM+beB7zV3U+ZWRz4tZk94+7rB7V7zN0/XfgSRURktHKGu6cv+H4qmI0HD10EXkTkApbXmLuZRc1sE3AMWOfuG4Zo9l4z22xmj5vZ/GHWs9rMms2subW1dRxli4jISPIKd3dPuvsKoAG4ycyWDWryFNDo7tcC64BHhlnPQ+7e5O5NtbU5D9MUEZExGtXRMu5+EngOuGPQ8jZ37wtmHwZuKEx5IiIyFvkcLVNrZjXBdCVwG7BzUJt5WbPvBnYUskgRERmdfI6WmQc8YmZR0l8GP3L3p83sy0Czu68BPmNm7wYSQDvwkYkquNge3bD/vGUfXLmgBJWIiOQvn6NlNgPXDbH8gazp+4H7C1uaiIiMlc5QFREJIYW7iEgIKdxFREJI4S4iEkIKdxGREFK4i4iEkMJdRCSEFO4iIiGkcBcRCSGFu4hICCncRURCSOEuIhJCCncRkRBSuIuIhJDCXUQkhBTuIiIhpHAXEQkhhbuISAgp3EVEQkjhLiISQgp3EZEQyhnuZlZhZi+a2atmts3MvjREm3Ize8zMdpvZBjNrnIhiRUQkP/n03PuAt7r7cmAFcIeZrRrU5qPACXe/DPhb4G8KW6aIiIxGznD3tFPBbDx4+KBmdwGPBNOPA28zMytYlSIiMip5jbmbWdTMNgHHgHXuvmFQk3rgAIC7J4AOYNYQ61ltZs1m1tza2jq+ykVEZFh5hbu7J919BdAA3GRmy8ayMXd/yN2b3L2ptrZ2LKsQEZE8jOpoGXc/CTwH3DHopUPAfAAziwHVQFshChQRkdHL52iZWjOrCaYrgduAnYOarQH+MJi+G/iFuw8elxcRkSKJ5dFmHvCImUVJfxn8yN2fNrMvA83uvgb4FvA9M9sNtAP3TFjFIiKSU85wd/fNwHVDLH8ga7oXeF9hSxMRkbHSGaoiIiGkcBcRCSGFu4hICCncRURCSOEuIhJC+RwKKYM8umH/ecs+uHJBCSoRERmaeu4iIiGkcBcRCSGFu4hICCncRURCSOEuIhJCCncRkRBSuIuIhJDCXUQkhBTuIiIhpHAXEQkhhbuISAgp3EVEQkjhLiISQgp3EZEQUriLiIRQznA3s/lm9pyZbTezbWb22SHa3GpmHWa2KXg8MDHliohIPvK5WUcCuM/dN5pZFfCyma1z9+2D2v3K3e8sfIkiIjJaOXvu7n7E3TcG013ADqB+ogsTEZGxG9WYu5k1AtcBG4Z4+WYze9XMnjGzpcO8f7WZNZtZc2tr66iLFRGR/OQd7mY2DXgC+Jy7dw56eSOw0N2XA98AfjzUOtz9IXdvcvem2trasdYsIiI55BXuZhYnHezfd/cnB7/u7p3ufiqYXgvEzWx2QSsVEZG85XO0jAHfAna4+9eGaTM3aIeZ3RSst62QhYqISP7yOVrmFuDDwBYz2xQs+zNgAYC7fxO4G/ikmSWAHuAed/cJqFdERPKQM9zd/deA5WjzIPBgoYoSEZHx0RmqIiIhpHAXEQkhhbuISAgp3EVEQkjhLiISQgp3EZEQUriLiISQwl1EJIQU7iIiIaRwFxEJIYW7iEgIKdxFREJI4S4iEkIKdxGREFK4i4iEkMJdRCSEFO4iIiGkcBcRCSGFu4hICCncRURCSOEuIhJCOcPdzOab2XNmtt3MtpnZZ4doY2b2dTPbbWabzez6iSlXRETyEcujTQK4z903mlkV8LKZrXP37Vlt3gFcHjxWAv8YPIuISAnk7Lm7+xF33xhMdwE7gPpBze4Cvutp64EaM5tX8GpFRCQvoxpzN7NG4Dpgw6CX6oEDWfMHOf8LQEREiiTvcDezacATwOfcvXMsGzOz1WbWbGbNra2tY1mFiIjkIa9wN7M46WD/vrs/OUSTQ8D8rPmGYNk53P0hd29y96ba2tqx1CsiInnI52gZA74F7HD3rw3TbA1wb3DUzCqgw92PFLBOEREZhXyOlrkF+DCwxcw2Bcv+DFgA4O7fBNYC7wR2A6eBPyp8qSIikq+c4e7uvwYsRxsHPlWookREZHx0hqqISAgp3EVEQkjhLiISQgp3EZEQUriLiISQwl1EJIQU7iIiIaRwFxEJIYW7iEgIKdxFREJI4S4iEkIKdxGREFK4i4iEkMJdRCSEFO4iIiGkcBcRCSGFu4hICCncRURCSOEuIhJCCncRkRBSuIuIhFDOcDezb5vZMTPbOszrt5pZh5ltCh4PFL5MEREZjVgebb4DPAh8d4Q2v3L3OwtSkYiIjFvOnru7Pw+0F6EWEREpkEKNud9sZq+a2TNmtrRA6xQRkTHKZ1gml43AQnc/ZWbvBH4MXD5UQzNbDawGWLBgQQE2XTq9A0kGkimqKuKlLkVE5DzjDnd378yaXmtm/2Bms939+BBtHwIeAmhqavLxbrvYunoHeOG3bfy29RSHTvYQj0b4k9uvorIsWurSRETOMe5hGTOba2YWTN8UrLNtvOu9EK159TD/+lorADc2zqQvkWLTgRMlrkpE5Hw5e+5m9gPgVmC2mR0EvgjEAdz9m8DdwCfNLAH0APe4+0XXK8+lbyDJrpYuVi2exbuW1wFw8EQPL+07warFs0pcnYjIuXKGu7t/IMfrD5I+VDLUdrZ0kUg5y+qrzyy7sXEmP950iIMnekpYmYjI+XSGap62HOqgqiLGwllTzixb3lBNWTTCi/t0pKiIXFgU7nnoSyR57WgXS+uqiaR3LwBQHo9ybUM1mw+epLN3oIQVioicS+Geh8yQzDVZQzIZNy2ayUDS+cmmwyWoTERkaAr3PGw91EFV+blDMhn1NZXMq67g0Q37CeF+ZBG5SCncc+hPpNJDMvXTzxmSyTAzrl8wgx1HOrVjVUQuGAr3HHa2dDKQPPcomcEWzZ4KwMb9OuZdRC4MCvccdhzpZGp5jMZZU4dtM2d6BVPKoryy/2QRKxMRGZ7CPYcDJ3ponDVlyCGZjGjEuLahWj13EblgKNxH0HF6gPbufhpqKnO2vW7BDLYf7qR3IFmEykRERqZwH8HWwx0A1M3IHe7XL5hBIuVsPtgx0WWJiOSkcB9BJqjr8+q51wDwioZmROQCoHAfwZZDJ5k5tYwpZbmvjDx7WjkLZk7RuLuIXBAU7iPYcqiDujx67RnXL6hh4/6TOplJREpO4T6ME939HGjvyWtnasb1C2fQ2tWnk5lEpOQU7sPYcigYb89jZ2rG9QtmAPDKAR3vLiKlpXAfRibc66rzD/cr51ZREY+w8Q2Nu4tIaSnch7HlYAeNs6aM6v6o8WiEaxtqdMSMiJScwn0YWw51cE1Dzajfd/2CGWzTyUwiUmIK9yG0nerj0MkerqmfPur3rphfTSLl7DjSOQGViYjkR+E+hMx4+zX1o++5L61LXz1yu8JdREpI4T6ErUG4LxtDz71hRiVV5TG2H1a4i0jp5Ax3M/u2mR0zs63DvG5m9nUz221mm83s+sKXWVybD3awePZUqirio36vmXF13XT13EWkpPLpuX8HuGOE198BXB48VgP/OP6ySmtHSydL6kbfa89YMm86O490kUzpTFURKY2c4e7uzwPtIzS5C/iup60HasxsXqEKLLZTfQkOtPdw1dyqMa9jSd10egaS7GvrLmBlIiL5K8SYez1wIGv+YLDsovTa0S4Arpw7vp47oHF3ESmZou5QNbPVZtZsZs2tra3F3HTedh5Jh/t4eu6Xz5lGLGIadxeRkilEuB8C5mfNNwTLzuPuD7l7k7s31dbWFmDThberpZNp5TEaRnFNmcHKY1Euu2Saeu4iUjKFCPc1wL3BUTOrgA53P1KA9ZbEzpYurpgzDRvhnqn5WKIjZkSkhPI5FPIHwAvAlWZ20Mw+amafMLNPBE3WAnuA3cD/Af54wqqdYO7OzpaucY23Zyytq6a1q49jXb0FqExEZHRy3mLI3T+Q43UHPlWwikroaGcfHT0DXD1v7OPtGZmdqjuOdHFJVcW41yciMho6QzXLzpb0MMqVcwoX7hp3F5FSULhn2dmSOVJm/MMy1VPi1NdUatxdREpC4Z5lV0sX86orqJ4y+ssODGVJ3XS2H+4oyLpEREZD4Z4lvTN1/EMyGUvmTWfP8W5O9ycKtk4RkXwo3AMDyRS7jxU43Oum4352uEdEpFgU7oG9x7sZSDpXF2C8PWNZffra7tsOaWhGRIpL4R7I9K4L2XOvq65g5tSyMzf/EBEpFoV7YOeRTmIR49LaaQVbp5mxtG46Ww7piBkRKS6Fe2BXSxeX1k6jLFbYP5Jr6qt5/WiXbpgtIkWlcA/sONLJVQU4M3Wwa+rTN8zepZ2qIlJECnegvbufwx29LB3H3ZeGk9mpqnF3ESkmhTuwLTjRaGlddcHX3TCjkpop8TM33RYRKQaFO7AtuP7LRPTczYxlddXquYtIUSncSYd7fU0lNVPKJmT9y+qree1oF30J7VQVkeLIecnfyWDboQ6W1Y+v1/7ohv3nLfvgygVAeqfqQNJ5reUU1zQUfuhHRGSwSd9zP9WXYG9b94SMt2dco52qIlJkkz7cdxzpxH1ixtsz5s+sZHpFTOEuIkUz6cM9c92XzCGLE8HMWFZfrSNmRKRoJn24bz3cyexpZVxSVT6h27mmvppdLV30J1ITuh0REVC4s+1wJ0vrqjGzCd3Osvpq+pMpXjuqM1VFZOJN6nDvSyR5/WjXhI63Z6yYXwPAy2+cmPBtiYjkFe5mdoeZ7TKz3Wb2p0O8/hEzazWzTcHjY4UvtfBeazlFIuUTeqRMxvyZU6ivqWTD3rYJ35aISM7j3M0sCvw9cBtwEHjJzNa4+/ZBTR9z909PQI0TJnPZgfEe456vlYtm8q+vteLuEz4MJCKTWz4995uA3e6+x937gR8Cd01sWcWx9XAHVeUx5s+YUpTtrVw8k7bufnYfO1WU7YnI5JVPuNcDB7LmDwbLBnuvmW02s8fNbH5Bqptg2w53cnXddCKR4vSiVy6aBcD6ve1F2Z6ITF6F2qH6FNDo7tcC64BHhmpkZqvNrNnMmltbWwu06bHpHUiy7XAny4t4OYCFs6YwZ3o5G/Zo3F1EJlY+4X4IyO6JNwTLznD3NnfvC2YfBm4YakXu/pC7N7l7U21t7VjqLZhX9p+kP5Fi1eJZRdummbFq8Sw27G3H3Yu2XRGZfPIJ95eAy81skZmVAfcAa7IbmNm8rNl3AzsKV+LE2LC3DTNoapxZ1O2uXDSL1q4+9h7vLup2RWRyyXm0jLsnzOzTwM+AKPBtd99mZl8Gmt19DfAZM3s3kADagY9MYM0FsX5PG0vrplNdGS/qdlcunhlsv53FBbwZt4hItrwu+evua4G1g5Y9kDV9P3B/YUubOL0DSTbuP8m9qxYWfduLZ09l9rRyNuxtO3NJYBGRQpuUZ6huOlD88fYMM2Pl4pls2KNxdxGZOJMy3DfsaccMblxU3PH2jFWLZtLS2cv+9tMl2b6IhN+kDPf1e9pYMq/44+0ZN1+a/sXw/GulPRxURMJr0oV7erz9REmGZDIurZ3GZZdM46lXj5SsBhEJt0kX7q8eOElfIsXKEg3JQHrc/a7ldby4r53DJ3tKVoeIhNekC/cNe9Pj7TeVMNwB3rW8DoCnXj1c0jpEJJwmXbiv39PG1XOnUzOlrKR1NM6eyvL5NaxRuIvIBJhU4d7ZO0DzGyfO7NAstbuW17HtcCe7j+nuTCJSWJMq3NduPkJ/InVmSKTU7rx2HhGDNZvUexeRwppU4f7ExoNcdsm0ol4JciSXTK/g5ktnsebVwzqhSUQKatKE+77j3by07wTvvb7hgroL0l3L69nXdprNBztKXYqIhMikCfcnNx4kYvCe64a6z0jp3L5sLpXxKA89v6fUpYhIiEyKcE+lnCc2HuJNl9cyt7qi1OWco7oyzsffspifbjnCy2+cKHU5IhISkyLc1+9t49DJHt57/YXVa8/4j7+zmNqqcr7y0+0aexeRgpgU4f74ywepKo9x+9K5pS5lSFPLY9x32xVs3H+SZ7e2lLocEQmBvK7nfjE71tnLM1tauGtFHRXxaFG3/eiG/ectG+4a7u9rms///c0+vvrsTt529RzKYpPie1dEJkjoE+Qvn9pG0p3Vb15c6lJGFI0Y97/zKt5oO83Xf/56qcsRkYtcqHvu/7KthbVbWvgvt195UdzS7i1X1PK+Gxp48LndVFXE+PhbLi11SSI5JZIpTg8k6elP0t2XoCeYzn7uDaZ7E6ngOUnfQIre4LW+ROrMc/qRpD+RYiDp9CdSJFIpkiknkXLcObNvKhaNUBaNEI8ZU8tiVFfGqa6MM2d6BQ0zKqmfUclrLaeorSonGhn5EOiw3RkttOHe2TvAX/xkK1fNrbrge+0ZZsZX33stPQNJ/vqZnZTHInzklkWlLktCJpVyehNJTvenA/d0f5JTfQm6g8epzKM3/dyVNX2qN5jvG+B0X/p9fYnUqGuIRYxY1IhHI8SjEWKR9HQsasQjEaLBfEXciJoRjRiRiBExMM6GdMr9TOj3DSQ52tnL3uPddPYO0DuQOmd7c6srmD9jCpfWTmNx7dSiD9MWW2jD/X88u5NjXX3804ebiEcvntGnaMT42/evoD+R4i+f2k5bdz+fvPVSppSF9q9Ksrg7fYkU3X0JTvcn6e7PhG6S0/3B80CSnv706z0DSXrP9I6DnnAiRV/Wc6ZX3Dtwtl2+YhGjIh6lPBahIh6lLBahPBZh1tRy5lWnp8tj6d5zWSxKWczSPengURbLTGcFedSIFOFEwt6BJCdO93O0s5fDJ3s5dLKH5jfaeWFPGwbMnzmFJfOms2TedGZXlU94PcUWusRIpZy/+/nr/PP6/fzRLY2smF9T6pJGLR6N8I0PXsd/fXwz3/jFbh576QD/+bYreF/T/Jw/LWXiZIL3zJBDZqhhIPcQRHYAZ9qc7s/0nhNnetHd/QlSozgaNtPjHRyemWWxSISqihgzp5ad0yYejVAWtSCQzwZ0eTxCeSxKRSxCWTxCLHLxdIwGq4hHmVddybzqSlbMTy9LJFPsP3Ga3x7rZtfRTp7d1sKz21qorSrn8Mke7lg2l6V10y+os9jHyvI5rtrM7gD+NxAFHnb3rw56vRz4LnAD0Aa83933jbTOpqYmb25uHmPZQ+vqHeDzj23i/+04xt03NPCV9yyjPDa+n15DHfFSaCON9TXva+cra3fwyv6TzJxaxpsum82br6jlhoUzqK+pnNRH1Xjwk7w/maI/GKvtzxqz7R3I9GDP9mrP6eFmjw1nBW4msE8PCuuegeSogjdjcABnerOxqAU93sjZ51iE8miEsng0/ZwJ3tigdtEI8VikKD3gMDt5up/tRzrZfriTfW3dpBwaZlTy9qvn8LarL+GmRTPHnSGFZmYvu3tTzna5wt3MosBrwG3AQeAl4APuvj2rzR8D17r7J8zsHuA97v7+kdZbyHDvOD3AT7cc4eFf7WF/+2n+4s4l3HvzwoJ8+xYj3IeSHfjuzrrtR3lmawu/er2V46f6AYgYQc+kgpopcaZXxqkqj6V/Rgc/pTOBEgvGNaOWHruMRiCSGcu09FgmGGZgcM6fnbvjmWeHpDspT/9KSmYenh73TCTP7vhKJFPBszOQSpFIDrMsld5xNpBMzw8kU+nplAc71c6+3p9InQnz/mSK8ZzzZUA8FiEesazhg0z4BkEchGimTWb+/KGH7F5x8YcgZPxuXzqHdduPsm77UX69+zh9iRRTyqLcsHAGKxfN5MbGmVxdN53pFaW593JGIcP9ZuAv3f32YP5+AHf/66w2PwvavGBmMaAFqPURVj7WcD/dn+C3x7rZ29bNvuPdbD3UwS93tdKfTHHZJdP4q99bVtD7o5Yq3IeTcqelo5eWjl7aT/fT3t1PZ8/Amd5n38DZYLxQGJzZIXbmy8UYNJ/+osl82cQiZ3eiZaajZkSj6elYMB2LpIceYpnlkbPDEbGondlBNzh040H7MPz8lsLI7lD19Cf5ze7jPP96Ky/ubWdny9l7LtTXVHLl3CoaZlRSV5PpXJWdOVKnMh6lIp7eR5H5t1vIf2f5hns+Y+71wIGs+YPAyuHauHvCzDqAWcDx/MrN37rtR/nsDzed3XBNJR9atZD3XFfPsvpwjJWNJGJGXU36H9VIPOhJp7J61ilPfzl48JyZzu6VQ3oeh6yDEoLe/NkazCBCOnzNONP7z4R1xIxIJLM83H8nEj6VZVHevmQOb18yB4AT3f28cuAEO1u62HGki9ePdtG8r53O3kRe64tYuoNjwa/j1W9ezH2/e+VEfoTi7lA1s9XA6mD2lJntGu863wD+DfjieFc0vNlMwJdUCYTlc0B4Pos+xwXkD4q4rS98Bb4w9rcvzKdRPuF+CJifNd8QLBuqzcFgWKaa9I7Vc7j7Q8BD+RR2oTCz5nx+Al3owvI5IDyfRZ9DJlI+h1q8BFxuZovMrAy4B1gzqM0a4A+D6buBX4w03i4iIhMrZ889GEP/NPAz0odCftvdt5nZl4Fmd18DfAv4npntBtpJfwGIiEiJ5DXm7u5rgbWDlj2QNd0LvK+wpV0wLqphpBGE5XNAeD6LPodMmLxOYhIRkYvL5D29UUQkxBTuIzCzO8xsl5ntNrM/LXU9Y2Fm3zazY2a2tdS1jIeZzTez58xsu5ltM7PPlrqmsTCzCjN70cxeDT7Hl0pd03iYWdTMXjGzp0tdi5xL4T6M4LILfw+8A1gCfMDMlpS2qjH5DnBHqYsogARwn7svAVYBn7pI/z76gLe6+3JgBXCHma0qcU3j8VlgR6mLkPMp3Id3E7Db3fe4ez/wQ+CuEtc0au7+POkjmC5q7n7E3TcG012kA+XCvOP5CDztVDAbDx4X5Y4vM2sA/gPwcKlrkfMp3Ic31GUXLrowCSMzawSuAzaUtpKxCYYyNgHHgHXuflF+DuDvgD8BRn+3DplwCne5qJjZNOAJ4HPu3lnqesbC3ZPuvoL02d43mdmyUtc0WmZ2J3DM3V8udS0yNIX78PK57IIUkZnFSQf79939yVLXM17ufhJ4jotzn8gtwLvNbB/pIcu3mtk/l7YkyaZwH14+l12QIrH05T6/Bexw96+Vup6xMrNaM6sJpitJ3ydhZ2mrGj13v9/dG9y9kfT/jV+4+4dKXJZkUbgPw90TQOayCzuAH7n7ttJWNXpm9gPgBeBKMztoZh8tdU1jdAvwYdI9xE3B452lLmoM5gHPmdlm0h2Ide6uwwil4HSGqohICKnnLiISQgp3EZEQUriLiISQwl1EJIQU7iIiIaRwFxEJIYW7FI2ZJYPj07cFl7y9z8wiwWtNZvb1Ed7baGYfLF615227J7gezAXBzN4fXIpax8jLkBTuUkw97r7C3ZeSPjPzHcAXAdy92d0/M8J7G4GShHvgt8H1YPIWXDZ6Qrj7Y8DHJmr9cvFTuEtJuPsxYDXwaUu7NdMLNbO3ZJ2F+oqZVQFfBX4nWPb5oDf9KzPbGDz+XfDeW83sl2b2uJntNLPvB5cuwMxuNLN/C341vGhmVcEVGv+nmb1kZpvN7OP51G9mPzazl4NfIauzlp8ys/9lZq8CNw+zzaXB9KZgm5cH7/1Q1vJ/ynw5BDeN2Ris4+cF/GuQMHN3PfQoygM4NcSyk8Ac4Fbg6WDZU8AtwfQ00jdyP/N6sHwKUBFMXw40B9O3Ah2kL/QWIX3phTcBZcAe4Mag3fRgvauBPw+WlQPNwKJBNTYCWwctmxk8VwJbgVnBvAO/H0wPt81vAH+Q1aYSuDr43PFg+T8A9wK1pC89vSh7u1mf9emh/qz10CM2yu8CkWL4DfA1M/s+8KS7Hww639niwINmtgJIAldkvfaiux8ECMbJG0kH/hF3fwnAg8sFm9nvAtea2d3Be6tJf1nszVHjZ8zsPcH0/OA9bUEtTwTLrxxmmy8A/y242cWT7v66mb0NuAF4KfislaSv974KeN7d9wbruOhvvCLFoXCXkjGzxaTD8BjpnisA7v5VM/sp8E7gN2Z2+xBv/zxwFFhOuofem/VaX9Z0kpH/nRvwn9z9Z6Oo+1bg7cDN7n7azH4JVAQv97p7cqT3u/ujZraB9F2M1gZDQQY84u73D9rWu/KtSySbxtylJMysFvgm8KC7+6DXLnX3Le7+N6SvnHgV0AVUZTWrJt0rTpG+WmSunZe7gHlmdmOwjSozi5G+6ucng2vFY2ZXmNnUHOuqBk4EwX4V6d513tsMvtT2uPvXgZ8A1wI/B+42s0uCtjPNbCGwHnizmS3KLM9RmwignrsUV2UwTBInfcPr7wFDXZv9c2b270nfvm0b8EwwnQx2VH6H9Jj0E2Z2L/As0D3Sht2938zeD3wjuI56D+ne98Okh202BjteW4Hfy/E5ngU+YWY7SAf4+lFu8/eBD5vZANAC/Hd3bzezPwf+JTg8dAD4lLuvD3bYPhksP0b6SCOREemSvyI5WPqerU+7+wV1O7xgeOgL7n5nqWuRC4+GZURySwLVF9pJTKR/vZwodS1yYVLPXUQkhNRzFxEJIYW7iEgIKdxFREJI4S4iEkIKdxGREPr/HGbFmDInKcIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "nb_merge_dist_plot(\n",
    "    SkyCoord(master_catalogue['ra'], master_catalogue['dec']),\n",
    "    SkyCoord(specz['ra'] * u.deg, specz['dec'] * u.deg)\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue = specz_merge(master_catalogue, specz, radius=1. * u.arcsec)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## VIII.a Wavelength domain coverage\n",
    "\n",
    "We add a binary `flag_optnir_obs` indicating that a source was observed in a given wavelength domain:\n",
    "\n",
    "- 1 for observation in optical;\n",
    "- 2 for observation in near-infrared;\n",
    "- 4 for observation in mid-infrared (IRAC).\n",
    "\n",
    "It's an integer binary flag, so a source observed both in optical and near-infrared by not in mid-infrared would have this flag at 1 + 2 = 3.\n",
    "\n",
    "*Note 1: The observation flag is based on the creation of multi-order coverage maps from the catalogues, this may not be accurate, especially on the edges of the coverage.*\n",
    "\n",
    "*Note 2: Being on the observation coverage does not mean having fluxes in that wavelength domain. For sources observed in one domain but having no flux in it, one must take into consideration de different depths in the catalogue we are using.*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "decals_moc = MOC(filename=\"../../dmu0/dmu0_DECaLS/data/DECaLS_GAMA-12_MOC.fits\")\n",
    "ps1_moc = MOC(filename=\"../../dmu0/dmu0_PanSTARRS1-3SS/data/PanSTARRS1-3SS_GAMA-12_MOC.fits\")\n",
    "las_moc = MOC(filename=\"../../dmu0/dmu0_UKIDSS-LAS/data/UKIDSS-LAS_GAMA-12_MOC.fits\")\n",
    "legacy_moc = MOC(filename=\"../../dmu0/dmu0_LegacySurvey/data/LegacySurvey-dr4_NGP_MOC.fits\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "was_observed_optical = inMoc(\n",
    "    master_catalogue['ra'], master_catalogue['dec'],\n",
    "    decals_moc + ps1_moc + legacy_moc) \n",
    "\n",
    "was_observed_nir = inMoc(\n",
    "    master_catalogue['ra'], master_catalogue['dec'],\n",
    "    las_moc \n",
    ")\n",
    "\n",
    "was_observed_mir = np.zeros(len(master_catalogue), dtype=bool)\n",
    "\n",
    "#was_observed_mir = inMoc(\n",
    "#    master_catalogue['ra'], master_catalogue['dec'],   \n",
    "#)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue.add_column(\n",
    "    Column(\n",
    "        1 * was_observed_optical + 2 * was_observed_nir + 4 * was_observed_mir,\n",
    "        name=\"flag_optnir_obs\")\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## VIII.b Wavelength domain detection\n",
    "\n",
    "We add a binary `flag_optnir_det` indicating that a source was detected in a given wavelength domain:\n",
    "\n",
    "- 1 for detection in optical;\n",
    "- 2 for detection in near-infrared;\n",
    "- 4 for detection in mid-infrared (IRAC).\n",
    "\n",
    "It's an integer binary flag, so a source detected both in optical and near-infrared by not in mid-infrared would have this flag at 1 + 2 = 3.\n",
    "\n",
    "*Note 1: We use the total flux columns to know if the source has flux, in some catalogues, we may have aperture flux and no total flux.*\n",
    "\n",
    "To get rid of artefacts (chip edges, star flares, etc.) we consider that a source is detected in one wavelength domain when it has a flux value in **at least two bands**. That means that good sources will be excluded from this flag when they are on the coverage of only one band."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# SpARCS is a catalogue of sources detected in r (with fluxes measured at \n",
    "# this prior position in the other bands).  Thus, we are only using the r\n",
    "# CFHT band.\n",
    "# Check to use catalogue flags from HSC and PanSTARRS.\n",
    "nb_optical_flux = (\n",
    "    1 * ~np.isnan(master_catalogue['f_gpc1_g']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_gpc1_r']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_gpc1_i']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_gpc1_z']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_gpc1_y']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_90prime_g']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_90prime_r']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_mosaic_z']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_decam_z']) \n",
    ")\n",
    "\n",
    "nb_nir_flux = (\n",
    "    1 * ~np.isnan(master_catalogue['f_ukidss_y']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_ukidss_j']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_ukidss_h']) +\n",
    "    1 * ~np.isnan(master_catalogue['f_ukidss_k'])\n",
    ")\n",
    "\n",
    "nb_mir_flux = np.zeros(len(master_catalogue), dtype=bool)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "has_optical_flux = nb_optical_flux >= 2\n",
    "has_nir_flux = nb_nir_flux >= 2\n",
    "has_mir_flux = nb_mir_flux >= 2\n",
    "\n",
    "master_catalogue.add_column(\n",
    "    Column(\n",
    "        1 * has_optical_flux + 2 * has_nir_flux + 4 * has_mir_flux,\n",
    "        name=\"flag_optnir_det\")\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## IX - Cross-identification table\n",
    "\n",
    "We are producing a table associating to each HELP identifier, the identifiers of the sources in the pristine catalogue. This can be used to easily get additional information from them."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['decals_id', 'ps1_id', 'las_id', 'legacy_id', 'help_id', 'specz_id']\n"
     ]
    }
   ],
   "source": [
    "id_names = []\n",
    "for col in master_catalogue.colnames:\n",
    "    if '_id' in col:\n",
    "        id_names += [col]\n",
    "    if '_intid' in col:\n",
    "        id_names += [col]\n",
    "        \n",
    "print(id_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue[id_names].write(\n",
    "    \"{}/master_list_cross_ident_ngp{}.fits\".format(OUT_DIR, SUFFIX))\n",
    "id_names.remove('help_id')\n",
    "master_catalogue.remove_columns(id_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## X - Adding HEALPix index\n",
    "\n",
    "We are adding a column with a HEALPix index at order 13 associated with each source."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue.add_column(Column(\n",
    "    data=coords_to_hpidx(master_catalogue['ra'], master_catalogue['dec'], order=13),\n",
    "    name=\"hp_idx\"\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## XI - Saving the catalogue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "columns = [\"help_id\", \"field\", \"ra\", \"dec\", \"hp_idx\"]\n",
    "\n",
    "bands = [column[5:] for column in master_catalogue.colnames if 'f_ap' in column]\n",
    "for band in bands:\n",
    "    columns += [\"f_ap_{}\".format(band), \"ferr_ap_{}\".format(band),\n",
    "                \"m_ap_{}\".format(band), \"merr_ap_{}\".format(band),\n",
    "                \"f_{}\".format(band), \"ferr_{}\".format(band),\n",
    "                \"m_{}\".format(band), \"merr_{}\".format(band),\n",
    "                \"flag_{}\".format(band)]    \n",
    "    \n",
    "columns += [\"stellarity\", \"stellarity_origin\",\"flag_cleaned\", \"flag_merged\", \"flag_gaia\", \n",
    "            \"flag_optnir_obs\", \"flag_optnir_det\", \"ebv\", 'zspec_association_flag', 'zspec_qual', 'zspec' ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Missing columns: set()\n"
     ]
    }
   ],
   "source": [
    "# We check for columns in the master catalogue that we will not save to disk.\n",
    "print(\"Missing columns: {}\".format(set(master_catalogue.colnames) - set(columns)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue[columns].write(\"{}/master_catalogue_ngp{}.fits\".format(OUT_DIR, SUFFIX))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (herschelhelp_internal)",
   "language": "python",
   "name": "helpint"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
