From aa2cf0b0b79703249f09960341ecd75fb5237350 Mon Sep 17 00:00:00 2001 From: jmcvey3 <53623232+jmcvey3@users.noreply.github.com> Date: Thu, 7 Mar 2024 11:51:31 -0800 Subject: [PATCH] Add test data --- dolfyn/example_data/dual_profile.ad2cp | 3 +++ dolfyn/io/base.py | 14 +++++--------- dolfyn/io/nortek2.py | 4 ++-- dolfyn/io/nortek2_lib.py | 5 +++-- dolfyn/tests/data/dual_profile.nc | 3 +++ dolfyn/tests/test_read_adp.py | 6 ++++++ 6 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 dolfyn/example_data/dual_profile.ad2cp create mode 100644 dolfyn/tests/data/dual_profile.nc diff --git a/dolfyn/example_data/dual_profile.ad2cp b/dolfyn/example_data/dual_profile.ad2cp new file mode 100644 index 00000000..35567ab4 --- /dev/null +++ b/dolfyn/example_data/dual_profile.ad2cp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:931634019cc31aea0716dd4ef6b157618611569c4ac8fb6de4b136e2cf1f9005 +size 306869 diff --git a/dolfyn/io/base.py b/dolfyn/io/base.py index 169f9436..3616f789 100644 --- a/dolfyn/io/base.py +++ b/dolfyn/io/base.py @@ -131,8 +131,7 @@ def _create_dataset(data): ds_dict['beam'] = {"dims": ('beam'), "data": beams} ds_dict['dir'] = {"dims": ('dir'), "data": beams} - data['units'].update({'beam': '1', - 'dir': '1'}) + data['units'].update({'beam': '1', 'dir': '1'}) data['long_name'].update({'beam': 'Beam Reference Frame', 'dir': 'Reference Frame'}) @@ -156,14 +155,11 @@ def _create_dataset(data): tg = '' ds_dict['earth'] = {"dims": ('earth'), "data": ['E', 'N', 'U']} ds_dict['inst'] = {"dims": ('inst'), "data": ['X', 'Y', 'Z']} - data['units'].update({'earth': '1', - 'inst': '1'}) - data['long_name'].update({'earth': 'Earth Reference Frame', - 'inst': 'Instrument Reference Frame'}) - ds_dict[key] = {"dims": ('earth', 'inst', 'time' + tg), "data": data['data_vars'][key]} - data['units'].update({key: data['units']['orientmat']}) - data['long_name'].update({key: data['long_name']['orientmat']}) + data["units"].update({"earth": "1", "inst": "1", key: data["units"]["orientmat"]}) + data["long_name"].update({"earth": "Earth Reference Frame", + "inst": "Instrument Reference Frame", + key: data["long_name"]["orientmat"]}) # quaternion units never change elif 'quaternions' in key: diff --git a/dolfyn/io/nortek2.py b/dolfyn/io/nortek2.py index 492602a6..574643ae 100644 --- a/dolfyn/io/nortek2.py +++ b/dolfyn/io/nortek2.py @@ -472,7 +472,7 @@ def _reorg(dat): dnow['usec100'].astype('uint32') * 100) tmp = lib._beams_cy_int2dict( lib._collapse(dnow['beam_config'], exclude=collapse_exclude, - name='beam_config'), 21) + name='beam_config'), 21) # always 21 here cfg['n_cells' + tag] = tmp['n_cells'] cfg['coord_sys_axes' + tag] = tmp['cy'] cfg['n_beams' + tag] = tmp['n_beams'] @@ -587,7 +587,7 @@ def _clean_dp_skips(data): skips = np.where(data[id]['ver'] != 0) for var in data[id]: if var not in ['units', 'long_name', 'standard_name']: - data[id][var] = np.squeeze(data[id][var][..., skips]) + data[id][var] = np.squeeze(data[id][var][..., skips], axis=-2) def _reduce(data): diff --git a/dolfyn/io/nortek2_lib.py b/dolfyn/io/nortek2_lib.py index 5d9acf64..e3b01e7c 100644 --- a/dolfyn/io/nortek2_lib.py +++ b/dolfyn/io/nortek2_lib.py @@ -186,7 +186,7 @@ def _check_index(idx, infile, fix_hw_ens=False, dp=False): if c > 1: skip_size[skip_size == n] = 0 # assume last "ibad" element is always good for dp's - mask = np.append(skip_size, 0).astype(bool) + mask = np.append(skip_size, 0).astype(bool) if any(skip_size) else [] ibad = ibad[mask] for ib in ibad: FLAG = True @@ -437,7 +437,8 @@ def _beams_cy_int2dict(val, id): """ if id == 28: # 0x1C (echosounder) return dict(n_cells=val) - + elif id in [26, 31]: + return dict(n_cells=val & (2**10 - 1), cy="beam", n_beams=1) return dict( n_cells=val & (2 ** 10 - 1), cy=['ENU', 'XYZ', 'beam', None][val >> 10 & 3], diff --git a/dolfyn/tests/data/dual_profile.nc b/dolfyn/tests/data/dual_profile.nc new file mode 100644 index 00000000..2443d898 --- /dev/null +++ b/dolfyn/tests/data/dual_profile.nc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1059e8a7b66fe6e0aeb3b7eb700801e3ed76ecb111cb02700479841e3b48e4c +size 148510 diff --git a/dolfyn/tests/test_read_adp.py b/dolfyn/tests/test_read_adp.py index 282001af..fb162729 100644 --- a/dolfyn/tests/test_read_adp.py +++ b/dolfyn/tests/test_read_adp.py @@ -33,6 +33,7 @@ dat_sig_skip = load('Sig_SkippedPings01.nc') dat_sig_badt = load('Sig1000_BadTime01.nc') dat_sig5_leiw = load('Sig500_last_ensemble_is_whole.nc') +dat_sig_dp2 = load("dual_profile.nc") def test_io_rdi(make_data=False): @@ -97,6 +98,8 @@ def test_io_nortek2(make_data=False): td_sig_ieb = read('VelEchoBT01.ad2cp', nens=nens) td_sig_ie = read('Sig500_Echo.ad2cp', nens=nens) td_sig_tide = read('Sig1000_tidal.ad2cp', nens=nens) + # Only need to test 2nd dataset + td_sig_dp1, td_sig_dp2 = read("dual_profile.ad2cp") with pytest.warns(UserWarning): # This issues a warning... @@ -119,6 +122,7 @@ def test_io_nortek2(make_data=False): os.remove(tb.exdt('Sig_SkippedPings01.ad2cp.index')) os.remove(tb.exdt('Sig500_last_ensemble_is_whole.ad2cp.index')) os.remove(tb.rfnm('Sig1000_BadTime01.ad2cp.index')) + os.remove(tb.exdt("dual_profile.ad2cp.index")) if make_data: save(td_sig, 'BenchFile01.nc') @@ -130,6 +134,7 @@ def test_io_nortek2(make_data=False): save(td_sig_skip, 'Sig_SkippedPings01.nc') save(td_sig_badt, 'Sig1000_BadTime01.nc') save(td_sig5_leiw, 'Sig500_last_ensemble_is_whole.nc') + save(td_sig_dp2, "dual_profile.nc") return assert_allclose(td_sig, dat_sig, atol=1e-6) @@ -141,6 +146,7 @@ def test_io_nortek2(make_data=False): assert_allclose(td_sig5_leiw, dat_sig5_leiw, atol=1e-6) assert_allclose(td_sig_skip, dat_sig_skip, atol=1e-6) assert_allclose(td_sig_badt, dat_sig_badt, atol=1e-6) + assert_allclose(td_sig_dp2, dat_sig_dp2, atol=1e-6) def test_nortek2_crop(make_data=False):