{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ad466cce",
   "metadata": {},
   "source": [
    "======================== Import Packages =========================="
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "53557a3b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys, pdb, glob\n",
    "import numpy as np\n",
    "from astropy.table import Table, join\n",
    "from astroquery.vizier import Vizier\n",
    "import warnings\n",
    "from astropy.logger import AstropyWarning\n",
    "warnings.filterwarnings('ignore', category=AstropyWarning)\n",
    "from IPython.display import display, HTML\n",
    "from tabulate import tabulate"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1b1fd47",
   "metadata": {},
   "source": [
    "===================== Define Functions ==================="
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "30c65bd2",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(catalog, join_key='Name'):\n",
    "\n",
    "    \"\"\"\n",
    "    PURPOSE:    Get data from literature with Vizier\n",
    "\n",
    "    INPUT:      catalog = ctalog name on Vizier (str)\n",
    "                join_key = column header to join tables, if multiple (str; optional)\n",
    "\n",
    "    OUTPUT:     t = data table (AstroPy Table)\n",
    "\n",
    "    \"\"\"\n",
    "\n",
    "    ### GET FULL CATALOG (ALL COLUMNS, ALL ROWS)\n",
    "    viz = Vizier(catalog=catalog, columns=['**'])\n",
    "    viz.ROW_LIMIT = -1\n",
    "    tv = viz.get_catalogs(catalog)\n",
    "\n",
    "    ### IF MULTIPLE TABLES, JOIN THEN\n",
    "    for i, val in enumerate(tv.keys()):\n",
    "        if i == 0:\n",
    "            t = tv[val]\n",
    "        else:\n",
    "            tt = tv[val]\n",
    "            if join_key in tt.columns:\n",
    "                t = join(t, tt, join_type='inner', keys=join_key)\n",
    "\n",
    "    return t"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7fec8c1",
   "metadata": {},
   "source": [
    "========================== Code =========================="
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b91e7fac",
   "metadata": {},
   "outputs": [],
   "source": [
    "### LOAD IN LUPUS DATA\n",
    "T = get_data(\"J/ApJ/828/46\")\n",
    "T.sort('RAJ2000')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a95b352a",
   "metadata": {
    "lines_to_next_cell": 2
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### WRITE HEADER INFO\n",
    "f = open('../output/table_03.tex', 'w')\n",
    "f.write(r'\\capstartfalse'                                  + ' \\n')\n",
    "f.write(r'\\begin{deluxetable*}{lrrrrrrr}'                    + ' \\n')\n",
    "f.write(r'\\tabletypesize{\\footnotesize}'                   + ' \\n')\n",
    "f.write(r'\\centering'                                      + ' \\n')\n",
    "f.write(r'\\tablewidth{500pt}'                              + ' \\n')\n",
    "f.write(r'\\tablecaption{Gas Properties \\label{tab-gas}}'   + ' \\n')\n",
    "f.write(r'\\tablecolumns{8} '                               + ' \\n')\n",
    "f.write(r'\\tablehead{'                                     + ' \\n')\n",
    "f.write(r' \\colhead{Source}'                               + ' \\n')\n",
    "f.write(r'&\\colhead{$F_{\\rm 13CO}$}'                       + ' \\n')\n",
    "f.write(r'&\\colhead{$E_{\\rm 13CO}$}'                       + ' \\n')\n",
    "f.write(r'&\\colhead{$F_{\\rm C18O}$}'                       + ' \\n')\n",
    "f.write(r'&\\colhead{$E_{\\rm C18O}$}'                       + ' \\n')\n",
    "f.write(r'&\\colhead{$M_{\\rm gas}$}'                        + ' \\n')\n",
    "f.write(r'&\\colhead{$M_{\\rm gas,min}$}'                    + ' \\n')\n",
    "f.write(r'&\\colhead{$M_{\\rm gas,max}$} \\\\'                 + ' \\n')\n",
    "f.write(r' \\colhead{}'                                     + ' \\n')\n",
    "f.write(r'&\\colhead{(mJy~km~s$^{-1}$)}'                    + ' \\n')\n",
    "f.write(r'&\\colhead{(mJy~km~s$^{-1}$)}'                    + ' \\n')\n",
    "f.write(r'&\\colhead{(mJy~km~s$^{-1}$)}'                    + ' \\n')\n",
    "f.write(r'&\\colhead{(mJy~km~s$^{-1}$)}'                    + ' \\n')\n",
    "f.write(r'&\\colhead{($M_{\\rm Jup}$)}'                      + ' \\n')\n",
    "f.write(r'&\\colhead{($M_{\\rm Jup}$)}'                      + ' \\n')\n",
    "f.write(r'&\\colhead{($M_{\\rm Jup}$)}'                      + ' \\n')\n",
    "f.write(r'}'                                               + ' \\n')\n",
    "f.write(r'\\startdata'                                      + ' \\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d3265e36",
   "metadata": {},
   "outputs": [],
   "source": [
    "table_body = ''\n",
    "lim = 10\n",
    "for i, val in enumerate(np.zeros(lim)):\n",
    "\n",
    "    source = T['Name'][i]\n",
    "\n",
    "    if T['l_Mgas'][i] != '<':\n",
    "        mgas = \"{0:0.1f}\".format(T['Mgas'][i])\n",
    "\n",
    "    else:\n",
    "        mgas = r'$' + str(T['l_Mgas'][i]) + \"{0:0.1f}\".format(T['Mgas'][i]) + r'$'\n",
    "\n",
    "    if np.ma.is_masked(T['b_Mgas'][i]) is True:\n",
    "        b_mgas = '...'\n",
    "    else:\n",
    "        b_mgas = r'$' + \"{0:0.1f}\".format(T['b_Mgas'][i]) + r'$'\n",
    "\n",
    "    if np.ma.is_masked(T['B_Mgas'][i]) is True:\n",
    "        B_mgas = '...'\n",
    "    else:\n",
    "        B_mgas = r'$' + \"{0:0.1f}\".format(T['B_Mgas'][i]) + r'$'\n",
    "\n",
    "\n",
    "    if T['l_F13CO'][i] != '<':\n",
    "        f13 = \"{0:01}\".format(T['F13CO'][i])\n",
    "        e13 = \"{0:01}\".format(T['e_F13CO'][i])\n",
    "    else:\n",
    "        f13 = r'$' + str(T['l_F13CO'][i]) + \"{0:01}\".format(T['F13CO'][i]) + r'$'\n",
    "        e13 = '...'\n",
    "\n",
    "\n",
    "    if T['l_F18CO'][i] != '<':\n",
    "        f18 = \"{0:01}\".format(T['F18CO'][i])\n",
    "        e18 = \"{0:01}\".format(T['e_F18CO'][i])\n",
    "    else:\n",
    "        f18 = r'$' + str(T['l_F18CO'][i]) + \"{0:01}\".format(T['F18CO'][i]) + r'$'\n",
    "        e18 = '...'\n",
    "\n",
    "    if (i < lim - 1):\n",
    "        end = r' \\\\' + '\\n'\n",
    "    else:\n",
    "        end = '\\n'\n",
    "\n",
    "    f.write(source + ' & ' + f13 + ' & ' + e13 + ' & ' + f18 + ' & ' + e18 + ' & ' + \n",
    "            mgas + ' & ' + b_mgas + ' & ' + B_mgas + end)\n",
    "    \n",
    "    table_body += source + ' & ' + f13 + ' & ' + e13 + ' & ' + f18 + ' & ' + e18 + ' & ' + mgas + ' & ' + b_mgas + ' & ' + B_mgas + end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "30f57b24",
   "metadata": {},
   "outputs": [],
   "source": [
    "f.write(r'\\enddata' + ' \\n')\n",
    "f.write(r'\\tablenotetext{}{(This table is available in its entirety in machine-readible form.)}' + ' \\n')\n",
    "f.write(r'\\end{deluxetable*}' + ' \\n')\n",
    "f.write(r'\\capstartfalse' + ' \\n')\n",
    "f.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "545cb842",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<thead>\n",
       "<tr><th>Source           </th><th>F_13CO (mJy km s-1)  </th><th>E_13CO (mJy km s-1)  </th><th>F_C18O (mJy km s-1)  </th><th>E_C18O (mJy km s-1)  </th><th>M_gas (MJup)  </th><th>b_Mgas (MJup)  </th><th>B_Mgas (MJup)  </th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "<tr><td>Sz 65            </td><td>971                  </td><td>128                  </td><td>415                  </td><td>105                  </td><td>0.7           </td><td>$0.3$          </td><td>$10.5$ \\       </td></tr>\n",
       "<tr><td>Sz 66            </td><td>153                  </td><td>45                   </td><td>$&lt;111$               </td><td>...                  </td><td>0.2           </td><td>...            </td><td>$1.0$ \\        </td></tr>\n",
       "<tr><td>J15430131-3409153</td><td>$&lt;162$               </td><td>...                  </td><td>$&lt;192$               </td><td>...                  </td><td>$&lt;1.0$        </td><td>...            </td><td>... \\          </td></tr>\n",
       "<tr><td>J15430227-3444059</td><td>$&lt;138$               </td><td>...                  </td><td>$&lt;171$               </td><td>...                  </td><td>$&lt;1.0$        </td><td>...            </td><td>... \\          </td></tr>\n",
       "<tr><td>J15445789-3423392</td><td>$&lt;84$                </td><td>...                  </td><td>$&lt;102$               </td><td>...                  </td><td>$&lt;0.3$        </td><td>...            </td><td>... \\          </td></tr>\n",
       "<tr><td>J15450634-3417378</td><td>356                  </td><td>111                  </td><td>$&lt;174$               </td><td>...                  </td><td>0.1           </td><td>...            </td><td>$3.1$ \\        </td></tr>\n",
       "<tr><td>J15450887-3417333</td><td>759                  </td><td>87                   </td><td>573                  </td><td>145                  </td><td>3.2           </td><td>$1.0$          </td><td>$10.5$ \\       </td></tr>\n",
       "<tr><td>Sz 68            </td><td>915                  </td><td>133                  </td><td>444                  </td><td>132                  </td><td>0.8           </td><td>$0.3$          </td><td>$10.5$ \\       </td></tr>\n",
       "<tr><td>Sz 69            </td><td>466                  </td><td>74                   </td><td>$&lt;102$               </td><td>...                  </td><td>0.2           </td><td>...            </td><td>$3.1$ \\        </td></tr>\n",
       "<tr><td>Sz 71            </td><td>1298                 </td><td>107                  </td><td>$&lt;111$               </td><td>...                  </td><td>0.3           </td><td>...            </td><td>$1.0$          </td></tr>\n",
       "</tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "headers = [\n",
    "    \"Source\",\n",
    "    \"F_13CO (mJy km s-1)\",\n",
    "    \"E_13CO (mJy km s-1)\",\n",
    "    \"F_C18O (mJy km s-1)\",\n",
    "    \"E_C18O (mJy km s-1)\",\n",
    "    \"M_gas (MJup)\",\n",
    "    \"b_Mgas (MJup)\",\n",
    "    \"B_Mgas (MJup)\"\n",
    "]\n",
    "\n",
    "table_data = []\n",
    "for row in table_body.split('\\\\\\n'):\n",
    "    table_data.append(row.split(' & '))\n",
    "\n",
    "display(HTML(tabulate(table_data, headers=headers, tablefmt='html')))"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "cell_metadata_filter": "-all",
   "main_language": "python",
   "notebook_metadata_filter": "-all"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "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.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
