diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c1a3914ee..e4bdb35fa 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,6 +31,7 @@ jobs: python -m pip install --upgrade pip wheel pip install h5pyd --upgrade pip install nose + pip install pytest pip install coveralls pip install . diff --git a/.gitignore b/.gitignore index 86b53c1e1..ce3e47416 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ $ cat .gitignore .DS_Store .DS_Store? .gitignore +.vscode # Exemptions !**/examples/data/wave/*.mat diff --git a/examples/adcp_example.ipynb b/examples/adcp_example.ipynb new file mode 100644 index 000000000..bb4ddb461 --- /dev/null +++ b/examples/adcp_example.ipynb @@ -0,0 +1,1575 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Reading ADCP Data with MHKiT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following example demonstrates a simple workflow for analyzing Acoustic Doppler Current Profiler (ADCP) data using MHKiT. MHKiT has brought the DOLfYN codebase in as an MHKiT module for working with ADCP and Acoustic Doppler Velocimeter (ADV) data. The DOLfYN MHKiT module is transferring functionality in two parts. In phase 1 the basic IO and core functions of DOLfYN are brought in. These functions include reading instrument data and rotating thru coordinate systems. In phase 2 DOLfYN analysis functions are brought in. As phase 2 is still in progress we will import the analysis tools from the [DOLfYN](https://github.com/lkilcher/dolfyn) package.\n", + "\n", + "A typical ADCP data workflow is broken down into\n", + " 1. Review the raw data\n", + " - Check timestamps\n", + " - Calculate/check that the depth bin locations are correct\n", + " - Look at velocity, beam amplitude and/or beam correlation data quality\n", + " 2. Remove data located above the water surface or below the seafloor\n", + " 3. Check for spurious datapoints and remove if necessary\n", + " 4. If not already done within the instrument, average the data into time bins of a set time length (normally 5 to 10 min)\n", + " 5. Conduct further analysis as required\n", + "\n", + "Start by importing the necessary DOLfYN tools:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "from mhkit import dolfyn as dlfn\n", + "from dolfyn.adp import api" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read Raw Instrument Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The core benefit of DOLfYN is that it can read in raw data directly after transferring it off of the ADCP. The ADCP used here is a Nortek Signature1000, with the file extension '.ad2cp'. This specific dataset contains several hours worth of velocity data collected at 1 Hz from the ADCP mounted on a bottom lander in a tidal inlet. \n", + "The instruments that DOLfYN supports are listed in the [docs](https://dolfyn.readthedocs.io/en/latest/about.html).\n", + "\n", + "Start by reading in the raw datafile downloaded from the instrument. The `read` function reads the raw file and dumps the information into an xarray Dataset, which contains a few groups of variables:\n", + "\n", + "1. Velocity in the instrument-saved coordinate system (beam, XYZ, ENU)\n", + "2. Beam amplitude and correlation data\n", + "3. Measurements of the instrument's bearing and environment\n", + "4. Orientation matrices DOLfYN uses for rotating through coordinate frames.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Indexing data/dolfyn/Sig1000_tidal.ad2cp... Done.\n", + "Reading file data/dolfyn/Sig1000_tidal.ad2cp ...\n" + ] + } + ], + "source": [ + "ds = dlfn.read('data/dolfyn/Sig1000_tidal.ad2cp')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are two ways to see what's in a Dataset. The first is to simply type the dataset's name to see the standard xarray output. To access a particular variable in a dataset, use dict-style (`ds['vel']`) or attribute-style syntax (`ds.vel`). See the [xarray docs](http://xarray.pydata.org/en/stable/getting-started-guide/quick-overview.html) for more details on how to use the xarray format." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
<xarray.Dataset>\n",
+ "Dimensions: (time: 55000, time_b5: 55000, dirIMU: 3, range_b5: 28, beam: 4, range: 28, dir: 4, earth: 3, inst: 3, q: 4, x: 4, x*: 4)\n",
+ "Coordinates:\n",
+ " * time (time) datetime64[ns] 2020-08-15T00:20:00.500999 ......\n",
+ " * time_b5 (time_b5) datetime64[ns] 2020-08-15T00:20:00.438499 ...\n",
+ " * dirIMU (dirIMU) <U1 'E' 'N' 'U'\n",
+ " * range_b5 (range_b5) float64 0.6 1.1 1.6 2.1 ... 13.1 13.6 14.1\n",
+ " * beam (beam) int32 1 2 3 4\n",
+ " * range (range) float64 0.6 1.1 1.6 2.1 ... 12.6 13.1 13.6 14.1\n",
+ " * dir (dir) <U2 'E' 'N' 'U1' 'U2'\n",
+ " * earth (earth) <U1 'E' 'N' 'U'\n",
+ " * inst (inst) <U1 'X' 'Y' 'Z'\n",
+ " * q (q) <U1 'w' 'x' 'y' 'z'\n",
+ " * x (x) int32 1 2 3 4\n",
+ " * x* (x*) int32 1 2 3 4\n",
+ "Data variables: (12/38)\n",
+ " c_sound (time) float32 1.502e+03 1.502e+03 ... 1.498e+03\n",
+ " temp (time) float32 14.55 14.55 14.55 ... 13.47 13.47 13.47\n",
+ " pressure (time) float32 9.713 9.718 9.718 ... 9.596 9.594 9.596\n",
+ " mag (dirIMU, time) float32 72.5 72.7 72.6 ... -197.2 -195.7\n",
+ " accel (dirIMU, time) float32 -0.00479 -0.01437 ... 9.729\n",
+ " batt (time) float32 16.6 16.6 16.6 16.6 ... 16.4 16.4 15.2\n",
+ " ... ...\n",
+ " telemetry_data (time) uint8 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0\n",
+ " boost_running (time) uint8 0 0 0 0 0 0 0 0 1 0 ... 0 1 0 0 0 0 0 0 1\n",
+ " heading (time) float32 -12.52 -12.51 -12.51 ... -12.52 -12.5\n",
+ " pitch (time) float32 -0.065 -0.06 -0.06 ... -0.06 -0.05 -0.05\n",
+ " roll (time) float32 -7.425 -7.42 -7.42 ... -6.45 -6.45 -6.45\n",
+ " beam2inst_orientmat (x, x*) float32 1.183 0.0 -1.183 ... 0.5518 0.0 0.5518\n",
+ "Attributes: (12/33)\n",
+ " filehead_config: {'CLOCKSTR': {'TIME': '"2020-08-13 13:56:21"'}, 'I...\n",
+ " inst_model: Signature1000\n",
+ " inst_make: Nortek\n",
+ " inst_type: ADCP\n",
+ " rotate_vars: ['vel', 'accel', 'accel_b5', 'angrt', 'angrt_b5', ...\n",
+ " burst_config: {'press_valid': True, 'temp_valid': True, 'compass...\n",
+ " ... ...\n",
+ " proc_idle_less_3pct: 0\n",
+ " proc_idle_less_6pct: 0\n",
+ " proc_idle_less_12pct: 0\n",
+ " coord_sys: earth\n",
+ " has_imu: 1\n",
+ " fs: 1array(['2020-08-15T00:20:00.500999000', '2020-08-15T00:20:01.501100000',\n", + " '2020-08-15T00:20:02.500999000', ..., '2020-08-15T15:36:37.500999000',\n", + " '2020-08-15T15:36:38.500999000', '2020-08-15T15:36:39.500999000'],\n", + " dtype='datetime64[ns]')
array(['2020-08-15T00:20:00.438499000', '2020-08-15T00:20:01.438499000',\n", + " '2020-08-15T00:20:02.438499000', ..., '2020-08-15T15:36:37.438499000',\n", + " '2020-08-15T15:36:38.438499000', '2020-08-15T15:36:39.438499000'],\n", + " dtype='datetime64[ns]')
array(['E', 'N', 'U'], dtype='<U1')
array([ 0.6, 1.1, 1.6, 2.1, 2.6, 3.1, 3.6, 4.1, 4.6, 5.1, 5.6, 6.1,\n", + " 6.6, 7.1, 7.6, 8.1, 8.6, 9.1, 9.6, 10.1, 10.6, 11.1, 11.6, 12.1,\n", + " 12.6, 13.1, 13.6, 14.1])
array([1, 2, 3, 4])
array([ 0.6, 1.1, 1.6, 2.1, 2.6, 3.1, 3.6, 4.1, 4.6, 5.1, 5.6, 6.1,\n", + " 6.6, 7.1, 7.6, 8.1, 8.6, 9.1, 9.6, 10.1, 10.6, 11.1, 11.6, 12.1,\n", + " 12.6, 13.1, 13.6, 14.1])
array(['E', 'N', 'U1', 'U2'], dtype='<U2')
array(['E', 'N', 'U'], dtype='<U1')
array(['X', 'Y', 'Z'], dtype='<U1')
array(['w', 'x', 'y', 'z'], dtype='<U1')
array([1, 2, 3, 4])
array([1, 2, 3, 4])
array([1501.9, 1501.9, 1501.9, ..., 1498.4, 1498.3, 1498.3], dtype=float32)
array([14.55, 14.55, 14.55, ..., 13.47, 13.47, 13.47], dtype=float32)
array([9.713, 9.718, 9.718, ..., 9.596, 9.594, 9.596], dtype=float32)
array([[ 72.5, 72.7, 72.6, ..., 72.3, 72.8, 72.4],\n", + " [ 9.3, 9.4, 8.9, ..., 5.9, 6.3, 6.4],\n", + " [-198. , -196.3, -198.1, ..., -197.4, -197.2, -195.7]],\n", + " dtype=float32)
array([[-4.7900393e-03, -1.4370117e-02, -2.3950195e-02, ...,\n", + " -1.4370117e-02, -4.7900393e-03, -2.3950195e-02],\n", + " [-1.2933105e+00, -1.2549902e+00, -1.2645704e+00, ...,\n", + " -1.1017090e+00, -1.0873389e+00, -1.0969189e+00],\n", + " [ 9.7285690e+00, 9.7141991e+00, 9.7237797e+00, ...,\n", + " 9.6710892e+00, 9.6854591e+00, 9.7285690e+00]], dtype=float32)
array([16.6, 16.6, 16.6, ..., 16.4, 16.4, 15.2], dtype=float32)
array([20. , 20. , 20. , ..., 19.5, 19.5, 19.5], dtype=float32)
array([0, 0, 0, ..., 0, 0, 0], dtype=uint16)
array([1053556738, 1053556738, 1053556738, ..., 1053556738, 1053556738,\n", + " 1053557762], dtype=uint32)
array([ 1, 2, 3, ..., 54998, 54999, 55000], dtype=uint32)
array([[[-0.015, -0.048, 0.008, ..., -0.176, -0.071, -0.027],\n", + " [-0.093, -0.124, -0.031, ..., -0.175, -0.16 , -0.03 ],\n", + " [-0.163, -0.135, -0.105, ..., -0.129, -0.089, -0.116],\n", + " ...,\n", + " [-0.169, -0.013, -0.124, ..., -0.062, 0.091, -0.009],\n", + " [-0.16 , -0.043, -0.111, ..., 0.012, 0.089, 0.021],\n", + " [-0.158, -0.057, -0.13 , ..., -0.055, 0.104, 0.013]],\n", + "\n", + " [[ 0.243, 0.204, 0.234, ..., -0.163, -0.135, -0.18 ],\n", + " [ 0.272, 0.248, 0.236, ..., -0.254, -0.169, -0.204],\n", + " [ 0.257, 0.294, 0.333, ..., -0.299, -0.226, -0.273],\n", + " ...,\n", + " [ 0.305, 0.377, 0.283, ..., -0.198, -0.229, -0.121],\n", + " [ 0.328, 0.33 , 0.294, ..., -0.161, -0.292, -0.103],\n", + " [ 0.31 , 0.314, 0.226, ..., -0.219, -0.292, -0.049]],\n", + "\n", + " [[ 0.016, 0.012, 0.01 , ..., 0.009, 0.006, -0.018],\n", + " [ 0.01 , 0.011, -0.013, ..., 0.002, -0.027, 0.009],\n", + " [ 0.01 , 0.009, 0.023, ..., -0.018, -0.002, -0.024],\n", + " ...,\n", + " [ 0.034, -0.061, -0.024, ..., -0.014, 0.086, 0.01 ],\n", + " [ 0.032, -0.04 , -0.027, ..., -0.014, 0.063, -0.01 ],\n", + " [ 0.004, -0.037, -0.018, ..., -0.001, 0.059, 0.021]],\n", + "\n", + " [[ 0.003, -0.007, 0.046, ..., -0.032, -0.008, -0.029],\n", + " [ 0.017, 0.033, 0.035, ..., -0.016, -0.022, -0.034],\n", + " [ 0.016, -0.012, 0.005, ..., 0.002, -0.045, -0.026],\n", + " ...,\n", + " [-0.044, 0.015, -0.04 , ..., -0.015, 0.006, 0.012],\n", + " [-0.013, 0.014, -0.032, ..., 0.01 , 0. , -0.015],\n", + " [ 0.007, 0.016, -0.027, ..., -0.002, -0.015, -0.012]]],\n", + " dtype=float32)
array([[[81. , 80. , 80.5, ..., 81.5, 81.5, 81.5],\n", + " [75. , 74.5, 75. , ..., 79. , 77. , 77.5],\n", + " [73.5, 72. , 72. , ..., 75. , 74.5, 75. ],\n", + " ...,\n", + " [54.5, 55.5, 54.5, ..., 50. , 50. , 49.5],\n", + " [53.5, 54.5, 54.5, ..., 46.5, 47. , 46.5],\n", + " [53. , 54. , 53. , ..., 45. , 46. , 44.5]],\n", + "\n", + " [[81.5, 80. , 80.5, ..., 82. , 81.5, 82. ],\n", + " [76. , 77. , 76.5, ..., 79. , 77.5, 77.5],\n", + " [73.5, 74. , 73. , ..., 75.5, 74.5, 74.5],\n", + " ...,\n", + " [57. , 58.5, 58. , ..., 53.5, 52. , 52.5],\n", + " [55.5, 56.5, 55.5, ..., 50. , 49. , 49. ],\n", + " [52.5, 54. , 54. , ..., 47.5, 47.5, 47. ]],\n", + "\n", + " [[80.5, 79.5, 80. , ..., 81.5, 82.5, 81.5],\n", + " [76. , 75.5, 75. , ..., 77. , 78.5, 77. ],\n", + " [72. , 73.5, 72. , ..., 74. , 75. , 73.5],\n", + " ...,\n", + " [56.5, 56.5, 57. , ..., 47.5, 47. , 48. ],\n", + " [56. , 55.5, 56.5, ..., 46.5, 47. , 47. ],\n", + " [54.5, 54. , 55.5, ..., 45. , 45.5, 45.5]],\n", + "\n", + " [[80. , 81. , 80. , ..., 81. , 81. , 81.5],\n", + " [75.5, 75.5, 74.5, ..., 76.5, 76.5, 77.5],\n", + " [73. , 72.5, 73. , ..., 75.5, 74.5, 74. ],\n", + " ...,\n", + " [51.5, 51. , 51. , ..., 46. , 46. , 45. ],\n", + " [51. , 50. , 51. , ..., 45. , 44. , 43.5],\n", + " [50.5, 49.5, 50. , ..., 43.5, 42.5, 42. ]]], dtype=float32)
array([[[100, 91, 91, ..., 89, 90, 96],\n", + " [ 74, 92, 96, ..., 100, 97, 100],\n", + " [100, 100, 99, ..., 99, 100, 100],\n", + " ...,\n", + " [ 99, 100, 100, ..., 96, 96, 99],\n", + " [ 99, 97, 100, ..., 94, 97, 96],\n", + " [ 98, 100, 100, ..., 100, 100, 98]],\n", + "\n", + " [[ 94, 90, 89, ..., 91, 92, 90],\n", + " [ 94, 100, 100, ..., 96, 100, 93],\n", + " [ 99, 95, 97, ..., 98, 98, 100],\n", + " ...,\n", + " [100, 100, 100, ..., 98, 99, 100],\n", + " [ 99, 100, 99, ..., 97, 94, 94],\n", + " [ 96, 99, 96, ..., 97, 100, 97]],\n", + "\n", + " [[ 92, 93, 93, ..., 93, 97, 89],\n", + " [ 99, 100, 99, ..., 96, 88, 98],\n", + " [ 97, 100, 98, ..., 100, 99, 97],\n", + " ...,\n", + " [100, 100, 99, ..., 97, 94, 95],\n", + " [100, 100, 100, ..., 96, 100, 100],\n", + " [100, 100, 100, ..., 96, 95, 94]],\n", + "\n", + " [[ 87, 97, 87, ..., 91, 87, 90],\n", + " [100, 93, 93, ..., 96, 96, 97],\n", + " [100, 100, 100, ..., 100, 100, 97],\n", + " ...,\n", + " [100, 99, 96, ..., 98, 100, 100],\n", + " [100, 100, 100, ..., 94, 93, 95],\n", + " [100, 98, 99, ..., 98, 98, 96]]], dtype=uint8)
array([[[-2.16688156e-01, -2.16397047e-01, -2.16593146e-01, ...,\n", + " -2.16118217e-01, -2.16699123e-01, -2.16318965e-01],\n", + " [ 9.76196468e-01, 9.76219118e-01, 9.76202846e-01, ...,\n", + " 9.76315439e-01, 9.76210594e-01, 9.76245522e-01],\n", + " [-1.22870505e-03, -1.20262802e-03, -1.17563456e-03, ...,\n", + " -1.16243958e-03, -1.02279335e-03, -9.55920666e-04]],\n", + "\n", + " [[-9.67970312e-01, -9.68004048e-01, -9.67982769e-01, ...,\n", + " -9.70095694e-01, -9.69992876e-01, -9.70033050e-01],\n", + " [-2.15024590e-01, -2.14734554e-01, -2.14924574e-01, ...,\n", + " -2.14874983e-01, -2.15436578e-01, -2.15052128e-01],\n", + " [-1.29278094e-01, -1.29190803e-01, -1.29239410e-01, ...,\n", + " -1.12442717e-01, -1.12462208e-01, -1.12422116e-01]],\n", + "\n", + " [[-1.26469478e-01, -1.26385525e-01, -1.26422524e-01, ...,\n", + " -1.10033900e-01, -1.10009573e-01, -1.09963998e-01],\n", + " [-2.68291458e-02, -2.68030688e-02, -2.68616974e-02, ...,\n", + " -2.31788009e-02, -2.33813375e-02, -2.34001204e-02],\n", + " [ 9.91607308e-01, 9.91618454e-01, 9.91612315e-01, ...,\n", + " 9.93657291e-01, 9.93655324e-01, 9.93659675e-01]]],\n", + " dtype=float32)
array([[-0.00195312, -0.00195312, -0.00195312, ..., -0.00390625,\n", + " -0.00292969, -0.00195312],\n", + " [ 0.00097656, 0. , 0. , ..., 0. ,\n", + " 0.00097656, 0.00097656],\n", + " [-0.00292969, -0.00292969, -0.00292969, ..., -0.00292969,\n", + " -0.00195312, -0.00292969]], dtype=float32)
array([[ 0.6244507 , 0.62454224, 0.6244812 , ..., 0.625 ,\n", + " 0.6247864 , 0.62490845],\n", + " [-0.04101562, -0.04098511, -0.04098511, ..., -0.03570557,\n", + " -0.03564453, -0.03561401],\n", + " [-0.05014038, -0.05010986, -0.05014038, ..., -0.04354858,\n", + " -0.04360962, -0.04360962],\n", + " [ 0.77835083, 0.7782593 , 0.7783203 , ..., 0.77856445,\n", + " 0.77874756, 0.7786255 ]], dtype=float32)
array([12.8, 12.8, 12.8, ..., 12. , 12. , 12. ], dtype=float32)
array([243, 243, 243, ..., 246, 246, 246], dtype=uint16)
array([[ 72.9, 72.8, 72.4, ..., 73. , 73. , 72.7],\n", + " [ 9.5, 9.5, 9.8, ..., 6. , 6.4, 5.9],\n", + " [-197.1, -197.2, -197.7, ..., -197.4, -198. , -195.7]],\n", + " dtype=float32)
array([[-1.4370117e-02, 0.0000000e+00, -1.4370117e-02, ...,\n", + " -4.7900393e-03, -1.9160157e-02, -1.4370117e-02],\n", + " [-1.2693603e+00, -1.2885205e+00, -1.2837305e+00, ...,\n", + " -1.0825489e+00, -1.1017090e+00, -1.1064991e+00],\n", + " [ 9.7189894e+00, 9.7046194e+00, 9.7094088e+00, ...,\n", + " 9.7141991e+00, 9.7094088e+00, 9.7237797e+00]], dtype=float32)
array([0, 0, 0, ..., 0, 0, 0], dtype=uint16)
array([1053556738, 1053556738, 1053556738, ..., 1053556738, 1053556738,\n", + " 1053557762], dtype=uint32)
array([ 1, 2, 3, ..., 54998, 54999, 55000], dtype=uint32)
array([[ 0.003, 0.021, 0.018, ..., 0. , -0.044, 0.009],\n", + " [ 0.057, 0.034, 0.017, ..., 0.01 , 0.001, -0.002],\n", + " [ 0.039, 0.022, 0.02 , ..., 0.039, -0.008, 0.018],\n", + " ...,\n", + " [-0.036, -0.013, 0.058, ..., 0.058, -0.013, 0.028],\n", + " [-0.043, -0.009, 0.028, ..., 0.092, -0.021, 0.019],\n", + " [-0.073, 0.003, 0. , ..., 0.049, -0.048, 0.09 ]],\n", + " dtype=float32)
array([[80.5, 80.5, 80. , ..., 82. , 81.5, 81. ],\n", + " [75.5, 76.5, 76. , ..., 78.5, 78. , 77.5],\n", + " [72.5, 73.5, 73.5, ..., 75. , 76.5, 75.5],\n", + " ...,\n", + " [57.5, 57.5, 57. , ..., 49. , 49. , 48.5],\n", + " [56.5, 57. , 56. , ..., 47.5, 48. , 48. ],\n", + " [55.5, 55.5, 55. , ..., 46.5, 46. , 47.5]], dtype=float32)
array([[ 98, 100, 92, ..., 88, 90, 91],\n", + " [ 97, 94, 98, ..., 97, 95, 97],\n", + " [100, 100, 100, ..., 93, 100, 96],\n", + " ...,\n", + " [100, 100, 100, ..., 100, 100, 98],\n", + " [100, 100, 100, ..., 99, 100, 98],\n", + " [100, 100, 100, ..., 99, 94, 100]], dtype=uint8)
array([[[-2.16694236e-01, -2.16498137e-01, -2.16593146e-01, ...,\n", + " -2.16118217e-01, -2.16699123e-01, -2.16318965e-01],\n", + " [-9.67967808e-01, -9.68039632e-01, -9.68030274e-01, ...,\n", + " -9.70095694e-01, -9.69992876e-01, -9.70033050e-01],\n", + " [-1.26507595e-01, -1.26426160e-01, -1.26425594e-01, ...,\n", + " -1.10033900e-01, -1.10009573e-01, -1.09963998e-01]],\n", + "\n", + " [[ 9.76198971e-01, 9.76259708e-01, 9.76250350e-01, ...,\n", + " 9.76315439e-01, 9.76210594e-01, 9.76245522e-01],\n", + " [-2.15024590e-01, -2.14829564e-01, -2.14924574e-01, ...,\n", + " -2.14874983e-01, -2.15436578e-01, -2.15052128e-01],\n", + " [-2.68766508e-02, -2.68536285e-02, -2.68591940e-02, ...,\n", + " -2.31788009e-02, -2.33813375e-02, -2.34001204e-02]],\n", + "\n", + " [[-1.19058788e-03, -1.16700679e-03, -1.17257237e-03, ...,\n", + " -1.16243958e-03, -1.02279335e-03, -9.55920666e-04],\n", + " [-1.29325598e-01, -1.29241347e-01, -1.29241914e-01, ...,\n", + " -1.12442717e-01, -1.12462208e-01, -1.12422116e-01],\n", + " [ 9.91601229e-01, 9.91612315e-01, 9.91612315e-01, ...,\n", + " 9.93657291e-01, 9.93655324e-01, 9.93659675e-01]]],\n", + " dtype=float32)
array([[-0.00195312, -0.00195312, -0.00195312, ..., -0.00097656,\n", + " -0.00195312, -0.00390625],\n", + " [ 0. , 0. , 0.00097656, ..., 0.00097656,\n", + " 0. , 0.00097656],\n", + " [-0.00292969, -0.00292969, -0.00292969, ..., -0.00292969,\n", + " -0.00292969, -0.00195312]], dtype=float32)
array([[ 0.6244507 , 0.62454224, 0.6245117 , ..., 0.625 ,\n", + " 0.6247864 , 0.62490845],\n", + " [-0.04101562, -0.04098511, -0.04098511, ..., -0.03570557,\n", + " -0.03564453, -0.03561401],\n", + " [-0.0501709 , -0.05014038, -0.05014038, ..., -0.04354858,\n", + " -0.04360962, -0.04360962],\n", + " [ 0.77835083, 0.7782898 , 0.7783203 , ..., 0.77856445,\n", + " 0.77874756, 0.7786255 ]], dtype=float32)
array([65, 65, 65, ..., 65, 65, 65], dtype=uint16)
array([0, 0, 0, ..., 0, 0, 0], dtype=uint8)
array([0, 0, 0, ..., 0, 0, 0], dtype=uint8)
array([0, 0, 0, ..., 0, 0, 0], dtype=uint8)
array([0, 0, 0, ..., 0, 0, 1], dtype=uint8)
array([-12.52 , -12.505001, -12.51 , ..., -12.490002, -12.52 ,\n", + " -12.500001], dtype=float32)
array([-0.065, -0.06 , -0.06 , ..., -0.06 , -0.05 , -0.05 ], dtype=float32)
array([-7.4250007, -7.42 , -7.42 , ..., -6.45 , -6.45 ,\n", + " -6.45 ], dtype=float32)
array([[ 1.1831, 0. , -1.1831, 0. ],\n", + " [ 0. , -1.1831, 0. , 1.1831],\n", + " [ 0.5518, 0. , 0.5518, 0. ],\n", + " [ 0. , 0.5518, 0. , 0.5518]], dtype=float32)
<xarray.DataArray 'range' (range: 28)>\n", + "array([ 1.2, 1.7, 2.2, 2.7, 3.2, 3.7, 4.2, 4.7, 5.2, 5.7, 6.2, 6.7,\n", + " 7.2, 7.7, 8.2, 8.7, 9.2, 9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2, 14.7])\n", + "Coordinates:\n", + " * range (range) float64 1.2 1.7 2.2 2.7 3.2 ... 12.7 13.2 13.7 14.2 14.7\n", + "Attributes:\n", + " units: m
array([ 1.2, 1.7, 2.2, 2.7, 3.2, 3.7, 4.2, 4.7, 5.2, 5.7, 6.2, 6.7,\n", + " 7.2, 7.7, 8.2, 8.7, 9.2, 9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2, 14.7])
array([ 1.2, 1.7, 2.2, 2.7, 3.2, 3.7, 4.2, 4.7, 5.2, 5.7, 6.2, 6.7,\n", + " 7.2, 7.7, 8.2, 8.7, 9.2, 9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2, 14.7])
<xarray.Dataset>\n",
+ "Dimensions: (time: 122912, dir: 3, x: 3, x*: 3, earth: 3, inst: 3)\n",
+ "Coordinates:\n",
+ " * time (time) datetime64[ns] 2012-06-12T12:00:02.968749 ......\n",
+ " * dir (dir) <U1 'X' 'Y' 'Z'\n",
+ " * x (x) int32 1 2 3\n",
+ " * x* (x*) int32 1 2 3\n",
+ " * earth (earth) <U1 'E' 'N' 'U'\n",
+ " * inst (inst) <U1 'X' 'Y' 'Z'\n",
+ "Data variables: (12/15)\n",
+ " beam2inst_orientmat (x, x*) float64 2.709 -1.34 -1.364 ... -0.3438 -0.3499\n",
+ " batt (time) float32 13.2 13.2 13.2 13.2 ... nan nan nan nan\n",
+ " c_sound (time) float32 1.493e+03 1.493e+03 ... nan nan\n",
+ " heading (time) float32 5.6 10.5 10.51 10.52 ... nan nan nan nan\n",
+ " pitch (time) float32 -31.5 -31.7 -31.69 ... nan nan nan\n",
+ " roll (time) float32 0.4 4.2 4.253 4.306 ... nan nan nan nan\n",
+ " ... ...\n",
+ " vel (dir, time) float32 -1.002 -1.008 -0.944 ... nan nan\n",
+ " amp (dir, time) uint8 104 110 111 113 108 112 ... 0 0 0 0 0\n",
+ " corr (dir, time) uint8 97 91 97 98 90 95 95 ... 0 0 0 0 0 0\n",
+ " orientation_down (time) bool True True True True ... True True True True\n",
+ " pressure (time) float64 5.448 5.436 5.484 5.448 ... 0.0 0.0 0.0\n",
+ " orientmat (earth, inst, time) float32 0.0832 0.155 ... -0.7065\n",
+ "Attributes:\n",
+ " config: {'ProLogID': 149, 'ProLogFWver': '4.08', 'config': 15412, '...\n",
+ " inst_make: Nortek\n",
+ " inst_model: Vector\n",
+ " inst_type: ADV\n",
+ " rotate_vars: ['vel']\n",
+ " freq: 6000\n",
+ " SerialNum: VEC 9062\n",
+ " Comments: APL-UW vector on Tidal Turbulence Mooring in Admiralty, tim...\n",
+ " fs: 32.0\n",
+ " coord_sys: inst\n",
+ " has_imu: 0array(['2012-06-12T12:00:02.968749000', '2012-06-12T12:00:02.999999000',\n", + " '2012-06-12T12:00:03.031249000', ..., '2012-06-12T13:04:03.875000000',\n", + " '2012-06-12T13:04:03.906250000', '2012-06-12T13:04:03.937500000'],\n", + " dtype='datetime64[ns]')
array(['X', 'Y', 'Z'], dtype='<U1')
array([1, 2, 3])
array([1, 2, 3])
array(['E', 'N', 'U'], dtype='<U1')
array(['X', 'Y', 'Z'], dtype='<U1')
array([[ 2.70874023, -1.34008789, -1.36376953],\n", + " [ 0.0144043 , -2.38354492, 2.39550781],\n", + " [-0.3371582 , -0.34375 , -0.34985352]])
array([13.2, 13.2, 13.2, ..., nan, nan, nan], dtype=float32)
array([1492.6, 1492.6, 1492.6, ..., nan, nan, nan], dtype=float32)
array([ 5.6 , 10.5 , 10.5125, ..., nan, nan, nan],\n", + " dtype=float32)
array([-31.5 , -31.7 , -31.690626, ..., nan, nan,\n", + " nan], dtype=float32)
array([0.4 , 4.2000003, 4.253125 , ..., nan, nan,\n", + " nan], dtype=float32)
array([12.67 , 12.679999, 12.679999, ..., nan, nan,\n", + " nan], dtype=float32)
array([0, 0, 0, ..., 0, 0, 0], dtype=uint8)
array([117, 117, 0, ..., 0, 0, 0], dtype=uint8)
array([[-1.0020001 , -1.008 , -0.94400007, ..., nan,\n", + " nan, nan],\n", + " [ 0.097 , 0.068 , 0.066 , ..., nan,\n", + " nan, nan],\n", + " [ 0.115 , 0.12400001, 0.12200001, ..., nan,\n", + " nan, nan]], dtype=float32)
array([[104, 110, 111, ..., 0, 0, 0],\n", + " [109, 111, 118, ..., 0, 0, 0],\n", + " [111, 107, 103, ..., 0, 0, 0]], dtype=uint8)
array([[97, 91, 97, ..., 0, 0, 0],\n", + " [97, 97, 98, ..., 0, 0, 0],\n", + " [96, 97, 97, ..., 0, 0, 0]], dtype=uint8)
array([ True, True, True, ..., True, True, True])
array([5.448, 5.436, 5.484, ..., 0. , 0. , 0. ])
array([[[ 0.08320302, 0.155048 , 0.15524618, ..., -0.8397447 ,\n", + " -0.8397447 , -0.8397447 ],\n", + " [ 0.8485708 , 0.83656424, 0.8366149 , ..., 0.21873687,\n", + " 0.21873687, 0.21873687],\n", + " [-0.52249855, -0.5254717 , -0.52533245, ..., -0.49697396,\n", + " -0.49697396, -0.49697396]],\n", + "\n", + " [[ 0.9948472 , 0.97360104, 0.9733992 , ..., 0.48448867,\n", + " 0.48448867, 0.48448867],\n", + " [-0.10121067, -0.21958625, -0.22025378, ..., 0.7150815 ,\n", + " 0.7150815 , 0.7150815 ],\n", + " [-0.00595242, -0.06231184, -0.06310495, ..., -0.5039139 ,\n", + " -0.5039139 , -0.5039139 ]],\n", + "\n", + " [[-0.05793348, -0.1675142 , -0.16850099, ..., 0.24515234,\n", + " 0.24515234, 0.24515234],\n", + " [-0.51931095, -0.50193846, -0.5015614 , ..., -0.6639372 ,\n", + " -0.6639372 , -0.6639372 ],\n", + " [-0.85261935, -0.84852624, -0.84855384, ..., -0.7064614 ,\n", + " -0.7064614 , -0.7064614 ]]], dtype=float32)