{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Explore MODHID hdf5 Files\n", "\n", "This notebook is an initial exploration of hdf5 output files produced by MOHID.\n", "\n", "MOHID output file types explored:\n", "\n", "* Lagrangian oil particle tracks\n", "\n", "Python libraries explored:\n", "\n", "* [PyNIO](https://www.pyngl.ucar.edu/Nio.shtml)\n", "* [h5netcdf](https://github.com/shoyer/h5netcdf)\n", "* [h5py](http://docs.h5py.org/en/stable/index.html)\n", "* [PyTables](https://www.pytables.org/index.html)\n", "\n", "Summary:\n", "\n", "* PyNIO fails to open the files\n", "* h5netcdf successfully opens the files but can't handle groups that contain variables\n", "that don't have associated dimension scales\n", "* h5py successfully opens the files and allows access to all of their contents,\n", "but the interface is a really low level, nested-dict one\n", "* PyTables successfully opens the files and allows access to al of their contents\n", "via an object interface.\n", "The PyTables tutorial also brought the `h5ls` tool to my attention.\n", "* The results are organized as Eulerian snapshots,\n", "in general both by 2D and 3D slabs of the hydrodynamics model (NEMO or FVCOM) grid,\n", "and by particle.\n", "\n", "Next step:\n", "\n", "* Write code to transform PyTables `tables.File` objects into `xarray.Dataset` objects." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-r--r-- 1 doug doug 200M Oct 11 07:42 ../../SalishSeaShihan/results/Lagrangian_7_nested_5.hdf5\n", "-rw-r--r-- 1 doug doug 355M Oct 11 07:47 ../../SalishSeaShihan/results/Lagrangian_7_st_georgia_nested.hdf5\n" ] } ], "source": [ "!ls -lh ../../SalishSeaShihan/results/Lagrangian*.hdf5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PyNIO" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import Nio" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "h5file = Nio.open_file('../../SalishSeaShihan/results/Lagrangian_7_st_georgia_nested.hdf5', format='hdf5')\n", "h5file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...crashed the kernel :-(" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "h5file = Nio.open_file('../../SalishSeaShihan/results/Lagrangian_7_nested_5.hdf5')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...never finished :-(" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## h5netcdf" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import h5netcdf" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<h5netcdf.File 'Lagrangian_7_nested_5.hdf5' (mode r+)>\n", "Dimensions:\n", "Groups:\n", " Grid\n", " Results\n", " Time\n", "Variables:\n", "Attributes:" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file = h5netcdf.File('../../SalishSeaShihan/results/Lagrangian_7_nested_5.hdf5')\n", "h5file" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "variable '/Grid/Bathymetry' has no dimension scale associated with axis 0", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/IPython/core/formatters.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0mtype_pprinters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype_printers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 701\u001b[0m deferred_pprinters=self.deferred_printers)\n\u001b[0;32m--> 702\u001b[0;31m \u001b[0mprinter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpretty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 703\u001b[0m \u001b[0mprinter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 704\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstream\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetvalue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/IPython/lib/pretty.py\u001b[0m in \u001b[0;36mpretty\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 400\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcls\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 401\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcallable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'__repr__'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 402\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_repr_pprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 403\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 404\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_default_pprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/IPython/lib/pretty.py\u001b[0m in \u001b[0;36m_repr_pprint\u001b[0;34m(obj, p, cycle)\u001b[0m\n\u001b[1;32m 695\u001b[0m \u001b[0;34m\"\"\"A pprint that just redirects to the normal repr function.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[0;31m# Find newlines and replace them with p.break_()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 697\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrepr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 698\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0moutput_line\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplitlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 699\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m__repr__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 544\u001b[0m header = ('<%s %r (%s members)>'\n\u001b[1;32m 545\u001b[0m % (self._cls_name, self.name, len(self)))\n\u001b[0;32m--> 546\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m'\\n'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_repr_body\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 547\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 548\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mresize_dimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdimension\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m_repr_body\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 536\u001b[0m [' %s: %r %s' % (k, v.dimensions, v.dtype)\n\u001b[1;32m 537\u001b[0m for k, v in self.variables.items()] +\n\u001b[0;32m--> 538\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;34m'Attributes:'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 539\u001b[0m [' %s: %r' % (k, v) for k, v in self.attrs.items()])\n\u001b[1;32m 540\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 535\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Variables:'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 536\u001b[0m [' %s: %r %s' % (k, v.dimensions, v.dtype)\n\u001b[0;32m--> 537\u001b[0;31m for k, v in self.variables.items()] +\n\u001b[0m\u001b[1;32m 538\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Attributes:'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 539\u001b[0m [' %s: %r' % (k, v) for k, v in self.attrs.items()])\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36mdimensions\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdimensions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dimensions\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 112\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dimensions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_lookup_dimensions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 113\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dimensions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m_lookup_dimensions\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 102\u001b[0m raise ValueError('variable %r has no dimension scale '\n\u001b[1;32m 103\u001b[0m \u001b[0;34m'associated with axis %s'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 104\u001b[0;31m % (self.name, axis))\n\u001b[0m\u001b[1;32m 105\u001b[0m \u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_name_from_dimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdim\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0mdims\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: variable '/Grid/Bathymetry' has no dimension scale associated with axis 0" ] } ], "source": [ "oil['Grid']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Dimeions scales](https://www.unidata.ucar.edu/software/netcdf/docs/interoperability_hdf5.html)\n", "seem to be optional for HDF5, but required for netCDF4.\n", "The h5py docs provide [some additional clues](http://docs.h5py.org/en/stable/high/dims.html)." ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<h5netcdf.Group '/Results' (3 members)>\n", "Dimensions:\n", "Groups:\n", " Number\n", " OilSpill\n", " Percentage Contaminated\n", "Variables:\n", "Attributes:\n", " Minimum: 9900000000000000.0\n", " Maximum: -9900000000000000.0" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Results']" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "variable '/Time/Time_00001' has no dimension scale associated with axis 0", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/IPython/core/formatters.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0mtype_pprinters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype_printers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 701\u001b[0m deferred_pprinters=self.deferred_printers)\n\u001b[0;32m--> 702\u001b[0;31m \u001b[0mprinter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpretty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 703\u001b[0m \u001b[0mprinter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 704\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mstream\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetvalue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/IPython/lib/pretty.py\u001b[0m in \u001b[0;36mpretty\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 400\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcls\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 401\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcallable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'__repr__'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 402\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_repr_pprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 403\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 404\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_default_pprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcycle\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/IPython/lib/pretty.py\u001b[0m in \u001b[0;36m_repr_pprint\u001b[0;34m(obj, p, cycle)\u001b[0m\n\u001b[1;32m 695\u001b[0m \u001b[0;34m\"\"\"A pprint that just redirects to the normal repr function.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 696\u001b[0m \u001b[0;31m# Find newlines and replace them with p.break_()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 697\u001b[0;31m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrepr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 698\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0moutput_line\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msplitlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 699\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m__repr__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 544\u001b[0m header = ('<%s %r (%s members)>'\n\u001b[1;32m 545\u001b[0m % (self._cls_name, self.name, len(self)))\n\u001b[0;32m--> 546\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m'\\n'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mheader\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_repr_body\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 547\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 548\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mresize_dimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdimension\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m_repr_body\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 536\u001b[0m [' %s: %r %s' % (k, v.dimensions, v.dtype)\n\u001b[1;32m 537\u001b[0m for k, v in self.variables.items()] +\n\u001b[0;32m--> 538\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;34m'Attributes:'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 539\u001b[0m [' %s: %r' % (k, v) for k, v in self.attrs.items()])\n\u001b[1;32m 540\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 535\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Variables:'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 536\u001b[0m [' %s: %r %s' % (k, v.dimensions, v.dtype)\n\u001b[0;32m--> 537\u001b[0;31m for k, v in self.variables.items()] +\n\u001b[0m\u001b[1;32m 538\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Attributes:'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 539\u001b[0m [' %s: %r' % (k, v) for k, v in self.attrs.items()])\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36mdimensions\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdimensions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dimensions\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 112\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dimensions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_lookup_dimensions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 113\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dimensions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/media/doug/warehouse/conda_envs/mohid-analysis/lib/python3.6/site-packages/h5netcdf/core.py\u001b[0m in \u001b[0;36m_lookup_dimensions\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 102\u001b[0m raise ValueError('variable %r has no dimension scale '\n\u001b[1;32m 103\u001b[0m \u001b[0;34m'associated with axis %s'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 104\u001b[0;31m % (self.name, axis))\n\u001b[0m\u001b[1;32m 105\u001b[0m \u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_name_from_dimension\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdim\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0mdims\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: variable '/Time/Time_00001' has no dimension scale associated with axis 0" ] } ], "source": [ "h5file['Time']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## h5py" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import h5py" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 file \"Lagrangian_7_nested_5.hdf5\" (mode r+)>" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file = h5py.File('../../SalishSeaShihan/results/Lagrangian_7_nested_5.hdf5', mode='r')\n", "h5file" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Grid\n", "Results\n", "Time\n" ] } ], "source": [ "for k in h5file: print(k)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 group \"/Grid\" (9 members)>" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Grid']" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bathymetry\n", "ConnectionX\n", "ConnectionY\n", "Define Cells\n", "Latitude\n", "Longitude\n", "OpenPoints\n", "VerticalZ\n", "WaterPoints3D\n" ] } ], "source": [ "for k in h5file['Grid']: print(k)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 group \"/Results\" (3 members)>" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Results']" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number\n", "OilSpill\n", "Percentage Contaminated\n" ] } ], "source": [ "for k in h5file['Results']: print(k)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 group \"/Time\" (167 members)>" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Time']" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time_00001\n", "Time_00002\n", "Time_00003\n", "Time_00004\n", "Time_00005\n", "Time_00006\n", "Time_00007\n", "Time_00008\n", "Time_00009\n", "Time_00010\n", "Time_00011\n", "Time_00012\n", "Time_00013\n", "Time_00014\n", "Time_00015\n", "Time_00016\n", "Time_00017\n", "Time_00018\n", "Time_00019\n", "Time_00020\n", "Time_00021\n", "Time_00022\n", "Time_00023\n", "Time_00024\n", "Time_00025\n", "Time_00026\n", "Time_00027\n", "Time_00028\n", "Time_00029\n", "Time_00030\n", "Time_00031\n", "Time_00032\n", "Time_00033\n", "Time_00034\n", "Time_00035\n", "Time_00036\n", "Time_00037\n", "Time_00038\n", "Time_00039\n", "Time_00040\n", "Time_00041\n", "Time_00042\n", "Time_00043\n", "Time_00044\n", "Time_00045\n", "Time_00046\n", "Time_00047\n", "Time_00048\n", "Time_00049\n", "Time_00050\n", "Time_00051\n", "Time_00052\n", "Time_00053\n", "Time_00054\n", "Time_00055\n", "Time_00056\n", "Time_00057\n", "Time_00058\n", "Time_00059\n", "Time_00060\n", "Time_00061\n", "Time_00062\n", "Time_00063\n", "Time_00064\n", "Time_00065\n", "Time_00066\n", "Time_00067\n", "Time_00068\n", "Time_00069\n", "Time_00070\n", "Time_00071\n", "Time_00072\n", "Time_00073\n", "Time_00074\n", "Time_00075\n", "Time_00076\n", "Time_00077\n", "Time_00078\n", "Time_00079\n", "Time_00080\n", "Time_00081\n", "Time_00082\n", "Time_00083\n", "Time_00084\n", "Time_00085\n", "Time_00086\n", "Time_00087\n", "Time_00088\n", "Time_00089\n", "Time_00090\n", "Time_00091\n", "Time_00092\n", "Time_00093\n", "Time_00094\n", "Time_00095\n", "Time_00096\n", "Time_00097\n", "Time_00098\n", "Time_00099\n", "Time_00100\n", "Time_00101\n", "Time_00102\n", "Time_00103\n", "Time_00104\n", "Time_00105\n", "Time_00106\n", "Time_00107\n", "Time_00108\n", "Time_00109\n", "Time_00110\n", "Time_00111\n", "Time_00112\n", "Time_00113\n", "Time_00114\n", "Time_00115\n", "Time_00116\n", "Time_00117\n", "Time_00118\n", "Time_00119\n", "Time_00120\n", "Time_00121\n", "Time_00122\n", "Time_00123\n", "Time_00124\n", "Time_00125\n", "Time_00126\n", "Time_00127\n", "Time_00128\n", "Time_00129\n", "Time_00130\n", "Time_00131\n", "Time_00132\n", "Time_00133\n", "Time_00134\n", "Time_00135\n", "Time_00136\n", "Time_00137\n", "Time_00138\n", "Time_00139\n", "Time_00140\n", "Time_00141\n", "Time_00142\n", "Time_00143\n", "Time_00144\n", "Time_00145\n", "Time_00146\n", "Time_00147\n", "Time_00148\n", "Time_00149\n", "Time_00150\n", "Time_00151\n", "Time_00152\n", "Time_00153\n", "Time_00154\n", "Time_00155\n", "Time_00156\n", "Time_00157\n", "Time_00158\n", "Time_00159\n", "Time_00160\n", "Time_00161\n", "Time_00162\n", "Time_00163\n", "Time_00164\n", "Time_00165\n", "Time_00166\n", "Time_00167\n" ] } ], "source": [ "for k in h5file['Time']: print(k)" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 dataset \"Time_00001\": shape (6,), type \"<f4\">" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Time']['Time_00001']" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2015., 4., 8., 0., 30., 0.], dtype=float32)" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Time']['Time_00001'][:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "i.e. the date/time `2015-04-08 00:30:00` stored at 4 32-bit floats" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 group \"/Results/Number\" (167 members)>" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Results']['Number']" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<Attributes of HDF5 object at 139899974438056>" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file.attrs" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [], "source": [ "for attr in h5file.attrs: print(attr)" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum -9900000000000000.0\n", "Maximum -9900000000000000.0\n" ] } ], "source": [ "for attr, value in h5file['Grid'].attrs.items(): print(attr, value)" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum -9900000000000000.0\n", "Maximum -9900000000000000.0\n", "Units b'm'\n" ] } ], "source": [ "for attr, value in h5file['Grid']['Bathymetry'].attrs.items(): print(attr, value)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum -9900000000000000.0\n", "Maximum -9900000000000000.0\n" ] } ], "source": [ "for attr, value in h5file['Results']['Number'].attrs.items(): print(attr, value)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 group \"/Results/Number\" (167 members)>" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "oil['Results']['Number']" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number_00001\n", "Number_00002\n", "Number_00003\n", "Number_00004\n", "Number_00005\n", "Number_00006\n", "Number_00007\n", "Number_00008\n", "Number_00009\n", "Number_00010\n", "Number_00011\n", "Number_00012\n", "Number_00013\n", "Number_00014\n", "Number_00015\n", "Number_00016\n", "Number_00017\n", "Number_00018\n", "Number_00019\n", "Number_00020\n", "Number_00021\n", "Number_00022\n", "Number_00023\n", "Number_00024\n", "Number_00025\n", "Number_00026\n", "Number_00027\n", "Number_00028\n", "Number_00029\n", "Number_00030\n", "Number_00031\n", "Number_00032\n", "Number_00033\n", "Number_00034\n", "Number_00035\n", "Number_00036\n", "Number_00037\n", "Number_00038\n", "Number_00039\n", "Number_00040\n", "Number_00041\n", "Number_00042\n", "Number_00043\n", "Number_00044\n", "Number_00045\n", "Number_00046\n", "Number_00047\n", "Number_00048\n", "Number_00049\n", "Number_00050\n", "Number_00051\n", "Number_00052\n", "Number_00053\n", "Number_00054\n", "Number_00055\n", "Number_00056\n", "Number_00057\n", "Number_00058\n", "Number_00059\n", "Number_00060\n", "Number_00061\n", "Number_00062\n", "Number_00063\n", "Number_00064\n", "Number_00065\n", "Number_00066\n", "Number_00067\n", "Number_00068\n", "Number_00069\n", "Number_00070\n", "Number_00071\n", "Number_00072\n", "Number_00073\n", "Number_00074\n", "Number_00075\n", "Number_00076\n", "Number_00077\n", "Number_00078\n", "Number_00079\n", "Number_00080\n", "Number_00081\n", "Number_00082\n", "Number_00083\n", "Number_00084\n", "Number_00085\n", "Number_00086\n", "Number_00087\n", "Number_00088\n", "Number_00089\n", "Number_00090\n", "Number_00091\n", "Number_00092\n", "Number_00093\n", "Number_00094\n", "Number_00095\n", "Number_00096\n", "Number_00097\n", "Number_00098\n", "Number_00099\n", "Number_00100\n", "Number_00101\n", "Number_00102\n", "Number_00103\n", "Number_00104\n", "Number_00105\n", "Number_00106\n", "Number_00107\n", "Number_00108\n", "Number_00109\n", "Number_00110\n", "Number_00111\n", "Number_00112\n", "Number_00113\n", "Number_00114\n", "Number_00115\n", "Number_00116\n", "Number_00117\n", "Number_00118\n", "Number_00119\n", "Number_00120\n", "Number_00121\n", "Number_00122\n", "Number_00123\n", "Number_00124\n", "Number_00125\n", "Number_00126\n", "Number_00127\n", "Number_00128\n", "Number_00129\n", "Number_00130\n", "Number_00131\n", "Number_00132\n", "Number_00133\n", "Number_00134\n", "Number_00135\n", "Number_00136\n", "Number_00137\n", "Number_00138\n", "Number_00139\n", "Number_00140\n", "Number_00141\n", "Number_00142\n", "Number_00143\n", "Number_00144\n", "Number_00145\n", "Number_00146\n", "Number_00147\n", "Number_00148\n", "Number_00149\n", "Number_00150\n", "Number_00151\n", "Number_00152\n", "Number_00153\n", "Number_00154\n", "Number_00155\n", "Number_00156\n", "Number_00157\n", "Number_00158\n", "Number_00159\n", "Number_00160\n", "Number_00161\n", "Number_00162\n", "Number_00163\n", "Number_00164\n", "Number_00165\n", "Number_00166\n", "Number_00167\n" ] } ], "source": [ "for n in h5file['Results']['Number']: print(n)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 dataset \"Number_00001\": shape (20, 380, 210), type \"<f4\">" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Results']['Number']['Number_00001']" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum\n", "Maximum\n" ] } ], "source": [ "for attr in h5file['Results']['OilSpill'].attrs: print(attr)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data_2D\n", "Data_3D\n" ] } ], "source": [ "for foo in h5file['Results']['OilSpill']: print(foo)" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum 9900000000000000.0\n", "Maximum -9900000000000000.0\n" ] } ], "source": [ "for attr, value in h5file['Results']['OilSpill']['Data_2D'].attrs.items(): print(attr, value)" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Beaching Time\n", "Oil Arrival Time\n", "OilConcentration_2D\n", "Thickness_2D\n" ] } ], "source": [ "for foo in h5file['Results']['OilSpill']['Data_2D']: print(foo)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 group \"/Results/OilSpill/Data_2D/OilConcentration_2D\" (167 members)>" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Results']['OilSpill']['Data_2D']['OilConcentration_2D']" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<HDF5 dataset \"OilConcentration_2D_00001\": shape (380, 210), type \"<f4\">" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['Results']['OilSpill']['Data_2D']['OilConcentration_2D']['OilConcentration_2D_00001']" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum -9900000000000000.0\n", "Maximum -9900000000000000.0\n", "Units b'ppm'\n" ] } ], "source": [ "for attr, value in h5file['Results']['OilSpill']['Data_2D']['OilConcentration_2D']['OilConcentration_2D_00001'].attrs.items(): print (attr, value)" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum 9900000000000000.0\n", "Maximum -9900000000000000.0\n" ] } ], "source": [ "for attr, value in h5file['Results']['OilSpill']['Data_3D'].attrs.items(): print(attr, value)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dissolution_3D\n", "OilConcentration_3D\n" ] } ], "source": [ "for foo in h5file['Results']['OilSpill']['Data_3D']: print(foo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PyTables" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "import tables" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/ (RootGroup) ''\n", "/Grid (Group) ''\n", "/Results (Group) ''\n", "/Time (Group) ''\n", "/Results/Number (Group) ''\n", "/Results/OilSpill (Group) ''\n", "/Results/Percentage Contaminated (Group) ''\n", "/Results/OilSpill/Data_2D (Group) ''\n", "/Results/OilSpill/Data_3D (Group) ''\n", "/Results/OilSpill/Data_3D/Dissolution_3D (Group) ''\n", "/Results/OilSpill/Data_3D/OilConcentration_3D (Group) ''\n", "/Results/OilSpill/Data_2D/Beaching Time (Group) ''\n", "/Results/OilSpill/Data_2D/Oil Arrival Time (Group) ''\n", "/Results/OilSpill/Data_2D/OilConcentration_2D (Group) ''\n", "/Results/OilSpill/Data_2D/Thickness_2D (Group) ''\n", "/Grid/OpenPoints (Group) ''\n", "/Grid/VerticalZ (Group) ''\n" ] } ], "source": [ "h5file = tables.open_file('../../SalishSeaShihan/results/Lagrangian_7_nested_5.hdf5', mode='r')\n", "for group in h5file.walk_groups(): print(group)" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Results/Number (Group) ''\n", "/Results/Number/Number_00001 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00002 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00003 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00004 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00005 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00006 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00007 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00008 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00009 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00010 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00011 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00012 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00013 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00014 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00015 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00016 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00017 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00018 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00019 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00020 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00021 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00022 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00023 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00024 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00025 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00026 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00027 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00028 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00029 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00030 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00031 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00032 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00033 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00034 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00035 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00036 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00037 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00038 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00039 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00040 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00041 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00042 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00043 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00044 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00045 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00046 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00047 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00048 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00049 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00050 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00051 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00052 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00053 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00054 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00055 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00056 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00057 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00058 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00059 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00060 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00061 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00062 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00063 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00064 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00065 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00066 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00067 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00068 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00069 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00070 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00071 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00072 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00073 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00074 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00075 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00076 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00077 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00078 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00079 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00080 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00081 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00082 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00083 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00084 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00085 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00086 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00087 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00088 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00089 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00090 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00091 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00092 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00093 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00094 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00095 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00096 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00097 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00098 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00099 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00100 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00101 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00102 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00103 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00104 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00105 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00106 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00107 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00108 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00109 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00110 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00111 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00112 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00113 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00114 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00115 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00116 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00117 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00118 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00119 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00120 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00121 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00122 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00123 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00124 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00125 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00126 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00127 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00128 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00129 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00130 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00131 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00132 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00133 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00134 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00135 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00136 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00137 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00138 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00139 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00140 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00141 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00142 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00143 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00144 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00145 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00146 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00147 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00148 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00149 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00150 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00151 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00152 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00153 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00154 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00155 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00156 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00157 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00158 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00159 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00160 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00161 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00162 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00163 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00164 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00165 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00166 (CArray(20, 380, 210), zlib(6)) ''\n", "/Results/Number/Number_00167 (CArray(20, 380, 210), zlib(6)) ''\n" ] } ], "source": [ "for node in h5file.walk_nodes('/Results/Number'): print(node)" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "/Results/Number/Number_00001._v_attrs (AttributeSet), 3 attributes:\n", " [Maximum := -9900000000000000.0,\n", " Minimum := -9900000000000000.0,\n", " Units := b'a']" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file.root.Results.Number.Number_00001.attrs" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "/Results/OilSpill/Data_3D/OilConcentration_3D/OilConcentration_3D_00001._v_attrs (AttributeSet), 3 attributes:\n", " [Maximum := -9900000000000000.0,\n", " Minimum := -9900000000000000.0,\n", " Units := b'Kg/m3']" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file.root.Results.OilSpill.Data_3D.OilConcentration_3D.OilConcentration_3D_00001.attrs" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "/Results/OilSpill/Data_3D/OilConcentration_3D/OilConcentration_3D_00001 (CArray(20, 380, 210), zlib(6)) ''\n", " atom := Float32Atom(shape=(), dflt=0.0)\n", " maindim := 0\n", " flavor := 'numpy'\n", " byteorder := 'little'\n", " chunkshape := (20, 380, 210)" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file.root.Results.OilSpill.Data_3D.OilConcentration_3D.OilConcentration_3D_00001" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }