{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Herschel Stripe 82 VICS82 - VHS merging\n",
    "\n",
    "VICS 82 and VHS contain VISTA J and Ks fluxes which need to be merged"
   ]
  },
  {
   "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 17:42:59.765542\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": {},
   "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",
    "from collections import OrderedDict\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\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": [
    "vics82 = Table.read(\"{}/VICS82.fits\".format(TMP_DIR))\n",
    "vhs = Table.read(\"{}/VISTA-VHS.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:  VHS, VICS82, \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": [
    "### VHS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue = vhs\n",
    "master_catalogue['vhs_ra'].name = 'ra'\n",
    "master_catalogue['vhs_dec'].name = 'dec'\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Add VICS82"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "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(vics82['vics82_ra'], vics82['vics82_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, vics82, \"vics82_ra\", \"vics82_dec\", radius=0.8*u.arcsec)\n"
   ]
  },
  {
   "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": 8,
   "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": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<i>Table length=10</i>\n",
       "<table id=\"table140655984154608-271125\" class=\"table-striped table-bordered table-condensed\">\n",
       "<thead><tr><th>idx</th><th>vhs_id</th><th>ra</th><th>dec</th><th>vhs_stellarity</th><th>m_vhs_y</th><th>merr_vhs_y</th><th>m_ap_vhs_y</th><th>merr_ap_vhs_y</th><th>m_vhs_j</th><th>merr_vhs_j</th><th>m_ap_vhs_j</th><th>merr_ap_vhs_j</th><th>m_vhs_h</th><th>merr_vhs_h</th><th>m_ap_vhs_h</th><th>merr_ap_vhs_h</th><th>m_vhs_k</th><th>merr_vhs_k</th><th>m_ap_vhs_k</th><th>merr_ap_vhs_k</th><th>f_vhs_y</th><th>ferr_vhs_y</th><th>flag_vhs_y</th><th>f_ap_vhs_y</th><th>ferr_ap_vhs_y</th><th>f_vhs_j</th><th>ferr_vhs_j</th><th>flag_vhs_j</th><th>f_ap_vhs_j</th><th>ferr_ap_vhs_j</th><th>f_vhs_h</th><th>ferr_vhs_h</th><th>flag_vhs_h</th><th>f_ap_vhs_h</th><th>ferr_ap_vhs_h</th><th>f_vhs_k</th><th>ferr_vhs_k</th><th>flag_vhs_k</th><th>f_ap_vhs_k</th><th>ferr_ap_vhs_k</th><th>vhs_flag_cleaned</th><th>vhs_flag_gaia</th><th>flag_merged</th><th>vics82_id</th><th>vics82_stellarity</th><th>vics82_flag_cleaned</th><th>f_wircam_j</th><th>f_vista_j</th><th>ferr_wircam_j</th><th>ferr_vista_j</th><th>m_wircam_j</th><th>m_vista_j</th><th>merr_wircam_j</th><th>merr_vista_j</th><th>flag_wircam_j</th><th>flag_vista_j</th><th>f_ap_wircam_j</th><th>f_ap_vista_j</th><th>ferr_ap_wircam_j</th><th>ferr_ap_vista_j</th><th>m_ap_wircam_j</th><th>m_ap_vista_j</th><th>merr_ap_wircam_j</th><th>merr_ap_vista_j</th><th>f_wircam_ks</th><th>f_vista_ks</th><th>ferr_wircam_ks</th><th>ferr_vista_ks</th><th>m_wircam_ks</th><th>m_vista_ks</th><th>merr_wircam_ks</th><th>merr_vista_ks</th><th>flag_wircam_ks</th><th>flag_vista_ks</th><th>f_ap_wircam_ks</th><th>f_ap_vista_ks</th><th>ferr_ap_wircam_ks</th><th>ferr_ap_vista_ks</th><th>m_ap_wircam_ks</th><th>m_ap_vista_ks</th><th>merr_ap_wircam_ks</th><th>merr_ap_vista_ks</th><th>vics82_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></tr></thead>\n",
       "<tr><td>0</td><td>472552085432</td><td>0.6733063462969108</td><td>-7.064435803788961</td><td>0.9999809</td><td>11.225856</td><td>0.0004005818</td><td>10.733315</td><td>0.00033908949</td><td>11.229458</td><td>0.00036787748</td><td>11.64547</td><td>0.00037923775</td><td>11.1059475</td><td>0.00037003707</td><td>12.134141</td><td>0.0005347403</td><td>12.374702</td><td>0.001045427</td><td>12.524167</td><td>0.0007053128</td><td>117397.14</td><td>43.31361</td><td>False</td><td>184787.95</td><td>57.711674</td><td>117008.305</td><td>39.645653</td><td>False</td><td>79764.92</td><td>27.86116</td><td>131105.47</td><td>44.682938</td><td>False</td><td>50856.145</td><td>25.047361</td><td>40749.176</td><td>39.236317</td><td>False</td><td>35508.56</td><td>23.066969</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>1</td><td>472550167438</td><td>354.79921996775715</td><td>-6.966044972170934</td><td>0.9999809</td><td>10.838136</td><td>0.00033546644</td><td>10.761539</td><td>0.00034286294</td><td>11.016413</td><td>0.0002927322</td><td>11.346241</td><td>0.00033378295</td><td>11.196027</td><td>0.00044863037</td><td>11.694687</td><td>0.00042353437</td><td>10.958137</td><td>0.0004384569</td><td>11.114921</td><td>0.00038772548</td><td>167782.08</td><td>51.840637</td><td>False</td><td>180046.27</td><td>56.856525</td><td>142375.33</td><td>38.386715</td><td>False</td><td>105075.98</td><td>32.30303</td><td>120667.16</td><td>49.860134</td><td>False</td><td>76229.86</td><td>29.736475</td><td>150226.05</td><td>60.66634</td><td>False</td><td>130026.43</td><td>46.43353</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>2</td><td>472552084617</td><td>0.43818836458293725</td><td>-7.025949661153808</td><td>0.9999809</td><td>10.177958</td><td>0.00022813007</td><td>10.762556</td><td>0.00035271826</td><td>10.416794</td><td>0.00022748699</td><td>11.823127</td><td>0.00042650828</td><td>10.292261</td><td>0.00028397026</td><td>12.420694</td><td>0.0006430615</td><td>11.285405</td><td>0.00044710175</td><td>11.829457</td><td>0.0005164086</td><td>308188.78</td><td>64.75526</td><td>False</td><td>179877.73</td><td>58.436073</td><td>247333.12</td><td>51.822044</td><td>False</td><td>67725.02</td><td>26.60433</td><td>277392.94</td><td>72.551094</td><td>False</td><td>39059.09</td><td>23.133976</td><td>111131.66</td><td>45.763565</td><td>False</td><td>67331.28</td><td>32.024773</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>3</td><td>472533513039</td><td>350.41845602259264</td><td>-5.668230533542093</td><td>0.9999809</td><td>10.913672</td><td>0.00032298078</td><td>10.942002</td><td>0.0003647057</td><td>11.131113</td><td>0.00032008954</td><td>11.300674</td><td>0.00033660358</td><td>11.533727</td><td>0.00049251236</td><td>11.725494</td><td>0.0004095544</td><td>11.631699</td><td>0.00061511603</td><td>11.66908</td><td>0.00046282448</td><td>156505.94</td><td>46.55681</td><td>False</td><td>152475.11</td><td>51.217354</td><td>128101.62</td><td>37.766068</td><td>False</td><td>109579.69</td><td>33.97226</td><td>88411.57</td><td>40.105312</td><td>False</td><td>74097.25</td><td>27.950485</td><td>80783.08</td><td>45.76707</td><td>False</td><td>78049.11</td><td>33.270546</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>4</td><td>472552083412</td><td>0.5080929454812719</td><td>-6.9658068168438305</td><td>0.9999809</td><td>10.484038</td><td>0.0002599213</td><td>10.851676</td><td>0.00036605378</td><td>11.109676</td><td>0.0003307669</td><td>11.588401</td><td>0.00038020188</td><td>11.151638</td><td>0.00043841393</td><td>11.707215</td><td>0.00044700873</td><td>11.38649</td><td>0.0005298281</td><td>11.62849</td><td>0.00046659572</td><td>232479.42</td><td>55.65473</td><td>False</td><td>165702.66</td><td>55.866318</td><td>130655.98</td><td>39.804024</td><td>False</td><td>84069.695</td><td>29.439428</td><td>125702.695</td><td>50.75801</td><td>False</td><td>75355.28</td><td>31.024542</td><td>101252.06</td><td>49.409966</td><td>False</td><td>81022.125</td><td>34.8193</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>5</td><td>472552083136</td><td>0.3606172701062671</td><td>-6.952996942226071</td><td>0.9999809</td><td>10.572128</td><td>0.0002806155</td><td>10.924369</td><td>0.00037350977</td><td>10.958186</td><td>0.00031008112</td><td>11.800819</td><td>0.0004104809</td><td>11.1490755</td><td>0.00044764744</td><td>12.190569</td><td>0.0005549071</td><td>11.516695</td><td>0.00060269266</td><td>11.718931</td><td>0.00048460744</td><td>214362.36</td><td>55.403324</td><td>False</td><td>154971.66</td><td>53.312607</td><td>150219.17</td><td>42.901882</td><td>False</td><td>69130.88</td><td>26.136097</td><td>125999.734</td><td>51.949505</td><td>False</td><td>48280.562</td><td>24.675632</td><td>89809.41</td><td>49.853237</td><td>False</td><td>74546.516</td><td>33.27309</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>6</td><td>472534714823</td><td>0.14560287650863246</td><td>-5.551768664199646</td><td>0.9999809</td><td>10.300137</td><td>0.0002402765</td><td>10.799764</td><td>0.00037424164</td><td>11.254463</td><td>0.00031486707</td><td>11.931418</td><td>0.0004550721</td><td>11.86278</td><td>0.0007833457</td><td>12.55965</td><td>0.00063538336</td><td>11.748887</td><td>0.0007534769</td><td>12.375296</td><td>0.00071129453</td><td>275388.12</td><td>60.944176</td><td>False</td><td>173817.84</td><td>59.91315</td><td>114344.305</td><td>33.160225</td><td>False</td><td>61296.043</td><td>25.691433</td><td>65296.21</td><td>47.110435</td><td>False</td><td>34366.85</td><td>20.111814</td><td>72517.87</td><td>50.325794</td><td>False</td><td>40726.926</td><td>26.68129</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>7</td><td>472548405385</td><td>357.72488275644616</td><td>-5.866311184962854</td><td>0.9999809</td><td>10.527317</td><td>0.00028496105</td><td>10.798896</td><td>0.00037584934</td><td>10.819504</td><td>0.00032354993</td><td>11.422909</td><td>0.00039977542</td><td>11.827106</td><td>0.0005968443</td><td>12.73623</td><td>0.0007279822</td><td>11.410093</td><td>0.00064396166</td><td>11.827256</td><td>0.0005556511</td><td>223394.8</td><td>58.63193</td><td>False</td><td>173956.84</td><td>60.218647</td><td>170686.19</td><td>50.864567</td><td>False</td><td>97912.1</td><td>36.0519</td><td>67477.23</td><td>37.09317</td><td>False</td><td>29208.406</td><td>19.584131</td><td>99074.64</td><td>58.762215</td><td>False</td><td>67467.93</td><td>34.528305</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>8</td><td>472552066969</td><td>0.05488055441913312</td><td>-5.956691333297905</td><td>0.9999809</td><td>11.987613</td><td>0.000658944</td><td>10.930651</td><td>0.00037625284</td><td>11.288198</td><td>0.00038519377</td><td>11.836217</td><td>0.0004121437</td><td>11.509835</td><td>0.00048149726</td><td>12.316352</td><td>0.0005798764</td><td>11.289418</td><td>0.0005094493</td><td>11.866087</td><td>0.0005161095</td><td>58204.26</td><td>35.32474</td><td>False</td><td>154077.62</td><td>53.394318</td><td>110846.12</td><td>39.325603</td><td>False</td><td>66913.41</td><td>25.40022</td><td>90378.63</td><td>40.080696</td><td>False</td><td>42999.074</td><td>22.9652</td><td>110721.65</td><td>51.952827</td><td>False</td><td>65097.61</td><td>30.944437</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>0</td></tr>\n",
       "<tr><td>9</td><td>472533572298</td><td>355.4202510231727</td><td>-5.507053179787264</td><td>0.9999809</td><td>9.635082</td><td>0.00018357042</td><td>10.798157</td><td>0.00037672347</td><td>10.310516</td><td>0.000251016</td><td>11.984892</td><td>0.00046384498</td><td>9.999878</td><td>0.0002743525</td><td>13.6404085</td><td>0.0011919359</td><td>10.111289</td><td>0.00030452482</td><td>11.851378</td><td>0.0005479353</td><td>508120.78</td><td>85.91032</td><td>False</td><td>174075.3</td><td>60.3998</td><td>272767.9</td><td>63.062378</td><td>False</td><td>58350.293</td><td>24.928238</td><td>363118.78</td><td>91.755745</td><td>False</td><td>12700.956</td><td>13.943281</td><td>327705.88</td><td>91.9142</td><td>False</td><td>65985.49</td><td>33.300705</td><td>False</td><td>3</td><td>False</td><td>-1</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>nan</td><td>nan</td><td>False</td><td>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>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>False</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</td><td>nan</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(\"$('#table140655984154608-271125').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",
       "    $('#table140655984154608-271125').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, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 42, 45, 47, 48, 49, 50, 51, 52, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 79, 80, 81, 82, 83], type: \"optionalnum\"}]\n",
       "    });\n",
       "});\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 9,
     "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": 10,
   "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=\"vista_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": 11,
   "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=\"vista_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": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "stellarity_columns = [column for column in master_catalogue.colnames\n",
    "                      if 'stellarity' in column]\n",
    "\n",
    "master_catalogue.add_column(Column(\n",
    "    data=np.nanmax([master_catalogue[column] for column in stellarity_columns], axis=0),\n",
    "    name=\"vista_stellarity\"\n",
    "))\n",
    "master_catalogue.remove_columns(stellarity_columns)"
   ]
  },
  {
   "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": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue.add_column(Column(data=np.arange(len(master_catalogue)), \n",
    "                              name=\"vista_intid\"))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['vhs_id', 'vics82_id', 'vista_intid']\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": "markdown",
   "metadata": {},
   "source": [
    "## VI - Choosing between multiple values for the same filter\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "vista_origin = Table()\n",
    "vista_origin.add_column(master_catalogue['vista_intid'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "vista_stats = Table()\n",
    "vista_stats.add_column(Column(data=['j','ks'], name=\"Band\"))\n",
    "for col in [\"VHS\", \"VICS82\"]:\n",
    "    vista_stats.add_column(Column(data=np.full(2, 0), name=\"{}\".format(col)))\n",
    "    vista_stats.add_column(Column(data=np.full(2, 0), name=\"use {}\".format(col)))\n",
    "    vista_stats.add_column(Column(data=np.full(2, 0), name=\"{} ap\".format(col)))\n",
    "    vista_stats.add_column(Column(data=np.full(2, 0), name=\"use {} ap\".format(col)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "vista_bands = ['j','ks'] # Lowercase naming convention (k is Ks)\n",
    "for band in vista_bands:\n",
    "\n",
    "\n",
    "    # VISTA total flux \n",
    "    has_vhs = ~np.isnan(master_catalogue['f_vhs_' + band.strip('s')])\n",
    "    has_vics82 = ~np.isnan(master_catalogue['f_vista_' + band])\n",
    "\n",
    "    #take VICS82 if available\n",
    "    use_vhs = has_vhs & ~has_vics82\n",
    "    use_vics82 = has_vics82 \n",
    "\n",
    "\n",
    "    master_catalogue['f_vista_' + band][use_vhs] = master_catalogue['f_vhs_' + band.strip('s')][use_vhs]\n",
    "    master_catalogue['ferr_vista_' + band][use_vhs] = master_catalogue['ferr_vhs_' + band.strip('s')][use_vhs]\n",
    "    master_catalogue['m_vista_' + band][use_vhs] = master_catalogue['m_vhs_' + band.strip('s')][use_vhs]\n",
    "    master_catalogue['merr_vista_' + band][use_vhs] = master_catalogue['merr_vhs_' + band.strip('s')][use_vhs]\n",
    "    master_catalogue['flag_vista_' + band][use_vhs] = master_catalogue['flag_vhs_' + band.strip('s')][use_vhs]\n",
    "\n",
    "    master_catalogue.remove_columns(['f_vhs_' + band.strip('s'),\n",
    "                               'ferr_vhs_' + band.strip('s'),\n",
    "                               'm_vhs_' + band.strip('s'), \n",
    "                               'merr_vhs_' + band.strip('s'),\n",
    "                               'flag_vhs_' + band.strip('s')])\n",
    "\n",
    "    origin = np.full(len(master_catalogue), '     ', dtype='<U5')\n",
    "    origin[use_vhs] = \"VHS\"\n",
    "    origin[use_vics82] = \"VICS82\"\n",
    "\n",
    "    \n",
    "    vista_origin.add_column(Column(data=origin, name= 'f_vista_' + band ))\n",
    "    \n",
    "    # VISTA aperture flux \n",
    "    has_ap_vhs = ~np.isnan(master_catalogue['f_ap_vhs_' + band.strip('s')])\n",
    "    has_ap_vics82 = ~np.isnan(master_catalogue['f_ap_vista_' + band])\n",
    "\n",
    "    #take VICS82 if available\n",
    "    use_ap_vhs = has_ap_vhs & ~has_ap_vics82\n",
    "    use_ap_vics82 = has_ap_vics82 \n",
    "\n",
    "\n",
    "    master_catalogue['f_ap_vista_' + band][use_ap_vhs] = master_catalogue['f_ap_vhs_' + band.strip('s')][use_ap_vhs]\n",
    "    master_catalogue['ferr_ap_vista_' + band][use_ap_vhs] = master_catalogue['ferr_ap_vhs_' + band.strip('s')][use_ap_vhs]\n",
    "    master_catalogue['m_ap_vista_' + band][use_ap_vhs] = master_catalogue['m_ap_vhs_' + band.strip('s')][use_ap_vhs]\n",
    "    master_catalogue['merr_ap_vista_' + band][use_ap_vhs] = master_catalogue['merr_ap_vhs_' + band.strip('s')][use_ap_vhs]\n",
    "  \n",
    "\n",
    "    master_catalogue.remove_columns(['f_ap_vhs_' + band.strip('s'),\n",
    "                               'ferr_ap_vhs_' + band.strip('s'),\n",
    "                               'm_ap_vhs_' + band.strip('s'), \n",
    "                               'merr_ap_vhs_' + band.strip('s')])\n",
    "\n",
    "    origin_ap = np.full(len(master_catalogue), '     ', dtype='<U5')\n",
    "    origin_ap[use_ap_vhs] = \"VHS\"\n",
    "    origin_ap[use_ap_vics82] = \"VICS82\"\n",
    "\n",
    "    \n",
    "    vista_origin.add_column(Column(data=origin_ap, name= 'f_ap_vista_' + band ))   \n",
    "\n",
    "   \n",
    "    vista_stats['VHS'][vista_stats['Band'] == band] = np.sum(has_vhs)\n",
    "    vista_stats['VICS82'][vista_stats['Band'] == band] = np.sum(has_vics82)\n",
    "\n",
    "    vista_stats['use VHS'][vista_stats['Band'] == band] = np.sum(use_vhs)\n",
    "    vista_stats['use VICS82'][vista_stats['Band'] == band] = np.sum(use_vics82)\n",
    "\n",
    "    vista_stats['VHS ap'][vista_stats['Band'] == band] = np.sum(has_ap_vhs)\n",
    "    vista_stats['VICS82 ap'][vista_stats['Band'] == band] = np.sum(has_ap_vics82)\n",
    "\n",
    "    vista_stats['use VHS ap'][vista_stats['Band'] == band] = np.sum(use_ap_vhs)\n",
    "    vista_stats['use VICS82 ap'][vista_stats['Band'] == band] = np.sum(use_ap_vics82)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<i>Table length=2</i>\n",
       "<table id=\"table140655984181488-17025\" class=\"table-striped table-bordered table-condensed\">\n",
       "<thead><tr><th>idx</th><th>Band</th><th>VHS</th><th>use VHS</th><th>VHS ap</th><th>use VHS ap</th><th>VICS82</th><th>use VICS82</th><th>VICS82 ap</th><th>use VICS82 ap</th></tr></thead>\n",
       "<tr><td>0</td><td>j</td><td>3245957</td><td>2753317</td><td>3245540</td><td>2752939</td><td>1817615</td><td>1817615</td><td>1795250</td><td>1795250</td></tr>\n",
       "<tr><td>1</td><td>ks</td><td>2408910</td><td>1991555</td><td>2406285</td><td>1988978</td><td>5214989</td><td>5214989</td><td>4919340</td><td>4919340</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(\"$('#table140655984181488-17025').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",
       "    $('#table140655984181488-17025').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, 2, 3, 4, 5, 6, 7, 8, 9], type: \"optionalnum\"}]\n",
       "    });\n",
       "});\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vista_stats.show_in_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "vista_origin.write(\"{}/herschel-stripe-82_vista_fluxes_origins{}.fits\".format(OUT_DIR, SUFFIX), overwrite=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Rename old vhs cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n",
    "renaming = OrderedDict({\n",
    "    '_vhs_y': '_vista_y',\n",
    "    '_vhs_h': '_vista_h',\n",
    "\n",
    "})\n",
    "\n",
    "\n",
    "for col in master_catalogue.colnames:\n",
    "    for rename_col in list(renaming):\n",
    "        if rename_col in col:\n",
    "            master_catalogue.rename_column(col, col.replace(rename_col, renaming[rename_col]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## IX - Saving the catalogue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue[\"ra\"].name = \"vista_ra\"\n",
    "master_catalogue[\"dec\"].name = \"vista_dec\"\n",
    "master_catalogue[\"flag_merged\"].name = \"vista_flag_merged\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "columns = [\"vhs_id\", \"vics82_id\", \"vista_intid\",\n",
    "           'vista_ra', 'vista_dec', 'vista_flag_merged',  \n",
    "           'vista_flag_cleaned',  'vista_flag_gaia', 'vista_stellarity']\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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "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": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<i>Table length=10</i>\n",
       "<table id=\"table140655984487448-620794\" class=\"table-striped table-bordered table-condensed\">\n",
       "<thead><tr><th>idx</th><th>vhs_id</th><th>vista_ra</th><th>vista_dec</th><th>m_vista_y</th><th>merr_vista_y</th><th>m_ap_vista_y</th><th>merr_ap_vista_y</th><th>m_vista_h</th><th>merr_vista_h</th><th>m_ap_vista_h</th><th>merr_ap_vista_h</th><th>f_vista_y</th><th>ferr_vista_y</th><th>flag_vista_y</th><th>f_ap_vista_y</th><th>ferr_ap_vista_y</th><th>f_vista_h</th><th>ferr_vista_h</th><th>flag_vista_h</th><th>f_ap_vista_h</th><th>ferr_ap_vista_h</th><th>vista_flag_merged</th><th>vics82_id</th><th>f_wircam_j</th><th>f_vista_j</th><th>ferr_wircam_j</th><th>ferr_vista_j</th><th>m_wircam_j</th><th>m_vista_j</th><th>merr_wircam_j</th><th>merr_vista_j</th><th>flag_wircam_j</th><th>flag_vista_j</th><th>f_ap_wircam_j</th><th>f_ap_vista_j</th><th>ferr_ap_wircam_j</th><th>ferr_ap_vista_j</th><th>m_ap_wircam_j</th><th>m_ap_vista_j</th><th>merr_ap_wircam_j</th><th>merr_ap_vista_j</th><th>f_wircam_ks</th><th>f_vista_ks</th><th>ferr_wircam_ks</th><th>ferr_vista_ks</th><th>m_wircam_ks</th><th>m_vista_ks</th><th>merr_wircam_ks</th><th>merr_vista_ks</th><th>flag_wircam_ks</th><th>flag_vista_ks</th><th>f_ap_wircam_ks</th><th>f_ap_vista_ks</th><th>ferr_ap_wircam_ks</th><th>ferr_ap_vista_ks</th><th>m_ap_wircam_ks</th><th>m_ap_vista_ks</th><th>merr_ap_wircam_ks</th><th>merr_ap_vista_ks</th><th>vista_flag_cleaned</th><th>vista_flag_gaia</th><th>vista_stellarity</th><th>vista_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><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></tr></thead>\n",
       "<tr><td>0</td><td>472552085432</td><td>0.6733063462969108</td><td>-7.064435803788961</td><td>11.225856</td><td>0.0004005818</td><td>10.733315</td><td>0.00033908949</td><td>11.1059475</td><td>0.00037003707</td><td>12.134141</td><td>0.0005347403</td><td>117397.14</td><td>43.31361</td><td>False</td><td>184787.95</td><td>57.711674</td><td>131105.47</td><td>44.682938</td><td>False</td><td>50856.145</td><td>25.047361</td><td>False</td><td>-1</td><td>nan</td><td>117008.3046875</td><td>nan</td><td>39.645652770996094</td><td>nan</td><td>11.22945785522461</td><td>nan</td><td>0.0003678774810396135</td><td>False</td><td>False</td><td>nan</td><td>79764.92</td><td>nan</td><td>27.861160278320312</td><td>nan</td><td>11.64547</td><td>nan</td><td>0.0003792377538047731</td><td>nan</td><td>40749.17578125</td><td>nan</td><td>39.2363166809082</td><td>nan</td><td>12.374702453613281</td><td>nan</td><td>0.0010454270523041487</td><td>False</td><td>False</td><td>nan</td><td>35508.56</td><td>nan</td><td>23.06696891784668</td><td>nan</td><td>12.524167</td><td>nan</td><td>0.0007053128210827708</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>0</td></tr>\n",
       "<tr><td>1</td><td>472550167438</td><td>354.79921996775715</td><td>-6.966044972170934</td><td>10.838136</td><td>0.00033546644</td><td>10.761539</td><td>0.00034286294</td><td>11.196027</td><td>0.00044863037</td><td>11.694687</td><td>0.00042353437</td><td>167782.08</td><td>51.840637</td><td>False</td><td>180046.27</td><td>56.856525</td><td>120667.16</td><td>49.860134</td><td>False</td><td>76229.86</td><td>29.736475</td><td>False</td><td>-1</td><td>nan</td><td>142375.328125</td><td>nan</td><td>38.386714935302734</td><td>nan</td><td>11.016412734985352</td><td>nan</td><td>0.00029273220570757985</td><td>False</td><td>False</td><td>nan</td><td>105075.98</td><td>nan</td><td>32.30302810668945</td><td>nan</td><td>11.346241</td><td>nan</td><td>0.00033378295483998954</td><td>nan</td><td>150226.046875</td><td>nan</td><td>60.66633987426758</td><td>nan</td><td>10.958136558532715</td><td>nan</td><td>0.0004384568892419338</td><td>False</td><td>False</td><td>nan</td><td>130026.43</td><td>nan</td><td>46.433528900146484</td><td>nan</td><td>11.114921</td><td>nan</td><td>0.0003877254785038531</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>1</td></tr>\n",
       "<tr><td>2</td><td>472552084617</td><td>0.43818836458293725</td><td>-7.025949661153808</td><td>10.177958</td><td>0.00022813007</td><td>10.762556</td><td>0.00035271826</td><td>10.292261</td><td>0.00028397026</td><td>12.420694</td><td>0.0006430615</td><td>308188.78</td><td>64.75526</td><td>False</td><td>179877.73</td><td>58.436073</td><td>277392.94</td><td>72.551094</td><td>False</td><td>39059.09</td><td>23.133976</td><td>False</td><td>-1</td><td>nan</td><td>247333.125</td><td>nan</td><td>51.822044372558594</td><td>nan</td><td>10.416793823242188</td><td>nan</td><td>0.00022748699120711535</td><td>False</td><td>False</td><td>nan</td><td>67725.02</td><td>nan</td><td>26.60433006286621</td><td>nan</td><td>11.823127</td><td>nan</td><td>0.00042650828254409134</td><td>nan</td><td>111131.65625</td><td>nan</td><td>45.76356506347656</td><td>nan</td><td>11.285405158996582</td><td>nan</td><td>0.0004471017455216497</td><td>False</td><td>False</td><td>nan</td><td>67331.28</td><td>nan</td><td>32.02477264404297</td><td>nan</td><td>11.829457</td><td>nan</td><td>0.0005164085887372494</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>2</td></tr>\n",
       "<tr><td>3</td><td>472533513039</td><td>350.41845602259264</td><td>-5.668230533542093</td><td>10.913672</td><td>0.00032298078</td><td>10.942002</td><td>0.0003647057</td><td>11.533727</td><td>0.00049251236</td><td>11.725494</td><td>0.0004095544</td><td>156505.94</td><td>46.55681</td><td>False</td><td>152475.11</td><td>51.217354</td><td>88411.57</td><td>40.105312</td><td>False</td><td>74097.25</td><td>27.950485</td><td>False</td><td>-1</td><td>nan</td><td>128101.6171875</td><td>nan</td><td>37.76606750488281</td><td>nan</td><td>11.131113052368164</td><td>nan</td><td>0.0003200895444024354</td><td>False</td><td>False</td><td>nan</td><td>109579.69</td><td>nan</td><td>33.972259521484375</td><td>nan</td><td>11.300674</td><td>nan</td><td>0.00033660358167253435</td><td>nan</td><td>80783.078125</td><td>nan</td><td>45.76707077026367</td><td>nan</td><td>11.631698608398438</td><td>nan</td><td>0.00061511603416875</td><td>False</td><td>False</td><td>nan</td><td>78049.11</td><td>nan</td><td>33.270545959472656</td><td>nan</td><td>11.66908</td><td>nan</td><td>0.0004628244787454605</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>3</td></tr>\n",
       "<tr><td>4</td><td>472552083412</td><td>0.5080929454812719</td><td>-6.9658068168438305</td><td>10.484038</td><td>0.0002599213</td><td>10.851676</td><td>0.00036605378</td><td>11.151638</td><td>0.00043841393</td><td>11.707215</td><td>0.00044700873</td><td>232479.42</td><td>55.65473</td><td>False</td><td>165702.66</td><td>55.866318</td><td>125702.695</td><td>50.75801</td><td>False</td><td>75355.28</td><td>31.024542</td><td>False</td><td>-1</td><td>nan</td><td>130655.9765625</td><td>nan</td><td>39.80402374267578</td><td>nan</td><td>11.109676361083984</td><td>nan</td><td>0.00033076689578592777</td><td>False</td><td>False</td><td>nan</td><td>84069.695</td><td>nan</td><td>29.439428329467773</td><td>nan</td><td>11.588401</td><td>nan</td><td>0.0003802018763963133</td><td>nan</td><td>101252.0625</td><td>nan</td><td>49.40996551513672</td><td>nan</td><td>11.386489868164062</td><td>nan</td><td>0.0005298280739225447</td><td>False</td><td>False</td><td>nan</td><td>81022.125</td><td>nan</td><td>34.81930160522461</td><td>nan</td><td>11.62849</td><td>nan</td><td>0.0004665957239922136</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>4</td></tr>\n",
       "<tr><td>5</td><td>472552083136</td><td>0.3606172701062671</td><td>-6.952996942226071</td><td>10.572128</td><td>0.0002806155</td><td>10.924369</td><td>0.00037350977</td><td>11.1490755</td><td>0.00044764744</td><td>12.190569</td><td>0.0005549071</td><td>214362.36</td><td>55.403324</td><td>False</td><td>154971.66</td><td>53.312607</td><td>125999.734</td><td>51.949505</td><td>False</td><td>48280.562</td><td>24.675632</td><td>False</td><td>-1</td><td>nan</td><td>150219.171875</td><td>nan</td><td>42.90188217163086</td><td>nan</td><td>10.958186149597168</td><td>nan</td><td>0.00031008111545816064</td><td>False</td><td>False</td><td>nan</td><td>69130.88</td><td>nan</td><td>26.136096954345703</td><td>nan</td><td>11.800819</td><td>nan</td><td>0.00041048089042305946</td><td>nan</td><td>89809.40625</td><td>nan</td><td>49.85323715209961</td><td>nan</td><td>11.516695022583008</td><td>nan</td><td>0.0006026926566846669</td><td>False</td><td>False</td><td>nan</td><td>74546.516</td><td>nan</td><td>33.27309036254883</td><td>nan</td><td>11.718931</td><td>nan</td><td>0.00048460744437761605</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>5</td></tr>\n",
       "<tr><td>6</td><td>472534714823</td><td>0.14560287650863246</td><td>-5.551768664199646</td><td>10.300137</td><td>0.0002402765</td><td>10.799764</td><td>0.00037424164</td><td>11.86278</td><td>0.0007833457</td><td>12.55965</td><td>0.00063538336</td><td>275388.12</td><td>60.944176</td><td>False</td><td>173817.84</td><td>59.91315</td><td>65296.21</td><td>47.110435</td><td>False</td><td>34366.85</td><td>20.111814</td><td>False</td><td>-1</td><td>nan</td><td>114344.3046875</td><td>nan</td><td>33.16022491455078</td><td>nan</td><td>11.254463195800781</td><td>nan</td><td>0.00031486706575378776</td><td>False</td><td>False</td><td>nan</td><td>61296.043</td><td>nan</td><td>25.69143295288086</td><td>nan</td><td>11.931418</td><td>nan</td><td>0.00045507209142670035</td><td>nan</td><td>72517.8671875</td><td>nan</td><td>50.3257942199707</td><td>nan</td><td>11.748887062072754</td><td>nan</td><td>0.0007534769247286022</td><td>False</td><td>False</td><td>nan</td><td>40726.926</td><td>nan</td><td>26.681289672851562</td><td>nan</td><td>12.375296</td><td>nan</td><td>0.0007112945313565433</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>6</td></tr>\n",
       "<tr><td>7</td><td>472548405385</td><td>357.72488275644616</td><td>-5.866311184962854</td><td>10.527317</td><td>0.00028496105</td><td>10.798896</td><td>0.00037584934</td><td>11.827106</td><td>0.0005968443</td><td>12.73623</td><td>0.0007279822</td><td>223394.8</td><td>58.63193</td><td>False</td><td>173956.84</td><td>60.218647</td><td>67477.23</td><td>37.09317</td><td>False</td><td>29208.406</td><td>19.584131</td><td>False</td><td>-1</td><td>nan</td><td>170686.1875</td><td>nan</td><td>50.864566802978516</td><td>nan</td><td>10.819503784179688</td><td>nan</td><td>0.00032354993163608015</td><td>False</td><td>False</td><td>nan</td><td>97912.1</td><td>nan</td><td>36.05189895629883</td><td>nan</td><td>11.422909</td><td>nan</td><td>0.0003997754247393459</td><td>nan</td><td>99074.640625</td><td>nan</td><td>58.76221466064453</td><td>nan</td><td>11.410093307495117</td><td>nan</td><td>0.0006439616554416716</td><td>False</td><td>False</td><td>nan</td><td>67467.93</td><td>nan</td><td>34.52830505371094</td><td>nan</td><td>11.827256</td><td>nan</td><td>0.0005556510877795517</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>7</td></tr>\n",
       "<tr><td>8</td><td>472552066969</td><td>0.05488055441913312</td><td>-5.956691333297905</td><td>11.987613</td><td>0.000658944</td><td>10.930651</td><td>0.00037625284</td><td>11.509835</td><td>0.00048149726</td><td>12.316352</td><td>0.0005798764</td><td>58204.26</td><td>35.32474</td><td>False</td><td>154077.62</td><td>53.394318</td><td>90378.63</td><td>40.080696</td><td>False</td><td>42999.074</td><td>22.9652</td><td>False</td><td>-1</td><td>nan</td><td>110846.1171875</td><td>nan</td><td>39.32560348510742</td><td>nan</td><td>11.288198471069336</td><td>nan</td><td>0.0003851937653962523</td><td>False</td><td>False</td><td>nan</td><td>66913.41</td><td>nan</td><td>25.40022087097168</td><td>nan</td><td>11.836217</td><td>nan</td><td>0.0004121437086723745</td><td>nan</td><td>110721.6484375</td><td>nan</td><td>51.95282745361328</td><td>nan</td><td>11.28941822052002</td><td>nan</td><td>0.0005094492807984352</td><td>False</td><td>False</td><td>nan</td><td>65097.61</td><td>nan</td><td>30.94443702697754</td><td>nan</td><td>11.866087</td><td>nan</td><td>0.000516109517775476</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>8</td></tr>\n",
       "<tr><td>9</td><td>472533572298</td><td>355.4202510231727</td><td>-5.507053179787264</td><td>9.635082</td><td>0.00018357042</td><td>10.798157</td><td>0.00037672347</td><td>9.999878</td><td>0.0002743525</td><td>13.6404085</td><td>0.0011919359</td><td>508120.78</td><td>85.91032</td><td>False</td><td>174075.3</td><td>60.3998</td><td>363118.78</td><td>91.755745</td><td>False</td><td>12700.956</td><td>13.943281</td><td>False</td><td>-1</td><td>nan</td><td>272767.90625</td><td>nan</td><td>63.0623779296875</td><td>nan</td><td>10.310516357421875</td><td>nan</td><td>0.00025101599749177694</td><td>False</td><td>False</td><td>nan</td><td>58350.293</td><td>nan</td><td>24.928237915039062</td><td>nan</td><td>11.984892</td><td>nan</td><td>0.0004638449754565954</td><td>nan</td><td>327705.875</td><td>nan</td><td>91.91419982910156</td><td>nan</td><td>10.111289024353027</td><td>nan</td><td>0.00030452481587417424</td><td>False</td><td>False</td><td>nan</td><td>65985.49</td><td>nan</td><td>33.30070495605469</td><td>nan</td><td>11.851378</td><td>nan</td><td>0.0005479353130795062</td><td>False</td><td>3</td><td>0.9999809265136719</td><td>9</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(\"$('#table140655984487448-620794').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",
       "    $('#table140655984487448-620794').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, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 24, 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63], type: \"optionalnum\"}]\n",
       "    });\n",
       "});\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "master_catalogue[:10].show_in_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "master_catalogue[columns].write(\"{}/vista_merged_catalogue_herschel-stripe-82.fits\".format(TMP_DIR), overwrite=True)"
   ]
  }
 ],
 "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
}
