diff --git a/RefactoringADCP.ipynb b/RefactoringADCP.ipynb index cf94b05..0212d17 100644 --- a/RefactoringADCP.ipynb +++ b/RefactoringADCP.ipynb @@ -74,8 +74,8 @@ "output_type": "stream", "text": [ "Loaded ADCP_refactoring_test_files/Skag_test.pqt\n", - "2023-03-28 12:03:32 : Finished loading ADCP data\n", - "2023-03-28 12:03:33 : Added glider variables\n" + "2023-03-28 16:26:35 : Finished loading ADCP data\n", + "2023-03-28 16:26:36 : Added glider variables\n" ] } ], @@ -117,7 +117,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "2023-03-28 12:03:33 : Depth calculation of cells correct. Beam 1 2 4 match on down; 3 2 4 match on up. (Tested on downward facing)\n" + "2023-03-28 16:26:36 : Depth calculation of cells correct. Beam 1 2 4 match on down; 3 2 4 match on up. (Tested on downward facing)\n" ] }, { @@ -132,7 +132,7 @@ } ], "source": [ - "ADCP = process_adcp.remapADCPdepth(ADCP, options)\n" + "ADCP = process_adcp.remapADCPdepth(ADCP, options)" ] }, { @@ -176,7 +176,7 @@ " [-5.39439514e-04 8.54898793e-01 -8.35052039e-03]\n", " [-9.91747987e-03 -5.26418160e-03 8.53100949e-01]]\n", "[ 0.02260588 0.04487561 -0.01074626]\n", - "2023-03-28 12:04:06 : Corrected heading and accounted for declination\n" + "2023-03-28 16:27:02 : Corrected heading and accounted for declination\n" ] }, { @@ -212,10 +212,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "2023-03-28 12:04:08 : Corrected beam 1 velocity for sound speed.\n", - "2023-03-28 12:04:08 : Corrected beam 2 velocity for sound speed.\n", - "2023-03-28 12:04:08 : Corrected beam 3 velocity for sound speed.\n", - "2023-03-28 12:04:08 : Corrected beam 4 velocity for sound speed.\n" + "2023-03-28 16:27:03 : Corrected beam 1 velocity for sound speed.\n", + "2023-03-28 16:27:03 : Corrected beam 2 velocity for sound speed.\n", + "2023-03-28 16:27:03 : Corrected beam 3 velocity for sound speed.\n", + "2023-03-28 16:27:03 : Corrected beam 4 velocity for sound speed.\n" ] } ], @@ -244,18 +244,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "2023-03-28 12:04:14 : Beam 1 correlation: 43.8% removed\n", - "2023-03-28 12:04:14 : Beam 1 amplitude: 0.8% removed\n", - "2023-03-28 12:04:14 : Beam 1 velocity: 1.7% removed\n", - "2023-03-28 12:04:15 : Beam 2 correlation: 44.9% removed\n", - "2023-03-28 12:04:15 : Beam 2 amplitude: 0.7% removed\n", - "2023-03-28 12:04:15 : Beam 2 velocity: 1.8% removed\n", - "2023-03-28 12:04:15 : Beam 3 correlation: 46.0% removed\n", - "2023-03-28 12:04:15 : Beam 3 amplitude: 0.7% removed\n", - "2023-03-28 12:04:15 : Beam 3 velocity: 2.1% removed\n", - "2023-03-28 12:04:16 : Beam 4 correlation: 43.8% removed\n", - "2023-03-28 12:04:16 : Beam 4 amplitude: 0.7% removed\n", - "2023-03-28 12:04:16 : Beam 4 velocity: 1.7% removed\n" + "2023-03-28 16:27:07 : Beam 1 correlation: 43.8% removed\n", + "2023-03-28 16:27:07 : Beam 1 amplitude: 0.8% removed\n", + "2023-03-28 16:27:08 : Beam 1 velocity: 1.7% removed\n", + "2023-03-28 16:27:08 : Beam 2 correlation: 44.9% removed\n", + "2023-03-28 16:27:08 : Beam 2 amplitude: 0.7% removed\n", + "2023-03-28 16:27:08 : Beam 2 velocity: 1.8% removed\n", + "2023-03-28 16:27:08 : Beam 3 correlation: 46.0% removed\n", + "2023-03-28 16:27:08 : Beam 3 amplitude: 0.7% removed\n", + "2023-03-28 16:27:08 : Beam 3 velocity: 2.1% removed\n", + "2023-03-28 16:27:08 : Beam 4 correlation: 43.8% removed\n", + "2023-03-28 16:27:08 : Beam 4 amplitude: 0.7% removed\n", + "2023-03-28 16:27:09 : Beam 4 velocity: 1.7% removed\n" ] }, { @@ -358,3003 +358,6 @@ "id": "97d78b25-6e95-4363-b03f-ba823774fa59", "metadata": {}, "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                    (time: 277034, bin: 30, Physicalbeam_dim: 4)\n",
-       "Coordinates:\n",
-       "  * time                       (time) datetime64[ns] 2021-07-22T08:30:00.4382...\n",
-       "    Velocity Range             (bin) float32 1.2 2.2 3.2 4.2 ... 28.2 29.2 30.2\n",
-       "    Correlation Range          (bin) float32 1.2 2.2 3.2 4.2 ... 28.2 29.2 30.2\n",
-       "    Amplitude Range            (bin) float32 1.2 2.2 3.2 4.2 ... 28.2 29.2 30.2\n",
-       "    Latitude                   (time) float64 58.25 58.25 58.25 ... nan nan nan\n",
-       "    Longitude                  (time) float64 10.8 10.8 10.8 ... nan nan nan\n",
-       "    profileNum                 (time) float64 1.0 1.0 1.0 1.0 ... nan nan nan\n",
-       "    Depth                      (time) float64 0.9243 0.9739 0.9362 ... nan nan\n",
-       "  * bin                        (bin) int64 0 1 2 3 4 5 6 ... 24 25 26 27 28 29\n",
-       "Dimensions without coordinates: Physicalbeam_dim\n",
-       "Data variables: (12/55)\n",
-       "    VelocityBeam1              (time, bin) float64 dask.array<chunksize=(138492, 30), meta=np.ndarray>\n",
-       "    VelocityBeam2              (time, bin) float64 dask.array<chunksize=(138492, 30), meta=np.ndarray>\n",
-       "    VelocityBeam3              (time, bin) float64 dask.array<chunksize=(138492, 30), meta=np.ndarray>\n",
-       "    VelocityBeam4              (time, bin) float64 dask.array<chunksize=(138492, 30), meta=np.ndarray>\n",
-       "    CorrelationBeam1           (time, bin) float32 dask.array<chunksize=(138492, 30), meta=np.ndarray>\n",
-       "    CorrelationBeam2           (time, bin) float32 dask.array<chunksize=(138492, 30), meta=np.ndarray>\n",
-       "    ...                         ...\n",
-       "    D4                         (time, bin) float64 -0.088 -0.9316 ... nan nan\n",
-       "    Heading_old                (time) float32 169.4 193.7 226.1 ... 5.82 6.49\n",
-       "    X4                         (time, bin) float64 nan nan nan ... nan nan nan\n",
-       "    Y4                         (time, bin) float64 nan nan nan ... nan nan nan\n",
-       "    Z4                         (time, bin) float64 nan nan nan ... nan nan nan\n",
-       "    ZZ4                        (time, bin) float64 nan nan nan ... nan nan nan
" - ], - "text/plain": [ - "\n", - "Dimensions: (time: 277034, bin: 30, Physicalbeam_dim: 4)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 2021-07-22T08:30:00.4382...\n", - " Velocity Range (bin) float32 1.2 2.2 3.2 4.2 ... 28.2 29.2 30.2\n", - " Correlation Range (bin) float32 1.2 2.2 3.2 4.2 ... 28.2 29.2 30.2\n", - " Amplitude Range (bin) float32 1.2 2.2 3.2 4.2 ... 28.2 29.2 30.2\n", - " Latitude (time) float64 58.25 58.25 58.25 ... nan nan nan\n", - " Longitude (time) float64 10.8 10.8 10.8 ... nan nan nan\n", - " profileNum (time) float64 1.0 1.0 1.0 1.0 ... nan nan nan\n", - " Depth (time) float64 0.9243 0.9739 0.9362 ... nan nan\n", - " * bin (bin) int64 0 1 2 3 4 5 6 ... 24 25 26 27 28 29\n", - "Dimensions without coordinates: Physicalbeam_dim\n", - "Data variables: (12/55)\n", - " VelocityBeam1 (time, bin) float64 dask.array\n", - " VelocityBeam2 (time, bin) float64 dask.array\n", - " VelocityBeam3 (time, bin) float64 dask.array\n", - " VelocityBeam4 (time, bin) float64 dask.array\n", - " CorrelationBeam1 (time, bin) float32 dask.array\n", - " CorrelationBeam2 (time, bin) float32 dask.array\n", - " ... ...\n", - " D4 (time, bin) float64 -0.088 -0.9316 ... nan nan\n", - " Heading_old (time) float32 169.4 193.7 226.1 ... 5.82 6.49\n", - " X4 (time, bin) float64 nan nan nan ... nan nan nan\n", - " Y4 (time, bin) float64 nan nan nan ... nan nan nan\n", - " Z4 (time, bin) float64 nan nan nan ... nan nan nan\n", - " ZZ4 (time, bin) float64 nan nan nan ... nan nan nan" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "image/png": "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\n", @@ -3367,7 +370,7 @@ } ], "source": [ - "process_adcp.correct_shear(ADCP, options)" + "ADCP = process_adcp.correct_shear(ADCP, options)" ] }, { @@ -3454,10 +457,10 @@ " 21. 21.5 22. 22.5 23. 23.5 24. 24.5 25. 25.5 26. 26.5 27. 27.5]\n", " \n", "Running gridding on all 4 beams:\n", - "2023-03-28 12:05:14 : Calculating beam 1\n", - "2023-03-28 12:05:24 : Calculating beam 2\n", - "2023-03-28 12:05:34 : Calculating beam 3\n", - "2023-03-28 12:05:44 : Calculating beam 4\n" + "2023-03-28 16:29:11 : Calculating beam 1\n", + "2023-03-28 16:29:20 : Calculating beam 2\n", + "2023-03-28 16:29:29 : Calculating beam 3\n", + "2023-03-28 16:29:43 : Calculating beam 4\n" ] }, { @@ -3522,7 +525,7 @@ "output_type": "stream", "text": [ "Assuming ADCP is top mounted\n", - "2023-03-28 12:06:00 : Calculating X,Y,Z from isobaric 3-beam measurements.\n" + "2023-03-28 16:30:02 : Calculating X,Y,Z from isobaric 3-beam measurements.\n" ] }, { @@ -3590,7 +593,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "2023-03-28 12:06:03 : Converted from XYZ to ENU\n" + "2023-03-28 16:30:06 : Converted from XYZ to ENU\n" ] }, { @@ -3829,7 +832,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████████████████████████████████| 1834/1834 [00:01<00:00, 936.59it/s]\n" + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1834/1834 [00:00<00:00, 1957.62it/s]\n" ] }, { @@ -3844,8 +847,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████████████████████████████████████| 170/170 [00:00<00:00, 1084.41it/s]\n", - "100%|██████████████████████████████████████| 170/170 [00:00<00:00, 14625.39it/s]\n" + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 170/170 [00:00<00:00, 1907.84it/s]\n", + "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 170/170 [00:00<00:00, 25191.02it/s]\n" ] } ], @@ -3881,22 +884,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1609: RuntimeWarning: invalid value encountered in true_divide\n", - " # Baroclinic velocity, weighted by depth residence time, should be equal to DAC\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1617: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", - " ## PLOT 1\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1621: UserWarning: No contour levels were found within the data range.\n", - " plt.colorbar()\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1609: RuntimeWarning: invalid value encountered in true_divide\n", - " # Baroclinic velocity, weighted by depth residence time, should be equal to DAC\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1617: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", - " ## PLOT 1\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1621: UserWarning: No contour levels were found within the data range.\n", - " plt.colorbar()\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n" + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1527: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", + " plt.subplot(6, 1, pstep + 1)\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1531: UserWarning: No contour levels were found within the data range.\n", + " [plt.axvline(x, color='k', alpha=0.3) for x in days]\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1527: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", + " plt.subplot(6, 1, pstep + 1)\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1531: UserWarning: No contour levels were found within the data range.\n", + " [plt.axvline(x, color='k', alpha=0.3) for x in days]\n" ] }, { @@ -3950,7 +945,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████████████████████████████████████████| 37/37 [00:08<00:00, 4.40it/s]\n" + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 37/37 [00:11<00:00, 3.35it/s]\n" ] } ], @@ -3968,22 +963,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1745: RuntimeWarning: invalid value encountered in remainder\n", - " south = np.gradient(out['latitude'], axis=1) < 0\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1746: RuntimeWarning: invalid value encountered in remainder\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1656: RuntimeWarning: invalid value encountered in remainder\n", " \n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/histograms.py:906: RuntimeWarning: invalid value encountered in true_divide\n", - " return n/db/n.sum(), bin_edges\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/histograms.py:906: RuntimeWarning: invalid value encountered in true_divide\n", - " return n/db/n.sum(), bin_edges\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/histograms.py:906: RuntimeWarning: invalid value encountered in true_divide\n", - " return n/db/n.sum(), bin_edges\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n" + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1657: RuntimeWarning: invalid value encountered in remainder\n", + " up = np.remainder(out['profileNum'], 2) == 0\n" ] }, { @@ -4011,17 +994,11 @@ "name": "stderr", "output_type": "stream", "text": [ - " 27%|███████████▎ | 27/100 [00:00<00:01, 37.08it/s]\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1937: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " plt.figure(figsize=(15, 5))\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1938: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " plt.subplot(131)\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1940: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " plt.plot(np.nanvar(out['ADCP_E'], axis=1), yaxis, '-g')\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1941: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " plt.subplot(132)\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1943: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " plt.plot(np.nanvar(out['ADCP_N'], axis=1), yaxis, '-g')\n" + " 27%|███████████████████████████████████▉ | 27/100 [00:00<00:01, 39.85it/s]\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1656: RuntimeWarning: invalid value encountered in remainder\n", + " \n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1657: RuntimeWarning: invalid value encountered in remainder\n", + " up = np.remainder(out['profileNum'], 2) == 0\n" ] }, { @@ -4039,32 +1016,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1944: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " plt.subplot(133)\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1745: RuntimeWarning: invalid value encountered in remainder\n", - " south = np.gradient(out['latitude'], axis=1) < 0\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1746: RuntimeWarning: invalid value encountered in remainder\n", - " \n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/histograms.py:906: RuntimeWarning: invalid value encountered in true_divide\n", - " return n/db/n.sum(), bin_edges\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/histograms.py:906: RuntimeWarning: invalid value encountered in true_divide\n", - " return n/db/n.sum(), bin_edges\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/histograms.py:906: RuntimeWarning: invalid value encountered in true_divide\n", - " return n/db/n.sum(), bin_edges\n", - "/home/callum/anaconda3/envs/sci/lib/python3.10/site-packages/numpy/lib/nanfunctions.py:1670: RuntimeWarning: Degrees of freedom <= 0 for slice.\n", - " var = nanvar(a, axis=axis, dtype=dtype, out=out, ddof=ddof,\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1951: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", - " ## PLOT 1\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1955: UserWarning: No contour levels were found within the data range.\n", - " plt.colorbar()\n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1962: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", - " \n", - "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1966: UserWarning: No contour levels were found within the data range.\n", - " plt.colorbar()\n" + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1792: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", + " plt.subplot(6, 1, 1)\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1796: UserWarning: No contour levels were found within the data range.\n", + " [plt.axvline(x, color='k', alpha=0.3) for x in days]\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1803: UserWarning: The input coordinates to pcolormesh are interpreted as cell centers, but are not monotonically increasing or decreasing. This may lead to incorrectly calculated cell edges, in which case, please supply explicit cell edges to pcolormesh.\n", + " plt.subplot(6, 1, 2)\n", + "/home/callum/Documents/coding/SeaExplorerTools/process_adcp.py:1807: UserWarning: No contour levels were found within the data range.\n", + " [plt.axvline(x, color='k', alpha=0.3) for x in days]\n" ] }, { @@ -4112,7 +1071,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 24, "id": "cef343a2-db9d-4c62-952e-9e0abe9ee0d1", "metadata": {}, "outputs": [], @@ -4128,22 +1087,23 @@ "coords_dict = {\"profile_num\": ((\"profile_num\"), profiles),\n", " \"depth_bin\": ((\"depth_bin\"), depth_bins)\n", "}\n", - "ds = xr.Dataset(data_vars=ds_dict, coords=coords_dict)" + "ds = xr.Dataset(data_vars=ds_dict, coords=coords_dict)\n", + "ds_min = ds[['Sh_E', 'Sh_N','Sh_U', 'ADCP_E', 'ADCP_N']]" ] }, { "cell_type": "code", - "execution_count": 58, - "id": "f0d15990-2ee5-4ad1-91f0-c0130bd078ac", + "execution_count": 25, + "id": "380929e5-6452-4471-ab87-93e016bb9d53", "metadata": {}, "outputs": [], "source": [ - "ds_og = xr.open_dataset(\"ADCP_refactoring_test_files/out_original.nc\")" + "ds_min_test = xr.open_dataset(\"tests/test_files/ds_out_min.nc\")" ] }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 26, "id": "d4651d82-ddbf-4daa-9a7a-9160391943f2", "metadata": {}, "outputs": [ @@ -4153,13 +1113,13 @@ "True" ] }, - "execution_count": 59, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ds_og.equals(ds)" + "ds_min.equals(ds_min_test)" ] }, { diff --git a/process_adcp.py b/process_adcp.py index aeb84b5..8885733 100644 --- a/process_adcp.py +++ b/process_adcp.py @@ -18,6 +18,8 @@ warnings.filterwarnings(action='ignore', message='Mean of empty slice') warnings.filterwarnings(action='ignore', message='invalid value encountered in divide') +warnings.filterwarnings(action='ignore', message='invalid value encountered in true_divide') +warnings.filterwarnings(action='ignore', message='Degrees of freedom <= 0 for slice.') sns.set(font='Franklin Gothic Book', rc={ @@ -247,7 +249,7 @@ def getGeoMagStrength(): rmsd = lambda x, y, z: np.sqrt(np.mean((norm(x, y, z) - target) ** 2)) def circ(x): - idx = np.abs(x) > 180 + idx = (np.abs(x) > 180).values x[idx] = x[idx] + (360 * -np.sign(x[idx])) return x @@ -542,7 +544,7 @@ def plotit(ADCP): plt.ylim(np.array([-1, 1]) * 1.5e-3) -def shear_correction(ADCP, var, correct=True): +def _shear_correction(ADCP, var, correct=True): def get_correction_array(row): ### SEPARATION CRITERIA spd_thr_water = np.sqrt(ADCP['X4'] ** 2 + ADCP['Y4'] ** 2 + ((ADCP['Z4'] + ADCP['ZZ4']) / 2) ** 2) @@ -635,10 +637,10 @@ def correct_shear(ADCP, options): ADCP = do_beam2xyzz(ADCP) plotit(ADCP) - if options['correctZZshear']: ADCP = do_beam2xyzz(ADCP); shear_correction(ADCP, 'ZZ4'); ADCP = do_xyzz2beam(ADCP); - if options['correctZshear']: ADCP = do_beam2xyzz(ADCP); shear_correction(ADCP, 'Z4'); ADCP = do_xyzz2beam(ADCP); - if options['correctYshear']: ADCP = do_beam2xyzz(ADCP); shear_correction(ADCP, 'Y4'); ADCP = do_xyzz2beam(ADCP); - if options['correctXshear']: ADCP = do_beam2xyzz(ADCP); shear_correction(ADCP, 'X4'); ADCP = do_xyzz2beam(ADCP); + if options['correctZZshear']: ADCP = do_beam2xyzz(ADCP); _shear_correction(ADCP, 'ZZ4'); ADCP = do_xyzz2beam(ADCP); + if options['correctZshear']: ADCP = do_beam2xyzz(ADCP); _shear_correction(ADCP, 'Z4'); ADCP = do_xyzz2beam(ADCP); + if options['correctYshear']: ADCP = do_beam2xyzz(ADCP); _shear_correction(ADCP, 'Y4'); ADCP = do_xyzz2beam(ADCP); + if options['correctXshear']: ADCP = do_beam2xyzz(ADCP); _shear_correction(ADCP, 'X4'); ADCP = do_xyzz2beam(ADCP); if options['correctZZshear'] or options['correctZshear'] or options['correctYshear'] or options[ 'correctXshear']: plotit(ADCP);