{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ivo://aip.gavo.org/tap\n",
      "ivo://archive.stsci.edu/caomtap\n",
      "ivo://archive.stsci.edu/hsctap\n",
      "ivo://archive.stsci.edu/hscv2tap\n",
      "ivo://archive.stsci.edu/hscv3tap\n",
      "ivo://archive.stsci.edu/ps1dr2tap\n",
      "ivo://archive.stsci.edu/regtap\n",
      "ivo://asdc/tap\n",
      "ivo://astro.ucl.ac.uk/tap\n",
      "ivo://asu.cas.cz/tap\n",
      "ivo://au.csiro/atoavo/tap\n",
      "ivo://au.csiro/casda/tap\n",
      "ivo://au.csiro/psrda/atnf_pulsar_data_archive\n",
      "ivo://bira-iasb/tap\n",
      "ivo://byu.arvo/tap\n",
      "ivo://cadc.nrc.ca/tap\n",
      "ivo://cdpp/amda\n",
      "ivo://cdpp/cdppdetection\n",
      "ivo://cdpp/illu67p\n",
      "ivo://cdpp/swalerts\n",
      "ivo://cdpp/transplanet\n",
      "ivo://cds.simbad/tap\n",
      "ivo://cds.vizier/obstap\n",
      "ivo://cds.vizier/tap\n",
      "ivo://chivo/tap\n",
      "ivo://cxc.harvard.edu/cda\n",
      "ivo://cxc.harvard.edu/csc\n",
      "ivo://esavo/ehst/tap\n",
      "ivo://esavo/esasky/tap\n",
      "ivo://esavo/gaia/tap\n",
      "ivo://esavo/hsa/tap\n",
      "ivo://esavo/psa/epntap\n",
      "ivo://esavo/registry/tap\n",
      "ivo://esavo/xmm/tap\n",
      "ivo://eso.org/tap_cat\n",
      "ivo://eso.org/tap_obs\n",
      "ivo://fu-berlin.planet.hrsc/tap\n",
      "ivo://ia2.inaf.it/hosted/laurino2011/tap\n",
      "ivo://ia2.inaf.it/iaps/tap\n",
      "ivo://ia2.inaf.it/tap\n",
      "ivo://ia2.inaf.it/tap/projects\n",
      "ivo://iap/tap\n",
      "ivo://idoc/tap\n",
      "ivo://irsa.ipac/tap\n",
      "ivo://jacobsuni/tap\n",
      "ivo://jvo/agn\n",
      "ivo://jvo/alma\n",
      "ivo://jvo/henry_draper\n",
      "ivo://jvo/hipparcos\n",
      "ivo://jvo/isas/akari/fis_v1\n",
      "ivo://jvo/isas/akari_dr1\n",
      "ivo://jvo/isas/darts/hitomi/hitomaster_v1\n",
      "ivo://jvo/kug2000\n",
      "ivo://jvo/nobeyama\n",
      "ivo://jvo/rosat\n",
      "ivo://jvo/saga\n",
      "ivo://jvo/sdss/dr2/spectrum\n",
      "ivo://jvo/sdss/dr8/catalog\n",
      "ivo://jvo/subaru/hds\n",
      "ivo://jvo/subaru/moircs\n",
      "ivo://jvo/subaru/spcam\n",
      "ivo://jvo/subaru/sxds/v1.0\n",
      "ivo://jvo/swire\n",
      "ivo://jvo/twomass\n",
      "ivo://jvo/ukidss\n",
      "ivo://latmos.ipsl/tap\n",
      "ivo://lmd.jussieu/tap\n",
      "ivo://nasa.heasarc/services/xamin\n",
      "ivo://nci.org.au/macho/tap\n",
      "ivo://nci.org.au/skymapper/tap\n",
      "ivo://nci.org.au/wigglez/tap\n",
      "ivo://ned.ipac/tap\n",
      "ivo://oca/mp3c\n",
      "ivo://org.gavo.dc/tap\n",
      "ivo://osug-vo.osug/tap\n",
      "ivo://pvol/tap\n",
      "ivo://sao.ru/dsa-cats/wsdb\n",
      "ivo://spectrum.iaa/tap\n",
      "ivo://src.pas/tap\n",
      "ivo://swinburne/tao\n",
      "ivo://tohoku.univ.jp/tap\n",
      "ivo://uni-heidelberg.de/gaia/tap\n",
      "ivo://vo-plasma.oeaw.ac.at/tap\n",
      "ivo://vopdc.obspm/gepi/gaia\n",
      "ivo://vopdc.obspm/imcce/dynastvo/epn\n",
      "ivo://vopdc.obspm/imcce/m4ast\n",
      "ivo://vopdc.obspm/lesia/apis/epn\n",
      "ivo://vopdc.obspm/lesia/basecom/epn\n",
      "ivo://vopdc.obspm/lesia/bdip/epn\n",
      "ivo://vopdc.obspm/lesia/hfc1ar/epn\n",
      "ivo://vopdc.obspm/lesia/hfc1t3/epn\n",
      "ivo://vopdc.obspm/lesia/iks/epn\n",
      "ivo://vopdc.obspm/lesia/planets/epn\n",
      "ivo://vopdc.obspm/lesia/titan/epn\n",
      "ivo://vopdc.obspm/lesia/tnosarecool/epn\n",
      "ivo://vopdc.obspm/luth/exoplanet/epn\n",
      "ivo://vopdc.obspm/luth/hess-dr\n",
      "ivo://vopdc.obspm/tap/maser\n",
      "ivo://vopdc.obspm/tap/voevent\n",
      "ivo://vopdc.obspm/usn/nda/epn\n",
      "ivo://voxastro.org/tap\n",
      "ivo://wfau.roe.ac.uk/6df-dsa\n",
      "ivo://wfau.roe.ac.uk/6dfdr3-dsa\n",
      "ivo://wfau.roe.ac.uk/atlasdr1-dsa\n",
      "ivo://wfau.roe.ac.uk/denis-dsa\n",
      "ivo://wfau.roe.ac.uk/first-dsa\n",
      "ivo://wfau.roe.ac.uk/galexgr6-dsa\n",
      "ivo://wfau.roe.ac.uk/glimpse-dsa\n",
      "ivo://wfau.roe.ac.uk/iras-dsa\n",
      "ivo://wfau.roe.ac.uk/mgc-dsa\n",
      "ivo://wfau.roe.ac.uk/osa-tap\n",
      "ivo://wfau.roe.ac.uk/pssa-dsa\n",
      "ivo://wfau.roe.ac.uk/rosat-dsa\n",
      "ivo://wfau.roe.ac.uk/sdssdr3-dsa\n",
      "ivo://wfau.roe.ac.uk/sdssdr5-dsa\n",
      "ivo://wfau.roe.ac.uk/sdssdr6-dsa\n",
      "ivo://wfau.roe.ac.uk/sdssdr7-dsa\n",
      "ivo://wfau.roe.ac.uk/sdssdr8-dsa\n",
      "ivo://wfau.roe.ac.uk/sdssdr9-dsa\n",
      "ivo://wfau.roe.ac.uk/ssa-dsa\n",
      "ivo://wfau.roe.ac.uk/twomass-dsa\n",
      "ivo://wfau.roe.ac.uk/twompz-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr1-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr10-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr2-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr3-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr4-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr5-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr6-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr7-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr8-dsa\n",
      "ivo://wfau.roe.ac.uk/ukidssdr9-dsa\n",
      "ivo://wfau.roe.ac.uk/vhsdr1-dsa\n",
      "ivo://wfau.roe.ac.uk/vhsdr2-dsa\n",
      "ivo://wfau.roe.ac.uk/vhsdr3-dsa\n",
      "ivo://wfau.roe.ac.uk/vhsdr4-dsa\n",
      "ivo://wfau.roe.ac.uk/videodr2-dsa\n",
      "ivo://wfau.roe.ac.uk/videodr3-dsa\n",
      "ivo://wfau.roe.ac.uk/videodr4-dsa\n",
      "ivo://wfau.roe.ac.uk/videodr5-dsa\n",
      "ivo://wfau.roe.ac.uk/vikingdr2-dsa\n",
      "ivo://wfau.roe.ac.uk/vikingdr3-dsa\n",
      "ivo://wfau.roe.ac.uk/vikingdr4-dsa\n",
      "ivo://wfau.roe.ac.uk/vmcdr1-dsa\n",
      "ivo://wfau.roe.ac.uk/vmcdr2-dsa\n",
      "ivo://wfau.roe.ac.uk/vmcdr3-dsa\n",
      "ivo://wfau.roe.ac.uk/vmcdr4-dsa\n",
      "ivo://wfau.roe.ac.uk/vvvdr1-dsa\n",
      "ivo://wfau.roe.ac.uk/wise-dsa\n",
      "ivo://xaovo/tap\n",
      "ivo://xcatdb/3xmmdr6/tap\n",
      "ivo://xcatdb/3xmmdr7/tap\n",
      "hetdex.img_main\n",
      "hetdex.hetdex_images\n",
      "ivoa.obscore\n",
      "ivoa.emptyobscore\n",
      "lbcs.main\n",
      "lofartier1.img_main\n",
      "msss.img_main\n",
      "mvf.main\n",
      "mvf.msssvf_img_main\n",
      "sauron.main\n",
      "sauron.mom0\n",
      "tap_schema.schemas\n",
      "tap_schema.tables\n",
      "tap_schema.columns\n",
      "tap_schema.keys\n",
      "tap_schema.key_columns\n",
      "tap_schema.groups\n",
      "tgssadr.main\n",
      "tgssadr.img_main\n",
      "(1, 1024, 1024)\n"
     ]
    }
   ],
   "source": [
    "import pyvo as vo\n",
    "\n",
    "# query TAP services registered in VO registry\n",
    "# cannot find ASTRON VO there yet\n",
    "services=vo.regsearch(servicetype='tap')\n",
    "for service in services:\n",
    "  print(service.ivoid)\n",
    "\n",
    "# ASTRON VO is not published in the VO registry\n",
    "for service in services:\n",
    "  if \"astron\" in service:\n",
    "    print(service.ivoid)\n",
    "\n",
    "# connect to ASTRON TAP service \n",
    "# this information can be found on vo.astron.nl\n",
    "# at https://vo.astron.nl/__system__/tap/run/info\n",
    "service = vo.dal.TAPService(\"https://vo.astron.nl/__system__/tap/run/tap\")\n",
    "\n",
    "# list all tables available in this VO service\n",
    "for table in service.tables:\n",
    "  print(table.name)\n",
    "\n",
    "\n",
    "# SAURON project: deep Westerbork Synthesis Radio Telescope observations of \n",
    "# neutral hydrogen in 12 nearby elliptical and lenticular galaxies\n",
    "sauron_resultset = service.search(\"SELECT * FROM sauron.main\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on TAPRecord in module pyvo.dal.tap object:\n",
      "\n",
      "class TAPRecord(pyvo.dal.adhoc.SodaRecordMixin, pyvo.dal.adhoc.DatalinkRecordMixin, pyvo.dal.query.Record)\n",
      " |  TAPRecord(results, index)\n",
      " |  \n",
      " |  Mixin for soda functionallity for record classes.\n",
      " |  If used, it's result class must have\n",
      " |  `pyvo.dal.datalink.AdhocServiceResultsMixin` mixed in.\n",
      " |  \n",
      " |  Method resolution order:\n",
      " |      TAPRecord\n",
      " |      pyvo.dal.adhoc.SodaRecordMixin\n",
      " |      pyvo.dal.adhoc.DatalinkRecordMixin\n",
      " |      pyvo.dal.query.Record\n",
      " |      collections.abc.Mapping\n",
      " |      collections.abc.Collection\n",
      " |      collections.abc.Sized\n",
      " |      collections.abc.Iterable\n",
      " |      collections.abc.Container\n",
      " |      builtins.object\n",
      " |  \n",
      " |  Data and other attributes defined here:\n",
      " |  \n",
      " |  __abstractmethods__ = frozenset()\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from pyvo.dal.adhoc.SodaRecordMixin:\n",
      " |  \n",
      " |  processed(self, circle=None, range=None, polygon=None, band=None, **kwargs)\n",
      " |      Returns processed dataset.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      circle : `astropy.units.Quantity`\n",
      " |          latitude, longitude and radius\n",
      " |      range : `astropy.units.Quantity`\n",
      " |          two longitude + two latitude values describing a rectangle\n",
      " |      polygon : `astropy.units.Quantity`\n",
      " |          multiple (at least three) pairs of longitude and latitude points\n",
      " |      band : `astropy.units.Quantity`\n",
      " |          two bandwidth or frequency values\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors inherited from pyvo.dal.adhoc.SodaRecordMixin:\n",
      " |  \n",
      " |  __dict__\n",
      " |      dictionary for instance variables (if defined)\n",
      " |  \n",
      " |  __weakref__\n",
      " |      list of weak references to the object (if defined)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from pyvo.dal.adhoc.DatalinkRecordMixin:\n",
      " |  \n",
      " |  getdatalink(self)\n",
      " |  \n",
      " |  getdataset(self, timeout=None)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from pyvo.dal.query.Record:\n",
      " |  \n",
      " |  __getitem__(self, key)\n",
      " |  \n",
      " |  __init__(self, results, index)\n",
      " |      Initialize self.  See help(type(self)) for accurate signature.\n",
      " |  \n",
      " |  __iter__(self)\n",
      " |  \n",
      " |  __len__(self)\n",
      " |  \n",
      " |  __repr__(self)\n",
      " |      Return repr(self).\n",
      " |  \n",
      " |  cachedataset(self, filename=None, dir='.', timeout=None, bufsize=None)\n",
      " |      retrieve the dataset described by this record and write it out to\n",
      " |      a file with the given name.  If the file already exists, it will be\n",
      " |      over-written.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      filename : str\n",
      " |         the name of the file to write dataset to.  If the\n",
      " |         value represents a relative path, it will be taken\n",
      " |         to be relative to the value of the ``dir``\n",
      " |         parameter.  If None, a default name is attempted\n",
      " |         based on the record title and format.\n",
      " |      dir : str\n",
      " |         the directory to write the file into.  This value\n",
      " |         will be ignored if filename is an absolute path.\n",
      " |      timeout : int\n",
      " |         the time in seconds to allow for a successful\n",
      " |         connection with server before failing with an\n",
      " |         IOError (specifically, socket.timeout) exception\n",
      " |      bufsize : int\n",
      " |         a buffer size in bytes for copying the data to disk\n",
      " |         (default: 0.5 MB)\n",
      " |      \n",
      " |      Raises\n",
      " |      ------\n",
      " |      KeyError\n",
      " |          if no datast access URL is included in the record\n",
      " |      URLError\n",
      " |         if the dataset access URL is invalid\n",
      " |      HTTPError\n",
      " |         if an HTTP error occurs while accessing the dataset\n",
      " |      socket.timeout\n",
      " |         if the timeout is exceeded before a connection is established.\n",
      " |         (note: subclass of IOError)\n",
      " |      IOError\n",
      " |          if an error occurs while writing out the dataset\n",
      " |  \n",
      " |  get(self, key, default=None, decode=False)\n",
      " |      This method mimics the dict get method and adds a decode parameter\n",
      " |      to allow decoding of binary strings.\n",
      " |  \n",
      " |  getbyucd(self, ucd, default=None, decode=False)\n",
      " |      return the column with the given ucd.\n",
      " |  \n",
      " |  getbyutype(self, utype, default=None, decode=False)\n",
      " |      return the column with the given utype.\n",
      " |      \n",
      " |      Raises\n",
      " |      ------\n",
      " |      KeyError\n",
      " |          if theres no column with the given utype.\n",
      " |  \n",
      " |  getdataformat(self)\n",
      " |      return the mimetype of the dataset described by this record.\n",
      " |  \n",
      " |  getdataobj(self)\n",
      " |      return the appropiate data object suitable for the data content behind\n",
      " |      this record.\n",
      " |  \n",
      " |  getdataurl(self)\n",
      " |      return the URL contained in the access URL column which can be used\n",
      " |      to retrieve the dataset described by this record.  None is returned\n",
      " |      if no such column exists.\n",
      " |  \n",
      " |  make_dataset_filename(self, dir='.', base=None, ext=None)\n",
      " |      create a viable pathname in a given directory for saving the dataset\n",
      " |      available via getdataset().  The pathname that is returned is\n",
      " |      guaranteed not to already exist (under single-threaded conditions).\n",
      " |      \n",
      " |      This implementation will first try combining the base name with the\n",
      " |      file extension (with a dot).  If this file already exists in the\n",
      " |      directory, a name that appends an integer suffix (\"-#\") to the base\n",
      " |      before joining with the extension will be tried.  The integer will\n",
      " |      be incremented until a non-existent filename is created.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      dir : str\n",
      " |         the directory to save the dataset under.  This must already exist.\n",
      " |      base : str\n",
      " |         a basename to use to as the base of the filename.  If None, the\n",
      " |         result of ``suggest_dataset_basename()`` will be used.\n",
      " |      ext : str\n",
      " |         the filename extension to use.  If None, the result of\n",
      " |         ``suggest_extension()`` will be used.\n",
      " |  \n",
      " |  suggest_dataset_basename(self)\n",
      " |      return a default base filename that the dataset available via\n",
      " |      ``getdataset()`` can be saved as.  This function is\n",
      " |      specialized for a particular service type this record originates from\n",
      " |      so that it can be used by ``cachedataset()`` via\n",
      " |      ``make_dataset_filename()``.\n",
      " |  \n",
      " |  suggest_extension(self, default=None)\n",
      " |      returns a recommended filename extension for the dataset described\n",
      " |      by this record.  Typically, this would look at the column describing\n",
      " |      the format and choose an extension accordingly.  This function is\n",
      " |      specialized for a particular service type this record originates from\n",
      " |      so that it can be used by ``cachedataset()`` via\n",
      " |      ``make_dataset_filename()``.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from collections.abc.Mapping:\n",
      " |  \n",
      " |  __contains__(self, key)\n",
      " |  \n",
      " |  __eq__(self, other)\n",
      " |      Return self==value.\n",
      " |  \n",
      " |  items(self)\n",
      " |      D.items() -> a set-like object providing a view on D's items\n",
      " |  \n",
      " |  keys(self)\n",
      " |      D.keys() -> a set-like object providing a view on D's keys\n",
      " |  \n",
      " |  values(self)\n",
      " |      D.values() -> an object providing a view on D's values\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes inherited from collections.abc.Mapping:\n",
      " |  \n",
      " |  __hash__ = None\n",
      " |  \n",
      " |  __reversed__ = None\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Class methods inherited from collections.abc.Collection:\n",
      " |  \n",
      " |  __subclasshook__(C) from abc.ABCMeta\n",
      " |      Abstract classes can override this to customize issubclass().\n",
      " |      \n",
      " |      This is invoked early on by abc.ABCMeta.__subclasscheck__().\n",
      " |      It should return True, False or NotImplemented.  If it returns\n",
      " |      NotImplemented, the normal algorithm is used.  Otherwise, it\n",
      " |      overrides the normal algorithm (and the outcome is cached).\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(sauron_resultset[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: VerifyWarning: Invalid 'BLANK' keyword in header.  The 'BLANK' keyword is only applicable to integer data, and will be ignored in this HDU. [astropy.io.fits.hdu.image]\n"
     ]
    }
   ],
   "source": [
    "import urllib3\n",
    "from astropy.io import fits\n",
    "# load fits file in astropy\n",
    "sauron_resultset[0].cachedataset(filename='data.fits')\n",
    "image_data = fits.getdata(\"data.fits\", ext=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7f54aa8d2da0>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.figure()\n",
    "plt.imshow(image_data[0], cmap='gray')\n",
    "#plt.imshow(data[0].data[0], cmap='gray')\n",
    "plt.colorbar()"
   ]
  }
 ],
 "metadata": {
  "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}