Skip to content

Commit

Permalink
Black formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
jmcvey3 committed Feb 14, 2024
1 parent f1fa3a3 commit 7fa66b0
Show file tree
Hide file tree
Showing 5 changed files with 173 additions and 131 deletions.
3 changes: 2 additions & 1 deletion mhkit/dolfyn/adv/turbulence.py
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,8 @@ def _integral_TE01(self, I_tke, theta):
out = np.empty_like(I_tke.flatten())
for i, (b, t) in enumerate(zip(I_tke.flatten(), theta.flatten())):
out[i] = np.trapz(
cbrt(x**2 - 2 / b * np.cos(t) * x + b ** (-2)) * np.exp(-0.5 * x**2),
cbrt(x**2 - 2 / b * np.cos(t) * x + b ** (-2))
* np.exp(-0.5 * x**2),
x,
)

Expand Down
230 changes: 132 additions & 98 deletions mhkit/dolfyn/io/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,175 +119,209 @@ def _create_dataset(data):
Direction 'dir' coordinates are set in `set_coords`
"""

tag = ['_avg', '_b5', '_echo', '_bt', '_gps', '_altraw', '_altraw_avg', '_sl']
tag = ["_avg", "_b5", "_echo", "_bt", "_gps", "_altraw", "_altraw_avg", "_sl"]

ds_dict = {}
for key in data['coords']:
ds_dict[key] = {"dims": (key), "data": data['coords'][key]}
for key in data["coords"]:
ds_dict[key] = {"dims": (key), "data": data["coords"][key]}

# Set various coordinate frames
if 'n_beams_avg' in data['attrs']:
beams = data['attrs']['n_beams_avg']
if "n_beams_avg" in data["attrs"]:
beams = data["attrs"]["n_beams_avg"]
else:
beams = data['attrs']['n_beams']
beams = data["attrs"]["n_beams"]
n_beams = max(min(beams, 4), 3)
beams = np.arange(1, n_beams + 1, dtype=np.int32)

ds_dict['beam'] = {"dims": ('beam'), "data": beams}
ds_dict['dir'] = {"dims": ('dir'), "data": beams}
ds_dict['earth'] = {"dims": ('earth'), "data": ['E', 'N', 'U']}
ds_dict['inst'] = {"dims": ('inst'), "data": ['X', 'Y', 'Z']}

data['units'].update({'beam': '1',
'dir': '1',
'earth': '1',
'inst': '1'})
data['long_name'].update({'beam': 'Beam Reference Frame',
'dir': 'Reference Frame',
'earth': 'Earth Reference Frame',
'inst': 'Instrument Reference Frame'})
ds_dict["beam"] = {"dims": ("beam"), "data": beams}
ds_dict["dir"] = {"dims": ("dir"), "data": beams}
ds_dict["earth"] = {"dims": ("earth"), "data": ["E", "N", "U"]}
ds_dict["inst"] = {"dims": ("inst"), "data": ["X", "Y", "Z"]}

data["units"].update({"beam": "1", "dir": "1", "earth": "1", "inst": "1"})
data["long_name"].update(
{
"beam": "Beam Reference Frame",
"dir": "Reference Frame",
"earth": "Earth Reference Frame",
"inst": "Instrument Reference Frame",
}
)

# Iterate through data variables and add them to new dictionary
for key in data['data_vars']:
for key in data["data_vars"]:
# orientation matrices
if 'mat' in key:
if 'inst' in key: # beam2inst & inst2head orientation matrices
if 'x1' not in ds_dict:
ds_dict['x1'] = {"dims": ('x1'), "data": beams}
ds_dict['x2'] = {"dims": ('x2'), "data": beams}
if "mat" in key:
if "inst" in key: # beam2inst & inst2head orientation matrices
if "x1" not in ds_dict:
ds_dict["x1"] = {"dims": ("x1"), "data": beams}
ds_dict["x2"] = {"dims": ("x2"), "data": beams}

ds_dict[key] = {"dims": ('x1', 'x2'), "data": data['data_vars'][key]}
data['units'].update({key: '1'})
data['long_name'].update({key: 'Rotation Matrix'})
ds_dict[key] = {"dims": ("x1", "x2"), "data": data["data_vars"][key]}
data["units"].update({key: "1"})
data["long_name"].update({key: "Rotation Matrix"})

elif 'orientmat' in key: # earth2inst orientation matrix
elif "orientmat" in key: # earth2inst orientation matrix
if any(val in key for val in tag):
tg = '_' + key.rsplit('_')[-1]
tg = "_" + key.rsplit("_")[-1]
else:
tg = ''
tg = ""

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']})
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"]})

# quaternion units never change
elif 'quaternions' in key:
elif "quaternions" in key:
if any(val in key for val in tag):
tg = '_' + key.rsplit('_')[-1]
tg = "_" + key.rsplit("_")[-1]
else:
tg = ''
tg = ""

if 'q' not in ds_dict:
ds_dict['q'] = {"dims": ("q"), "data": ['w', 'x', 'y', 'z']}
data['units'].update({'q': '1'})
data['long_name'].update({'q': 'Quaternion Vector Components'})
if "q" not in ds_dict:
ds_dict["q"] = {"dims": ("q"), "data": ["w", "x", "y", "z"]}
data["units"].update({"q": "1"})
data["long_name"].update({"q": "Quaternion Vector Components"})

ds_dict[key] = {"dims": ("q", "time" + tg), "data": data['data_vars'][key]}
data['units'].update({key: data['units']['quaternions']})
data['long_name'].update({key: data['long_name']['quaternions']})
ds_dict[key] = {"dims": ("q", "time" + tg), "data": data["data_vars"][key]}
data["units"].update({key: data["units"]["quaternions"]})
data["long_name"].update({key: data["long_name"]["quaternions"]})

else:
shp = data['data_vars'][key].shape
shp = data["data_vars"][key].shape
if len(shp) == 1: # 1D variables
if '_altraw_avg' in key:
tg = '_altraw_avg'
if "_altraw_avg" in key:
tg = "_altraw_avg"
elif any(val in key for val in tag):
tg = '_' + key.rsplit('_')[-1]
tg = "_" + key.rsplit("_")[-1]
else:
tg = ''
ds_dict[key] = {"dims": ("time" + tg), "data": data['data_vars'][key]}
tg = ""
ds_dict[key] = {"dims": ("time" + tg), "data": data["data_vars"][key]}

elif len(shp) == 2: # 2D variables
if key == 'echo':
ds_dict[key] = {"dims": ("range_echo", "time_echo"), "data": data['data_vars'][key]}
elif key == 'samp_altraw':
ds_dict[key] = {"dims": ("n_altraw", "time_altraw"), "data": data['data_vars'][key]}
elif key == 'samp_altraw_avg':
ds_dict[key] = {"dims": ("n_altraw_avg", "time_altraw_avg"), "data": data['data_vars'][key]}
if key == "echo":
ds_dict[key] = {
"dims": ("range_echo", "time_echo"),
"data": data["data_vars"][key],
}
elif key == "samp_altraw":
ds_dict[key] = {
"dims": ("n_altraw", "time_altraw"),
"data": data["data_vars"][key],
}
elif key == "samp_altraw_avg":
ds_dict[key] = {
"dims": ("n_altraw_avg", "time_altraw_avg"),
"data": data["data_vars"][key],
}

# ADV/ADCP instrument vector data, bottom tracking
elif shp[0] == n_beams and not any(val in key for val in tag[:3]):
if 'bt' in key and 'time_bt' in data['coords']:
tg = '_bt'
if "bt" in key and "time_bt" in data["coords"]:
tg = "_bt"
else:
tg = ''
if any(key.rsplit('_')[0] in s for s in ['amp', 'corr', 'dist', 'prcnt_gd']):
dim0 = 'beam'
tg = ""
if any(
key.rsplit("_")[0] in s
for s in ["amp", "corr", "dist", "prcnt_gd"]
):
dim0 = "beam"
else:
dim0 = 'dir'
ds_dict[key] = {"dims": (dim0, "time" + tg), "data": data['data_vars'][key]}
dim0 = "dir"
ds_dict[key] = {
"dims": (dim0, "time" + tg),
"data": data["data_vars"][key],
}

# ADCP IMU data
elif shp[0] == 3:
if not any(val in key for val in tag):
tg = ''
tg = ""
else:
tg = [val for val in tag if val in key]
tg = tg[0]

if 'dirIMU' not in ds_dict:
ds_dict['dirIMU'] = {"dims": ("dirIMU"), "data": [1, 2, 3]}
data['units'].update({'dirIMU': '1'})
data['long_name'].update({'dirIMU': 'Reference Frame'})
if "dirIMU" not in ds_dict:
ds_dict["dirIMU"] = {"dims": ("dirIMU"), "data": [1, 2, 3]}
data["units"].update({"dirIMU": "1"})
data["long_name"].update({"dirIMU": "Reference Frame"})

ds_dict[key] = {"dims": ("dirIMU", "time" + tg), "data": data['data_vars'][key]}
ds_dict[key] = {
"dims": ("dirIMU", "time" + tg),
"data": data["data_vars"][key],
}

elif 'b5' in tg:
ds_dict[key] = {"dims": ("range_b5", "time_b5"), "data": data['data_vars'][key]}
elif "b5" in tg:
ds_dict[key] = {
"dims": ("range_b5", "time_b5"),
"data": data["data_vars"][key],
}

elif len(shp) == 3: # 3D variables
if 'vel' in key:
dim0 = 'dir'
if "vel" in key:
dim0 = "dir"
else: # amp, corr, prcnt_gd, status
dim0 = 'beam'
dim0 = "beam"

if not any(val in key for val in tag) or ('_avg' in key):
if '_avg' in key:
tg = '_avg'
if not any(val in key for val in tag) or ("_avg" in key):
if "_avg" in key:
tg = "_avg"
else:
tg = ''
ds_dict[key] = {"dims": (dim0, "range" + tg, "time" + tg), "data": data['data_vars'][key]}
tg = ""
ds_dict[key] = {
"dims": (dim0, "range" + tg, "time" + tg),
"data": data["data_vars"][key],
}

elif 'b5' in key:
elif "b5" in key:
# "vel_b5" sometimes stored as (1, range_b5, time_b5)
ds_dict[key] = {"dims": ("range_b5", "time_b5"), "data": data['data_vars'][key][0]}
elif 'sl' in key:
ds_dict[key] = {"dims": (dim0, "range_sl", "time"), "data": data['data_vars'][key]}
ds_dict[key] = {
"dims": ("range_b5", "time_b5"),
"data": data["data_vars"][key][0],
}
elif "sl" in key:
ds_dict[key] = {
"dims": (dim0, "range_sl", "time"),
"data": data["data_vars"][key],
}
else:
warnings.warn(f'Variable not included in dataset: {key}')
warnings.warn(f"Variable not included in dataset: {key}")

# Create dataset
ds = xr.Dataset.from_dict(ds_dict)

# Assign data array attributes
for key in ds.variables:
for md in ['units', 'long_name', 'standard_name']:
for md in ["units", "long_name", "standard_name"]:
if key in data[md]:
ds[key].attrs[md] = data[md][key]
if len(ds[key].shape) > 1:
ds[key].attrs['coverage_content_type'] = 'physicalMeasurement'
ds[key].attrs["coverage_content_type"] = "physicalMeasurement"
try: # make sure ones with tags get units
tg = '_' + key.rsplit('_')[-1]
tg = "_" + key.rsplit("_")[-1]
if any(val in key for val in tag):
ds[key].attrs[md] = data[md][key[:-len(tg)]]
ds[key].attrs[md] = data[md][key[: -len(tg)]]
except:
pass

# Assign coordinate attributes
for ky in ds.dims:
ds[ky].attrs['coverage_content_type'] = 'coordinate'
r_list = [r for r in ds.coords if 'range' in r]
ds[ky].attrs["coverage_content_type"] = "coordinate"
r_list = [r for r in ds.coords if "range" in r]
for ky in r_list:
ds[ky].attrs['units'] = 'm'
ds[ky].attrs['long_name'] = 'Profile Range'
ds[ky].attrs['description'] = 'Distance to the center of each depth bin'
time_list = [t for t in ds.coords if 'time' in t]
ds[ky].attrs["units"] = "m"
ds[ky].attrs["long_name"] = "Profile Range"
ds[ky].attrs["description"] = "Distance to the center of each depth bin"
time_list = [t for t in ds.coords if "time" in t]
for ky in time_list:
ds[ky].attrs['units'] = 'seconds since 1970-01-01 00:00:00'
ds[ky].attrs['long_name'] = 'Time'
ds[ky].attrs['standard_name'] = 'time'
ds[ky].attrs["units"] = "seconds since 1970-01-01 00:00:00"
ds[ky].attrs["long_name"] = "Time"
ds[ky].attrs["standard_name"] = "time"

# Set dataset metadata
ds.attrs = data['attrs']
ds.attrs = data["attrs"]

return ds
8 changes: 4 additions & 4 deletions mhkit/dolfyn/io/nortek.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,10 +273,10 @@ def __init__(
burst_seconds = self.config["n_burst"] / fs
else:
burst_seconds = round(1 / fs, 3)
da["duty_cycle_description"] = (
"{} second bursts collected at {} Hz, with bursts taken every {} minutes".format(
burst_seconds, fs, self.config["burst_interval"] / 60
)
da[
"duty_cycle_description"
] = "{} second bursts collected at {} Hz, with bursts taken every {} minutes".format(
burst_seconds, fs, self.config["burst_interval"] / 60
)
self.burst_start = np.zeros(self.n_samp_guess, dtype="bool")
da["fs"] = self.config["fs"]
Expand Down
Loading

0 comments on commit 7fa66b0

Please sign in to comment.