diff --git a/.gitignore b/.gitignore index 271aa7150..9063f86c4 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ $ cat .gitignore # Exemptions !**/examples/data/wave/*.mat !**/tests/data/wave/*.mat + +# Files created during tests +mhkit/tests/wave/plots/ diff --git a/examples/adcp_example.ipynb b/examples/adcp_example.ipynb index 69000f7e3..778d7bd65 100644 --- a/examples/adcp_example.ipynb +++ b/examples/adcp_example.ipynb @@ -360,6 +360,11 @@ " grid-column: 4;\n", "}\n", "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", ".xr-var-name,\n", ".xr-var-dims,\n", ".xr-var-dtype,\n", @@ -381,14 +386,16 @@ "}\n", "\n", ".xr-var-attrs,\n", - ".xr-var-data {\n", + ".xr-var-data,\n", + ".xr-index-data {\n", " display: none;\n", " background-color: var(--xr-background-color) !important;\n", " padding-bottom: 5px !important;\n", "}\n", "\n", ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", - ".xr-var-data-in:checked ~ .xr-var-data {\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", " display: block;\n", "}\n", "\n", @@ -398,13 +405,16 @@ "\n", ".xr-var-name span,\n", ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", ".xr-attrs {\n", " padding-left: 25px !important;\n", "}\n", "\n", ".xr-attrs,\n", ".xr-var-attrs,\n", - ".xr-var-data {\n", + ".xr-var-data,\n", + ".xr-index-data {\n", " grid-column: 1 / -1;\n", "}\n", "\n", @@ -442,7 +452,8 @@ "}\n", "\n", ".xr-icon-database,\n", - ".xr-icon-file-text2 {\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", " display: inline-block;\n", " vertical-align: middle;\n", " width: 1em;\n", @@ -454,9 +465,9 @@ "
<xarray.Dataset>\n",
"Dimensions: (time: 55000, dirIMU: 3, dir: 4, range: 28, beam: 4,\n",
" earth: 3, inst: 3, q: 4, time_b5: 55000,\n",
- " range_b5: 28, x: 4, x*: 4)\n",
+ " range_b5: 28, x1: 4, x2: 4)\n",
"Coordinates:\n",
- " * time (time) datetime64[ns] 2020-08-15T00:20:00.500999 ......\n",
+ " * time (time) datetime64[ns] 2020-08-15T00:20:00.500999927 ...\n",
" * dirIMU (dirIMU) <U1 'E' 'N' 'U'\n",
" * dir (dir) <U2 'E' 'N' 'U1' 'U2'\n",
" * range (range) float64 0.6 1.1 1.6 2.1 ... 12.6 13.1 13.6 14.1\n",
@@ -464,10 +475,10 @@
" * earth (earth) <U1 'E' 'N' 'U'\n",
" * inst (inst) <U1 'X' 'Y' 'Z'\n",
" * q (q) <U1 'w' 'x' 'y' 'z'\n",
- " * time_b5 (time_b5) datetime64[ns] 2020-08-15T00:20:00.438499 ...\n",
+ " * time_b5 (time_b5) datetime64[ns] 2020-08-15T00:20:00.4384999...\n",
" * range_b5 (range_b5) float64 0.6 1.1 1.6 2.1 ... 13.1 13.6 14.1\n",
- " * x (x) int32 1 2 3 4\n",
- " * x* (x*) int32 1 2 3 4\n",
+ " * x1 (x1) int32 1 2 3 4\n",
+ " * x2 (x2) 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",
@@ -481,40 +492,40 @@
" 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",
+ " beam2inst_orientmat (x1, x2) float32 1.183 0.0 -1.183 ... 0.5518 0.0 0.5518\n",
+ "Attributes: (12/34)\n",
+ " filehead_config: {"CLOCKSTR": {"TIME": "\\"2020-08-13 13:56:21\\""}, ...\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",
+ " burst_config: {"press_valid": true, "temp_valid": true, "compass...\n",
+ " n_cells: 28\n",
" ... ...\n",
- " proc_idle_less_3pct: 0\n",
- " proc_idle_less_6pct: 0\n",
" proc_idle_less_12pct: 0\n",
+ " rotate_vars: ['vel', 'accel', 'accel_b5', 'angrt', 'angrt_b5', ...\n",
" coord_sys: earth\n",
+ " fs: 1\n",
" has_imu: 1\n",
- " fs: 1PandasIndex(DatetimeIndex(['2020-08-15 00:20:00.500999927',\n", + " '2020-08-15 00:20:01.501100063',\n", + " '2020-08-15 00:20:02.500999927',\n", + " '2020-08-15 00:20:03.501100063',\n", + " '2020-08-15 00:20:04.500999927',\n", + " '2020-08-15 00:20:05.500999927',\n", + " '2020-08-15 00:20:06.500999927',\n", + " '2020-08-15 00:20:07.500999927',\n", + " '2020-08-15 00:20:08.500999927',\n", + " '2020-08-15 00:20:09.500999927',\n", + " ...\n", + " '2020-08-15 15:36:30.500999927',\n", + " '2020-08-15 15:36:31.500999927',\n", + " '2020-08-15 15:36:32.500999927',\n", + " '2020-08-15 15:36:33.500999927',\n", + " '2020-08-15 15:36:34.500999927',\n", + " '2020-08-15 15:36:35.500999927',\n", + " '2020-08-15 15:36:36.500999927',\n", + " '2020-08-15 15:36:37.500999927',\n", + " '2020-08-15 15:36:38.500999927',\n", + " '2020-08-15 15:36:39.500999927'],\n", + " dtype='datetime64[ns]', name='time', length=55000, freq=None))
PandasIndex(Index(['E', 'N', 'U'], dtype='object', name='dirIMU'))
PandasIndex(Index(['E', 'N', 'U1', 'U2'], dtype='object', name='dir'))
PandasIndex(Float64Index([ 0.6, 1.1, 1.6, 2.1, 2.6, 3.1, 3.6, 4.1, 4.6, 5.1, 5.6,\n", + " 6.1, 6.6, 7.1, 7.6, 8.1, 8.6, 9.1, 9.6, 10.1, 10.6, 11.1,\n", + " 11.6, 12.1, 12.6, 13.1, 13.6, 14.1],\n", + " dtype='float64', name='range'))
PandasIndex(Int64Index([1, 2, 3, 4], dtype='int64', name='beam'))
PandasIndex(Index(['E', 'N', 'U'], dtype='object', name='earth'))
PandasIndex(Index(['X', 'Y', 'Z'], dtype='object', name='inst'))
PandasIndex(Index(['w', 'x', 'y', 'z'], dtype='object', name='q'))
PandasIndex(DatetimeIndex(['2020-08-15 00:20:00.438499927',\n", + " '2020-08-15 00:20:01.438499927',\n", + " '2020-08-15 00:20:02.438499927',\n", + " '2020-08-15 00:20:03.438499927',\n", + " '2020-08-15 00:20:04.438499927',\n", + " '2020-08-15 00:20:05.438499927',\n", + " '2020-08-15 00:20:06.438400030',\n", + " '2020-08-15 00:20:07.438499927',\n", + " '2020-08-15 00:20:08.438499927',\n", + " '2020-08-15 00:20:09.438499927',\n", + " ...\n", + " '2020-08-15 15:36:30.438499927',\n", + " '2020-08-15 15:36:31.438499927',\n", + " '2020-08-15 15:36:32.438499927',\n", + " '2020-08-15 15:36:33.438499927',\n", + " '2020-08-15 15:36:34.438499927',\n", + " '2020-08-15 15:36:35.438499927',\n", + " '2020-08-15 15:36:36.438499927',\n", + " '2020-08-15 15:36:37.438499927',\n", + " '2020-08-15 15:36:38.438499927',\n", + " '2020-08-15 15:36:39.438499927'],\n", + " dtype='datetime64[ns]', name='time_b5', length=55000, freq=None))
PandasIndex(Float64Index([ 0.6, 1.1, 1.6, 2.1, 2.6, 3.1, 3.6, 4.1, 4.6, 5.1, 5.6,\n", + " 6.1, 6.6, 7.1, 7.6, 8.1, 8.6, 9.1, 9.6, 10.1, 10.6, 11.1,\n", + " 11.6, 12.1, 12.6, 13.1, 13.6, 14.1],\n", + " dtype='float64', name='range_b5'))
PandasIndex(Int64Index([1, 2, 3, 4], dtype='int64', name='x1'))
PandasIndex(Int64Index([1, 2, 3, 4], dtype='int64', name='x2'))
PandasIndex(Float64Index([ 1.2, 1.7000000000000002, 2.2,\n", + " 2.7, 3.2, 3.7,\n", + " 4.2, 4.699999999999999, 5.199999999999999,\n", + " 5.699999999999999, 6.199999999999999, 6.699999999999999,\n", + " 7.199999999999999, 7.699999999999999, 8.2,\n", + " 8.7, 9.2, 9.7,\n", + " 10.2, 10.7, 11.2,\n", + " 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2,\n", + " 14.7],\n", + " dtype='float64', name='range'))
<xarray.Dataset>\n",
- "Dimensions: (time: 183, dirIMU: 3, range: 28, dir: 4, beam: 4,\n",
+ "Dimensions: (time: 183, range: 28, dirIMU: 3, dir: 4, beam: 4,\n",
" earth: 3, inst: 3, q: 4, time_b5: 183, range_b5: 28)\n",
"Coordinates:\n",
- " * time (time) datetime64[ns] 2020-08-15T00:22:30.001030206 ... 2...\n",
+ " * time (time) datetime64[ns] 2020-08-15T00:22:30.001030683 ... 2...\n",
" * dirIMU (dirIMU) <U1 'E' 'N' 'U'\n",
" * range (range) float64 1.2 1.7 2.2 2.7 3.2 ... 13.2 13.7 14.2 14.7\n",
" * dir (dir) <U2 'E' 'N' 'U1' 'U2'\n",
@@ -1904,7 +2003,7 @@
" * earth (earth) <U1 'E' 'N' 'U'\n",
" * inst (inst) <U1 'X' 'Y' 'Z'\n",
" * q (q) <U1 'w' 'x' 'y' 'z'\n",
- " * time_b5 (time_b5) datetime64[ns] 2020-08-15T00:22:29.938494443 .....\n",
+ " * time_b5 (time_b5) datetime64[ns] 2020-08-15T00:22:29.938495159 .....\n",
" * range_b5 (range_b5) float64 1.2 1.7 2.2 2.7 ... 13.2 13.7 14.2 14.7\n",
"Data variables: (12/38)\n",
" c_sound (time) float32 1.502e+03 1.502e+03 ... 1.499e+03 1.498e+03\n",
@@ -1919,207 +2018,207 @@
" pitch (time) float32 -0.05523 -0.07217 ... -0.04288 -0.0429\n",
" roll (time) float32 -7.414 -7.424 -7.404 ... -6.446 -6.433 -6.436\n",
" water_density (time) float32 1.023e+03 1.023e+03 ... 1.023e+03 1.023e+03\n",
- " depth (time) float32 10.28 10.26 10.25 10.24 ... 10.14 10.15 10.16\n",
- "Attributes: (12/40)\n",
+ " depth (time) float32 10.28 10.26 10.25 10.23 ... 10.14 10.15 10.15\n",
+ "Attributes: (12/41)\n",
" fs: 1\n",
" n_bin: 300\n",
" n_fft: 300\n",
" description: Binned averages calculated from ensembles of s...\n",
- " filehead_config: {'CLOCKSTR': {'TIME': '"2020-08-13 13:56:21"'}...\n",
+ " filehead_config: {"CLOCKSTR": {"TIME": "\\"2020-08-13 13:56:21\\"...\n",
" inst_model: Signature1000\n",
" ... ...\n",
- " coord_sys: earth\n",
" has_imu: 1\n",
+ " beam_angle: 25\n",
" h_deploy: 0.6\n",
" declination: 15.8\n",
" declination_in_orientmat: 1\n",
- " principal_heading: 11.1897PandasIndex(DatetimeIndex(['2020-08-15 00:22:30.001030683',\n", + " '2020-08-15 00:27:30.001019239',\n", + " '2020-08-15 00:32:30.001010656',\n", + " '2020-08-15 00:37:30.001015901',\n", + " '2020-08-15 00:42:30.001019954',\n", + " '2020-08-15 00:47:30.001018524',\n", + " '2020-08-15 00:52:30.001013994',\n", + " '2020-08-15 00:57:30.001026630',\n", + " '2020-08-15 01:02:30.001023769',\n", + " '2020-08-15 01:07:30.001024723',\n", + " ...\n", + " '2020-08-15 14:47:30.001032352',\n", + " '2020-08-15 14:52:30.001019239',\n", + " '2020-08-15 14:57:30.001032829',\n", + " '2020-08-15 15:02:30.001021146',\n", + " '2020-08-15 15:07:30.001027345',\n", + " '2020-08-15 15:12:30.001029014',\n", + " '2020-08-15 15:17:30.001026630',\n", + " '2020-08-15 15:22:30.001026153',\n", + " '2020-08-15 15:27:30.001022577',\n", + " '2020-08-15 15:32:30.001030683'],\n", + " dtype='datetime64[ns]', name='time', length=183, freq=None))
PandasIndex(Index(['E', 'N', 'U'], dtype='object', name='dirIMU'))
PandasIndex(Float64Index([ 1.2, 1.7000000000000002, 2.2,\n", + " 2.7, 3.2, 3.7,\n", + " 4.2, 4.699999999999999, 5.199999999999999,\n", + " 5.699999999999999, 6.199999999999999, 6.699999999999999,\n", + " 7.199999999999999, 7.699999999999999, 8.2,\n", + " 8.7, 9.2, 9.7,\n", + " 10.2, 10.7, 11.2,\n", + " 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2,\n", + " 14.7],\n", + " dtype='float64', name='range'))
PandasIndex(Index(['E', 'N', 'U1', 'U2'], dtype='object', name='dir'))
PandasIndex(Int64Index([1, 2, 3, 4], dtype='int64', name='beam'))
PandasIndex(Index(['E', 'N', 'U'], dtype='object', name='earth'))
PandasIndex(Index(['X', 'Y', 'Z'], dtype='object', name='inst'))
PandasIndex(Index(['w', 'x', 'y', 'z'], dtype='object', name='q'))
PandasIndex(DatetimeIndex(['2020-08-15 00:22:29.938495159',\n", + " '2020-08-15 00:27:29.938490867',\n", + " '2020-08-15 00:32:29.938487529',\n", + " '2020-08-15 00:37:29.938496828',\n", + " '2020-08-15 00:42:29.938495397',\n", + " '2020-08-15 00:47:29.938496589',\n", + " '2020-08-15 00:52:29.938497781',\n", + " '2020-08-15 00:57:29.938495397',\n", + " '2020-08-15 01:02:29.938493013',\n", + " '2020-08-15 01:07:29.938492536',\n", + " ...\n", + " '2020-08-15 14:47:29.938492774',\n", + " '2020-08-15 14:52:29.938491106',\n", + " '2020-08-15 14:57:29.938495635',\n", + " '2020-08-15 15:02:29.938493013',\n", + " '2020-08-15 15:07:29.938493967',\n", + " '2020-08-15 15:12:29.938494920',\n", + " '2020-08-15 15:17:29.938493251',\n", + " '2020-08-15 15:22:29.938486099',\n", + " '2020-08-15 15:27:29.938484191',\n", + " '2020-08-15 15:32:29.938490390'],\n", + " dtype='datetime64[ns]', name='time_b5', length=183, freq=None))
PandasIndex(Float64Index([ 1.2, 1.7000000000000002, 2.2,\n", + " 2.7, 3.2, 3.7,\n", + " 4.2, 4.699999999999999, 5.199999999999999,\n", + " 5.699999999999999, 6.199999999999999, 6.699999999999999,\n", + " 7.199999999999999, 7.699999999999999, 8.2,\n", + " 8.7, 9.2, 9.7,\n", + " 10.2, 10.7, 11.2,\n", + " 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2,\n", + " 14.7],\n", + " dtype='float64', name='range_b5'))
<xarray.Dataset>\n",
- "Dimensions: (time: 122912, beam: 3, dir: 3, x: 3, x*: 3, earth: 3, inst: 3)\n",
+ "Dimensions: (x1: 3, x2: 3, time: 122912, dir: 3, beam: 3,\n",
+ " earth: 3, inst: 3)\n",
"Coordinates:\n",
- " * time (time) datetime64[ns] 2012-06-12T12:00:02.968749 ......\n",
- " * beam (beam) int32 1 2 3\n",
+ " * x1 (x1) int32 1 2 3\n",
+ " * x2 (x2) int32 1 2 3\n",
+ " * time (time) datetime64[ns] 2012-06-12T12:00:02.968750238 ...\n",
" * dir (dir) <U1 'X' 'Y' 'Z'\n",
- " * x (x) int32 1 2 3\n",
- " * x* (x*) int32 1 2 3\n",
+ " * beam (beam) 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",
+ " beam2inst_orientmat (x1, x2) 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",
+ " orientation_down (time) bool True True True True ... True True True True\n",
" vel (dir, time) float32 -1.002 -1.008 -0.944 ... nan nan\n",
" amp (beam, time) uint8 104 110 111 113 108 ... 0 0 0 0 0\n",
" corr (beam, 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: (12/39)\n",
@@ -478,25 +492,25 @@
" firmware_version: 3.34\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.875001000',\n", - " '2012-06-12T13:04:03.906251000', '2012-06-12T13:04:03.937501000'],\n", - " dtype='datetime64[ns]')
array([1, 2, 3])
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", + " has_imu: 0
PandasIndex(Int64Index([1, 2, 3], dtype='int64', name='x1'))
PandasIndex(Int64Index([1, 2, 3], dtype='int64', name='x2'))
PandasIndex(DatetimeIndex(['2012-06-12 12:00:02.968750238',\n", + " '2012-06-12 12:00:03.000000238',\n", + " '2012-06-12 12:00:03.031250238',\n", + " '2012-06-12 12:00:03.062500238',\n", + " '2012-06-12 12:00:03.093750238',\n", + " '2012-06-12 12:00:03.125000238',\n", + " '2012-06-12 12:00:03.156250238',\n", + " '2012-06-12 12:00:03.187500238',\n", + " '2012-06-12 12:00:03.218750238',\n", + " '2012-06-12 12:00:03.250000238',\n", + " ...\n", + " '2012-06-12 13:04:03.656250238',\n", + " '2012-06-12 13:04:03.687500238',\n", + " '2012-06-12 13:04:03.718750238',\n", + " '2012-06-12 13:04:03.750000238',\n", + " '2012-06-12 13:04:03.781250238',\n", + " '2012-06-12 13:04:03.812500238',\n", + " '2012-06-12 13:04:03.843750238',\n", + " '2012-06-12 13:04:03.875000238',\n", + " '2012-06-12 13:04:03.906250238',\n", + " '2012-06-12 13:04:03.937500238'],\n", + " dtype='datetime64[ns]', name='time', length=122912, freq=None))
PandasIndex(Index(['X', 'Y', 'Z'], dtype='object', name='dir'))
PandasIndex(Int64Index([1, 2, 3], dtype='int64', name='beam'))
PandasIndex(Index(['E', 'N', 'U'], dtype='object', name='earth'))
PandasIndex(Index(['X', 'Y', 'Z'], dtype='object', name='inst'))