From 6ada983d242035b2604265d608af39a316666906 Mon Sep 17 00:00:00 2001 From: Aart Stuurman Date: Thu, 15 Aug 2024 02:03:27 +0200 Subject: [PATCH 1/6] csv works --- .../test_adcp_make_realistic.py | 11 +++ virtual_ship/make_realistic/__init__.py | 3 +- .../make_realistic/adcp_make_realistic.py | 69 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 tests/make_realistic/test_adcp_make_realistic.py create mode 100644 virtual_ship/make_realistic/adcp_make_realistic.py diff --git a/tests/make_realistic/test_adcp_make_realistic.py b/tests/make_realistic/test_adcp_make_realistic.py new file mode 100644 index 00000000..6aeeb12e --- /dev/null +++ b/tests/make_realistic/test_adcp_make_realistic.py @@ -0,0 +1,11 @@ +import py + +from virtual_ship.make_realistic import adcp_make_realistic + + +def test_adcp_make_realistic(tmpdir: py.path.LocalPath) -> None: + # add noise and convert to CSV + file = adcp_make_realistic("adcp.zarr", out_dir=tmpdir, prefix="ADCP") + + # check if CSV is ok and can be loaded + netCDF4.Dataset(file, mode="r") diff --git a/virtual_ship/make_realistic/__init__.py b/virtual_ship/make_realistic/__init__.py index d17e5eb9..2e04d735 100644 --- a/virtual_ship/make_realistic/__init__.py +++ b/virtual_ship/make_realistic/__init__.py @@ -1,5 +1,6 @@ """Conversion functions from zarr instrument results to realistic file formats with data adjusted to be more realistic.""" from .ctd_make_realistic import ctd_make_realistic +from .adcp_make_realistic import adcp_make_realistic -__all__ = ["ctd_make_realistic"] +__all__ = ["ctd_make_realistic", "adcp_make_realistic"] diff --git a/virtual_ship/make_realistic/adcp_make_realistic.py b/virtual_ship/make_realistic/adcp_make_realistic.py new file mode 100644 index 00000000..d59b42ae --- /dev/null +++ b/virtual_ship/make_realistic/adcp_make_realistic.py @@ -0,0 +1,69 @@ +"""adcp_make_realistic function.""" + +import random + +import numpy as np +import opensimplex +import py +import xarray as xr + + +def adcp_make_realistic( + zarr_path: str | py.path.LocalPath, + out_dir: str | py.path.LocalPath, + prefix: str, +) -> py.path.LocalPath: + """ + Take simulated ADCP data, add noise, then save in (an inconvenient educational) CSV format. + + :param zarr_path: Input simulated data. + :param out_dir: Output directory for CSV file. + :param prefix: Prefix for CSV file. + :returns: Path to created file. + """ + original = xr.open_zarr(zarr_path) + + times = original.sel(trajectory=0)["time"].values + depths = original.sel(obs=0)["z"].values + lats = original.sel(trajectory=0)["lat"].values + lons = original.sel(trajectory=0)["lon"].values + all_us = original["U"].values + all_vs = original["V"].values + + all_us, all_vs = _add_noise(times, depths, all_us, all_vs) + + csv = _to_csv(times, depths, lats, lons, all_us, all_vs) + out_file = ( + out_dir.join(f"{prefix}.csv") + if isinstance(out_dir, py.path.LocalPath) + else f"{out_dir}/{prefix}.csv" + ) + with open(out_file, "w") as out_cnv: + out_cnv.write(csv) + + return out_file + + +def _add_noise( + times: np.ndarray, depths: np.ndarray, all_us: np.ndarray, all_vs: np.ndarray +) -> tuple[np.ndarray, np.ndarray]: + return all_us, all_vs + + +def _to_csv( + times: np.ndarray, + depths: np.ndarray, + lats: np.ndarray, + lons: np.ndarray, + all_us: np.ndarray, + all_vs: np.ndarray, +) -> str: + meta = "# depths (m): " + ",".join([str(d) for d in depths]) + header = f"time,lat,lon,{','.join(['u' + str(n) + ',v' + str(n) for n in range(len(depths))])}" + data = [ + f"{str(time)},{lat},{lon},{','.join([str(u) + ',' + str(v) for u, v in zip(us, vs)])}" + for time, lat, lon, us, vs in zip(times, lats, lons, all_us.T, all_vs.T) + ] + + lines = [meta, header] + data + return "\n".join(lines) From b9fab3107d9d289605a77cddc19ebf253f5ca3e6 Mon Sep 17 00:00:00 2001 From: Aart Stuurman Date: Fri, 16 Aug 2024 16:31:03 +0200 Subject: [PATCH 2/6] wip --- tests/make_realistic/test_adcp_make_realistic.py | 7 ++++++- virtual_ship/make_realistic/adcp_make_realistic.py | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/make_realistic/test_adcp_make_realistic.py b/tests/make_realistic/test_adcp_make_realistic.py index 6aeeb12e..56bbe3ee 100644 --- a/tests/make_realistic/test_adcp_make_realistic.py +++ b/tests/make_realistic/test_adcp_make_realistic.py @@ -1,6 +1,7 @@ import py from virtual_ship.make_realistic import adcp_make_realistic +import csv def test_adcp_make_realistic(tmpdir: py.path.LocalPath) -> None: @@ -8,4 +9,8 @@ def test_adcp_make_realistic(tmpdir: py.path.LocalPath) -> None: file = adcp_make_realistic("adcp.zarr", out_dir=tmpdir, prefix="ADCP") # check if CSV is ok and can be loaded - netCDF4.Dataset(file, mode="r") + with open(file, mode="r", newline="") as csvfile: + # ignore lines starting with #, we assume that's metadata or comments + reader = csv.reader(line for line in csvfile if not line.startswith("#")) + for _ in reader: + pass # iterate through the rows to check validity diff --git a/virtual_ship/make_realistic/adcp_make_realistic.py b/virtual_ship/make_realistic/adcp_make_realistic.py index d59b42ae..dc224985 100644 --- a/virtual_ship/make_realistic/adcp_make_realistic.py +++ b/virtual_ship/make_realistic/adcp_make_realistic.py @@ -6,6 +6,8 @@ import opensimplex import py import xarray as xr +import numpy as np +import matplotlib.pyplot as plt def adcp_make_realistic( @@ -32,6 +34,15 @@ def adcp_make_realistic( all_us, all_vs = _add_noise(times, depths, all_us, all_vs) + # Create the heatmap + plt.figure(figsize=(10, 6)) + plt.pcolormesh(times, depths, all_us, shading="auto", cmap="viridis") + plt.colorbar(label="Speed (m/s)") + plt.xlabel("Time") + plt.ylabel("Depth") + plt.title("Heatmap of Speed over Time and Depth") + plt.show() + csv = _to_csv(times, depths, lats, lons, all_us, all_vs) out_file = ( out_dir.join(f"{prefix}.csv") From 6c45f58fdf0124b3d68e89555225c0abdbd19b75 Mon Sep 17 00:00:00 2001 From: Aart Stuurman Date: Fri, 16 Aug 2024 17:45:08 +0200 Subject: [PATCH 3/6] wip --- tests/instruments/test_adcp.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/instruments/test_adcp.py b/tests/instruments/test_adcp.py index d119f3e2..933cbbf0 100644 --- a/tests/instruments/test_adcp.py +++ b/tests/instruments/test_adcp.py @@ -26,20 +26,21 @@ def test_simulate_adcp(tmpdir: py.path.LocalPath) -> None: sample_points = [ Spacetime(Location(1, 2), base_time + datetime.timedelta(seconds=0)), Spacetime(Location(3, 4), base_time + datetime.timedelta(seconds=1)), + Spacetime(Location(2, 3), base_time + datetime.timedelta(seconds=0.5)), ] # expected observations at sample points expected_obs = [ { "V": {"surface": 5, "max_depth": 6}, - "U": {"surface": 7, "max_depth": 8}, + "U": {"surface": 6, "max_depth": 8}, "lat": sample_points[0].location.lat, "lon": sample_points[0].location.lon, "time": base_time + datetime.timedelta(seconds=0), }, { - "V": {"surface": 9, "max_depth": 10}, - "U": {"surface": 11, "max_depth": 12}, + "V": {"surface": 6, "max_depth": 7}, + "U": {"surface": 7, "max_depth": 8}, "lat": sample_points[1].location.lat, "lon": sample_points[1].location.lon, "time": base_time + datetime.timedelta(seconds=1), @@ -79,7 +80,8 @@ def test_simulate_adcp(tmpdir: py.path.LocalPath) -> None: ) # perform simulation - out_path = tmpdir.join("out.zarr") + # out_path = tmpdir.join("out.zarr") + out_path = "out.zarr" simulate_adcp( fieldset=fieldset, From 7cc28fc7e1a678b35927124194bd28fdd0d6ffa1 Mon Sep 17 00:00:00 2001 From: Aart Stuurman Date: Mon, 19 Aug 2024 13:03:23 +0200 Subject: [PATCH 4/6] done --- tests/instruments/test_adcp.py | 10 ++++------ tests/make_realistic/test_adcp_make_realistic.py | 3 ++- virtual_ship/make_realistic/__init__.py | 4 ++-- virtual_ship/make_realistic/adcp_make_realistic.py | 14 -------------- 4 files changed, 8 insertions(+), 23 deletions(-) diff --git a/tests/instruments/test_adcp.py b/tests/instruments/test_adcp.py index 933cbbf0..d119f3e2 100644 --- a/tests/instruments/test_adcp.py +++ b/tests/instruments/test_adcp.py @@ -26,21 +26,20 @@ def test_simulate_adcp(tmpdir: py.path.LocalPath) -> None: sample_points = [ Spacetime(Location(1, 2), base_time + datetime.timedelta(seconds=0)), Spacetime(Location(3, 4), base_time + datetime.timedelta(seconds=1)), - Spacetime(Location(2, 3), base_time + datetime.timedelta(seconds=0.5)), ] # expected observations at sample points expected_obs = [ { "V": {"surface": 5, "max_depth": 6}, - "U": {"surface": 6, "max_depth": 8}, + "U": {"surface": 7, "max_depth": 8}, "lat": sample_points[0].location.lat, "lon": sample_points[0].location.lon, "time": base_time + datetime.timedelta(seconds=0), }, { - "V": {"surface": 6, "max_depth": 7}, - "U": {"surface": 7, "max_depth": 8}, + "V": {"surface": 9, "max_depth": 10}, + "U": {"surface": 11, "max_depth": 12}, "lat": sample_points[1].location.lat, "lon": sample_points[1].location.lon, "time": base_time + datetime.timedelta(seconds=1), @@ -80,8 +79,7 @@ def test_simulate_adcp(tmpdir: py.path.LocalPath) -> None: ) # perform simulation - # out_path = tmpdir.join("out.zarr") - out_path = "out.zarr" + out_path = tmpdir.join("out.zarr") simulate_adcp( fieldset=fieldset, diff --git a/tests/make_realistic/test_adcp_make_realistic.py b/tests/make_realistic/test_adcp_make_realistic.py index 56bbe3ee..4b23b660 100644 --- a/tests/make_realistic/test_adcp_make_realistic.py +++ b/tests/make_realistic/test_adcp_make_realistic.py @@ -1,7 +1,8 @@ +import csv + import py from virtual_ship.make_realistic import adcp_make_realistic -import csv def test_adcp_make_realistic(tmpdir: py.path.LocalPath) -> None: diff --git a/virtual_ship/make_realistic/__init__.py b/virtual_ship/make_realistic/__init__.py index 2e04d735..2c9a17df 100644 --- a/virtual_ship/make_realistic/__init__.py +++ b/virtual_ship/make_realistic/__init__.py @@ -1,6 +1,6 @@ """Conversion functions from zarr instrument results to realistic file formats with data adjusted to be more realistic.""" -from .ctd_make_realistic import ctd_make_realistic from .adcp_make_realistic import adcp_make_realistic +from .ctd_make_realistic import ctd_make_realistic -__all__ = ["ctd_make_realistic", "adcp_make_realistic"] +__all__ = ["adcp_make_realistic", "ctd_make_realistic"] diff --git a/virtual_ship/make_realistic/adcp_make_realistic.py b/virtual_ship/make_realistic/adcp_make_realistic.py index dc224985..69c24790 100644 --- a/virtual_ship/make_realistic/adcp_make_realistic.py +++ b/virtual_ship/make_realistic/adcp_make_realistic.py @@ -1,13 +1,8 @@ """adcp_make_realistic function.""" -import random - import numpy as np -import opensimplex import py import xarray as xr -import numpy as np -import matplotlib.pyplot as plt def adcp_make_realistic( @@ -34,15 +29,6 @@ def adcp_make_realistic( all_us, all_vs = _add_noise(times, depths, all_us, all_vs) - # Create the heatmap - plt.figure(figsize=(10, 6)) - plt.pcolormesh(times, depths, all_us, shading="auto", cmap="viridis") - plt.colorbar(label="Speed (m/s)") - plt.xlabel("Time") - plt.ylabel("Depth") - plt.title("Heatmap of Speed over Time and Depth") - plt.show() - csv = _to_csv(times, depths, lats, lons, all_us, all_vs) out_file = ( out_dir.join(f"{prefix}.csv") From 9c67b22386356910dd78a6f986b02e38d9795f8c Mon Sep 17 00:00:00 2001 From: Aart Stuurman Date: Mon, 19 Aug 2024 13:10:04 +0200 Subject: [PATCH 5/6] add adcp.zarr to git --- tests/make_realistic/.gitignore | 1 + tests/make_realistic/adcp.zarr/.zattrs | 8 + tests/make_realistic/adcp.zarr/.zgroup | 3 + tests/make_realistic/adcp.zarr/.zmetadata | 264 ++++++++++++++++++ tests/make_realistic/adcp.zarr/U/.zarray | 23 ++ tests/make_realistic/adcp.zarr/U/.zattrs | 9 + tests/make_realistic/adcp.zarr/U/0.0 | Bin 0 -> 161 bytes tests/make_realistic/adcp.zarr/U/0.1 | Bin 0 -> 160 bytes tests/make_realistic/adcp.zarr/V/.zarray | 23 ++ tests/make_realistic/adcp.zarr/V/.zattrs | 9 + tests/make_realistic/adcp.zarr/V/0.0 | Bin 0 -> 160 bytes tests/make_realistic/adcp.zarr/V/0.1 | Bin 0 -> 160 bytes tests/make_realistic/adcp.zarr/lat/.zarray | 23 ++ tests/make_realistic/adcp.zarr/lat/.zattrs | 10 + tests/make_realistic/adcp.zarr/lat/0.0 | Bin 0 -> 45 bytes tests/make_realistic/adcp.zarr/lat/0.1 | Bin 0 -> 40 bytes tests/make_realistic/adcp.zarr/lon/.zarray | 23 ++ tests/make_realistic/adcp.zarr/lon/.zattrs | 10 + tests/make_realistic/adcp.zarr/lon/0.0 | Bin 0 -> 40 bytes tests/make_realistic/adcp.zarr/lon/0.1 | Bin 0 -> 45 bytes tests/make_realistic/adcp.zarr/obs/.zarray | 21 ++ tests/make_realistic/adcp.zarr/obs/.zattrs | 5 + tests/make_realistic/adcp.zarr/obs/0 | Bin 0 -> 20 bytes tests/make_realistic/adcp.zarr/obs/1 | Bin 0 -> 20 bytes tests/make_realistic/adcp.zarr/time/.zarray | 23 ++ tests/make_realistic/adcp.zarr/time/.zattrs | 11 + tests/make_realistic/adcp.zarr/time/0.0 | Bin 0 -> 36 bytes tests/make_realistic/adcp.zarr/time/0.1 | Bin 0 -> 45 bytes .../adcp.zarr/trajectory/.zarray | 20 ++ .../adcp.zarr/trajectory/.zattrs | 5 + tests/make_realistic/adcp.zarr/trajectory/0 | Bin 0 -> 80 bytes tests/make_realistic/adcp.zarr/z/.zarray | 23 ++ tests/make_realistic/adcp.zarr/z/.zattrs | 10 + tests/make_realistic/adcp.zarr/z/0.0 | Bin 0 -> 163 bytes tests/make_realistic/adcp.zarr/z/0.1 | Bin 0 -> 163 bytes 35 files changed, 524 insertions(+) create mode 100644 tests/make_realistic/adcp.zarr/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/.zgroup create mode 100644 tests/make_realistic/adcp.zarr/.zmetadata create mode 100644 tests/make_realistic/adcp.zarr/U/.zarray create mode 100644 tests/make_realistic/adcp.zarr/U/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/U/0.0 create mode 100644 tests/make_realistic/adcp.zarr/U/0.1 create mode 100644 tests/make_realistic/adcp.zarr/V/.zarray create mode 100644 tests/make_realistic/adcp.zarr/V/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/V/0.0 create mode 100644 tests/make_realistic/adcp.zarr/V/0.1 create mode 100644 tests/make_realistic/adcp.zarr/lat/.zarray create mode 100644 tests/make_realistic/adcp.zarr/lat/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/lat/0.0 create mode 100644 tests/make_realistic/adcp.zarr/lat/0.1 create mode 100644 tests/make_realistic/adcp.zarr/lon/.zarray create mode 100644 tests/make_realistic/adcp.zarr/lon/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/lon/0.0 create mode 100644 tests/make_realistic/adcp.zarr/lon/0.1 create mode 100644 tests/make_realistic/adcp.zarr/obs/.zarray create mode 100644 tests/make_realistic/adcp.zarr/obs/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/obs/0 create mode 100644 tests/make_realistic/adcp.zarr/obs/1 create mode 100644 tests/make_realistic/adcp.zarr/time/.zarray create mode 100644 tests/make_realistic/adcp.zarr/time/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/time/0.0 create mode 100644 tests/make_realistic/adcp.zarr/time/0.1 create mode 100644 tests/make_realistic/adcp.zarr/trajectory/.zarray create mode 100644 tests/make_realistic/adcp.zarr/trajectory/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/trajectory/0 create mode 100644 tests/make_realistic/adcp.zarr/z/.zarray create mode 100644 tests/make_realistic/adcp.zarr/z/.zattrs create mode 100644 tests/make_realistic/adcp.zarr/z/0.0 create mode 100644 tests/make_realistic/adcp.zarr/z/0.1 diff --git a/tests/make_realistic/.gitignore b/tests/make_realistic/.gitignore index 30abd87d..e6d70287 100644 --- a/tests/make_realistic/.gitignore +++ b/tests/make_realistic/.gitignore @@ -1 +1,2 @@ !/ctd.zarr +!/adcp.zarr \ No newline at end of file diff --git a/tests/make_realistic/adcp.zarr/.zattrs b/tests/make_realistic/adcp.zarr/.zattrs new file mode 100644 index 00000000..90d4d0b4 --- /dev/null +++ b/tests/make_realistic/adcp.zarr/.zattrs @@ -0,0 +1,8 @@ +{ + "Conventions": "CF-1.6/CF-1.7", + "feature_type": "trajectory", + "ncei_template_version": "NCEI_NetCDF_Trajectory_Template_v2.0", + "parcels_kernels": "NewParticle_sample_velocity", + "parcels_mesh": "spherical", + "parcels_version": "0.0.1-16-g947e7d0" +} \ No newline at end of file diff --git a/tests/make_realistic/adcp.zarr/.zgroup b/tests/make_realistic/adcp.zarr/.zgroup new file mode 100644 index 00000000..3b7daf22 --- /dev/null +++ b/tests/make_realistic/adcp.zarr/.zgroup @@ -0,0 +1,3 @@ +{ + "zarr_format": 2 +} \ No newline at end of file diff --git a/tests/make_realistic/adcp.zarr/.zmetadata b/tests/make_realistic/adcp.zarr/.zmetadata new file mode 100644 index 00000000..d1bf51f5 --- /dev/null +++ b/tests/make_realistic/adcp.zarr/.zmetadata @@ -0,0 +1,264 @@ +{ + "metadata": { + ".zattrs": { + "Conventions": "CF-1.6/CF-1.7", + "feature_type": "trajectory", + "ncei_template_version": "NCEI_NetCDF_Trajectory_Template_v2.0", + "parcels_kernels": "NewParticle_sample_velocity", + "parcels_mesh": "spherical", + "parcels_version": "0.0.1-16-g947e7d0" + }, + ".zgroup": { + "zarr_format": 2 + }, + "U/.zarray": { + "chunks": [ + 40, + 1 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dimension_separator": ".", + "dtype": "i^pFVzg|L*PEH?Lp4eEH(}v!_p!2?GJ5MX8C H3IHwMojJO1$Hvu5=1rf_)m&RvkeL({>hIxX zZK9{HC?&$n&cHBD_ek`oPKE7$Piur%Io`-;n`?49>E{IXeW7ofr8aupFXLTeeJPW{ z!QS4^&eqn}#>U#(+RDn(($d1h+}zB}%+%Dx#KhRx$jHdh(7?dJ5d>HnxC6ip02=W% ArT_o{ literal 0 HcmV?d00001 diff --git a/tests/make_realistic/adcp.zarr/V/.zarray b/tests/make_realistic/adcp.zarr/V/.zarray new file mode 100644 index 00000000..54146227 --- /dev/null +++ b/tests/make_realistic/adcp.zarr/V/.zarray @@ -0,0 +1,23 @@ +{ + "chunks": [ + 40, + 1 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dimension_separator": ".", + "dtype": "9N=|MlknrK3Am&zsO( zmKo#kWTGy`%fO%;-MRg#uw(w*(?8Win>XI)wa%P&QyUOu2{Zo>5?Uj7cE?{zySnU8Mp($ F3;<$SNL>H` literal 0 HcmV?d00001 diff --git a/tests/make_realistic/adcp.zarr/V/0.1 b/tests/make_realistic/adcp.zarr/V/0.1 new file mode 100644 index 0000000000000000000000000000000000000000..35217ac1c0d232d243d832d927d63560244a9646 GIT binary patch literal 160 zcmZQ#G-O%8z`y{*B0zQr5dY6(`1$$Gv->wMojJO1$Hvu5=1rf_)m&RvkeL({>hIxX zZK9{HC?&$n&cHBD_ek`oPKE7$Piur%Io`-;n`?49>E{IXeW7ofr8aupFXLTeeJPVc zL0(=?PF7Y{Mn+m%T1rY%Qc^-fTwF{{OjJ}vL_}CvNJvOfP(VPy5d>HnxC6ip0B&M1 ArT_o{ literal 0 HcmV?d00001 diff --git a/tests/make_realistic/adcp.zarr/lat/.zarray b/tests/make_realistic/adcp.zarr/lat/.zarray new file mode 100644 index 00000000..54146227 --- /dev/null +++ b/tests/make_realistic/adcp.zarr/lat/.zarray @@ -0,0 +1,23 @@ +{ + "chunks": [ + 40, + 1 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dimension_separator": ".", + "dtype": "@KA0su-z1V{h? literal 0 HcmV?d00001 diff --git a/tests/make_realistic/adcp.zarr/lon/.zarray b/tests/make_realistic/adcp.zarr/lon/.zarray new file mode 100644 index 00000000..54146227 --- /dev/null +++ b/tests/make_realistic/adcp.zarr/lon/.zarray @@ -0,0 +1,23 @@ +{ + "chunks": [ + 40, + 1 + ], + "compressor": { + "blocksize": 0, + "clevel": 5, + "cname": "lz4", + "id": "blosc", + "shuffle": 1 + }, + "dimension_separator": ".", + "dtype": "zUKMpP?Ih zGrOFAZp?Jr=;Xw}FyHQOjr8uQpEJy_m5FW%{xr$(!hPB3SvSN&CtnhnD>Y4cf|Rh7 z6hl>UZdyWAu&zUKMpP?Ih zGrOFAZp?Jr=;Xw}FyHQOjr8uQpEJy_m5FW%{xr$(!hPB3SvSN&CtnhnD>Y4cf|Rh7 z6hl>UZdyWAu& Date: Mon, 19 Aug 2024 15:30:55 +0200 Subject: [PATCH 6/6] missing newline --- tests/make_realistic/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/make_realistic/.gitignore b/tests/make_realistic/.gitignore index e6d70287..bb473645 100644 --- a/tests/make_realistic/.gitignore +++ b/tests/make_realistic/.gitignore @@ -1,2 +1,2 @@ !/ctd.zarr -!/adcp.zarr \ No newline at end of file +!/adcp.zarr