{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Herschel Stripe 82 master catalogue\n",
    "\n",
    "This notebook presents the merge of the various pristine catalogues to produce HELP mater catalogue on Herschel Stripe 82."
   ]
  },
  {
   "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) [with local modifications]\n",
      "This notebook was executed on: \n",
      "2021-05-13 18:05:52.360010\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",
    "import gc\n",
    "\n",
    "from astropy import units as u\n",
    "from astropy.coordinates import SkyCoord\n",
    "from astropy.table import Column, Table, join\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",
    "\n",
    "SUFFIX = os.environ.get('SUFFIX', time.strftime(\"_%Y%m%d\"))\n",
    "OUT_DIR = os.environ.get('OUT_DIR', \"./data\")\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": [
    "hsc =    Table.read(\"{}/HSC-SSP.fits\".format(TMP_DIR)   )[\"hsc_id\",      \"hsc_ra\",    \"hsc_dec\",\n",
    "                                                          \"hsc_flag_gaia\", \"hsc_stellarity\"]\n",
    "#vhs =    Table.read(\"{}/VISTA-VHS.fits\".format(TMP_DIR) )[\"vhs_id\",      \"vhs_ra\",    \"vhs_dec\",    \n",
    "#                                                          \"vhs_stellarity\", \"vhs_flag_gaia\"]\n",
    "#vics82 = Table.read(\"{}/VICS82.fits\".format(TMP_DIR)    )[\"vics82_id\",   \"vics82_ra\", \"vics82_dec\", \n",
    "#                                                          \"vics82_stellarity\", \"vics82_flag_gaia\"]\n",
    "vista = Table.read(\"{}/vista_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR)    )[\n",
    "                                                           \"vics82_id\", \"vhs_id\", \"vista_intid\",  \n",
    "                                                           \"vista_ra\", \"vista_dec\", \n",
    "                                                          \"vista_stellarity\", \"vista_flag_gaia\"]\n",
    "\n",
    "las =    Table.read(\"{}/UKIDSS-LAS.fits\".format(TMP_DIR))[\"las_id\",      \"las_ra\",    \"las_dec\",    \n",
    "                                                          \"las_stellarity\", \"las_flag_gaia\"]\n",
    "  \n",
    "ps1 =    Table.read(\"{}/PS1.fits\".format(TMP_DIR)       )[\"ps1_id\",      \"ps1_ra\",    \"ps1_dec\",\n",
    "                                                         \"ps1_flag_gaia\"]\n",
    "#shela =  Table.read(\"{}/SHELA.fits\".format(TMP_DIR)     )[\"shela_intid\", \"shela_ra\",  \"shela_dec\"]\n",
    "#spies =  Table.read(\"{}/SpIES.fits\".format(TMP_DIR)     )[\"spies_intid\", \"spies_ra\",  \"spies_dec\",  \"spies_stellarity_irac2\"]\n",
    "irac =   Table.read(\"{}/irac_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR)      )[\n",
    "                                                          \"irac_intid\",  \"irac_ra\",   \"irac_dec\",   \n",
    "                                                          \"irac_stellarity\", \"irac_flag_gaia\",\n",
    "                                                         \"shela_intid\", \"spies_intid\"]\n",
    "#decals = Table.read(\"{}/DECaLS.fits\".format(TMP_DIR)    )[\"decals_id\",   \"decals_ra\", \"decals_dec\", \n",
    "#                                                          \"decals_stellarity\", \"decals_flag_gaia\"]\n",
    "decam = Table.read(\"{}/decam_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR)    )[\n",
    "                                                          \"decam_intid\", \"des_id\", \"decals_id\",   \n",
    "                                                          \"decam_ra\", \"decam_dec\", \n",
    "                                                          \"decam_stellarity\", \"decam_flag_gaia\"]\n",
    "rcs =    Table.read(\"{}/RCSLenS.fits\".format(TMP_DIR)   )[\"rcs_id\",      \"rcs_ra\",    \"rcs_dec\",    \n",
    "                                                          \"rcs_stellarity\", \"rcs_flag_gaia\"]\n",
    "#We choose to use the official SDSS not IAC because it has greater coverage\n",
    "#SDSS-S82_IAC.fits\n",
    "#SDSS-S82.fits\n",
    "sdss =   Table.read(\"{}/SDSS-S82.fits\".format(TMP_DIR)  )[\"sdss_id\",     \"sdss_ra\",   \"sdss_dec\",   \n",
    "                                                          \"sdss_stellarity\", \"sdss_flag_gaia\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## II - Merging tables\n",
    "\n",
    "We first merge the optical catalogues and then add the infrared ones: HSC, VHS, VICS82, UKIDSS-LAS, PanSTARRS, SHELA, SpIES.\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": [
    "### HSC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue = hsc\n",
    "master_catalogue['hsc_ra'].name = 'ra'\n",
    "master_catalogue['hsc_dec'].name = 'dec'\n",
    "del hsc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Add VISTA (VHS and VICS82 pre-merge)"
   ]
  },
  {
   "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(vista['vista_ra'], vista['vista_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, vista, \"vista_ra\", \"vista_dec\", radius=0.8*u.arcsec)\n",
    "del vista"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Add 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)\n",
    "del las"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Add PanSTARRS"
   ]
  },
  {
   "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(ps1['ps1_ra'], ps1['ps1_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, ps1, \"ps1_ra\", \"ps1_dec\", radius=0.8*u.arcsec)\n",
    "del ps1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Add SDSS\n",
    "We are waiting for a new SDSS-82 catalogue, which does not suffer from the issue of multiple sources per object due to including all exposure extractions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "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(sdss['sdss_ra'], sdss['sdss_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 0.8 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, sdss, \"sdss_ra\", \"sdss_dec\", radius=0.8*u.arcsec)\n",
    "del sdss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Add DECam (DECaLS and DES)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "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(decam['decam_ra'], decam['decam_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 0.8 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, decam, \"decam_ra\", \"decam_dec\", radius=0.8*u.arcsec)\n",
    "del decam"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Add RCSLenS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "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(rcs['rcs_ra'], rcs['rcs_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 0.8 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, rcs, \"rcs_ra\", \"rcs_dec\", radius=0.8*u.arcsec)\n",
    "del rcs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Add IRAC (SHELA and SpIES)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "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(irac['irac_ra'], irac['irac_dec'])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Given the graph above, we use 1 arc-second radius\n",
    "master_catalogue = merge_catalogues(master_catalogue, irac, \"irac_ra\", \"irac_dec\", radius=1.5*u.arcsec)\n",
    "del irac"
   ]
  },
  {
   "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": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for col in master_catalogue.colnames:\n",
    "    if (col.startswith(\"m_\") or col.startswith(\"merr_\") or col.startswith(\"f_\") or col.startswith(\"ferr_\")):\n",
    "        master_catalogue[col] = master_catalogue[col].astype(float)\n",
    "        master_catalogue[col].fill_value = np.nan\n",
    "    if \"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": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<i>Table length=10</i>\n",
       "<table id=\"table140388548727416-776006\" class=\"table-striped table-bordered table-condensed\">\n",
       "<thead><tr><th>idx</th><th>hsc_id</th><th>ra</th><th>dec</th><th>hsc_flag_gaia</th><th>hsc_stellarity</th><th>flag_merged</th><th>vics82_id</th><th>vhs_id</th><th>vista_intid</th><th>vista_stellarity</th><th>vista_flag_gaia</th><th>las_id</th><th>las_stellarity</th><th>las_flag_gaia</th><th>ps1_id</th><th>ps1_flag_gaia</th><th>sdss_id</th><th>sdss_stellarity</th><th>sdss_flag_gaia</th><th>decam_intid</th><th>des_id</th><th>decals_id</th><th>decam_stellarity</th><th>decam_flag_gaia</th><th>rcs_id</th><th>rcs_stellarity</th><th>rcs_flag_gaia</th><th>irac_intid</th><th>irac_stellarity</th><th>irac_flag_gaia</th><th>shela_intid</th><th>spies_intid</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></tr></thead>\n",
       "<tr><td>0</td><td>41618864458468676</td><td>351.7078674102876</td><td>-0.8467452047263985</td><td>2</td><td>1.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>1</td><td>41619564538122633</td><td>350.64946504091785</td><td>-0.45142719892317434</td><td>2</td><td>0.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>2</td><td>41623687706742799</td><td>352.65351552421663</td><td>-0.2780813675567576</td><td>0</td><td>0.0</td><td>False</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>3</td><td>41619281070291584</td><td>351.12786758280777</td><td>-0.752104706105594</td><td>2</td><td>0.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>4</td><td>42687997782543665</td><td>351.08957782422016</td><td>0.3192921520835247</td><td>0</td><td>0.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>5</td><td>42692675001946330</td><td>352.27360564225273</td><td>0.6296688128811395</td><td>0</td><td>0.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>6</td><td>41619156516240934</td><td>351.326841113071</td><td>-0.14068390693201424</td><td>0</td><td>0.0</td><td>False</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>7</td><td>42687856048627738</td><td>351.25621500741954</td><td>0.1215166324244826</td><td>0</td><td>0.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>8</td><td>41619152221266635</td><td>351.37805431803594</td><td>-0.42224428943796183</td><td>0</td><td>0.0</td><td>True</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td></tr>\n",
       "<tr><td>9</td><td>41618731314478744</td><td>351.79381153914903</td><td>-0.6987405573794816</td><td>0</td><td>0.0</td><td>False</td><td>0.0</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</td><td>-1</td><td>nan</td><td>0</td><td>0.0</td><td>nan</td><td>0</td><td>-1</td><td>nan</td><td>0</td><td>-1</td><td>-1</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(\"$('#table140388548727416-776006').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",
       "    $('#table140388548727416-776006').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, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29, 30, 31], type: \"optionalnum\"}]\n",
       "    });\n",
       "});\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 21,
     "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.\n",
    "\n",
    "This now happens in the final merging loop"
   ]
  },
  {
   "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": 22,
   "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": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hsc_stellarity, vista_stellarity, las_stellarity, sdss_stellarity, decam_stellarity, rcs_stellarity, irac_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": 24,
   "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": 25,
   "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": 26,
   "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), \"Herschel-Stripe-82\", dtype='<U18'),\n",
    "                                   name=\"field\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "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": {
    "collapsed": true
   },
   "source": [
    "## VI - Adding spec-z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "specz =  Table.read(\"../../dmu23/dmu23_Herschel-Stripe-82/data/HELP-SPECZ_Herschel-Stripe-82_20170202.fits\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "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(specz['ra'] , specz['dec'] )\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue = specz_merge(master_catalogue, specz, radius=1. * u.arcsec)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## VII.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": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "hsc_moc = MOC(filename=\"../../dmu0/dmu0_HSC/data/HSC-PDR1_deep_Herschel-Stripe-82_MOC.fits\")\n",
    "vhs_moc = MOC(filename=\"../../dmu0/dmu0_VISTA-VHS/data/VHS_Herschel-Stripe-82_MOC.fits\")\n",
    "vics82_moc = MOC(filename=\"../../dmu0/dmu0_VICS82/data/VICS82_FULL_SDSS_FEB2017_K22_HELP-coverage_intIDs_MOC.fits\")\n",
    "las_moc = MOC(filename=\"../../dmu0/dmu0_UKIDSS-LAS/data/UKIDSS-LAS_Herschel-Stripe-82_MOC.fits\")\n",
    "ps1_moc = MOC(filename=\"../../dmu0/dmu0_PanSTARRS1-3SS/data/PanSTARRS1-3SS_Herschel-Stripe-82_v2_MOC.fits\")\n",
    "shela_moc = MOC(filename=\"../../dmu0/dmu0_SHELA/data/shela_irac_v1.3_flux_cat_MOC.fits\")\n",
    "spies_moc = MOC(filename=\"../../dmu0/dmu0_SpIES/data/SpIES_ch1andch2_HELP-coverage_MOC.fits\")\n",
    "decals_moc = MOC(filename=\"../../dmu0/dmu0_DECaLS/data/DECaLS_Herschel-Stripe-82_MOC.fits\")\n",
    "des_moc = MOC(filename=\"../../dmu0/dmu0_DES/data/DES-DR1_Herschel-Stripe-82_MOC.fits\")\n",
    "decam_moc = decals_moc + des_moc\n",
    "rcs_moc = MOC(filename=\"../../dmu0/dmu0_RCSLenS/data/RCSLenS_Herschel-Stripe-82_MOC.fits\")\n",
    "sdss_moc = MOC(filename=\"../../dmu0/dmu0_SDSS-S82/data/dmu0_SDSS-S82_MOC.fits\")\n",
    "#sdss_moc = MOC(filename=\"../../dmu0/dmu0_IAC_Stripe82_Legacy_Project/data/dmu0_IAC_Stripe82_Legacy_Project_MOC.fits\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "was_observed_optical = inMoc(\n",
    "    master_catalogue['ra'], master_catalogue['dec'],\n",
    "    hsc_moc + ps1_moc + decam_moc + rcs_moc + sdss_moc) \n",
    "\n",
    "was_observed_nir = inMoc(\n",
    "    master_catalogue['ra'], master_catalogue['dec'],\n",
    "    las_moc + vics82_moc + vhs_moc\n",
    ")\n",
    "\n",
    "was_observed_mir = inMoc(\n",
    "    master_catalogue['ra'], master_catalogue['dec'],\n",
    "    shela_moc + spies_moc\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "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": [
    "## VII.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.\n",
    "\n",
    "This now takes place at the end of the notebook when teh photometry is folded in."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## VIII - 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": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7885 master list rows had multiple associations.\n"
     ]
    }
   ],
   "source": [
    "#\n",
    "# Addind SDSS ids\n",
    "#\n",
    "sdss_dr13 = Table.read(\"../../dmu0/dmu0_SDSS/data/SDSS-DR13_Herschel-Stripe-82.fits\")['objID', 'ra', 'dec']\n",
    "sdss_dr13_coords = SkyCoord(sdss_dr13['ra'] * u.deg, sdss_dr13['dec'] * u.deg)\n",
    "idx_ml, d2d, _ = sdss_dr13_coords.match_to_catalog_sky(SkyCoord(master_catalogue['ra'], master_catalogue['dec']))\n",
    "idx_sdss_dr13 = np.arange(len(sdss_dr13))\n",
    "\n",
    "# Limit the cross-match to 1 arcsec\n",
    "mask = d2d <= 1. * u.arcsec\n",
    "idx_ml = idx_ml[mask]\n",
    "idx_sdss_dr13 = idx_sdss_dr13[mask]\n",
    "d2d = d2d[mask]\n",
    "nb_orig_matches = len(idx_ml)\n",
    "\n",
    "# In case of multiple associations of one master list object to an SDSS object, we keep only the\n",
    "# association to the nearest one.\n",
    "sort_idx = np.argsort(d2d)\n",
    "idx_ml = idx_ml[sort_idx]\n",
    "idx_sdss_dr13 = idx_sdss_dr13[sort_idx]\n",
    "_, unique_idx = np.unique(idx_ml, return_index=True)\n",
    "idx_ml = idx_ml[unique_idx]\n",
    "idx_sdss_dr13 = idx_sdss_dr13[unique_idx]\n",
    "print(\"{} master list rows had multiple associations.\".format(nb_orig_matches - len(idx_ml)))\n",
    "\n",
    "# Adding the ObjID to the master list\n",
    "master_catalogue.add_column(Column(data=np.full(len(master_catalogue), -1, dtype='>i8'), name=\"sdss_dr13_id\"))\n",
    "master_catalogue['sdss_dr13_id'][idx_ml] = sdss_dr13['objID'][idx_sdss_dr13]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['hsc_id', 'vics82_id', 'vhs_id', 'vista_intid', 'las_id', 'ps1_id', 'sdss_id', 'decam_intid', 'des_id', 'decals_id', 'rcs_id', 'irac_intid', 'shela_intid', 'spies_intid', 'help_id', 'specz_id', 'sdss_dr13_id']\n"
     ]
    }
   ],
   "source": [
    "\n",
    "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": 36,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue[id_names].write(\n",
    "    \"{}/master_list_cross_ident_herschel-stripe-82{}.fits\".format(OUT_DIR, SUFFIX), overwrite=True)\n",
    "id_names.remove('help_id')\n",
    "old_id_names =[\"shela_intid\",\"spies_intid\",\"decals_id\",\"des_id\",\"vhs_id\", \"vics82_id\"] \n",
    "#id_names.remove(old_id_names)\n",
    "master_catalogue.remove_columns(old_id_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## IX - 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": 37,
   "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": [
    "## X - Saving the catalogue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "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\", \"flag_cleaned\", \"flag_merged\", \"flag_gaia\",  \"flag_optnir_obs\",  \"ebv\"] #\"flag_gaia\",\"flag_optnir_det\","
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Missing columns: {'ps1_id', 'zspec_qual', 'hsc_id', 'sdss_id', 'vista_intid', 'specz_id', 'sdss_dr13_id', 'decam_intid', 'stellarity_origin', 'las_id', 'zspec_association_flag', 'zspec', 'irac_intid', 'rcs_id'}\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": 40,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue.write(\"{}/temp_{}.fits\".format(OUT_DIR, SUFFIX), overwrite=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## XI - folding in the photometry\n",
    "On HS82 there is too much data to load all in to memory at once so we perform the cross matching without photometry columns. Only now do we fold in the photometry data by first cutting the catalogue up in to manageable sizes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "502\n"
     ]
    }
   ],
   "source": [
    "split_length = 100000 #number of sources to include in every sub catalogue\n",
    "num_files = int(np.ceil(len(master_catalogue)/split_length))\n",
    "print(num_files)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "surveys = [\n",
    "    ['hsc',    \"HSC-SSP.fits\" ,     Table.read(\"{}/HSC-SSP.fits\".format(TMP_DIR)   ), \"hsc_id\"],   \n",
    "    \n",
    "   # ['vhs',    \"VISTA-VHS.fits\" ,   Table.read(\"{}/VISTA-VHS.fits\".format(TMP_DIR) ), \"vhs_id\"],     \n",
    "   # ['vics82', \"VICS82.fits\" ,      Table.read(\"{}/VICS82.fits\".format(TMP_DIR)    ), \"vics82_id\"],  \n",
    "    ['vista', \n",
    "     \"vista_merged_catalogue_herschel-stripe-82.fits\" ,      \n",
    "     Table.read(\"{}/vista_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR)    ), \"vista_intid\"],\n",
    "    \n",
    "    ['las',    \"UKIDSS-LAS.fits\" ,  Table.read(\"{}/UKIDSS-LAS.fits\".format(TMP_DIR)), \"las_id\"], \n",
    "    \n",
    "    ['ps1',    \"PS1.fits\" ,         Table.read(\"{}/PS1.fits\".format(TMP_DIR)       ), \"ps1_id\"],    \n",
    "    \n",
    "    #['shela',  \"SHELA.fits\" ,       Table.read(\"{}/SHELA.fits\".format(TMP_DIR)     ), \"shela_intid\"], \n",
    "    #['spies',  \"SpIES.fits\" ,       Table.read(\"{}/SpIES.fits\".format(TMP_DIR)     ), \"spies_intid\"], \n",
    "    ['irac',   \n",
    "     \"irac_merged_catalogue_herschel-stripe-82.fits\" ,       \n",
    "     Table.read(\"{}/irac_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR)      ), \n",
    "     \"irac_intid\"], \n",
    "    \n",
    "    #['decals', \"DECaLS.fits\" ,      Table.read(\"{}/DECaLS.fits\".format(TMP_DIR)    ), \"decals_id\"],  \n",
    "    ['decam', \n",
    "     \"decam_merged_catalogue_herschel-stripe-82.fits\" ,     \n",
    "     Table.read(\"{}/decam_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR)    ), \n",
    "     \"decam_intid\"],  \n",
    "    \n",
    "    ['rcs',    \"RCSLenS.fits\" ,     Table.read(\"{}/RCSLenS.fits\".format(TMP_DIR)   ), \"rcs_id\"],    \n",
    "    \n",
    "    ['sdss',   \"SDSS-S82.fits\" ,    Table.read(\"{}/SDSS-S82.fits\".format(TMP_DIR)  ), \"sdss_id\"],  \n",
    "    #['sdss',   \"SDSS-S82_IAC.fits\" ,    Table.read(\"{}/SDSS-S82_IAC.fits\".format(TMP_DIR)  ), \"sdss_id\"],\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Sort catalogue by HELP id so that it is split up in RA strips\n",
    "master_catalogue.sort('help_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n=0\n",
    "for sub_file in range(num_files):\n",
    "    # the following used to have a -1 which was wrong as it left out objects\n",
    "    sub_catalogue = master_catalogue[n*split_length:(n+1)*split_length].copy()\n",
    "    #print(n)\n",
    "    for survey in surveys:\n",
    "        #print(survey[0])\n",
    "        sub_catalogue = join(sub_catalogue, \n",
    "                               survey[2], #Table.read(\"{}/{}\".format(TMP_DIR, survey[1])),\n",
    "                               join_type='left',\n",
    "                               metadata_conflicts='silent',\n",
    "                               keys=survey[3]\n",
    "                            )\n",
    "    #print('Finished join')\n",
    "    \n",
    "    # Combine merge flags\n",
    "    \n",
    "    sub_catalogue['flag_merged'].name = 'flag_merged_tmp'\n",
    "    flag_merged_columns = [column for column in sub_catalogue.colnames\n",
    "                            if 'flag_merged' in column]\n",
    "    \n",
    "    flag_merged_column = np.zeros(len(sub_catalogue), dtype=bool)\n",
    "    for column in flag_merged_columns:\n",
    "        flag_merged_column |= sub_catalogue[column]\n",
    "    \n",
    "    sub_catalogue.add_column(Column(data=flag_merged_column, name=\"flag_merged\"))\n",
    "    sub_catalogue.remove_columns(flag_merged_columns)\n",
    "    \n",
    "    #flag cleaned\n",
    "    flag_cleaned_columns = [column for column in sub_catalogue.colnames\n",
    "                        if 'flag_cleaned' in column]\n",
    "\n",
    "    flag_column = np.zeros(len(sub_catalogue), dtype=bool)\n",
    "    for column in flag_cleaned_columns:\n",
    "        flag_column |= sub_catalogue[column]\n",
    "    \n",
    "    sub_catalogue.add_column(Column(data=flag_column, name=\"flag_cleaned\"))\n",
    "    sub_catalogue.remove_columns(flag_cleaned_columns)\n",
    "\n",
    "    #Remove stellarity and gaia flag columns which have been added back in\n",
    "    sub_catalogue.remove_columns(flag_gaia_columns)\n",
    "    sub_catalogue.remove_columns(stellarity_columns)\n",
    "    #sub_catalogue.remove_columns(flag_cleaned_columns)\n",
    "    \n",
    "    #Add flag fill values\n",
    "    \n",
    "    for col in sub_catalogue.colnames:\n",
    "        if (col.startswith(\"m_\") or col.startswith(\"merr_\") or col.startswith(\"f_\") or col.startswith(\"ferr_\")):\n",
    "            sub_catalogue[col] = sub_catalogue[col].astype(float)\n",
    "            sub_catalogue[col].fill_value = np.nan\n",
    "        if \"stellarity\" in col:\n",
    "            sub_catalogue[col].fill_value = np.nan\n",
    "        elif \"flag\" in col:\n",
    "            sub_catalogue[col].fill_value = 0\n",
    "        elif col.endswith(\"id\"):\n",
    "            sub_catalogue[col].fill_value = -1\n",
    "        #Remove residual ra decs from join\n",
    "        if col.endswith('_ra'):\n",
    "            sub_catalogue.remove_column(col)\n",
    "        if col.endswith('_dec'):\n",
    "            sub_catalogue.remove_column(col)\n",
    "        \n",
    "    sub_catalogue = sub_catalogue.filled()\n",
    "    \n",
    "    #Adding detection flag\n",
    "    \n",
    "    nb_optical_flux = (\n",
    "        1 * ~np.isnan(sub_catalogue['f_sdss_u']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_sdss_g']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_sdss_r']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_sdss_i']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_sdss_z']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_g']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_r']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_i']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_z']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_y']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_n921']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_suprime_n816']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_gpc1_g']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_gpc1_r']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_gpc1_i']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_gpc1_z']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_gpc1_y']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_decam_g']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_decam_r']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_decam_i']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_decam_z']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_decam_y']) \n",
    "    )\n",
    "\n",
    "    nb_nir_flux = (\n",
    "        #1 * ~np.isnan(sub_catalogue['f_ukidss_y']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_ukidss_j']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_ukidss_h']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_ukidss_k']) +\n",
    "        \n",
    "        1 * ~np.isnan(sub_catalogue['f_vista_j']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_vista_h']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_vista_ks']) \n",
    "    )\n",
    "\n",
    "    nb_mir_flux = (\n",
    "        1 * ~np.isnan(sub_catalogue['f_irac_i1']) +\n",
    "        1 * ~np.isnan(sub_catalogue['f_irac_i2']) \n",
    "    )\n",
    "\n",
    "\n",
    "    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",
    "    sub_catalogue.add_column(\n",
    "    Column(\n",
    "        1 * has_optical_flux + 2 * has_nir_flux + 4 * has_mir_flux,\n",
    "        name=\"flag_optnir_det\")\n",
    "        )\n",
    "    \n",
    "    \n",
    "    # Remove id names and write file\n",
    "    sub_catalogue.remove_columns(id_names)\n",
    "                          \n",
    "    sub_catalogue.write(\"{}/tiles/sub_catalogue_herschel-stripe-82{}_{}.fits\".format(OUT_DIR, SUFFIX, n), overwrite=True)\n",
    "    \n",
    "    del sub_catalogue\n",
    "    del flag_column\n",
    "    del flag_merged_column\n",
    "    gc.collect()\n",
    "    time.sleep(10)\n",
    "    \n",
    "    n += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## How to generate final catalogue\n",
    "After this notebook has been run there will be a set of sub catalogues in data/tiles/\n",
    "\n",
    "These need to be stacked using stilts:\n",
    "\n",
    "<pre>\n",
    "suffix=20180111\n",
    "\n",
    "ls ./data/tiles/sub_catalogue_herschel-stripe-82_$suffix_*.fits > ./data/tiles/fits_list_$suffix.lis\n",
    "\n",
    "stilts tcat in=@./data/tiles/fits_list_$suffix.lis out=./data/master_catalogue_herschel-stripe-82_$suffix.fits\n",
    "</pre>\n",
    "\n",
    "For many purposes this file may be too large. In order to run checks and diagnostics we typically take a subset using something like:\n",
    "\n",
    "<pre>\n",
    "stilts tpipe cmd='every 10' ./data/master_catalogue_herschel-stripe-82_$suffix.fits omode=out out=./data/master_catalogue_herschel-stripe-82_RANDOM10PCSAMPLE_$suffix.fits\n",
    "</pre>"
   ]
  }
 ],
 "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
}
