From ae6b715313b8f1b89db56f4eb12d90ddae7015e0 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 21 Nov 2023 07:48:06 -0700 Subject: [PATCH 01/87] assert to exception --- mhkit/river/io/d3d.py | 645 ++++++++++++++++++++++-------------------- 1 file changed, 344 insertions(+), 301 deletions(-) diff --git a/mhkit/river/io/d3d.py b/mhkit/river/io/d3d.py index d4db2e266..3354aef01 100644 --- a/mhkit/river/io/d3d.py +++ b/mhkit/river/io/d3d.py @@ -10,7 +10,7 @@ def get_all_time(data): ''' Returns all of the time stamps from a D3D simulation passed to the function as a NetCDF object (data) - + Parameters ---------- data: NetCDF4 object @@ -24,8 +24,9 @@ def get_all_time(data): the simulation started and that the data object contains a snapshot of simulation conditions at that time. ''' - - assert type(data)== netCDF4._netCDF4.Dataset, 'data must be NetCDF4 object' + + if not isinstance(data, netCDF4._netCDF4.Dataset): + raise TypeError('data must be a NetCDF4 object') seconds_run = np.ma.getdata(data.variables['time'][:], False) @@ -57,7 +58,7 @@ def seconds_to_index(data, seconds_run): ''' The function will return the nearest 'time_index' in the data if passed an integer number of 'seconds_run' - + Parameters ---------- data: NetCDF4 object @@ -103,26 +104,34 @@ def _convert_time(data, time_index=None, seconds_run=None): and incrementing until in simulation is complete. The 'seconds_run' is the seconds corresponding to the 'time_index' increments. ''' - - assert type(data)== netCDF4._netCDF4.Dataset, 'data must be NetCDF4 object' - assert time_index or seconds_run, 'input of time_index or seconds_run needed' - assert not(time_index and seconds_run), f'only one time_index or seconds_run' - assert isinstance(time_index, (int, float)) or isinstance(seconds_run, (int, - float)),'time_index or seconds_run input must be a int or float' - + + if not isinstance(data, netCDF4._netCDF4.Dataset): + raise TypeError('data must be NetCDF4 object') + + if not (time_index or seconds_run): + raise ValueError('Input of time_index or seconds_run needed') + + if time_index and seconds_run: + raise ValueError( + 'Only one of time_index or seconds_run should be provided') + + if not (isinstance(time_index, (int, float)) or isinstance(seconds_run, (int, float))): + raise TypeError( + 'time_index or seconds_run input must be an int or float') + times = get_all_time(data) - + if time_index: - QoI= times[time_index] + QoI = times[time_index] if seconds_run: - try: - idx=np.where(times == seconds_run) - QoI=idx[0][0] - except: + try: + idx = np.where(times == seconds_run) + QoI = idx[0][0] + except: idx = (np.abs(times - seconds_run)).argmin() - QoI= idx - warnings.warn( f'Warning: seconds_run not found. Closest time stamp' - +'found {times[idx]}', stacklevel= 2) + QoI = idx + warnings.warn(f'Warning: seconds_run not found. Closest time stamp' + + 'found {times[idx]}', stacklevel=2) return QoI @@ -154,104 +163,118 @@ def get_layer_data(data, variable, layer_index=-1, time_index=-1): simulation has run. The waterdepth is measured from the water surface and the "waterlevel" is the water level diffrencein meters from the zero water level. ''' - - assert isinstance(time_index, int), 'time_index must be an int' - assert isinstance(layer_index, int), 'layer_index must be an int' - assert type(data)== netCDF4._netCDF4.Dataset, 'data must be NetCDF4 object' - assert variable in data.variables.keys(), 'variable not recognized' + + if not isinstance(time_index, int): + raise TypeError('time_index must be an int') + + if not isinstance(layer_index, int): + raise TypeError('layer_index must be an int') + + if not isinstance(data, netCDF4._netCDF4.Dataset): + raise TypeError('data must be NetCDF4 object') + + if variable not in data.variables.keys(): + raise ValueError('variable not recognized') coords = str(data.variables[variable].coordinates).split() - var=data.variables[variable][:] - max_time_index= data['time'].shape[0]-1 # to account for zero index - assert abs(time_index) <= max_time_index, (f'time_index must be less than' - +'the absolute value of the max time index {max_time_index}') - - x=np.ma.getdata(data.variables[coords[0]][:], False) - y=np.ma.getdata(data.variables[coords[1]][:], False) - - - if type(var[0][0]) == np.ma.core.MaskedArray: - max_layer= len(var[0][0]) - - assert abs(layer_index) <= max_layer,( f'layer_index must be less than' - +'the max layer {max_layer}') - v= np.ma.getdata(var[time_index,:,layer_index], False) - dimensions= 3 - - else: - assert type(var[0][0])== np.float64, 'data not recognized' - dimensions= 2 - v= np.ma.getdata(var[time_index,:], False) - - #waterdepth + var = data.variables[variable][:] + max_time_index = data['time'].shape[0]-1 # to account for zero index + if abs(time_index) > max_time_index: + raise ValueError( + f'time_index must be less than the absolute value of the max time index {max_time_index}') + + x = np.ma.getdata(data.variables[coords[0]][:], False) + y = np.ma.getdata(data.variables[coords[1]][:], False) + + if type(var[0][0]) == np.ma.core.MaskedArray: + max_layer = len(var[0][0]) + + if abs(layer_index) > max_layer: + raise ValueError( + f'layer_index must be less than the max layer {max_layer}') + + v = np.ma.getdata(var[time_index, :, layer_index], False) + dimensions = 3 + + else: + if type(var[0][0]) != np.float64: + raise TypeError('data not recognized') + dimensions = 2 + v = np.ma.getdata(var[time_index, :], False) + + # waterdepth if "mesh2d" in variable: - cords_to_layers= {'mesh2d_face_x mesh2d_face_y': {'name':'mesh2d_nLayers', - 'coords':data.variables['mesh2d_layer_sigma'][:]}, - 'mesh2d_edge_x mesh2d_edge_y': {'name':'mesh2d_nInterfaces', - 'coords':data.variables['mesh2d_interface_sigma'][:]}} - bottom_depth=np.ma.getdata(data.variables['mesh2d_waterdepth'][time_index, :], False) - waterlevel= np.ma.getdata(data.variables['mesh2d_s1'][time_index, :], False) + cords_to_layers = {'mesh2d_face_x mesh2d_face_y': {'name': 'mesh2d_nLayers', + 'coords': data.variables['mesh2d_layer_sigma'][:]}, + 'mesh2d_edge_x mesh2d_edge_y': {'name': 'mesh2d_nInterfaces', + 'coords': data.variables['mesh2d_interface_sigma'][:]}} + bottom_depth = np.ma.getdata( + data.variables['mesh2d_waterdepth'][time_index, :], False) + waterlevel = np.ma.getdata( + data.variables['mesh2d_s1'][time_index, :], False) coords = str(data.variables['waterdepth'].coordinates).split() - + else: - cords_to_layers= {'FlowElem_xcc FlowElem_ycc':{'name':'laydim', - 'coords':data.variables['LayCoord_cc'][:]}, - 'FlowLink_xu FlowLink_yu': {'name':'wdim', - 'coords':data.variables['LayCoord_w'][:]}} - bottom_depth=np.ma.getdata(data.variables['waterdepth'][time_index, :], False) - waterlevel= np.ma.getdata(data.variables['s1'][time_index, :], False) + cords_to_layers = {'FlowElem_xcc FlowElem_ycc': {'name': 'laydim', + 'coords': data.variables['LayCoord_cc'][:]}, + 'FlowLink_xu FlowLink_yu': {'name': 'wdim', + 'coords': data.variables['LayCoord_w'][:]}} + bottom_depth = np.ma.getdata( + data.variables['waterdepth'][time_index, :], False) + waterlevel = np.ma.getdata(data.variables['s1'][time_index, :], False) coords = str(data.variables['waterdepth'].coordinates).split() - - layer_dim = str(data.variables[variable].coordinates) - - cord_sys= cords_to_layers[layer_dim]['coords'] - layer_percentages= np.ma.getdata(cord_sys, False) #accumulative + + layer_dim = str(data.variables[variable].coordinates) + + cord_sys = cords_to_layers[layer_dim]['coords'] + layer_percentages = np.ma.getdata(cord_sys, False) # accumulative if layer_dim == 'FlowLink_xu FlowLink_yu': - #interpolate - x_laydim=np.ma.getdata(data.variables[coords[0]][:], False) - y_laydim=np.ma.getdata(data.variables[coords[1]][:], False) - points_laydim = np.array([ [x, y] for x, y in zip(x_laydim, y_laydim)]) - + # interpolate + x_laydim = np.ma.getdata(data.variables[coords[0]][:], False) + y_laydim = np.ma.getdata(data.variables[coords[1]][:], False) + points_laydim = np.array([[x, y] for x, y in zip(x_laydim, y_laydim)]) + coords_request = str(data.variables[variable].coordinates).split() - x_wdim=np.ma.getdata(data.variables[coords_request[0]][:], False) - y_wdim=np.ma.getdata(data.variables[coords_request[1]][:], False) - points_wdim=np.array([ [x, y] for x, y in zip(x_wdim, y_wdim)]) - + x_wdim = np.ma.getdata(data.variables[coords_request[0]][:], False) + y_wdim = np.ma.getdata(data.variables[coords_request[1]][:], False) + points_wdim = np.array([[x, y] for x, y in zip(x_wdim, y_wdim)]) + bottom_depth_wdim = interp.griddata(points_laydim, bottom_depth, points_wdim) - water_level_wdim= interp.griddata(points_laydim, waterlevel, - points_wdim) - - idx_bd= np.where(np.isnan(bottom_depth_wdim)) - - for i in idx_bd: - bottom_depth_wdim[i]= interp.griddata(points_laydim, bottom_depth, - points_wdim[i], method='nearest') - water_level_wdim[i]= interp.griddata(points_laydim, waterlevel, - points_wdim[i], method='nearest') - - - waterdepth=[] - - if dimensions== 2: - if layer_dim == 'FlowLink_xu FlowLink_yu': + water_level_wdim = interp.griddata(points_laydim, waterlevel, + points_wdim) + + idx_bd = np.where(np.isnan(bottom_depth_wdim)) + + for i in idx_bd: + bottom_depth_wdim[i] = interp.griddata(points_laydim, bottom_depth, + points_wdim[i], method='nearest') + water_level_wdim[i] = interp.griddata(points_laydim, waterlevel, + points_wdim[i], method='nearest') + + waterdepth = [] + + if dimensions == 2: + if layer_dim == 'FlowLink_xu FlowLink_yu': z = [bottom_depth_wdim] - waterlevel=water_level_wdim + waterlevel = water_level_wdim else: z = [bottom_depth] else: - if layer_dim == 'FlowLink_xu FlowLink_yu': + if layer_dim == 'FlowLink_xu FlowLink_yu': z = [bottom_depth_wdim*layer_percentages[layer_index]] - waterlevel=water_level_wdim + waterlevel = water_level_wdim else: z = [bottom_depth*layer_percentages[layer_index]] - waterdepth=np.append(waterdepth, z) + waterdepth = np.append(waterdepth, z) - time= np.ma.getdata(data.variables['time'][time_index], False)*np.ones(len(x)) + time = np.ma.getdata( + data.variables['time'][time_index], False)*np.ones(len(x)) - layer= np.array([ [x_i, y_i, d_i, w_i, v_i, t_i] for x_i, y_i, d_i, w_i, v_i, t_i in - zip(x, y, waterdepth, waterlevel, v, time)]) - layer_data = pd.DataFrame(layer, columns=['x', 'y', 'waterdepth','waterlevel', 'v', 'time']) + layer = np.array([[x_i, y_i, d_i, w_i, v_i, t_i] for x_i, y_i, d_i, w_i, v_i, t_i in + zip(x, y, waterdepth, waterlevel, v, time)]) + layer_data = pd.DataFrame( + layer, columns=['x', 'y', 'waterdepth', 'waterlevel', 'v', 'time']) return layer_data @@ -262,7 +285,7 @@ def create_points(x, y, waterdepth): In any order the three inputs can consist of 3 points, 2 points and 1 array, or 1 point and 2 arrays. The final output DataFrame will be the unique combinations of the 3 inputs. - + Parameters ---------- x: float, array or int @@ -276,17 +299,17 @@ def create_points(x, y, waterdepth): ------- points: DateFrame DataFrame with columns x, y and waterdepth points. - + Example ------- If the inputs are 2 arrays: and [3,4,5] and 1 point [6], the output will contain 6 array combinations of the 3 inputs as shown. - + x=np.array([1,2]) y=np.array([3,4,5]) waterdepth= 6 d3d.create_points(x,y,waterdepth) - + x y waterdepth 0 1.0 3.0 6.0 1 2.0 3.0 6.0 @@ -295,86 +318,88 @@ def create_points(x, y, waterdepth): 4 1.0 5.0 6.0 5 2.0 5.0 6.0 ''' - - assert isinstance(x, (int, float, np.ndarray)), ('x must be a int, float' - +' or array') - assert isinstance(y, (int, float, np.ndarray)), ('y must be a int, float' - +' or array') - assert isinstance(waterdepth, (int, float, np.ndarray)), ('waterdepth must be a int, float' - +' or array') - - directions = {0:{'name': 'x', - 'values': x}, - 1:{'name': 'y', - 'values': y}, - 2:{'name': 'waterdepth', - 'values': waterdepth}} + + if not isinstance(x, (int, float, np.ndarray)): + raise TypeError('x must be an int, float, or array') + + if not isinstance(y, (int, float, np.ndarray)): + raise TypeError('y must be an int, float, or array') + + if not isinstance(waterdepth, (int, float, np.ndarray)): + raise TypeError('waterdepth must be an int, float, or array') + + directions = {0: {'name': 'x', + 'values': x}, + 1: {'name': 'y', + 'values': y}, + 2: {'name': 'waterdepth', + 'values': waterdepth}} for i in directions: try: - N=len(directions[i]['values']) + N = len(directions[i]['values']) except: - directions[i]['values'] = np.array([directions[i]['values']]) - N=len(directions[i]['values']) - if N == 1 : - directions[i]['type']= 'point' - elif N > 1 : - directions[i]['type']= 'array' + directions[i]['values'] = np.array([directions[i]['values']]) + N = len(directions[i]['values']) + if N == 1: + directions[i]['type'] = 'point' + elif N > 1: + directions[i]['type'] = 'array' else: raise Exception(f'length of direction {directions[i]["name"]} was' - +'neagative or zero') - - # Check how many times point is in "types" - types= [directions[i]['type'] for i in directions] + + 'neagative or zero') + + # Check how many times point is in "types" + types = [directions[i]['type'] for i in directions] N_points = types.count('point') if N_points >= 2: - lens = np.array([len(directions[d]['values']) for d in directions]) + lens = np.array([len(directions[d]['values']) for d in directions]) max_len_idx = lens.argmax() - not_max_idxs= [i for i in directions.keys()] - + not_max_idxs = [i for i in directions.keys()] + del not_max_idxs[max_len_idx] - - for not_max in not_max_idxs: - N= len(directions[max_len_idx]['values']) - vals =np.ones(N)*directions[not_max]['values'] + + for not_max in not_max_idxs: + N = len(directions[max_len_idx]['values']) + vals = np.ones(N)*directions[not_max]['values'] directions[not_max]['values'] = np.array(vals) - + x_new = directions[0]['values'] y_new = directions[1]['values'] depth_new = directions[2]['values'] - - request= np.array([ [x_i, y_i, depth_i] for x_i, y_i, depth_i in zip(x_new, - y_new, depth_new)]) - points= pd.DataFrame(request, columns=[ 'x', 'y', 'waterdepth']) - - elif N_points == 1: + + request = np.array([[x_i, y_i, depth_i] for x_i, y_i, depth_i in zip(x_new, + y_new, depth_new)]) + points = pd.DataFrame(request, columns=['x', 'y', 'waterdepth']) + + elif N_points == 1: # treat as plane - #find index of point + # find index of point idx_point = types.index('point') - max_idxs= [i for i in directions.keys()] + max_idxs = [i for i in directions.keys()] print(max_idxs) del max_idxs[idx_point] - #find vectors + # find vectors XX, YY = np.meshgrid(directions[max_idxs[0]]['values'], - directions[max_idxs[1]]['values'] ) - N_X=np.shape(XX)[1] - N_Y=np.shape(YY)[0] - ZZ= np.ones((N_Y,N_X))*directions[idx_point]['values'] - - request= np.array([ [x_i, y_i, z_i] for x_i, y_i, z_i in zip(XX.ravel(), - YY.ravel() , ZZ.ravel())]) - columns=[ directions[max_idxs[0]]['name'], - directions[max_idxs[1]]['name'], directions[idx_point]['name']] - - points= pd.DataFrame(request, columns=columns) - else: - raise Exception('Can provide at most two arrays') - - return points - - -def variable_interpolation(data, variables, points='cells', edges= 'none'): + directions[max_idxs[1]]['values']) + N_X = np.shape(XX)[1] + N_Y = np.shape(YY)[0] + ZZ = np.ones((N_Y, N_X))*directions[idx_point]['values'] + + request = np.array([[x_i, y_i, z_i] for x_i, y_i, z_i in zip(XX.ravel(), + YY.ravel(), ZZ.ravel())]) + columns = [directions[max_idxs[0]]['name'], + directions[max_idxs[1]]['name'], directions[idx_point]['name']] + + points = pd.DataFrame(request, columns=columns) + else: + raise ValueError('Can provide at most two arrays') + + return points + + +def variable_interpolation(data, variables, points='cells', edges='none'): ''' Interpolate multiple variables from the Delft3D onto the same points. @@ -395,53 +420,57 @@ def variable_interpolation(data, variables, points='cells', edges= 'none'): edges: sting: 'nearest' If edges is set to 'nearest' the code will fill in nan values with nearest interpolation. Otherwise only linear interpolarion will be used. - + Returns ------- transformed_data: DataFrame Variables on specified grid points saved under the input variable names and the x, y, and waterdepth coordinates of those points. ''' - - assert isinstance(points, (str, pd.DataFrame)),('points must be a string ' - +'or DataFrame') - if isinstance ( points, str): - assert any([points == 'cells', points=='faces']), ('points must be' - +' cells or faces') - assert type(data)== netCDF4._netCDF4.Dataset, 'data must be nerCDF4 object' + + if not isinstance(points, (str, pd.DataFrame)): + raise TypeError('points must be a string or DataFrame') + + if isinstance(points, str): + if not any([points == 'cells', points == 'faces']): + raise ValueError('points must be cells or faces') + + if not isinstance(data, netCDF4._netCDF4.Dataset): + raise TypeError('data must be netCDF4 object') data_raw = {} for var in variables: - var_data_df = get_all_data_points(data, var,time_index=-1) - var_data_df=var_data_df.loc[:,~var_data_df.T.duplicated(keep='first')] - data_raw[var] = var_data_df - if type(points) == pd.DataFrame: + var_data_df = get_all_data_points(data, var, time_index=-1) + var_data_df = var_data_df.loc[:, ~ + var_data_df.T.duplicated(keep='first')] + data_raw[var] = var_data_df + if type(points) == pd.DataFrame: print('points provided') - elif points=='faces': - points = data_raw['ucx'][['x','y','waterdepth']] - elif points=='cells': - points = data_raw['turkin1'][['x','y','waterdepth']] - - transformed_data= points.copy(deep=True) - - for var in variables : - transformed_data[var] = interp.griddata(data_raw[var][['x','y','waterdepth']], - data_raw[var][var], points[['x','y','waterdepth']]) - if edges == 'nearest' : - idx= np.where(np.isnan(transformed_data[var])) - + elif points == 'faces': + points = data_raw['ucx'][['x', 'y', 'waterdepth']] + elif points == 'cells': + points = data_raw['turkin1'][['x', 'y', 'waterdepth']] + + transformed_data = points.copy(deep=True) + + for var in variables: + transformed_data[var] = interp.griddata(data_raw[var][['x', 'y', 'waterdepth']], + data_raw[var][var], points[['x', 'y', 'waterdepth']]) + if edges == 'nearest': + idx = np.where(np.isnan(transformed_data[var])) + if len(idx[0]): - for i in idx[0]: - transformed_data[var][i]= (interp - .griddata(data_raw[var][['x','y','waterdepth']], - data_raw[var][var], - [points['x'][i],points['y'][i], - points['waterdepth'][i]], method='nearest')) - + for i in idx[0]: + transformed_data[var][i] = (interp + .griddata(data_raw[var][['x', 'y', 'waterdepth']], + data_raw[var][var], + [points['x'][i], points['y'][i], + points['waterdepth'][i]], method='nearest')) + return transformed_data -def get_all_data_points(data, variable, time_index=-1): +def get_all_data_points(data, variable, time_index=-1): ''' Get data points for a passed variable for all layers at a specified time from the Delft3D NetCDF4 object by iterating over the `get_layer_data` function. @@ -457,75 +486,80 @@ def get_all_data_points(data, variable, time_index=-1): time_index: int An integer to pull the time step from the dataset. Default is last time step, found with the input -1. - + Returns ------- all_data: DataFrame Dataframe with columns x, y, waterdepth, waterlevel, variable, and time. The waterdepth is measured from the water surface and the "waterlevel" is the water level diffrence in meters from the zero water level. - - ''' - - assert isinstance(time_index, int), 'time_index must be a int' - assert type(data)== netCDF4._netCDF4.Dataset, 'data must be NetCDF4 object' - assert variable in data.variables.keys(), 'variable not recognized' + + ''' + + if not isinstance(time_index, int): + raise TypeError('time_index must be an int') + + if not isinstance(data, netCDF4._netCDF4.Dataset): + raise TypeError('data must be NetCDF4 object') + + if variable not in data.variables.keys(): + raise ValueError('variable not recognized') max_time_index = len(data.variables[variable][:]) - assert abs(time_index) <= max_time_index, (f'time_index must be less than' - +'the max time index {max_time_index}') + if abs(time_index) > max_time_index: + raise ValueError( + f'time_index must be less than the max time index {max_time_index}') if "mesh2d" in variable: - cords_to_layers= {'mesh2d_face_x mesh2d_face_y': {'name':'mesh2d_nLayers', - 'coords':data.variables['mesh2d_layer_sigma'][:]}, - 'mesh2d_edge_x mesh2d_edge_y': {'name':'mesh2d_nInterfaces', - 'coords':data.variables['mesh2d_interface_sigma'][:]}} + cords_to_layers = {'mesh2d_face_x mesh2d_face_y': {'name': 'mesh2d_nLayers', + 'coords': data.variables['mesh2d_layer_sigma'][:]}, + 'mesh2d_edge_x mesh2d_edge_y': {'name': 'mesh2d_nInterfaces', + 'coords': data.variables['mesh2d_interface_sigma'][:]}} else: - cords_to_layers= {'FlowElem_xcc FlowElem_ycc':{'name':'laydim', - 'coords':data.variables['LayCoord_cc'][:]}, - 'FlowLink_xu FlowLink_yu': {'name':'wdim', - 'coords':data.variables['LayCoord_w'][:]}} - - layer_dim = str(data.variables[variable].coordinates) - - try: - cord_sys= cords_to_layers[layer_dim]['coords'] - except: + cords_to_layers = {'FlowElem_xcc FlowElem_ycc': {'name': 'laydim', + 'coords': data.variables['LayCoord_cc'][:]}, + 'FlowLink_xu FlowLink_yu': {'name': 'wdim', + 'coords': data.variables['LayCoord_w'][:]}} + + layer_dim = str(data.variables[variable].coordinates) + + try: + cord_sys = cords_to_layers[layer_dim]['coords'] + except: raise Exception('Coordinates not recognized.') - else: - layer_percentages= np.ma.getdata(cord_sys, False) - - x_all=[] - y_all=[] - depth_all=[] - water_level_all=[] - v_all=[] - time_all=[] - + else: + layer_percentages = np.ma.getdata(cord_sys, False) + + x_all = [] + y_all = [] + depth_all = [] + water_level_all = [] + v_all = [] + time_all = [] + layers = range(len(layer_percentages)) for layer in layers: - layer_data= get_layer_data(data, variable, layer, time_index) - - x_all=np.append(x_all, layer_data.x) - y_all=np.append(y_all, layer_data.y) - depth_all=np.append(depth_all, layer_data.waterdepth) - water_level_all=np.append(water_level_all, layer_data.waterlevel) - v_all=np.append(v_all, layer_data.v) - time_all= np.append(time_all, layer_data.time) - - known_points = np.array([ [x, y, waterdepth, waterlevel, v, time] - for x, y, waterdepth, waterlevel, v, time in zip(x_all, y_all, - depth_all, water_level_all, v_all, time_all)]) - - all_data= pd.DataFrame(known_points, columns=['x','y','waterdepth', 'waterlevel' - ,f'{variable}', 'time']) + layer_data = get_layer_data(data, variable, layer, time_index) - return all_data + x_all = np.append(x_all, layer_data.x) + y_all = np.append(y_all, layer_data.y) + depth_all = np.append(depth_all, layer_data.waterdepth) + water_level_all = np.append(water_level_all, layer_data.waterlevel) + v_all = np.append(v_all, layer_data.v) + time_all = np.append(time_all, layer_data.time) + known_points = np.array([[x, y, waterdepth, waterlevel, v, time] + for x, y, waterdepth, waterlevel, v, time in zip(x_all, y_all, + depth_all, water_level_all, v_all, time_all)]) + all_data = pd.DataFrame(known_points, columns=[ + 'x', 'y', 'waterdepth', 'waterlevel', f'{variable}', 'time']) -def turbulent_intensity(data, points='cells', time_index= -1, - intermediate_values = False ): + return all_data + + +def turbulent_intensity(data, points='cells', time_index=-1, + intermediate_values=False): ''' Calculate the turbulent intensity percentage for a given data set for the specified points. Assumes variable names: ucx, ucy, ucz and turkin1. @@ -548,7 +582,7 @@ def turbulent_intensity(data, points='cells', time_index= -1, If false the function will return position and turbulent intensity values. If true the function will return position(x,y,z) and values need to calculate turbulent intensity (ucx, uxy, uxz and turkin1) in a Dataframe. Default False. - + Returns ------- TI_data : Dataframe @@ -565,64 +599,73 @@ def turbulent_intensity(data, points='cells', time_index= -1, ucy- velocity in the y direction ucz- velocity in the vertical direction ''' - - assert isinstance(points, (str, pd.DataFrame)),('points must a string or' - +' DataFrame') - if isinstance ( points, str): - assert any([points == 'cells', points=='faces']), ('points must be cells' - +' or faces') - assert isinstance(time_index, int), 'time_index must be a int' - max_time_index= data['time'].shape[0]-1 # to account for zero index - assert abs(time_index) <= max_time_index, (f'time_index must be less than' - +'the absolute value of the max time index {max_time_index}') - assert type(data)== netCDF4._netCDF4.Dataset, 'data must be nerCDF4 object' - assert 'turkin1' in data.variables.keys(), ('Varaiable turkin1 not' - +' present in Data') - assert 'ucx' in data.variables.keys(),'Varaiable ucx 1 not present in Data' - assert 'ucy' in data.variables.keys(),'Varaiable ucy 1 not present in Data' - assert 'ucz' in data.variables.keys(),'Varaiable ucz 1 not present in Data' - - TI_vars= ['turkin1', 'ucx', 'ucy', 'ucz'] + + if not isinstance(points, (str, pd.DataFrame)): + raise TypeError('points must be a string or DataFrame') + + if isinstance(points, str): + if not (points == 'cells' or points == 'faces'): + raise ValueError('points must be cells or faces') + + if not isinstance(time_index, int): + raise TypeError('time_index must be an int') + + max_time_index = data['time'].shape[0] - 1 # to account for zero index + if abs(time_index) > max_time_index: + raise ValueError( + f'time_index must be less than the absolute value of the max time index {max_time_index}') + + if not isinstance(data, netCDF4._netCDF4.Dataset): + raise TypeError('data must be netCDF4 object') + + for variable in ['turkin1', 'ucx', 'ucy', 'ucz']: + if variable not in data.variables.keys(): + raise ValueError(f'Variable {variable} not present in Data') + + TI_vars = ['turkin1', 'ucx', 'ucy', 'ucz'] TI_data_raw = {} for var in TI_vars: - var_data_df = get_all_data_points(data, var ,time_index) - TI_data_raw[var] = var_data_df - if type(points) == pd.DataFrame: + var_data_df = get_all_data_points(data, var, time_index) + TI_data_raw[var] = var_data_df + if type(points) == pd.DataFrame: print('points provided') - elif points=='faces': - points = TI_data_raw['turkin1'].drop(['waterlevel','turkin1'],axis=1) - elif points=='cells': - points = TI_data_raw['ucx'].drop(['waterlevel','ucx'],axis=1) - + elif points == 'faces': + points = TI_data_raw['turkin1'].drop(['waterlevel', 'turkin1'], axis=1) + elif points == 'cells': + points = TI_data_raw['ucx'].drop(['waterlevel', 'ucx'], axis=1) + TI_data = points.copy(deep=True) - for var in TI_vars: - TI_data[var] = interp.griddata(TI_data_raw[var][['x','y','waterdepth']], - TI_data_raw[var][var], points[['x','y','waterdepth']]) - idx= np.where(np.isnan(TI_data[var])) - + for var in TI_vars: + TI_data[var] = interp.griddata(TI_data_raw[var][['x', 'y', 'waterdepth']], + TI_data_raw[var][var], points[['x', 'y', 'waterdepth']]) + idx = np.where(np.isnan(TI_data[var])) + if len(idx[0]): - for i in idx[0]: - TI_data[var][i]= interp.griddata(TI_data_raw[var][['x','y','waterdepth']], - TI_data_raw[var][var], - [points['x'][i],points['y'][i], points['waterdepth'][i]], - method='nearest') - - u_mag=unorm(np.array(TI_data['ucx']),np.array(TI_data['ucy']), - np.array(TI_data['ucz'])) - - neg_index=np.where( TI_data['turkin1']<0) - zero_bool= np.isclose( TI_data['turkin1'][ TI_data['turkin1']<0].array, - np.zeros(len( TI_data['turkin1'][TI_data['turkin1']<0].array)), - atol=1.0e-4) - zero_ind= neg_index[0][zero_bool] - non_zero_ind= neg_index[0][~zero_bool] - TI_data.loc[zero_ind,'turkin1']=np.zeros(len(zero_ind)) - TI_data.loc[non_zero_ind,'turkin1']=[np.nan]*len(non_zero_ind) - - TI_data['turbulent_intensity']= np.sqrt(2/3*TI_data['turkin1'])/u_mag * 100 #% - + for i in idx[0]: + TI_data[var][i] = interp.griddata(TI_data_raw[var][['x', 'y', 'waterdepth']], + TI_data_raw[var][var], + [points['x'][i], points['y'] + [i], points['waterdepth'][i]], + method='nearest') + + u_mag = unorm(np.array(TI_data['ucx']), np.array(TI_data['ucy']), + np.array(TI_data['ucz'])) + + neg_index = np.where(TI_data['turkin1'] < 0) + zero_bool = np.isclose(TI_data['turkin1'][TI_data['turkin1'] < 0].array, + np.zeros( + len(TI_data['turkin1'][TI_data['turkin1'] < 0].array)), + atol=1.0e-4) + zero_ind = neg_index[0][zero_bool] + non_zero_ind = neg_index[0][~zero_bool] + TI_data.loc[zero_ind, 'turkin1'] = np.zeros(len(zero_ind)) + TI_data.loc[non_zero_ind, 'turkin1'] = [np.nan]*len(non_zero_ind) + + TI_data['turbulent_intensity'] = np.sqrt( + 2/3*TI_data['turkin1'])/u_mag * 100 # % + if intermediate_values == False: - TI_data= TI_data.drop(TI_vars, axis = 1) - + TI_data = TI_data.drop(TI_vars, axis=1) + return TI_data From 7614867df05d0ae3b04c4b04898ce10f33e6baaf Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 21 Nov 2023 09:08:09 -0700 Subject: [PATCH 02/87] Revert "Ensure interpolation values are within range when sampling contours (#278)" This reverts commit 2387a257b218709b6e82052d9d2fc864db5d4509. --- mhkit/tests/wave/test_contours.py | 50 +++++++++++-------------------- mhkit/wave/contours.py | 43 +++++++------------------- 2 files changed, 27 insertions(+), 66 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index a555fec28..7b870325b 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -1,15 +1,24 @@ from os.path import abspath, dirname, join, isfile, normpath, relpath -import unittest -import pickle -import json -import os - +from pandas.testing import assert_frame_equal from numpy.testing import assert_allclose +from scipy.interpolate import interp1d +from random import seed, randint import matplotlib.pylab as plt +from datetime import datetime +import xarray.testing as xrt +import mhkit.wave as wave +from io import StringIO import pandas as pd import numpy as np - -import mhkit.wave as wave +import contextlib +import unittest +import netCDF4 +import inspect +import pickle +import time +import json +import sys +import os testdir = dirname(abspath(__file__)) @@ -45,10 +54,6 @@ def setUpClass(self): self.wdrt_dt = 3600 self.wdrt_period = 50 - # `samples_contour`Example data - self.hs_contour = np.array([8.56637939, 9.27612515, 8.70427774]) - self.te_contour = np.array([10, 15, 20]) - @classmethod def tearDownClass(self): pass @@ -235,28 +240,7 @@ def test_kde_copulas(self): self.wdrt_copulas['bivariate_KDE_log_x2'])] self.assertTrue(all(close)) - def test_samples_contours_type_validation(self): - with self.assertRaises(TypeError): - wave.contours.samples_contour( - 'not an array', self.te_contour, self.hs_contour) - with self.assertRaises(TypeError): - wave.contours.samples_contour( - self.te_contour, 'not an array', self.hs_contour) - with self.assertRaises(TypeError): - wave.contours.samples_contour( - self.te_contour, self.hs_contour, 'not an array') - - def test_samples_contours_length_mismatch(self): - with self.assertRaises(ValueError): - wave.contours.samples_contour( - self.te_contour, self.hs_contour, np.array([1, 2])) - - def test_samples_contours_range_validation(self): - with self.assertRaises(ValueError): - wave.contours.samples_contour( - np.array([5, 25]), self.te_contour, self.hs_contour) - - def test_samples_contours_correct_interpolation(self): + def test_samples_contours(self): te_samples = np.array([10, 15, 20]) hs_samples_0 = np.array([8.56637939, 9.27612515, 8.70427774]) hs_contour = np.array(self.wdrt_copulas["gaussian_x1"]) diff --git a/mhkit/wave/contours.py b/mhkit/wave/contours.py index c4695e85f..3007448b8 100644 --- a/mhkit/wave/contours.py +++ b/mhkit/wave/contours.py @@ -1792,51 +1792,28 @@ def samples_contour(t_samples, t_contour, hs_contour): raise TypeError(f't_contour must be of type np.ndarray. Got: {type(t_contour)}') if not isinstance(hs_contour, np.ndarray): raise TypeError(f'hs_contour must be of type np.ndarray. Got: {type(hs_contour)}') - if len(t_contour) != len(hs_contour): - raise ValueError( - "t_contour and hs_contour must be of the same length.") - if np.any(t_samples < np.min(t_contour)) or np.any(t_samples > np.max(t_contour)): - raise ValueError( - "All t_samples must be within the range of t_contour.") - - - # Find minimum and maximum energy period values + # finds minimum and maximum energy period values amin = np.argmin(t_contour) amax = np.argmax(t_contour) aamin = np.min([amin, amax]) aamax = np.max([amin, amax]) - - # Separate points along the contour into upper & lower half + # finds points along the contour w1 = hs_contour[aamin:aamax] w2 = np.concatenate((hs_contour[aamax:], hs_contour[:aamin])) - - # Get samples min and max - t_min, t_max = np.min(t_samples), np.max(t_samples) - - # Choose the half of the contour with the largest wave height - if np.max(w1) > np.max(w2): - # Check if the max or min Tp values are within the contour half - include_aamax = t_max >= t_contour[aamax] or t_min <= t_contour[aamin] - # Set the x and y values for interpolation - x1 = t_contour[aamin:aamax + int(include_aamax)] - y1 = hs_contour[aamin:aamax + int(include_aamax)] + if (np.max(w1) > np.max(w2)): + x1 = t_contour[aamin:aamax] + y1 = hs_contour[aamin:aamax] else: - # Check if the max or min Tp values are within the contour half - include_aamin = t_max >= t_contour[aamin] or t_min <= t_contour[aamax] - # Set the x and y values for interpolation - x1 = np.concatenate( - (t_contour[aamax:], t_contour[:aamin + int(include_aamin)])) - y1 = np.concatenate( - (hs_contour[aamax:], hs_contour[:aamin + int(include_aamin)])) - - # Sort data based on the max and min Tp values + x1 = np.concatenate((t_contour[aamax:], t_contour[:aamin])) + y1 = np.concatenate((hs_contour[aamax:], hs_contour[:aamin])) + # sorts data based on the max and min energy period values ms = np.argsort(x1) x = x1[ms] y = y1[ms] - # Interpolation function + # interpolates the sorted data si = interp.interp1d(x, y) - # Interpolate Tp samples values to get Hs values + # finds the wave height based on the user specified energy period values hs_samples = si(t_samples) return hs_samples From 7ef8c7a77209ff988c543e1d1956ba122c4ae770 Mon Sep 17 00:00:00 2001 From: ssolson Date: Wed, 29 Nov 2023 10:17:14 -0500 Subject: [PATCH 03/87] black format --- examples/ADCP_Delft3D_TRTS_example.ipynb | 622 +- examples/Delft3D_example.ipynb | 243 +- ...ve_resource_characterization_example.ipynb | 268 +- examples/SWAN_example.ipynb | 45 +- examples/WPTO_hindcast_example.ipynb | 118 +- examples/adcp_example.ipynb | 8028 +++++++++-------- examples/adv_example.ipynb | 1803 ++-- examples/cdip_example.ipynb | 59 +- examples/directional_waves.ipynb | 18 +- examples/environmental_contours_example.ipynb | 124 +- examples/extreme_response_MLER_example.ipynb | 52 +- .../extreme_response_contour_example.ipynb | 52 +- ...reme_response_full_sea_state_example.ipynb | 62 +- examples/loads_example.ipynb | 111 +- examples/metocean_example.ipynb | 115 +- examples/mooring_example.ipynb | 35 +- examples/power_example.ipynb | 44 +- examples/qc_example.ipynb | 48 +- examples/river_example.ipynb | 42 +- examples/short_term_extremes_example.ipynb | 156 +- examples/tidal_example.ipynb | 802 +- examples/tidal_performance_example.ipynb | 1399 +-- examples/upcrossing_example.ipynb | 22 +- examples/wave_example.ipynb | 85 +- examples/wecsim_example.ipynb | 58 +- mhkit/__init__.py | 5 +- mhkit/dolfyn/__init__.py | 7 +- mhkit/dolfyn/adp/__init__.py | 1 - mhkit/dolfyn/adp/clean.py | 169 +- mhkit/dolfyn/adp/turbulence.py | 594 +- mhkit/dolfyn/adv/__init__.py | 2 +- mhkit/dolfyn/adv/clean.py | 85 +- mhkit/dolfyn/adv/motion.py | 285 +- mhkit/dolfyn/adv/turbulence.py | 368 +- mhkit/dolfyn/binned.py | 156 +- mhkit/dolfyn/io/api.py | 164 +- mhkit/dolfyn/io/base.py | 353 +- mhkit/dolfyn/io/nortek.py | 1154 +-- mhkit/dolfyn/io/nortek2.py | 599 +- mhkit/dolfyn/io/nortek2_defs.py | 584 +- mhkit/dolfyn/io/nortek2_lib.py | 362 +- mhkit/dolfyn/io/nortek_defs.py | 520 +- mhkit/dolfyn/io/rdi.py | 1055 ++- mhkit/dolfyn/io/rdi_defs.py | 448 +- mhkit/dolfyn/io/rdi_lib.py | 68 +- mhkit/dolfyn/rotate/api.py | 125 +- mhkit/dolfyn/rotate/base.py | 197 +- mhkit/dolfyn/rotate/rdi.py | 85 +- mhkit/dolfyn/rotate/signature.py | 73 +- mhkit/dolfyn/rotate/vector.py | 135 +- mhkit/dolfyn/time.py | 38 +- mhkit/dolfyn/tools/fft.py | 50 +- mhkit/dolfyn/tools/misc.py | 68 +- mhkit/dolfyn/velocity.py | 619 +- mhkit/loads/__init__.py | 2 +- mhkit/loads/extreme.py | 320 +- mhkit/loads/general.py | 126 +- mhkit/loads/graphics.py | 223 +- mhkit/mooring/graphics.py | 97 +- mhkit/mooring/io.py | 65 +- mhkit/mooring/main.py | 25 +- mhkit/power/__init__.py | 1 - mhkit/power/characteristics.py | 84 +- mhkit/power/quality.py | 83 +- mhkit/qc/__init__.py | 10 +- mhkit/river/__init__.py | 7 +- mhkit/river/graphics.py | 275 +- mhkit/river/io/__init__.py | 2 +- mhkit/river/io/d3d.py | 599 +- mhkit/river/io/usgs.py | 106 +- mhkit/river/performance.py | 136 +- mhkit/river/resource.py | 171 +- mhkit/tests/dolfyn/base.py | 20 +- mhkit/tests/dolfyn/test_analysis.py | 155 +- mhkit/tests/dolfyn/test_api.py | 18 +- mhkit/tests/dolfyn/test_clean.py | 72 +- mhkit/tests/dolfyn/test_motion.py | 51 +- mhkit/tests/dolfyn/test_orient.py | 179 +- mhkit/tests/dolfyn/test_read_adp.py | 169 +- mhkit/tests/dolfyn/test_read_adv.py | 34 +- mhkit/tests/dolfyn/test_read_io.py | 85 +- mhkit/tests/dolfyn/test_rotate_adp.py | 176 +- mhkit/tests/dolfyn/test_rotate_adv.py | 119 +- mhkit/tests/dolfyn/test_shortcuts.py | 33 +- mhkit/tests/dolfyn/test_time.py | 9 +- mhkit/tests/dolfyn/test_tools.py | 216 +- mhkit/tests/dolfyn/test_vs_nortek.py | 111 +- mhkit/tests/loads/test_extreme.py | 3 +- mhkit/tests/loads/test_loads.py | 225 +- mhkit/tests/mooring/test_mooring.py | 38 +- mhkit/tests/power/test_power.py | 69 +- mhkit/tests/river/test_io.py | 230 +- mhkit/tests/river/test_performance.py | 62 +- mhkit/tests/river/test_resource.py | 96 +- mhkit/tests/tidal/test_io.py | 65 +- mhkit/tests/tidal/test_performance.py | 115 +- mhkit/tests/tidal/test_resource.py | 107 +- mhkit/tests/utils/test_cache.py | 33 +- mhkit/tests/utils/test_upcrossing.py | 6 +- mhkit/tests/utils/test_utils.py | 183 +- mhkit/tests/wave/io/hindcast/test_hindcast.py | 242 +- .../wave/io/hindcast/test_wind_toolkit.py | 285 +- mhkit/tests/wave/io/test_cdip.py | 159 +- mhkit/tests/wave/io/test_ndbc.py | 242 +- mhkit/tests/wave/io/test_swan.py | 55 +- mhkit/tests/wave/io/test_wecsim.py | 87 +- mhkit/tests/wave/test_contours.py | 302 +- mhkit/tests/wave/test_performance.py | 113 +- mhkit/tests/wave/test_resource_metrics.py | 331 +- mhkit/tests/wave/test_resource_spectrum.py | 107 +- mhkit/tidal/__init__.py | 2 +- mhkit/tidal/d3d.py | 2 +- mhkit/tidal/graphics.py | 286 +- mhkit/tidal/io/noaa.py | 120 +- mhkit/tidal/performance.py | 367 +- mhkit/tidal/resource.py | 147 +- mhkit/utils/__init__.py | 8 +- mhkit/utils/cache.py | 100 +- mhkit/utils/stat_utils.py | 125 +- mhkit/utils/time_utils.py | 6 +- mhkit/utils/upcrossing.py | 50 +- mhkit/wave/__init__.py | 2 +- mhkit/wave/contours.py | 1017 ++- mhkit/wave/graphics.py | 625 +- mhkit/wave/io/__init__.py | 2 +- mhkit/wave/io/cdip.py | 383 +- mhkit/wave/io/hindcast/__init__.py | 9 +- mhkit/wave/io/hindcast/hindcast.py | 250 +- mhkit/wave/io/hindcast/wind_toolkit.py | 266 +- mhkit/wave/io/ndbc.py | 859 +- mhkit/wave/io/swan.py | 317 +- mhkit/wave/io/wecsim.py | 458 +- mhkit/wave/performance.py | 198 +- mhkit/wave/resource.py | 433 +- setup.py | 105 +- 135 files changed, 19490 insertions(+), 16361 deletions(-) diff --git a/examples/ADCP_Delft3D_TRTS_example.ipynb b/examples/ADCP_Delft3D_TRTS_example.ipynb index 142ebc068..4b3655ce6 100644 --- a/examples/ADCP_Delft3D_TRTS_example.ipynb +++ b/examples/ADCP_Delft3D_TRTS_example.ipynb @@ -30,13 +30,14 @@ "import matplotlib\n", "import scipy.io\n", "import netCDF4\n", - "import math \n", + "import math\n", "import utm\n", + "\n", "# MHKiT Imports\n", "from mhkit.dolfyn.rotate import api as ap\n", "from mhkit.dolfyn.adp import api\n", "from mhkit import dolfyn as dlfn\n", - "from mhkit.river.io import d3d \n", + "from mhkit.river.io import d3d\n", "from mhkit import river" ] }, @@ -705,10 +706,14 @@ ], "source": [ "# Read in the two transect passes\n", - "transect_1_raw = api.read('data/river/ADCP_transect/tanana_transects_08_10_10_0_002_10-08-10_142214.PD0') \n", - "transect_2_raw = api.read('data/river/ADCP_transect/tanana_transects_08_10_10_0_003_10-08-10_143335.PD0')\n", + "transect_1_raw = api.read(\n", + " \"data/river/ADCP_transect/tanana_transects_08_10_10_0_002_10-08-10_142214.PD0\"\n", + ")\n", + "transect_2_raw = api.read(\n", + " \"data/river/ADCP_transect/tanana_transects_08_10_10_0_003_10-08-10_143335.PD0\"\n", + ")\n", "# Create one dataset from the two passes\n", - "transect_1_2= xr.merge([transect_1_raw, transect_2_raw])\n", + "transect_1_2 = xr.merge([transect_1_raw, transect_2_raw])\n", "# Print the xarray data\n", "transect_1_2" ] @@ -731,15 +736,11 @@ "outputs": [], "source": [ "# Convert Coordiantes to UTM using utm module\n", - "utm_x_y = utm.from_latlon(\n", - " transect_1_2.latitude_gps, \n", - " transect_1_2.longitude_gps, \n", - " 6,'W'\n", - " ) \n", - "\n", - "# Create a DataFrame from the points \n", - "gps = [[x, y] for x, y in zip(utm_x_y[0], utm_x_y[1])] \n", - "gps_points = pd.DataFrame(np.array(gps), columns= ['utm_x','utm_y'])" + "utm_x_y = utm.from_latlon(transect_1_2.latitude_gps, transect_1_2.longitude_gps, 6, \"W\")\n", + "\n", + "# Create a DataFrame from the points\n", + "gps = [[x, y] for x, y in zip(utm_x_y[0], utm_x_y[1])]\n", + "gps_points = pd.DataFrame(np.array(gps), columns=[\"utm_x\", \"utm_y\"])" ] }, { @@ -760,7 +761,7 @@ "source": [ "# Nenana Alaska is 15.7 deg East\n", "angle = 15.7\n", - "ap.set_declination(transect_1_2, angle, inplace=True) " + "ap.set_declination(transect_1_2, angle, inplace=True)" ] }, { @@ -780,8 +781,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Rotate to 'earth' coordinate system \n", - "api.rotate2(transect_1_2, 'earth', inplace=True)" + "# Rotate to 'earth' coordinate system\n", + "api.rotate2(transect_1_2, \"earth\", inplace=True)" ] }, { @@ -831,48 +832,55 @@ } ], "source": [ - "\n", "# Linear regression using first order polyfit\n", - "a,b = np.polyfit(gps_points.utm_x, gps_points.utm_y,1)\n", + "a, b = np.polyfit(gps_points.utm_x, gps_points.utm_y, 1)\n", "\n", "# Generate a DataFrame of points from the linear regression\n", - "ideal= [ [x, y] for x, y in zip(gps_points.utm_x, a*gps_points.utm_x+b)] \n", - "ideal_points = pd.DataFrame(np.array(ideal), columns= ['utm_x','utm_y'])\n", + "ideal = [[x, y] for x, y in zip(gps_points.utm_x, a * gps_points.utm_x + b)]\n", + "ideal_points = pd.DataFrame(np.array(ideal), columns=[\"utm_x\", \"utm_y\"])\n", "\n", "# Repeat UTM corrdinates to match the ADCP points matrix (dir, range, time)\n", "utm_x_points = np.tile(gps_points.utm_x, np.size(transect_1_2.range))\n", - "utm_y_points = np.tile(a*gps_points.utm_x+b, np.size(transect_1_2.range))\n", - "depth_points = np.repeat( transect_1_2.range, np.size(gps_points.utm_x))\n", + "utm_y_points = np.tile(a * gps_points.utm_x + b, np.size(transect_1_2.range))\n", + "depth_points = np.repeat(transect_1_2.range, np.size(gps_points.utm_x))\n", "\n", - "ADCP_ideal_points={\n", - " 'utm_x': utm_x_points, \n", - " 'utm_y': utm_y_points, \n", - " 'waterdepth': depth_points\n", - " }\n", - "ADCP_ideal_points=pd.DataFrame(ADCP_ideal_points)\n", + "ADCP_ideal_points = {\n", + " \"utm_x\": utm_x_points,\n", + " \"utm_y\": utm_y_points,\n", + " \"waterdepth\": depth_points,\n", + "}\n", + "ADCP_ideal_points = pd.DataFrame(ADCP_ideal_points)\n", "\n", "# Initialize the figure\n", - "figure(figsize=(8,6))\n", + "figure(figsize=(8, 6))\n", "fig, ax = plt.subplots()\n", "\n", "# Get data from the original transect in UTM for comparison\n", - "transect_1 = utm.from_latlon(transect_1_raw.latitude_gps, transect_1_raw.longitude_gps, 6, 'W') \n", - "transect_2 = utm.from_latlon(transect_2_raw.latitude_gps, transect_2_raw.longitude_gps, 6, 'W') \n", + "transect_1 = utm.from_latlon(\n", + " transect_1_raw.latitude_gps, transect_1_raw.longitude_gps, 6, \"W\"\n", + ")\n", + "transect_2 = utm.from_latlon(\n", + " transect_2_raw.latitude_gps, transect_2_raw.longitude_gps, 6, \"W\"\n", + ")\n", "\n", "# Plot the original transect data for comparison\n", - "plt.plot(transect_1[0],transect_1[1], 'b', label= 'GPS Transect 1' )\n", - "plt.plot(transect_2[0],transect_2[1], 'r--', label= 'GPS Transect 2')\n", + "plt.plot(transect_1[0], transect_1[1], \"b\", label=\"GPS Transect 1\")\n", + "plt.plot(transect_2[0], transect_2[1], \"r--\", label=\"GPS Transect 2\")\n", "\n", "# Plot the Idealized Transect\n", - "plt.plot(ADCP_ideal_points.utm_x, ADCP_ideal_points.utm_y, 'k-.', label='Ideal Transect')\n", - "plt.ticklabel_format(style= 'scientific',useOffset=False)\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "plt.plot(\n", + " ADCP_ideal_points.utm_x, ADCP_ideal_points.utm_y, \"k-.\", label=\"Ideal Transect\"\n", + ")\n", + "plt.ticklabel_format(style=\"scientific\", useOffset=False)\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)\n", "\n", "# Plot Settings\n", "plt.legend()\n", - "plt.xlabel('$UTM_x (m)$')\n", - "plt.ylabel('$UTM_y (m)$')" + "plt.xlabel(\"$UTM_x (m)$\")\n", + "plt.ylabel(\"$UTM_y (m)$\")" ] }, { @@ -893,7 +901,7 @@ "outputs": [], "source": [ "# Adjust the range offset, included here for reference\n", - "offset=0\n", + "offset = 0\n", "api.clean.set_range_offset(transect_1_2, offset)" ] }, @@ -937,11 +945,11 @@ ], "source": [ "# Apply the correlation filter\n", - "min_correlation=40\n", + "min_correlation = 40\n", "transect_1_2 = api.clean.correlation_filter(transect_1_2, thresh=min_correlation)\n", "\n", "# Plot the results the (data is displayed upside-down)\n", - "transect_1_2.corr.sel(beam=1).plot() " + "transect_1_2.corr.sel(beam=1).plot()" ] }, { @@ -969,23 +977,25 @@ ], "source": [ "# Filtering out depth sounder values above the river surface\n", - "depth_sounder = transect_1_2.where(transect_1_2.dist_bt > 0 )\n", + "depth_sounder = transect_1_2.where(transect_1_2.dist_bt > 0)\n", "\n", "# Of the 4 values beams get the shallowest depth value at each location\n", "bottom = np.min(depth_sounder.dist_bt, axis=0)\n", "\n", - "# River bottom for ideal transect \n", - "bottom_avg = interp.griddata(gps_points, bottom, ideal_points, method='linear')\n", + "# River bottom for ideal transect\n", + "bottom_avg = interp.griddata(gps_points, bottom, ideal_points, method=\"linear\")\n", "\n", "# Create a matrix of depths\n", - "bottom_filter = d3d.create_points(x=bottom_avg, y=transect_1_2.range.to_numpy(), waterdepth=1)\n", + "bottom_filter = d3d.create_points(\n", + " x=bottom_avg, y=transect_1_2.range.to_numpy(), waterdepth=1\n", + ")\n", "\n", - "# Creating a mask matrix with ones in the area of the river cross section and nan's outside \n", + "# Creating a mask matrix with ones in the area of the river cross section and nan's outside\n", "river_bottom_filter = []\n", - "for index, row in bottom_filter.iterrows():\n", - " if row['x'] > row['y']: \n", - " filter = 1 \n", - " else: \n", + "for index, row in bottom_filter.iterrows():\n", + " if row[\"x\"] > row[\"y\"]:\n", + " filter = 1\n", + " else:\n", " filter = float(\"nan\")\n", " river_bottom_filter = np.append(river_bottom_filter, filter)" ] @@ -1177,33 +1187,26 @@ ], "source": [ "# Tiling the GPS data for each depth bin\n", - "gps_utm_x = np.tile(\n", - " gps_points.utm_x, \n", - " np.size(transect_1_2.range)\n", - " )\n", - "gps_utm_y = np.tile(\n", - " gps_points.utm_y, \n", - " np.size(transect_1_2.range)\n", - " )\n", + "gps_utm_x = np.tile(gps_points.utm_x, np.size(transect_1_2.range))\n", + "gps_utm_y = np.tile(gps_points.utm_y, np.size(transect_1_2.range))\n", "\n", "# Repeating the depth bins for each GPS point\n", - "depth = np.repeat( \n", - " transect_1_2.range, \n", - " np.size(gps_points.utm_x)\n", - " )\n", + "depth = np.repeat(transect_1_2.range, np.size(gps_points.utm_x))\n", "\n", "# Create Dataframe from the calculated points\n", - "ADCP_points = pd.DataFrame({\n", - " 'utm_x': gps_utm_x, \n", - " 'utm_y': gps_utm_y, \n", - " 'waterdepth': depth\n", - " })\n", - "\n", - "# Raveling the veocity data to correspond with 'ADCP_points' and filtering out velocity data bellow the river bottom \n", - "ADCP_points['east_velocity']= np.ravel(transect_1_2.vel[0, :,:]) * river_bottom_filter\n", - "ADCP_points['north_velocity']= np.ravel(transect_1_2.vel[1, :,:]) * river_bottom_filter\n", - "ADCP_points['vertical_velocity']= np.ravel(transect_1_2.vel[2, :,:])* river_bottom_filter\n", - "ADCP_points= ADCP_points.dropna()\n", + "ADCP_points = pd.DataFrame(\n", + " {\"utm_x\": gps_utm_x, \"utm_y\": gps_utm_y, \"waterdepth\": depth}\n", + ")\n", + "\n", + "# Raveling the veocity data to correspond with 'ADCP_points' and filtering out velocity data bellow the river bottom\n", + "ADCP_points[\"east_velocity\"] = np.ravel(transect_1_2.vel[0, :, :]) * river_bottom_filter\n", + "ADCP_points[\"north_velocity\"] = (\n", + " np.ravel(transect_1_2.vel[1, :, :]) * river_bottom_filter\n", + ")\n", + "ADCP_points[\"vertical_velocity\"] = (\n", + " np.ravel(transect_1_2.vel[2, :, :]) * river_bottom_filter\n", + ")\n", + "ADCP_points = ADCP_points.dropna()\n", "\n", "# Show points\n", "ADCP_points" @@ -1226,29 +1229,33 @@ "metadata": {}, "outputs": [], "source": [ - "# Project velocity onto ideal tansect \n", - "ADCP_ideal= pd.DataFrame()\n", - "ADCP_ideal['east_velocity'] = interp.griddata(\n", - " ADCP_points[['utm_x','utm_y','waterdepth']],\n", - " ADCP_points['east_velocity'],\n", - " ADCP_ideal_points[['utm_x','utm_y','waterdepth']],\n", - " method='linear'\n", - " )\n", - "ADCP_ideal['north_velocity'] = interp.griddata(\n", - " ADCP_points[['utm_x','utm_y','waterdepth']],\n", - " ADCP_points['north_velocity'],\n", - " ADCP_ideal_points[['utm_x','utm_y','waterdepth']],\n", - " method='linear'\n", - " )\n", - "ADCP_ideal['vertical_velocity'] = interp.griddata(\n", - " ADCP_points[['utm_x','utm_y','waterdepth']],\n", - " ADCP_points['vertical_velocity'],\n", - " ADCP_ideal_points[['utm_x','utm_y','waterdepth']],\n", - " method='linear'\n", - " )\n", + "# Project velocity onto ideal tansect\n", + "ADCP_ideal = pd.DataFrame()\n", + "ADCP_ideal[\"east_velocity\"] = interp.griddata(\n", + " ADCP_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " ADCP_points[\"east_velocity\"],\n", + " ADCP_ideal_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " method=\"linear\",\n", + ")\n", + "ADCP_ideal[\"north_velocity\"] = interp.griddata(\n", + " ADCP_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " ADCP_points[\"north_velocity\"],\n", + " ADCP_ideal_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " method=\"linear\",\n", + ")\n", + "ADCP_ideal[\"vertical_velocity\"] = interp.griddata(\n", + " ADCP_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " ADCP_points[\"vertical_velocity\"],\n", + " ADCP_ideal_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " method=\"linear\",\n", + ")\n", "\n", "# Calculate the magnitude of the velocity components\n", - "ADCP_ideal['magnitude']= np.sqrt(ADCP_ideal.east_velocity**2+ADCP_ideal.north_velocity**2+ADCP_ideal.vertical_velocity**2)" + "ADCP_ideal[\"magnitude\"] = np.sqrt(\n", + " ADCP_ideal.east_velocity**2\n", + " + ADCP_ideal.north_velocity**2\n", + " + ADCP_ideal.vertical_velocity**2\n", + ")" ] }, { @@ -1298,29 +1305,31 @@ ], "source": [ "# Set the contour color bar bounds\n", - "min_plot=0\n", - "max_plot=3\n", + "min_plot = 0\n", + "max_plot = 3\n", "\n", - "# The Contour of velocity magnitude from the ADCP transect data \n", - "fig,ax = plt.subplots(figsize=(10,4.4))\n", + "# The Contour of velocity magnitude from the ADCP transect data\n", + "fig, ax = plt.subplots(figsize=(10, 4.4))\n", "\n", "contour_plot = plt.tripcolor(\n", - " ADCP_ideal_points.utm_x, \n", - " -ADCP_ideal_points.waterdepth, \n", - " ADCP_ideal.magnitude*river_bottom_filter,\n", + " ADCP_ideal_points.utm_x,\n", + " -ADCP_ideal_points.waterdepth,\n", + " ADCP_ideal.magnitude * river_bottom_filter,\n", " vmin=min_plot,\n", - " vmax=max_plot\n", + " vmax=max_plot,\n", ")\n", "\n", - "plt.xlabel('$UTM_x (m)$')\n", - "plt.ylabel('Water Depth (m)')\n", - "cbar= plt.colorbar(contour_plot)\n", - "cbar.set_label('velocity [m/s]')\n", - "plt.ylim([-8.5,-1])\n", - "plt.xlim([400950,401090])\n", - "plt.plot(ideal_points.utm_x,-bottom_avg,'k', label= 'river bottom')\n", - "plt.legend(loc= 7)\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "plt.xlabel(\"$UTM_x (m)$\")\n", + "plt.ylabel(\"Water Depth (m)\")\n", + "cbar = plt.colorbar(contour_plot)\n", + "cbar.set_label(\"velocity [m/s]\")\n", + "plt.ylim([-8.5, -1])\n", + "plt.xlim([400950, 401090])\n", + "plt.plot(ideal_points.utm_x, -bottom_avg, \"k\", label=\"river bottom\")\n", + "plt.legend(loc=7)\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)" ] }, @@ -1363,38 +1372,39 @@ ], "source": [ "# Interpolate points by getting min & max first\n", - "start_utmx = min(ADCP_ideal_points.utm_x)\n", + "start_utmx = min(ADCP_ideal_points.utm_x)\n", "start_utmy = min(ADCP_ideal_points.utm_y)\n", "\n", "end_utmx = max(ADCP_ideal_points.utm_x)\n", "end_utmy = min(ADCP_ideal_points.utm_y)\n", "\n", "# Using N points for x calculate the y values on an ideal transect from the linear regression used earlier\n", - "N=10\n", + "N = 10\n", "utm_x_ideal_downsampeled = np.linspace(start_utmx, end_utmx, N)\n", - "utm_y_ideal_downsampeled = (a*utm_x_ideal_downsampeled) + b\n", - "\n", + "utm_y_ideal_downsampeled = (a * utm_x_ideal_downsampeled) + b\n", "\n", "\n", "# Plot the Idealized Transect for comparison\n", "plt.plot(\n", - " ADCP_ideal_points.utm_x, \n", - " ADCP_ideal_points.utm_y, \n", - " '.', ms=1, label='Ideal Transect'\n", - " )\n", + " ADCP_ideal_points.utm_x, ADCP_ideal_points.utm_y, \".\", ms=1, label=\"Ideal Transect\"\n", + ")\n", "\n", "# Plot the downsampled transect\n", "plt.plot(\n", - " utm_x_ideal_downsampeled, \n", - " utm_y_ideal_downsampeled, \n", - " 'ro', label='Down Sampled Ideal Transect')\n", + " utm_x_ideal_downsampeled,\n", + " utm_y_ideal_downsampeled,\n", + " \"ro\",\n", + " label=\"Down Sampled Ideal Transect\",\n", + ")\n", "\n", "\n", "# Plot settings\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)\n", - "plt.xlabel('$UTM_x$')\n", - "plt.ylabel('$UTM_y$')\n", + "plt.xlabel(\"$UTM_x$\")\n", + "plt.ylabel(\"$UTM_y$\")\n", "plt.legend()" ] }, @@ -1435,52 +1445,46 @@ ], "source": [ "# Create an idealized depth N layers deep\n", - "N_layers=12\n", + "N_layers = 12\n", "downsampled_depth = np.linspace(\n", - " transect_1_2.range.min(), \n", - " np.nanmax(bottom_avg), \n", - " N_layers\n", - " )\n", + " transect_1_2.range.min(), np.nanmax(bottom_avg), N_layers\n", + ")\n", "\n", - "# Repeat this over the N points of the DownSampled Ideal Transect above \n", - "depth_ideal_points_downsampled = np.repeat(\n", - " downsampled_depth,\n", - " N\n", - " )\n", + "# Repeat this over the N points of the DownSampled Ideal Transect above\n", + "depth_ideal_points_downsampled = np.repeat(downsampled_depth, N)\n", "\n", "# Tile the x, y over the N of layers to add to a DataFrame\n", - "utm_x_ideal_points_downsampled= np.tile(\n", - " utm_x_ideal_downsampeled, \n", - " N_layers\n", - " )\n", - "utm_y_ideal_points_downsampled= np.tile(\n", - " utm_y_ideal_downsampeled, \n", - " N_layers\n", - " )\n", + "utm_x_ideal_points_downsampled = np.tile(utm_x_ideal_downsampeled, N_layers)\n", + "utm_y_ideal_points_downsampled = np.tile(utm_y_ideal_downsampeled, N_layers)\n", "\n", "# Create a Dataframe of our idealized x,y,depth points\n", - "ADCP_ideal_points_downsamples=pd.DataFrame({\n", - " 'utm_x': utm_x_ideal_points_downsampled, \n", - " 'utm_y': utm_y_ideal_points_downsampled,\n", - " 'waterdepth': depth_ideal_points_downsampled\n", - " })\n", + "ADCP_ideal_points_downsamples = pd.DataFrame(\n", + " {\n", + " \"utm_x\": utm_x_ideal_points_downsampled,\n", + " \"utm_y\": utm_y_ideal_points_downsampled,\n", + " \"waterdepth\": depth_ideal_points_downsampled,\n", + " }\n", + ")\n", "\n", "# Plot the Down sampled data points at the x locations\n", - "fig,ax = plt.subplots(figsize=(10,4.4))\n", - "plt.plot(ADCP_ideal_points_downsamples.utm_x, \n", - " ADCP_ideal_points_downsamples.waterdepth * -1, \n", - " 'ro', \n", - " )\n", + "fig, ax = plt.subplots(figsize=(10, 4.4))\n", + "plt.plot(\n", + " ADCP_ideal_points_downsamples.utm_x,\n", + " ADCP_ideal_points_downsamples.waterdepth * -1,\n", + " \"ro\",\n", + ")\n", "\n", "# Plot the ADCP river bed\n", - "plt.plot(ideal_points.utm_x,-bottom_avg,'k', label= 'river bottom')\n", + "plt.plot(ideal_points.utm_x, -bottom_avg, \"k\", label=\"river bottom\")\n", "\n", "# Plot settings\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)\n", - "plt.title('DownSampled Ideal Transect Depth')\n", - "plt.xlabel('$UTM_x [m]$')\n", - "plt.ylabel('$ Depth [m]$')" + "plt.title(\"DownSampled Ideal Transect Depth\")\n", + "plt.xlabel(\"$UTM_x [m]$\")\n", + "plt.ylabel(\"$ Depth [m]$\")" ] }, { @@ -1632,27 +1636,31 @@ } ], "source": [ - "# Project velocity onto ideal tansect \n", - "ADCP_ideal_downsamples= pd.DataFrame()\n", - "ADCP_ideal_downsamples['east_velocity']= interp.griddata(\n", - " ADCP_points[['utm_x','utm_y','waterdepth']],\n", - " ADCP_points['east_velocity'],\n", - " ADCP_ideal_points_downsamples[['utm_x','utm_y','waterdepth']],\n", - " method='linear'\n", - " )\n", - "ADCP_ideal_downsamples['north_velocity']= interp.griddata(\n", - " ADCP_points[['utm_x','utm_y','waterdepth']],\n", - " ADCP_points['north_velocity'],\n", - " ADCP_ideal_points_downsamples[['utm_x','utm_y','waterdepth']],\n", - " method='linear'\n", + "# Project velocity onto ideal tansect\n", + "ADCP_ideal_downsamples = pd.DataFrame()\n", + "ADCP_ideal_downsamples[\"east_velocity\"] = interp.griddata(\n", + " ADCP_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " ADCP_points[\"east_velocity\"],\n", + " ADCP_ideal_points_downsamples[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " method=\"linear\",\n", + ")\n", + "ADCP_ideal_downsamples[\"north_velocity\"] = interp.griddata(\n", + " ADCP_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " ADCP_points[\"north_velocity\"],\n", + " ADCP_ideal_points_downsamples[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " method=\"linear\",\n", + ")\n", + "ADCP_ideal_downsamples[\"vertical_velocity\"] = interp.griddata(\n", + " ADCP_points[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " ADCP_points[\"vertical_velocity\"],\n", + " ADCP_ideal_points_downsamples[[\"utm_x\", \"utm_y\", \"waterdepth\"]],\n", + " method=\"linear\",\n", + ")\n", + "ADCP_ideal_downsamples[\"magnitude\"] = np.sqrt(\n", + " ADCP_ideal_downsamples.east_velocity**2\n", + " + ADCP_ideal_downsamples.north_velocity**2\n", + " + ADCP_ideal_downsamples.vertical_velocity**2\n", ")\n", - "ADCP_ideal_downsamples['vertical_velocity']= interp.griddata(\n", - " ADCP_points[['utm_x','utm_y','waterdepth']],\n", - " ADCP_points['vertical_velocity'],\n", - " ADCP_ideal_points_downsamples[['utm_x','utm_y','waterdepth']],\n", - " method='linear'\n", - " )\n", - "ADCP_ideal_downsamples['magnitude']= np.sqrt(ADCP_ideal_downsamples.east_velocity**2+ADCP_ideal_downsamples.north_velocity**2+ADCP_ideal_downsamples.vertical_velocity**2)\n", "ADCP_ideal_downsamples" ] }, @@ -1682,23 +1690,31 @@ ], "source": [ "# Create a DataFrame of downsampled points\n", - "ideal_downsampeled= [ [x, y] for x, y in zip(utm_x_ideal_downsampeled, utm_y_ideal_downsampeled)] \n", - "ideal_points_downsampled = pd.DataFrame(np.array(ideal_downsampeled), columns= ['utm_x','utm_y'])\n", + "ideal_downsampeled = [\n", + " [x, y] for x, y in zip(utm_x_ideal_downsampeled, utm_y_ideal_downsampeled)\n", + "]\n", + "ideal_points_downsampled = pd.DataFrame(\n", + " np.array(ideal_downsampeled), columns=[\"utm_x\", \"utm_y\"]\n", + ")\n", "\n", - "# River bottom for downsampled ideal transect \n", - "bottom_avg_downsampled= interp.griddata(gps_points, bottom, ideal_points_downsampled, method='linear')\n", + "# River bottom for downsampled ideal transect\n", + "bottom_avg_downsampled = interp.griddata(\n", + " gps_points, bottom, ideal_points_downsampled, method=\"linear\"\n", + ")\n", "\n", "# Create a matrix of depths\n", - "bottom_filter_downsampled = d3d.create_points(x=bottom_avg_downsampled, y=downsampled_depth, waterdepth=1)\n", - "\n", - "# Creating a mask matrix with ones in the area of the river cross section and nan's outside \n", - "river_bottom_filter_downsampled= []\n", - "for index, row in bottom_filter_downsampled.iterrows():\n", - " if row['x'] > row['y']: \n", - " filter= 1 \n", - " else: \n", - " filter= float(\"nan\")\n", - " river_bottom_filter_downsampled= np.append(river_bottom_filter_downsampled, filter)" + "bottom_filter_downsampled = d3d.create_points(\n", + " x=bottom_avg_downsampled, y=downsampled_depth, waterdepth=1\n", + ")\n", + "\n", + "# Creating a mask matrix with ones in the area of the river cross section and nan's outside\n", + "river_bottom_filter_downsampled = []\n", + "for index, row in bottom_filter_downsampled.iterrows():\n", + " if row[\"x\"] > row[\"y\"]:\n", + " filter = 1\n", + " else:\n", + " filter = float(\"nan\")\n", + " river_bottom_filter_downsampled = np.append(river_bottom_filter_downsampled, filter)" ] }, { @@ -1747,28 +1763,30 @@ } ], "source": [ - "# Plotting \n", - "fig,ax = plt.subplots(figsize=(10,4.4))\n", + "# Plotting\n", + "fig, ax = plt.subplots(figsize=(10, 4.4))\n", "contour_plot = plt.tripcolor(\n", - " ADCP_ideal_points_downsamples.utm_x, \n", - " -ADCP_ideal_points_downsamples.waterdepth, \n", - " ADCP_ideal_downsamples.magnitude*river_bottom_filter_downsampled,\n", + " ADCP_ideal_points_downsamples.utm_x,\n", + " -ADCP_ideal_points_downsamples.waterdepth,\n", + " ADCP_ideal_downsamples.magnitude * river_bottom_filter_downsampled,\n", " vmin=min_plot,\n", - " vmax=max_plot\n", - " )\n", + " vmax=max_plot,\n", + ")\n", "\n", "# Plot river bottom for comparison\n", - "plt.plot(ideal_points.utm_x,-bottom_avg,'k', label= 'river bottom')\n", + "plt.plot(ideal_points.utm_x, -bottom_avg, \"k\", label=\"river bottom\")\n", "\n", "# Plot Settings\n", - "plt.xlabel('$UTM_x$ (m)')\n", - "plt.ylabel('Water Depth (m)')\n", - "cbar= plt.colorbar(contour_plot)\n", - "cbar.set_label('Velocity [m/s]')\n", - "plt.ylim([-8.5,-1])\n", - "plt.xlim([400950,401090])\n", - "plt.legend(loc= 7)\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "plt.xlabel(\"$UTM_x$ (m)\")\n", + "plt.ylabel(\"Water Depth (m)\")\n", + "cbar = plt.colorbar(contour_plot)\n", + "cbar.set_label(\"Velocity [m/s]\")\n", + "plt.ylim([-8.5, -1])\n", + "plt.xlim([400950, 401090])\n", + "plt.legend(loc=7)\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)" ] }, @@ -1842,33 +1860,33 @@ "# Use the requests method to obtain 1 day of instantneous gage height data\n", "water_level_USGS_data = river.io.usgs.request_usgs_data(\n", " station=\"15515500\",\n", - " parameter='00065',\n", - " start_date='2010-08-10',\n", - " end_date='2010-08-10',\n", - " data_type='Instantaneous'\n", - " )\n", + " parameter=\"00065\",\n", + " start_date=\"2010-08-10\",\n", + " end_date=\"2010-08-10\",\n", + " data_type=\"Instantaneous\",\n", + ")\n", "\n", "# Plot data\n", "water_level_USGS_data.plot()\n", "\n", "# Plot Settings\n", - "plt.xlabel('Time')\n", - "plt.ylabel('Gage Height (feet)')\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Gage Height (feet)\")\n", "\n", "# Use the requests method to obtain 1 day of instantneous discharge data\n", "discharge_USGS_data = river.io.usgs.request_usgs_data(\n", " station=\"15515500\",\n", - " parameter='00060',\n", - " start_date='2010-08-10',\n", - " end_date='2010-08-10',\n", - " data_type='Instantaneous'\n", - " )\n", + " parameter=\"00060\",\n", + " start_date=\"2010-08-10\",\n", + " end_date=\"2010-08-10\",\n", + " data_type=\"Instantaneous\",\n", + ")\n", "\n", "# Print data\n", "discharge_USGS_data.plot()\n", "# Plot Settings\n", - "plt.xlabel('Time')\n", - "plt.ylabel('Dischage ($f^3/s$)')" + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Dischage ($f^3/s$)\")" ] }, { @@ -1888,10 +1906,12 @@ "outputs": [], "source": [ "# Import the simulated data\n", - "d3d_data = netCDF4.Dataset('data/river/ADCP_transect/tanana81010_final_map.nc')\n", + "d3d_data = netCDF4.Dataset(\"data/river/ADCP_transect/tanana81010_final_map.nc\")\n", "\n", "# Get the ADCP sample points\n", - "ADCP_ideal_points_downsamples_xy = ADCP_ideal_points_downsamples.rename(columns={\"utm_x\": \"x\", \"utm_y\": \"y\"})" + "ADCP_ideal_points_downsamples_xy = ADCP_ideal_points_downsamples.rename(\n", + " columns={\"utm_x\": \"x\", \"utm_y\": \"y\"}\n", + ")" ] }, { @@ -1919,11 +1939,13 @@ ], "source": [ "# Interpolate the Delft3D simulated data onto the the sample points\n", - "variables= ['ucy', 'ucx', 'ucz']\n", - "D3D= d3d.variable_interpolation(d3d_data, variables, points= ADCP_ideal_points_downsamples_xy)\n", + "variables = [\"ucy\", \"ucx\", \"ucz\"]\n", + "D3D = d3d.variable_interpolation(\n", + " d3d_data, variables, points=ADCP_ideal_points_downsamples_xy\n", + ")\n", "\n", "# Calculate the magnitude of the velocity\n", - "D3D['magnitude'] = np.sqrt(D3D.ucy**2 + D3D.ucx**2 + D3D.ucz**2)" + "D3D[\"magnitude\"] = np.sqrt(D3D.ucy**2 + D3D.ucx**2 + D3D.ucz**2)" ] }, { @@ -1972,29 +1994,31 @@ ], "source": [ "# Plot Delft3D interpolated Data\n", - "fig,ax = plt.subplots(figsize=(10,4.4))\n", + "fig, ax = plt.subplots(figsize=(10, 4.4))\n", "contour_plot = plt.tripcolor(\n", - " D3D.x, \n", - " -D3D.waterdepth, \n", - " D3D.magnitude*river_bottom_filter_downsampled,\n", + " D3D.x,\n", + " -D3D.waterdepth,\n", + " D3D.magnitude * river_bottom_filter_downsampled,\n", " vmin=min_plot,\n", " vmax=max_plot,\n", - " #shading='gouraud'\n", - " alpha=1\n", + " # shading='gouraud'\n", + " alpha=1,\n", ")\n", "\n", "# Plot the river bottom calculated frol ADCP for comparison\n", - "plt.plot(ideal_points.utm_x,-bottom_avg,'k', label= 'river bottom')\n", + "plt.plot(ideal_points.utm_x, -bottom_avg, \"k\", label=\"river bottom\")\n", "\n", "# Figure settings\n", - "plt.xlabel('$UTM_x (m)$')\n", - "plt.ylabel('Water Depth (m)')\n", - "cbar= plt.colorbar(contour_plot)\n", - "cbar.set_label('velocity [m/s]')\n", - "plt.ylim([-8.5,-1])\n", - "plt.xlim([400960,401090])\n", - "plt.legend(loc= 7)\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "plt.xlabel(\"$UTM_x (m)$\")\n", + "plt.ylabel(\"Water Depth (m)\")\n", + "cbar = plt.colorbar(contour_plot)\n", + "cbar.set_label(\"velocity [m/s]\")\n", + "plt.ylim([-8.5, -1])\n", + "plt.xlim([400960, 401090])\n", + "plt.legend(loc=7)\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)" ] }, @@ -2021,7 +2045,10 @@ "outputs": [], "source": [ "# L1\n", - "L1_Magnitude= abs(ADCP_ideal_downsamples.magnitude-D3D.magnitude)/ADCP_ideal_downsamples.magnitude" + "L1_Magnitude = (\n", + " abs(ADCP_ideal_downsamples.magnitude - D3D.magnitude)\n", + " / ADCP_ideal_downsamples.magnitude\n", + ")" ] }, { @@ -2039,15 +2066,17 @@ "metadata": {}, "outputs": [], "source": [ - "river_bottom_edge_filter_downsampled= []\n", - "for i in L1_Magnitude:\n", - " if 1 > i: \n", - " filter= 1 \n", - " else: \n", - " filter= float(\"nan\")\n", - " river_bottom_edge_filter_downsampled= np.append(river_bottom_edge_filter_downsampled, filter)\n", - " \n", - "error_filter = river_bottom_edge_filter_downsampled*river_bottom_filter_downsampled" + "river_bottom_edge_filter_downsampled = []\n", + "for i in L1_Magnitude:\n", + " if 1 > i:\n", + " filter = 1\n", + " else:\n", + " filter = float(\"nan\")\n", + " river_bottom_edge_filter_downsampled = np.append(\n", + " river_bottom_edge_filter_downsampled, filter\n", + " )\n", + "\n", + "error_filter = river_bottom_edge_filter_downsampled * river_bottom_filter_downsampled" ] }, { @@ -2079,7 +2108,7 @@ ], "source": [ "# Calculate and priont the Mean Absolute Error\n", - "MAE= np.sum(L1_Magnitude*error_filter)/len(L1_Magnitude[L1_Magnitude< 1000 ])\n", + "MAE = np.sum(L1_Magnitude * error_filter) / len(L1_Magnitude[L1_Magnitude < 1000])\n", "MAE" ] }, @@ -2121,33 +2150,35 @@ ], "source": [ "# Set the min and max error values\n", - "max_plot_error=1\n", - "min_plot_error=0\n", + "max_plot_error = 1\n", + "min_plot_error = 0\n", "\n", "# Plotting the L1 error\n", - "fig,ax = plt.subplots(figsize=(10,4.4))\n", + "fig, ax = plt.subplots(figsize=(10, 4.4))\n", "contour_plot_L1 = plt.tripcolor(\n", - " D3D.x, \n", - " -D3D.waterdepth, \n", - " L1_Magnitude*error_filter,\n", + " D3D.x,\n", + " -D3D.waterdepth,\n", + " L1_Magnitude * error_filter,\n", " vmin=min_plot_error,\n", - " vmax=max_plot_error\n", - " )\n", + " vmax=max_plot_error,\n", + ")\n", "\n", "# Plot the river bottom for comparison\n", - "plt.plot(ideal_points.utm_x,-bottom_avg,'k', label= 'river bottom')\n", + "plt.plot(ideal_points.utm_x, -bottom_avg, \"k\", label=\"river bottom\")\n", "\n", "# Plot settings\n", - "plt.xlim([400960,401090])\n", - "plt.ylim([-8.5,-1])\n", - "plt.xlabel('UTM x (m)')\n", - "plt.ylabel('Water Depth (m)')\n", - "cbar= plt.colorbar(contour_plot_L1)\n", - "cbar.set_label('$L_1$ Velocity Error')\n", - "plt.legend(loc= 7)\n", - "\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", - "plt.xticks(rotation=45)\n" + "plt.xlim([400960, 401090])\n", + "plt.ylim([-8.5, -1])\n", + "plt.xlabel(\"UTM x (m)\")\n", + "plt.ylabel(\"Water Depth (m)\")\n", + "cbar = plt.colorbar(contour_plot_L1)\n", + "cbar.set_label(\"$L_1$ Velocity Error\")\n", + "plt.legend(loc=7)\n", + "\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", + "plt.xticks(rotation=45)" ] }, { @@ -2169,8 +2200,11 @@ "metadata": {}, "outputs": [], "source": [ - "# L2 \n", - "L2_Magnitude= ((ADCP_ideal_downsamples.magnitude-D3D.magnitude)/ADCP_ideal_downsamples.magnitude)**2" + "# L2\n", + "L2_Magnitude = (\n", + " (ADCP_ideal_downsamples.magnitude - D3D.magnitude)\n", + " / ADCP_ideal_downsamples.magnitude\n", + ") ** 2" ] }, { @@ -2202,7 +2236,7 @@ } ], "source": [ - "MSE=np.sum(L2_Magnitude*error_filter)/np.size(L2_Magnitude[L2_Magnitude< 1000])\n", + "MSE = np.sum(L2_Magnitude * error_filter) / np.size(L2_Magnitude[L2_Magnitude < 1000])\n", "MSE" ] }, @@ -2244,29 +2278,31 @@ ], "source": [ "# Create a contour plot of the error\n", - "# Plotting \n", - "fig,ax = plt.subplots(figsize=(10,4.4))\n", + "# Plotting\n", + "fig, ax = plt.subplots(figsize=(10, 4.4))\n", "contour_plot_L2 = plt.tripcolor(\n", - " D3D.x, \n", - " -D3D.waterdepth, \n", - " L2_Magnitude*error_filter,\n", + " D3D.x,\n", + " -D3D.waterdepth,\n", + " L2_Magnitude * error_filter,\n", " vmin=min_plot_error,\n", - " vmax=max_plot_error\n", + " vmax=max_plot_error,\n", ")\n", "\n", "# Plot the river bottom for comparison\n", - "plt.plot(ideal_points.utm_x,-bottom_avg,'k', label= 'river bottom')\n", + "plt.plot(ideal_points.utm_x, -bottom_avg, \"k\", label=\"river bottom\")\n", "\n", "# Plot settings\n", - "plt.xlim([400960,401090])\n", - "plt.ylim([-8.5,-1])\n", - "plt.xlabel('UTM x (m)')\n", - "plt.ylabel('Water Depth (m)')\n", - "cbar= plt.colorbar(contour_plot_L1)\n", - "cbar.set_label('$L_2$ Velocity Error')\n", - "plt.legend(loc= 7)\n", - "\n", - "ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", + "plt.xlim([400960, 401090])\n", + "plt.ylim([-8.5, -1])\n", + "plt.xlabel(\"UTM x (m)\")\n", + "plt.ylabel(\"Water Depth (m)\")\n", + "cbar = plt.colorbar(contour_plot_L1)\n", + "cbar.set_label(\"$L_2$ Velocity Error\")\n", + "plt.legend(loc=7)\n", + "\n", + "ax.get_xaxis().set_major_formatter(\n", + " matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), \",\"))\n", + ")\n", "plt.xticks(rotation=45)" ] }, @@ -2301,7 +2337,7 @@ ], "source": [ "# L inf\n", - "L_inf=np.nanmax(L1_Magnitude*error_filter)\n", + "L_inf = np.nanmax(L1_Magnitude * error_filter)\n", "L_inf" ] }, diff --git a/examples/Delft3D_example.ipynb b/examples/Delft3D_example.ipynb index a87de112b..1c76ca080 100644 --- a/examples/Delft3D_example.ipynb +++ b/examples/Delft3D_example.ipynb @@ -22,14 +22,15 @@ "outputs": [], "source": [ "from os.path import abspath, dirname, join, normpath, relpath\n", - "from mhkit.river.io import d3d \n", + "from mhkit.river.io import d3d\n", "from math import isclose\n", "import scipy.interpolate as interp\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import netCDF4\n", - "plt.rcParams.update({'font.size': 15}) # Set font size of plots title and labels " + "\n", + "plt.rcParams.update({\"font.size\": 15}) # Set font size of plots title and labels" ] }, { @@ -111,16 +112,16 @@ ], "source": [ "# Downloading Data\n", - "datadir = normpath(join(relpath(join('data', 'river', 'd3d'))))\n", - "filename= 'turbineTest_map.nc'\n", - "d3d_data = netCDF4.Dataset(join(datadir,filename)) \n", + "datadir = normpath(join(relpath(join(\"data\", \"river\", \"d3d\"))))\n", + "filename = \"turbineTest_map.nc\"\n", + "d3d_data = netCDF4.Dataset(join(datadir, filename))\n", "\n", "# Printing variable and description\n", "for var in d3d_data.variables.keys():\n", - " try: \n", + " try:\n", " d3d_data[var].long_name\n", " except:\n", - " print(f'\"{var}\"') \n", + " print(f'\"{var}\"')\n", " else:\n", " print(f'\"{var}\": {d3d_data[var].long_name}')" ] @@ -150,7 +151,7 @@ } ], "source": [ - "time= d3d.get_all_time(d3d_data)\n", + "time = d3d.get_all_time(d3d_data)\n", "print(time)" ] }, @@ -186,7 +187,7 @@ ], "source": [ "seconds_run = 62\n", - "time_index=d3d._convert_time(d3d_data,seconds_run=seconds_run)\n", + "time_index = d3d._convert_time(d3d_data, seconds_run=seconds_run)\n", "print(time_index)" ] }, @@ -229,14 +230,14 @@ } ], "source": [ - "# Getting variable data \n", - "variable= 'ucx' \n", - "var_data_df= d3d.get_all_data_points(d3d_data, variable, time_index=4)\n", + "# Getting variable data\n", + "variable = \"ucx\"\n", + "var_data_df = d3d.get_all_data_points(d3d_data, variable, time_index=4)\n", "print(var_data_df)\n", "\n", - "# Setting plot limits \n", - "max_plot_vel= 1.25\n", - "min_plot_vel=0.5" + "# Setting plot limits\n", + "max_plot_vel = 1.25\n", + "min_plot_vel = 0.5" ] }, { @@ -331,21 +332,21 @@ ], "source": [ "# Use rectangular grid min and max to find flume centerline\n", - "xmin=var_data_df.x.max()\n", - "xmax=var_data_df.x.min()\n", + "xmin = var_data_df.x.max()\n", + "xmax = var_data_df.x.min()\n", "\n", - "ymin=var_data_df.y.max()\n", - "ymax=var_data_df.y.min()\n", + "ymin = var_data_df.y.max()\n", + "ymax = var_data_df.y.min()\n", "\n", - "waterdepth_min=var_data_df.waterdepth.max()\n", - "waterdepth_max=var_data_df.waterdepth.min()\n", + "waterdepth_min = var_data_df.waterdepth.max()\n", + "waterdepth_max = var_data_df.waterdepth.min()\n", "\n", - "# Creating one array and 2 points \n", + "# Creating one array and 2 points\n", "x = np.linspace(xmin, xmax)\n", - "y = np.mean([ymin,ymax])\n", - "waterdepth = np.mean([waterdepth_min,waterdepth_max])\n", + "y = np.mean([ymin, ymax])\n", + "waterdepth = np.mean([waterdepth_min, waterdepth_max])\n", "\n", - "# Creating an array of points \n", + "# Creating an array of points\n", "cline_points = d3d.create_points(x, y, waterdepth)\n", "cline_points.head()" ] @@ -390,19 +391,19 @@ "source": [ "# Interpolate raw data onto the centerline\n", "cline_variable = interp.griddata(\n", - " var_data_df[['x','y','waterdepth']], \n", + " var_data_df[[\"x\", \"y\", \"waterdepth\"]],\n", " var_data_df[variable],\n", - " cline_points[['x','y','waterdepth']]\n", - ") \n", + " cline_points[[\"x\", \"y\", \"waterdepth\"]],\n", + ")\n", "\n", "# Plotting\n", - "plt.figure(figsize=(12,5))\n", + "plt.figure(figsize=(12, 5))\n", "plt.plot(x, cline_variable)\n", "\n", "plt.grid()\n", - "plt.xlabel('x (m)')\n", - "plt.ylabel('$u_x$ [m/s]' )\n", - "plt.title(f'Centerline Velocity at: {var_data_df.time[1]} s')" + "plt.xlabel(\"x (m)\")\n", + "plt.ylabel(\"$u_x$ [m/s]\")\n", + "plt.title(f\"Centerline Velocity at: {var_data_df.time[1]} s\")" ] }, { @@ -451,23 +452,23 @@ "layer = 2\n", "layer_data = d3d.get_layer_data(d3d_data, variable, layer)\n", "\n", - "# Plotting \n", - "plt.figure(figsize=(12,4))\n", + "# Plotting\n", + "plt.figure(figsize=(12, 4))\n", "contour_plot = plt.tricontourf(\n", " layer_data.x,\n", - " layer_data.y, \n", - " layer_data.v, \n", + " layer_data.y,\n", + " layer_data.v,\n", " vmin=min_plot_vel,\n", " vmax=max_plot_vel,\n", - " levels=np.linspace(min_plot_vel,max_plot_vel,10)\n", + " levels=np.linspace(min_plot_vel, max_plot_vel, 10),\n", ")\n", - " \n", + "\n", "cbar = plt.colorbar(contour_plot)\n", - "cbar.set_label('$u_x$ [m/s]')\n", - " \n", - "plt.xlabel('x [m]')\n", - "plt.ylabel('y [m]')\n", - "plt.title(f'Velocity on Layer {layer} at Time: {layer_data.time[1]} s')" + "cbar.set_label(\"$u_x$ [m/s]\")\n", + "\n", + "plt.xlabel(\"x [m]\")\n", + "plt.ylabel(\"y [m]\")\n", + "plt.title(f\"Velocity on Layer {layer} at Time: {layer_data.time[1]} s\")" ] }, { @@ -617,9 +618,9 @@ "# Create x-y plane at z level midpoint\n", "x2 = np.linspace(xmin, xmax, num=100)\n", "y_contour = np.linspace(ymin, ymax, num=40)\n", - "z2 = np.mean([waterdepth_min,waterdepth_max])\n", + "z2 = np.mean([waterdepth_min, waterdepth_max])\n", "\n", - "contour_points = d3d.create_points(x2, y_contour, z2) \n", + "contour_points = d3d.create_points(x2, y_contour, z2)\n", "contour_points" ] }, @@ -639,9 +640,9 @@ "outputs": [], "source": [ "contour_variable = interp.griddata(\n", - " var_data_df[['x','y','waterdepth']],\n", + " var_data_df[[\"x\", \"y\", \"waterdepth\"]],\n", " var_data_df[variable],\n", - " contour_points[['x','y','waterdepth']]\n", + " contour_points[[\"x\", \"y\", \"waterdepth\"]],\n", ")" ] }, @@ -673,23 +674,23 @@ } ], "source": [ - "# Plotting \n", - "plt.figure(figsize=(12,4))\n", + "# Plotting\n", + "plt.figure(figsize=(12, 4))\n", "contour_plot = plt.tricontourf(\n", " contour_points.x,\n", " contour_points.y,\n", " contour_variable,\n", " vmin=min_plot_vel,\n", " vmax=max_plot_vel,\n", - " levels=np.linspace(min_plot_vel,max_plot_vel,10)\n", + " levels=np.linspace(min_plot_vel, max_plot_vel, 10),\n", ")\n", "\n", - "plt.xlabel('x (m)')\n", - "plt.ylabel('y (m)')\n", - "plt.title(f'Velocity on x-y Plane')\n", + "plt.xlabel(\"x (m)\")\n", + "plt.ylabel(\"y (m)\")\n", + "plt.title(f\"Velocity on x-y Plane\")\n", "\n", - "cbar= plt.colorbar(contour_plot)\n", - "cbar.set_label(f'$u_x$ [m/s]')" + "cbar = plt.colorbar(contour_plot)\n", + "cbar.set_label(f\"$u_x$ [m/s]\")" ] }, { @@ -925,33 +926,29 @@ } ], "source": [ - "# Calculating turbulent intensity \n", - "TI=d3d.turbulent_intensity(\n", - " d3d_data,\n", - " points=contour_points,\n", - " intermediate_values=True\n", - ") \n", + "# Calculating turbulent intensity\n", + "TI = d3d.turbulent_intensity(d3d_data, points=contour_points, intermediate_values=True)\n", "\n", - "# Creating new plot limits \n", - "max_plot_TI=27\n", - "min_plot_TI=0\n", + "# Creating new plot limits\n", + "max_plot_TI = 27\n", + "min_plot_TI = 0\n", "\n", - "# Plotting \n", - "plt.figure(figsize=(12,4))\n", + "# Plotting\n", + "plt.figure(figsize=(12, 4))\n", "contour_plot = plt.tricontourf(\n", - " TI.x, \n", - " TI.y, \n", + " TI.x,\n", + " TI.y,\n", " TI.turbulent_intensity,\n", - " vmin=min_plot_TI, \n", + " vmin=min_plot_TI,\n", " vmax=max_plot_TI,\n", - " levels=np.linspace(min_plot_TI,max_plot_TI,10)\n", + " levels=np.linspace(min_plot_TI, max_plot_TI, 10),\n", ")\n", "\n", - "plt.xlabel('x (m)')\n", - "plt.ylabel('y (m)')\n", - "plt.title('Turbulent Intensity')\n", - "cbar= plt.colorbar(contour_plot)\n", - "cbar.set_label('Turbulent Intensity [%]')\n", + "plt.xlabel(\"x (m)\")\n", + "plt.ylabel(\"y (m)\")\n", + "plt.title(\"Turbulent Intensity\")\n", + "cbar = plt.colorbar(contour_plot)\n", + "cbar.set_label(\"Turbulent Intensity [%]\")\n", "\n", "TI" ] @@ -1183,37 +1180,39 @@ } ], "source": [ - "variables= ['turkin1', 'ucx', 'ucy', 'ucz']\n", + "variables = [\"turkin1\", \"ucx\", \"ucy\", \"ucz\"]\n", "\n", - "Var= d3d.variable_interpolation(d3d_data, variables, points='faces', edges = 'nearest')\n", + "Var = d3d.variable_interpolation(d3d_data, variables, points=\"faces\", edges=\"nearest\")\n", "\n", "# Replacing negative numbers close to zero with zero\n", - "neg_index=np.where(Var['turkin1']<0)# Finding negative numbers\n", + "neg_index = np.where(Var[\"turkin1\"] < 0) # Finding negative numbers\n", "\n", - "# Determining if negative number are close to zero \n", - "zero_bool= np.isclose(\n", - " Var['turkin1'][Var['turkin1']<0].array, \n", - " np.zeros(len(Var['turkin1'][Var['turkin1']<0].array)),\n", - " atol=1.0e-4\n", + "# Determining if negative number are close to zero\n", + "zero_bool = np.isclose(\n", + " Var[\"turkin1\"][Var[\"turkin1\"] < 0].array,\n", + " np.zeros(len(Var[\"turkin1\"][Var[\"turkin1\"] < 0].array)),\n", + " atol=1.0e-4,\n", ")\n", "\n", - "# Identifying the location of negative values close to zero \n", - "zero_ind= neg_index[0][zero_bool] \n", + "# Identifying the location of negative values close to zero\n", + "zero_ind = neg_index[0][zero_bool]\n", "\n", "# Identifying the location of negative number that are not close to zero\n", - "non_zero_ind= neg_index[0][~zero_bool]\n", + "non_zero_ind = neg_index[0][~zero_bool]\n", "\n", - "# Replacing negative number close to zero with zero \n", - "Var.loc[zero_ind,'turkin1']=np.zeros(len(zero_ind)) \n", + "# Replacing negative number close to zero with zero\n", + "Var.loc[zero_ind, \"turkin1\"] = np.zeros(len(zero_ind))\n", "\n", - "# Replacing negative numbers not close to zero with nan \n", - "Var.loc[non_zero_ind,'turkin1']=[np.nan]*len(non_zero_ind)\n", + "# Replacing negative numbers not close to zero with nan\n", + "Var.loc[non_zero_ind, \"turkin1\"] = [np.nan] * len(non_zero_ind)\n", "\n", - "# Calculating the root mean squared velocity \n", - "Var['u_mag']=d3d.unorm(np.array(Var['ucx']),np.array(Var['ucy']), np.array(Var['ucz']))\n", + "# Calculating the root mean squared velocity\n", + "Var[\"u_mag\"] = d3d.unorm(\n", + " np.array(Var[\"ucx\"]), np.array(Var[\"ucy\"]), np.array(Var[\"ucz\"])\n", + ")\n", "\n", - "# Calculating turbulent intensity as a percent \n", - "Var['turbulent_intensity']= (np.sqrt(2/3*Var['turkin1'])/Var['u_mag'])*100 \n", + "# Calculating turbulent intensity as a percent\n", + "Var[\"turbulent_intensity\"] = (np.sqrt(2 / 3 * Var[\"turkin1\"]) / Var[\"u_mag\"]) * 100\n", "\n", "Var" ] @@ -1258,43 +1257,47 @@ } ], "source": [ - "turbine_x_loc= 6 \n", - "turbine_diameter= 0.7\n", - "N=1\n", - "x_sample = turbine_x_loc+N*turbine_diameter\n", + "turbine_x_loc = 6\n", + "turbine_diameter = 0.7\n", + "N = 1\n", + "x_sample = turbine_x_loc + N * turbine_diameter\n", "y_samples = np.linspace(ymin, ymax, num=40)\n", - "waterdepth_samples = np.linspace(waterdepth_min,waterdepth_max, num=256)\n", + "waterdepth_samples = np.linspace(waterdepth_min, waterdepth_max, num=256)\n", "\n", - "variables= ['turkin1', 'ucx', 'ucy', 'ucz']\n", - "sample_points = d3d.create_points(x_sample, y_samples, waterdepth_samples) \n", + "variables = [\"turkin1\", \"ucx\", \"ucy\", \"ucz\"]\n", + "sample_points = d3d.create_points(x_sample, y_samples, waterdepth_samples)\n", "\n", - "Var_sample= d3d.variable_interpolation(d3d_data, variables, points= sample_points, edges = 'nearest')\n", + "Var_sample = d3d.variable_interpolation(\n", + " d3d_data, variables, points=sample_points, edges=\"nearest\"\n", + ")\n", "\n", - "#root mean squared calculation \n", - "Var_sample['u_mag']=d3d.unorm(\n", - " np.array(Var_sample['ucx']),\n", - " np.array(Var_sample['ucy']), \n", - " np.array(Var_sample['ucz'])\n", - ") \n", + "# root mean squared calculation\n", + "Var_sample[\"u_mag\"] = d3d.unorm(\n", + " np.array(Var_sample[\"ucx\"]),\n", + " np.array(Var_sample[\"ucy\"]),\n", + " np.array(Var_sample[\"ucz\"]),\n", + ")\n", "# turbulent intesity calculation\n", - "Var_sample['turbulent_intensity']= np.sqrt(2/3*Var_sample['turkin1'])/Var_sample['u_mag']*100 \n", + "Var_sample[\"turbulent_intensity\"] = (\n", + " np.sqrt(2 / 3 * Var_sample[\"turkin1\"]) / Var_sample[\"u_mag\"] * 100\n", + ")\n", "\n", - "# Plotting \n", - "plt.figure(figsize=(10,4.4))\n", + "# Plotting\n", + "plt.figure(figsize=(10, 4.4))\n", "contour_plot = plt.tricontourf(\n", - " Var_sample.y, \n", - " Var_sample.waterdepth, \n", + " Var_sample.y,\n", + " Var_sample.waterdepth,\n", " Var_sample.turbulent_intensity,\n", - " vmin=min_plot_TI, \n", + " vmin=min_plot_TI,\n", " vmax=max_plot_TI,\n", - " levels=np.linspace(min_plot_TI,max_plot_TI,10)\n", + " levels=np.linspace(min_plot_TI, max_plot_TI, 10),\n", ")\n", "\n", - "plt.xlabel('y (m)')\n", - "plt.ylabel('z (m)')\n", - "plt.title('Turbulent Intensity')\n", - "cbar= plt.colorbar(contour_plot)\n", - "cbar.set_label('Turbulent Intensity [%]')" + "plt.xlabel(\"y (m)\")\n", + "plt.ylabel(\"z (m)\")\n", + "plt.title(\"Turbulent Intensity\")\n", + "cbar = plt.colorbar(contour_plot)\n", + "cbar.set_label(\"Turbulent Intensity [%]\")" ] }, { diff --git a/examples/PacWave_resource_characterization_example.ipynb b/examples/PacWave_resource_characterization_example.ipynb index 80594fba1..0b4248f7a 100644 --- a/examples/PacWave_resource_characterization_example.ipynb +++ b/examples/PacWave_resource_characterization_example.ipynb @@ -24,7 +24,7 @@ "from sklearn.mixture import GaussianMixture\n", "from mhkit.wave.io import ndbc\n", "import matplotlib.pyplot as plt\n", - "from matplotlib import colors \n", + "from matplotlib import colors\n", "from scipy import stats\n", "import pandas as pd\n", "import numpy as np\n", @@ -32,12 +32,15 @@ "import os\n", "\n", "import matplotlib.pylab as pylab\n", - "params = {'legend.fontsize': 'x-large',\n", - " 'figure.figsize': (15, 5),\n", - " 'axes.labelsize': 'x-large',\n", - " 'axes.titlesize':'x-large',\n", - " 'xtick.labelsize':'x-large',\n", - " 'ytick.labelsize':'x-large'}\n", + "\n", + "params = {\n", + " \"legend.fontsize\": \"x-large\",\n", + " \"figure.figsize\": (15, 5),\n", + " \"axes.labelsize\": \"x-large\",\n", + " \"axes.titlesize\": \"x-large\",\n", + " \"xtick.labelsize\": \"x-large\",\n", + " \"ytick.labelsize\": \"x-large\",\n", + "}\n", "pylab.rcParams.update(params)" ] }, @@ -207,15 +210,30 @@ } ], "source": [ - "m = folium.Map(location=[44.613600975457715, -123.74317583354498], zoom_start=9, tiles=\"Stamen Terrain\", control_scale = True)\n", + "m = folium.Map(\n", + " location=[44.613600975457715, -123.74317583354498],\n", + " zoom_start=9,\n", + " tiles=\"Stamen Terrain\",\n", + " control_scale=True,\n", + ")\n", "\n", "tooltip = \"NDBC 46050\"\n", - "folium.Marker([44.669, -124.546], popup=\" Water depth: 160 m\", tooltip=tooltip).add_to(m)\n", + "folium.Marker(\n", + " [44.669, -124.546], popup=\" Water depth: 160 m\", tooltip=tooltip\n", + ").add_to(m)\n", "\n", "tooltip = \"PACWAVE North\"\n", - "folium.Marker([44.69, -124.13472222222222], tooltip=tooltip, icon=folium.Icon(color='green',icon=\"th-large\")).add_to(m)\n", + "folium.Marker(\n", + " [44.69, -124.13472222222222],\n", + " tooltip=tooltip,\n", + " icon=folium.Icon(color=\"green\", icon=\"th-large\"),\n", + ").add_to(m)\n", "tooltip = \"PACWAVE South\"\n", - "folium.Marker([44.58444444444444, -124.2125], tooltip=tooltip, icon=folium.Icon(color='red', icon=\"th\")).add_to(m)\n", + "folium.Marker(\n", + " [44.58444444444444, -124.2125],\n", + " tooltip=tooltip,\n", + " icon=folium.Icon(color=\"red\", icon=\"th\"),\n", + ").add_to(m)\n", "\n", "m.save(\"index.png\")\n", "\n", @@ -259,7 +277,7 @@ ], "source": [ "# Get buoy metadata\n", - "buoy_number = '46050' \n", + "buoy_number = \"46050\"\n", "buoy_metadata = ndbc.get_buoy_metadata(buoy_number)\n", "print(\"Buoy Metadata:\")\n", "for key, value in buoy_metadata.items():\n", @@ -631,17 +649,17 @@ ], "source": [ "# Spectral wave density for buoy 46050\n", - "parameter = 'swden'\n", + "parameter = \"swden\"\n", "\n", "\n", "# Request list of available files\n", - "ndbc_available_data= ndbc.available_data(parameter, buoy_number)\n", + "ndbc_available_data = ndbc.available_data(parameter, buoy_number)\n", "\n", "# Pass file names to NDBC and request the data\n", - "filenames = ndbc_available_data['filename']\n", + "filenames = ndbc_available_data[\"filename\"]\n", "ndbc_requested_data = ndbc.request_data(parameter, filenames)\n", "\n", - "ndbc_requested_data['2020']" + "ndbc_requested_data[\"2020\"]" ] }, { @@ -1048,13 +1066,13 @@ } ], "source": [ - "ndbc_data={}\n", + "ndbc_data = {}\n", "# Create a Datetime Index and remove NOAA date columns for each year\n", "for year in ndbc_requested_data:\n", " year_data = ndbc_requested_data[year]\n", " ndbc_data[year] = ndbc.to_datetime_index(parameter, year_data)\n", - " \n", - "ndbc_data['2020']" + "\n", + "ndbc_data[\"2020\"]" ] }, { @@ -1073,11 +1091,11 @@ "outputs": [], "source": [ "# Intialize empty lists to store the results from each year\n", - "Hm0_list=[]\n", - "Te_list=[]\n", - "J_list=[]\n", - "Tp_list=[]\n", - "Tz_list=[]\n", + "Hm0_list = []\n", + "Te_list = []\n", + "J_list = []\n", + "Tp_list = []\n", + "Tz_list = []\n", "\n", "# Iterate over each year and save the result in the initalized dictionary\n", "for year in ndbc_data:\n", @@ -1085,26 +1103,26 @@ " year_data = data_raw[data_raw != 999.0].dropna()\n", " Hm0_list.append(resource.significant_wave_height(year_data.T))\n", " Te_list.append(resource.energy_period(year_data.T))\n", - " J_list.append(resource.energy_flux(year_data.T, h=399.))\n", + " J_list.append(resource.energy_flux(year_data.T, h=399.0))\n", " Tp_list.append(resource.peak_period(year_data.T))\n", " Tz_list.append(resource.average_zero_crossing_period(year_data.T))\n", - " \n", + "\n", "# Concatenate list of Series into a single DataFrame\n", - "Te = pd.concat(Te_list ,axis=0)\n", - "Tp = pd.concat(Tp_list ,axis=0)\n", - "Hm0 = pd.concat(Hm0_list ,axis=0)\n", - "J = pd.concat(J_list ,axis=0)\n", - "Tz = pd.concat(Tz_list ,axis=0)\n", - "data = pd.concat([Hm0, Te, Tp, J, Tz],axis=1)\n", + "Te = pd.concat(Te_list, axis=0)\n", + "Tp = pd.concat(Tp_list, axis=0)\n", + "Hm0 = pd.concat(Hm0_list, axis=0)\n", + "J = pd.concat(J_list, axis=0)\n", + "Tz = pd.concat(Tz_list, axis=0)\n", + "data = pd.concat([Hm0, Te, Tp, J, Tz], axis=1)\n", "\n", "# Calculate wave steepness\n", - "data['Sm'] = data.Hm0 / (9.81/(2*np.pi) * data.Tz**2)\n", + "data[\"Sm\"] = data.Hm0 / (9.81 / (2 * np.pi) * data.Tz**2)\n", "\n", "# Drop any NaNs created from the calculation of Hm0 or Te\n", "data.dropna(inplace=True)\n", "# Sort the DateTime index\n", "data.sort_index(inplace=True)\n", - "#data" + "# data" ] }, { @@ -1140,20 +1158,22 @@ "# Start by cleaning the data of outliers\n", "data_clean = data[data.Hm0 < 20]\n", "sigma = data_clean.J.std()\n", - "data_clean = data_clean[data_clean.J > (data_clean.J.mean() - 0.9* sigma)]\n", + "data_clean = data_clean[data_clean.J > (data_clean.J.mean() - 0.9 * sigma)]\n", "\n", - "# Organizing the cleaned data \n", - "Hm0=data_clean.Hm0\n", - "Te=data_clean.Te\n", - "J=data_clean.J\n", + "# Organizing the cleaned data\n", + "Hm0 = data_clean.Hm0\n", + "Te = data_clean.Te\n", + "J = data_clean.J\n", "\n", - "# Setting the bins for the resource frequency and power distribution \n", + "# Setting the bins for the resource frequency and power distribution\n", "Hm0_bin_size = 0.5\n", - "Hm0_edges = np.arange(0,15+Hm0_bin_size,Hm0_bin_size)\n", + "Hm0_edges = np.arange(0, 15 + Hm0_bin_size, Hm0_bin_size)\n", "Te_bin_size = 1\n", - "Te_edges = np.arange(0, 20+Te_bin_size,Te_bin_size)\n", + "Te_edges = np.arange(0, 20 + Te_bin_size, Te_bin_size)\n", "\n", - "fig = mhkit.wave.graphics.plot_avg_annual_energy_matrix(Hm0, Te, J, Hm0_edges=Hm0_edges, Te_edges=Te_edges)" + "fig = mhkit.wave.graphics.plot_avg_annual_energy_matrix(\n", + " Hm0, Te, J, Hm0_edges=Hm0_edges, Te_edges=Te_edges\n", + ")" ] }, { @@ -1212,43 +1232,45 @@ } ], "source": [ - "months=data_clean.index.month\n", - "data_group=data_clean.groupby(months)\n", + "months = data_clean.index.month\n", + "data_group = data_clean.groupby(months)\n", "\n", "QoIs = data_clean.keys()\n", - "fig, axs = plt.subplots(len(QoIs),1, figsize=(8, 12), sharex=True)\n", - "#shade between 25% and 75%\n", + "fig, axs = plt.subplots(len(QoIs), 1, figsize=(8, 12), sharex=True)\n", + "# shade between 25% and 75%\n", "QoIs = data_clean.keys()\n", "for i in range(len(QoIs)):\n", " QoI = QoIs[i]\n", - " axs[i].plot(data_group.median()[QoI], marker='.')\n", + " axs[i].plot(data_group.median()[QoI], marker=\".\")\n", "\n", - " axs[i].fill_between(months.unique(),\n", - " data_group.describe()[QoI, '25%'],\n", - " data_group.describe()[QoI, '75%'],\n", - " alpha=0.2)\n", + " axs[i].fill_between(\n", + " months.unique(),\n", + " data_group.describe()[QoI, \"25%\"],\n", + " data_group.describe()[QoI, \"75%\"],\n", + " alpha=0.2,\n", + " )\n", " axs[i].grid()\n", " mx = data_group.median()[QoI].max()\n", - " mx_month= data_group.median()[QoI].argmax()+1\n", + " mx_month = data_group.median()[QoI].argmax() + 1\n", " mn = data_group.median()[QoI].min()\n", - " mn_month= data_group.median()[QoI].argmin()+1\n", - " print('--------------------------------------------')\n", - " print(f'{QoI} max:{np.round(mx,4)}, month: {mx_month}')\n", - " print(f'{QoI} min:{np.round(mn,4)}, month: {mn_month}')\n", + " mn_month = data_group.median()[QoI].argmin() + 1\n", + " print(\"--------------------------------------------\")\n", + " print(f\"{QoI} max:{np.round(mx,4)}, month: {mx_month}\")\n", + " print(f\"{QoI} min:{np.round(mn,4)}, month: {mn_month}\")\n", "\n", - "plt.setp(axs[5], xlabel='Month')\n", + "plt.setp(axs[5], xlabel=\"Month\")\n", "\n", - "plt.setp(axs[0], ylabel=f'{QoIs[0]} [m]')\n", - "plt.setp(axs[1], ylabel=f'{QoIs[1]} [s]')\n", - "plt.setp(axs[2], ylabel=f'{QoIs[2]} [s]')\n", - "plt.setp(axs[3], ylabel=f'{QoIs[3]} [kW/M]')\n", - "plt.setp(axs[4], ylabel=f'{QoIs[4]} [s]')\n", - "plt.setp(axs[5], ylabel=f'{QoIs[5]} [ ]')\n", + "plt.setp(axs[0], ylabel=f\"{QoIs[0]} [m]\")\n", + "plt.setp(axs[1], ylabel=f\"{QoIs[1]} [s]\")\n", + "plt.setp(axs[2], ylabel=f\"{QoIs[2]} [s]\")\n", + "plt.setp(axs[3], ylabel=f\"{QoIs[3]} [kW/M]\")\n", + "plt.setp(axs[4], ylabel=f\"{QoIs[4]} [s]\")\n", + "plt.setp(axs[5], ylabel=f\"{QoIs[5]} [ ]\")\n", "\n", "\n", "plt.tight_layout()\n", "\n", - "plt.savefig('40650QoIs.png')" + "plt.savefig(\"40650QoIs.png\")" ] }, { @@ -1290,7 +1312,7 @@ ], "source": [ "ax = graphics.monthly_cumulative_distribution(data_clean.J)\n", - "plt.xlim([1000, 1E6])" + "plt.xlim([1000, 1e6])" ] }, { @@ -1325,49 +1347,49 @@ } ], "source": [ - "# Delta time of sea-states \n", - "dt = (data_clean.index[2]-data_clean.index[1]).seconds \n", + "# Delta time of sea-states\n", + "dt = (data_clean.index[2] - data_clean.index[1]).seconds\n", "\n", "# Return period (years) of interest\n", - "period = 100 \n", + "period = 100\n", "copulas100 = contours.environmental_contours(\n", - " data.Hm0, \n", - " data.Te, \n", + " data.Hm0,\n", + " data.Te,\n", " dt,\n", " period,\n", - " method='PCA',\n", + " method=\"PCA\",\n", ")\n", "\n", "period = 50\n", "copulas50 = contours.environmental_contours(\n", - " data.Hm0, \n", - " data.Te, \n", - " dt, \n", - " period, \n", - " method='PCA', \n", + " data.Hm0,\n", + " data.Te,\n", + " dt,\n", + " period,\n", + " method=\"PCA\",\n", ")\n", "\n", "\n", "Te_data = np.array(data_clean.Te)\n", "Hm0_data = np.array(data_clean.Hm0)\n", "\n", - "Hm0_contours = [copulas50['PCA_x1'], copulas100['PCA_x1']]\n", - "Te_contours = [copulas50['PCA_x2'], copulas100['PCA_x2']]\n", + "Hm0_contours = [copulas50[\"PCA_x1\"], copulas100[\"PCA_x1\"]]\n", + "Te_contours = [copulas50[\"PCA_x2\"], copulas100[\"PCA_x2\"]]\n", "\n", - "fig, ax = plt.subplots(figsize=(9,4))\n", + "fig, ax = plt.subplots(figsize=(9, 4))\n", "ax = graphics.plot_environmental_contour(\n", - " Te_data, \n", - " Hm0_data, \n", - " Te_contours, \n", - " Hm0_contours , \n", - " data_label='NDBC 46050', \n", - " contour_label=['50 Year Contour','100 Year Contour'],\n", - " x_label = 'Energy Period, $Te$ [s]',\n", - " y_label = 'Sig. wave height, $Hm0$ [m]', \n", - " ax=ax\n", + " Te_data,\n", + " Hm0_data,\n", + " Te_contours,\n", + " Hm0_contours,\n", + " data_label=\"NDBC 46050\",\n", + " contour_label=[\"50 Year Contour\", \"100 Year Contour\"],\n", + " x_label=\"Energy Period, $Te$ [s]\",\n", + " y_label=\"Sig. wave height, $Hm0$ [m]\",\n", + " ax=ax,\n", ")\n", - "plt.legend(loc='upper left')\n", - "plt.tight_layout() " + "plt.legend(loc=\"upper left\")\n", + "plt.tight_layout()" ] }, { @@ -1390,10 +1412,14 @@ ], "source": [ "print(f\"50-year: Hm0 max {copulas50['PCA_x1'].max().round(1)}\")\n", - "print(f\"50-year: Te at Hm0 max {copulas50['PCA_x2'][copulas50['PCA_x1'].argmax()].round(1)}\")\n", + "print(\n", + " f\"50-year: Te at Hm0 max {copulas50['PCA_x2'][copulas50['PCA_x1'].argmax()].round(1)}\"\n", + ")\n", "print(\"\\n\")\n", "print(f\"100-year: Hm0 max {copulas100['PCA_x1'].max().round(1)}\")\n", - "print(f\"100-year: Te at Hm0 max { copulas100['PCA_x2'][copulas100['PCA_x1'].argmax()].round(1)}\")" + "print(\n", + " f\"100-year: Te at Hm0 max { copulas100['PCA_x2'][copulas100['PCA_x1'].argmax()].round(1)}\"\n", + ")" ] }, { @@ -1423,9 +1449,9 @@ } ], "source": [ - "nHours = (data_clean.index[1] - data_clean.index[0]).seconds/3600\n", + "nHours = (data_clean.index[1] - data_clean.index[0]).seconds / 3600\n", "Total = data_clean.J.sum() * nHours\n", - "print(f'{Total} (W*hr)/m')" + "print(f\"{Total} (W*hr)/m\")" ] }, { @@ -1451,11 +1477,12 @@ } ], "source": [ - "Jsum, xe, ye, bn = stats.binned_statistic_2d(data_clean.Hm0, data_clean.Te, data_clean.J,\n", - " statistic='sum')#,bins=[Te_bins, Hm0_bins])\n", + "Jsum, xe, ye, bn = stats.binned_statistic_2d(\n", + " data_clean.Hm0, data_clean.Te, data_clean.J, statistic=\"sum\"\n", + ") # ,bins=[Te_bins, Hm0_bins])\n", "\n", - "hist_result = np.round(Jsum.sum().sum()/Total,4)\n", - "print(f'{hist_result} = (2D Histogram J) / (1-year total J) ')" + "hist_result = np.round(Jsum.sum().sum() / Total, 4)\n", + "print(f\"{hist_result} = (2D Histogram J) / (1-year total J) \")" ] }, { @@ -1497,30 +1524,29 @@ ], "source": [ "# Compute Gaussian Mixture Model for each number of clusters\n", - "Ns= [4, 8, 16, 32, 64]\n", + "Ns = [4, 8, 16, 32, 64]\n", "X = np.vstack((data_clean.Te.values, data_clean.Hm0.values)).T\n", - "fig, axs = plt.subplots(len(Ns),1, figsize=(8, 24), sharex=True)\n", + "fig, axs = plt.subplots(len(Ns), 1, figsize=(8, 24), sharex=True)\n", "\n", - "results={}\n", + "results = {}\n", "for N in Ns:\n", " gmm = GaussianMixture(n_components=N).fit(X)\n", "\n", " # Save centers and weights\n", - " result = pd.DataFrame(gmm.means_, columns=['Te','Hm0'])\n", - " result['weights'] = gmm.weights_\n", + " result = pd.DataFrame(gmm.means_, columns=[\"Te\", \"Hm0\"])\n", + " result[\"weights\"] = gmm.weights_\n", "\n", - " result['Tp'] = result.Te / 0.858\n", + " result[\"Tp\"] = result.Te / 0.858\n", " results[N] = result\n", - " \n", - " \n", + "\n", " labels = gmm.predict(X)\n", - " \n", + "\n", " i = Ns.index(N)\n", " axs[i].scatter(data_clean.Te.values, data_clean.Hm0.values, c=labels, s=40)\n", - " axs[i].plot(result.Te, result.Hm0, 'm+')\n", - " axs[i].title.set_text(f'{N} Clusters')\n", - " plt.setp(axs[i], ylabel='Energy Period, $T_e$ [s]')\n", - "plt.setp(axs[len(Ns)-1], xlabel='Sig. wave height, $Hm0$ [m') " + " axs[i].plot(result.Te, result.Hm0, \"m+\")\n", + " axs[i].title.set_text(f\"{N} Clusters\")\n", + " plt.setp(axs[i], ylabel=\"Energy Period, $T_e$ [s]\")\n", + "plt.setp(axs[len(Ns) - 1], xlabel=\"Sig. wave height, $Hm0$ [m\")" ] }, { @@ -1555,26 +1581,26 @@ ], "source": [ "w = ndbc_data[year].columns.values\n", - "f = w / 2*np.pi\n", + "f = w / 2 * np.pi\n", "\n", "\n", "for N in results:\n", " result = results[N]\n", - " J=[]\n", + " J = []\n", " for i in range(len(result)):\n", " b = resource.jonswap_spectrum(f, result.Tp[i], result.Hm0[i])\n", - " J.extend([resource.energy_flux(b, h=399.).values[0][0]])\n", - " \n", - " result['J'] = J\n", + " J.extend([resource.energy_flux(b, h=399.0).values[0][0]])\n", + "\n", + " result[\"J\"] = J\n", " results[N] = result\n", "\n", - "ratios={}\n", + "ratios = {}\n", "for N in results:\n", - " J_hr = results[N].J*len(data_clean)\n", - " total_weighted_J= (J_hr * results[N].weights).sum()\n", + " J_hr = results[N].J * len(data_clean)\n", + " total_weighted_J = (J_hr * results[N].weights).sum()\n", " normalized_weighted_J = total_weighted_J / Total\n", " ratios[N] = np.round(normalized_weighted_J, 4)\n", - " \n", + "\n", "pd.Series(ratios)" ] }, diff --git a/examples/SWAN_example.ipynb b/examples/SWAN_example.ipynb index 974ca6cc0..d4eeb4620 100644 --- a/examples/SWAN_example.ipynb +++ b/examples/SWAN_example.ipynb @@ -20,7 +20,7 @@ "from os.path import join\n", "import pandas as pd\n", "\n", - "swan_data_folder = join('data','wave','swan')" + "swan_data_folder = join(\"data\", \"wave\", \"swan\")" ] }, { @@ -41,9 +41,9 @@ "metadata": {}, "outputs": [], "source": [ - "swan_table_file = join(swan_data_folder, 'SWANOUT.DAT')\n", - "swan_block_file = join(swan_data_folder, 'SWANOUTBlock.DAT')\n", - "swan_block_mat_file = join(swan_data_folder, 'SWANOUT.mat')" + "swan_table_file = join(swan_data_folder, \"SWANOUT.DAT\")\n", + "swan_block_file = join(swan_data_folder, \"SWANOUTBlock.DAT\")\n", + "swan_block_mat_file = join(swan_data_folder, \"SWANOUT.mat\")" ] }, { @@ -646,7 +646,7 @@ } ], "source": [ - "swan_block['Significant wave height']" + "swan_block[\"Significant wave height\"]" ] }, { @@ -1082,7 +1082,7 @@ } ], "source": [ - "swan_block_mat['Hsig']" + "swan_block_mat[\"Hsig\"]" ] }, { @@ -1323,10 +1323,9 @@ ], "source": [ "plt.figure()\n", - "plt.tricontourf(swan_table.Xp, swan_table.Yp, \n", - " swan_table.Hsig, levels=256)\n", + "plt.tricontourf(swan_table.Xp, swan_table.Yp, swan_table.Hsig, levels=256)\n", "cbar = plt.colorbar()\n", - "cbar.set_label('Significant wave height [m]')" + "cbar.set_label(\"Significant wave height [m]\")" ] }, { @@ -1349,11 +1348,15 @@ ], "source": [ "plt.figure()\n", - "plt.tricontourf(swan_block_mat_as_table.x, swan_block_mat_as_table.y, \n", - " swan_block_mat_as_table.Hsig,\n", - " levels=256, cmap='viridis')\n", + "plt.tricontourf(\n", + " swan_block_mat_as_table.x,\n", + " swan_block_mat_as_table.y,\n", + " swan_block_mat_as_table.Hsig,\n", + " levels=256,\n", + " cmap=\"viridis\",\n", + ")\n", "cbar = plt.colorbar()\n", - "cbar.set_label('Significant wave height [m]')" + "cbar.set_label(\"Significant wave height [m]\")" ] }, { @@ -1376,11 +1379,15 @@ ], "source": [ "plt.figure()\n", - "plt.tricontourf(swan_block_as_table.x, swan_block_as_table.y, \n", - " swan_block_as_table['Significant wave height'], \n", - " levels=256, cmap='viridis')\n", + "plt.tricontourf(\n", + " swan_block_as_table.x,\n", + " swan_block_as_table.y,\n", + " swan_block_as_table[\"Significant wave height\"],\n", + " levels=256,\n", + " cmap=\"viridis\",\n", + ")\n", "cbar = plt.colorbar()\n", - "cbar.set_label('Significant wave height [m]')" + "cbar.set_label(\"Significant wave height [m]\")" ] }, { @@ -1412,10 +1419,10 @@ ], "source": [ "plt.figure()\n", - "plt.imshow(swan_block_mat['Hsig'])\n", + "plt.imshow(swan_block_mat[\"Hsig\"])\n", "plt.gca().invert_yaxis()\n", "cbar = plt.colorbar()\n", - "cbar.set_label('Significant wave height [m]')" + "cbar.set_label(\"Significant wave height [m]\")" ] } ], diff --git a/examples/WPTO_hindcast_example.ipynb b/examples/WPTO_hindcast_example.ipynb index 9963a9ff0..1b6565797 100644 --- a/examples/WPTO_hindcast_example.ipynb +++ b/examples/WPTO_hindcast_example.ipynb @@ -101,7 +101,7 @@ } ], "source": [ - "lat_lon = [44.624076,-124.280097]\n", + "lat_lon = [44.624076, -124.280097]\n", "region = wave.io.hindcast.hindcast.region_selection(lat_lon)\n", "print(region)" ] @@ -121,12 +121,14 @@ "metadata": {}, "outputs": [], "source": [ - "data_type = '3-hour' # setting the data type to the 3-hour dataset\n", + "data_type = \"3-hour\" # setting the data type to the 3-hour dataset\n", "years = [1995]\n", - "lat_lon = (44.624076,-124.280097) \n", - "parameter = 'significant_wave_height' \n", + "lat_lon = (44.624076, -124.280097)\n", + "parameter = \"significant_wave_height\"\n", "\n", - "Hs, metadata= wave.io.hindcast.hindcast.request_wpto_point_data(data_type,parameter,lat_lon,years)" + "Hs, metadata = wave.io.hindcast.hindcast.request_wpto_point_data(\n", + " data_type, parameter, lat_lon, years\n", + ")" ] }, { @@ -378,11 +380,12 @@ } ], "source": [ - "parameter = 'energy_period'\n", - "lat_lon = ((44.624076,-124.280097),\n", - " (43.489171,-125.152137)) \n", + "parameter = \"energy_period\"\n", + "lat_lon = ((44.624076, -124.280097), (43.489171, -125.152137))\n", "\n", - "Te, metadata = wave.io.hindcast.hindcast.request_wpto_point_data(data_type, parameter, lat_lon, years)\n", + "Te, metadata = wave.io.hindcast.hindcast.request_wpto_point_data(\n", + " data_type, parameter, lat_lon, years\n", + ")\n", "\n", "# View Te from two locations\n", "Te.head()" @@ -582,11 +585,13 @@ } ], "source": [ - "years = [1995, 1996] \n", - "parameter = 'omni-directional_wave_power'\n", - "lat_lon = (44.624076,-124.280097) \n", + "years = [1995, 1996]\n", + "parameter = \"omni-directional_wave_power\"\n", + "lat_lon = (44.624076, -124.280097)\n", "\n", - "J, metadata= wave.io.hindcast.hindcast.request_wpto_point_data(data_type,parameter,lat_lon,years) \n", + "J, metadata = wave.io.hindcast.hindcast.request_wpto_point_data(\n", + " data_type, parameter, lat_lon, years\n", + ")\n", "\n", "J" ] @@ -670,12 +675,14 @@ "metadata": {}, "outputs": [], "source": [ - "data_type = '1-hour' # Setting the data_type to 1 hour data\n", - "years = [1995] \n", - "parameter = ['significant_wave_height','peak_period','mean_wave_direction']\n", - "lat_lon = (44.624076,-124.280097) \n", + "data_type = \"1-hour\" # Setting the data_type to 1 hour data\n", + "years = [1995]\n", + "parameter = [\"significant_wave_height\", \"peak_period\", \"mean_wave_direction\"]\n", + "lat_lon = (44.624076, -124.280097)\n", "\n", - "data, metadata= wave.io.hindcast.hindcast.request_wpto_point_data(data_type,parameter,lat_lon,years) " + "data, metadata = wave.io.hindcast.hindcast.request_wpto_point_data(\n", + " data_type, parameter, lat_lon, years\n", + ")" ] }, { @@ -801,34 +808,35 @@ "from numpy import histogramdd, array, arange, mean\n", "\n", "# Generate bins for Hm0, Te and Direction\n", - "Hm0_bins = arange(0, data.significant_wave_height_0.values.max() + 0.5, 0.5) \n", + "Hm0_bins = arange(0, data.significant_wave_height_0.values.max() + 0.5, 0.5)\n", "Te_bins = arange(0, data.peak_period_0.values.max() + 1, 1)\n", "Dir_bins = arange(0, data.mean_wave_direction_0.values.max() + 10, 10)\n", "\n", "# Combine data for better handling\n", - "jpd_3d = array([\n", - " data.significant_wave_height_0.values.flatten(),\n", - " data.peak_period_0.values.flatten(),\n", - " data.mean_wave_direction_0.values.flatten()\n", - " ]).T\n", + "jpd_3d = array(\n", + " [\n", + " data.significant_wave_height_0.values.flatten(),\n", + " data.peak_period_0.values.flatten(),\n", + " data.mean_wave_direction_0.values.flatten(),\n", + " ]\n", + ").T\n", "\n", "# Calculate the bin centers of the data\n", - "Hm0_center = array([\n", - " mean([Hm0_bins[i+1],Hm0_bins[i]]) \n", - " for i in range(Hm0_bins.shape[0]-1)\n", - " ])\n", - "Te_center = array([\n", - " mean([Te_bins[i+1],Te_bins[i]]) \n", - " for i in range(Te_bins.shape[0]-1)\n", - " ])\n", - "Dir_center = array([\n", - " mean([Dir_bins[i+1],Dir_bins[i]]) \n", - " for i in range(Dir_bins.shape[0]-1)\n", - " ])\n", + "Hm0_center = array(\n", + " [mean([Hm0_bins[i + 1], Hm0_bins[i]]) for i in range(Hm0_bins.shape[0] - 1)]\n", + ")\n", + "Te_center = array(\n", + " [mean([Te_bins[i + 1], Te_bins[i]]) for i in range(Te_bins.shape[0] - 1)]\n", + ")\n", + "Dir_center = array(\n", + " [mean([Dir_bins[i + 1], Dir_bins[i]]) for i in range(Dir_bins.shape[0] - 1)]\n", + ")\n", "\n", "\n", - "# Calculate the JPD for Hm0, Te, and Dir \n", - "probability, edges = histogramdd(jpd_3d,bins=[Hm0_bins,Te_bins,Dir_bins],density=True)" + "# Calculate the JPD for Hm0, Te, and Dir\n", + "probability, edges = histogramdd(\n", + " jpd_3d, bins=[Hm0_bins, Te_bins, Dir_bins], density=True\n", + ")" ] }, { @@ -1844,36 +1852,38 @@ "fig.subplots_adjust(right=0.8, bottom=0.25)\n", "\n", "d = 0\n", - "plot_jpd = probability[:,:,d]\n", + "plot_jpd = probability[:, :, d]\n", "\n", - "im = ax.imshow(plot_jpd, origin='lower', aspect='auto')\n", + "im = ax.imshow(plot_jpd, origin=\"lower\", aspect=\"auto\")\n", "\n", - "axcolor = 'lightgoldenrodyellow'\n", + "axcolor = \"lightgoldenrodyellow\"\n", "axDir = plt.axes([0.3, 0.075, 0.45, 0.03], facecolor=axcolor)\n", "\n", - "newD = Slider(axDir, 'Income Wave\\n Direction', 5, 355, valinit=d, valstep=10)\n", + "newD = Slider(axDir, \"Income Wave\\n Direction\", 5, 355, valinit=d, valstep=10)\n", + "\n", "\n", "def update(val):\n", - " d = int(newD.val/10)\n", - " im.set_data(probability[:,:,d])\n", + " d = int(newD.val / 10)\n", + " im.set_data(probability[:, :, d])\n", " fig.canvas.draw()\n", "\n", + "\n", "newD.on_changed(update)\n", "\n", "cax = fig.add_axes([0.82, 0.3, 0.03, 0.5])\n", - "cbar = fig.colorbar(im, cax=cax, orientation='vertical')\n", + "cbar = fig.colorbar(im, cax=cax, orientation=\"vertical\")\n", "\n", - "cbar.set_label('Probability Density (1/(sec*m*deg)', rotation=270, labelpad=15)\n", + "cbar.set_label(\"Probability Density (1/(sec*m*deg)\", rotation=270, labelpad=15)\n", "\n", - "ax.set_xlabel('Te (seconds)')\n", - "ax.set_ylabel('Hm0 (meters)')\n", + "ax.set_xlabel(\"Te (seconds)\")\n", + "ax.set_ylabel(\"Hm0 (meters)\")\n", "\n", "ax.set_xticks(arange(len(Te_center)))\n", "ax.set_yticks(arange(len(Hm0_center)))\n", - "ax.set_xticklabels(Te_center,rotation=45)\n", + "ax.set_xticklabels(Te_center, rotation=45)\n", "ax.set_yticklabels(Hm0_center)\n", "\n", - "fig.suptitle('Joint Probability Density\\n of Hm0 and Te per Direction')\n" + "fig.suptitle(\"Joint Probability Density\\n of Hm0 and Te per Direction\")" ] }, { @@ -1905,9 +1915,11 @@ } ], "source": [ - "year = '1993' # only one year can be passed at a time as a string\n", - "lat_lon=(43.489171,-125.152137)\n", - "dir_spectra,meta = wave.io.hindcast.hindcast.request_wpto_directional_spectrum(lat_lon,year)\n", + "year = \"1993\" # only one year can be passed at a time as a string\n", + "lat_lon = (43.489171, -125.152137)\n", + "dir_spectra, meta = wave.io.hindcast.hindcast.request_wpto_directional_spectrum(\n", + " lat_lon, year\n", + ")\n", "\n", "print(dir_spectra)" ] diff --git a/examples/adcp_example.ipynb b/examples/adcp_example.ipynb index 0c1c77d37..e24299a20 100644 --- a/examples/adcp_example.ipynb +++ b/examples/adcp_example.ipynb @@ -1,4013 +1,4045 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Analyzing ADCP Data with MHKiT\n", - "\n", - "The following example illustrates a straightforward workflow for analyzing Acoustic Doppler Current Profiler (ADCP) data utilizing MHKiT. MHKiT has integrated the DOLfYN codebase as a module to facilitate ADCP and Acoustic Doppler Velocimetry (ADV) data processing.\n", - "\n", - "Here is a standard workflow for ADCP data analysis:\n", - "\n", - "1. **Import Data**\n", - "\n", - "2. **Review, QC, and Prepare the Raw Data**:\n", - " 1. Calculate or verify the correctness of depth bin locations\n", - " 2. Discard data recorded above the water surface or below the seafloor\n", - " 3. Assess the quality of velocity, beam amplitude, and/or beam correlation data\n", - " 4. Rotate Data Coordinate System\n", - "\n", - "3. **Data Averaging**: \n", - " - If not already executed within the instrument, average the data into time bins of a predetermined duration, typically between 5 and 10 minutes\n", - "\n", - "4. **Speed and Direction**\n", - "\n", - "5. **Plotting**\n", - "\n", - "6. **Saving and Loading DOLfYN datasets**\n", - "\n", - "7. **Turbulence Statistics**\n", - " 1. TI\n", - " 2. Power Spectral Densities\n", - " 3. TKE Dissipation Rate\n", - " 4. TKE Componenets\n", - " 5. ADCP Noise\n", - " 6. TKE Production\n", - " 7. TKE Balance \n", - "\n", - "\n", - "Begin your analysis by importing the requisite tools:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "from mhkit import dolfyn\n", - "from mhkit.dolfyn.adp import api" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Importing Raw Instrument Data\n", - "\n", - "One of DOLfYN's key features is its ability to directly import raw data from an Acoustic Doppler Current Profiler (ADCP) right after it has been transferred. In this instance, we are using a Nortek Signature1000 ADCP, with the data stored in files with an '.ad2cp' extension. This specific dataset represents several hours of velocity data, captured at 1 Hz by an ADCP mounted on a bottom lander within a tidal inlet. The list of instruments compatible with DOLfYN can be found in the [MHKiT DOLfYN documentation](https://mhkit-software.github.io/MHKiT/mhkit-python/api.dolfyn.html).\n", - "\n", - "We'll start by importing the raw data file downloaded from the instrument. The `read` function processes the raw file and converts the information into an xarray Dataset. This Dataset includes several groups of variables:\n", - "\n", - "1. **Velocity**: Recorded in the coordinate system saved by the instrument (beam, XYZ, ENU)\n", - "2. **Beam Data**: Includes amplitude and correlation data\n", - "3. **Instrumental & Environmental Measurements**: Captures the instrument's bearing and environmental conditions\n", - "4. **Orientation Matrices**: Used by DOLfYN for rotating through different coordinate frames.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading file data/dolfyn/Sig1000_tidal.ad2cp ...\n" - ] - } - ], - "source": [ - "ds = dolfyn.read('data/dolfyn/Sig1000_tidal.ad2cp')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are two ways to see what's in a Dataset. The first is to simply type the dataset's name to see the standard xarray output. To access a particular variable in a dataset, use dict-style (`ds['vel']`) or attribute-style syntax (`ds.vel`). See the [xarray docs](http://xarray.pydata.org/en/stable/getting-started-guide/quick-overview.html) for more details on how to use the xarray format." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "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: 55000, dirIMU: 3, dir: 4, range: 28, beam: 4,\n",
-              "                          earth: 3, inst: 3, q: 4, time_b5: 55000,\n",
-              "                          range_b5: 28, x1: 4, x2: 4)\n",
-              "Coordinates:\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",
-              "  * beam                 (beam) int32 1 2 3 4\n",
-              "  * 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.4384999...\n",
-              "  * range_b5             (range_b5) float64 0.6 1.1 1.6 2.1 ... 13.1 13.6 14.1\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",
-              "    pressure             (time) float32 9.713 9.718 9.718 ... 9.596 9.594 9.596\n",
-              "    mag                  (dirIMU, time) float32 72.5 72.7 72.6 ... -197.2 -195.7\n",
-              "    accel                (dirIMU, time) float32 -0.00479 -0.01437 ... 9.729\n",
-              "    batt                 (time) float32 16.6 16.6 16.6 16.6 ... 16.4 16.4 15.2\n",
-              "    ...                   ...\n",
-              "    telemetry_data       (time) uint8 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0\n",
-              "    boost_running        (time) uint8 0 0 0 0 0 0 0 0 1 0 ... 0 1 0 0 0 0 0 0 1\n",
-              "    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  (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",
-              "    burst_config:          {"press_valid": true, "temp_valid": true, "compass...\n",
-              "    n_cells:               28\n",
-              "    ...                    ...\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",
-              "    beam_angle:            25
" - ], - "text/plain": [ - "\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, x1: 4, x2: 4)\n", - "Coordinates:\n", - " * time (time) datetime64[ns] 2020-08-15T00:20:00.500999927 ...\n", - " * dirIMU (dirIMU) : Nortek Signature1000\n", - " . 15.28 hours (started: Aug 15, 2020 00:20)\n", - " . earth-frame\n", - " . (55000 pings @ 1Hz)\n", - " Variables:\n", - " - time ('time',)\n", - " - time_b5 ('time_b5',)\n", - " - vel ('dir', 'range', 'time')\n", - " - vel_b5 ('range_b5', 'time_b5')\n", - " - range ('range',)\n", - " - orientmat ('earth', 'inst', 'time')\n", - " - heading ('time',)\n", - " - pitch ('time',)\n", - " - roll ('time',)\n", - " - temp ('time',)\n", - " - pressure ('time',)\n", - " - amp ('beam', 'range', 'time')\n", - " - amp_b5 ('range_b5', 'time_b5')\n", - " - corr ('beam', 'range', 'time')\n", - " - corr_b5 ('range_b5', 'time_b5')\n", - " - accel ('dirIMU', 'time')\n", - " - angrt ('dirIMU', 'time')\n", - " - mag ('dirIMU', 'time')\n", - " ... and others (see `.variables`)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ds_dolfyn = ds.velds\n", - "ds_dolfyn" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Initial Steps for Data Quality Control (QC)\n", - "\n", - "### 2.1: Set the Deployment Height\n", - "\n", - "When using Nortek instruments, the deployment software does not factor in the deployment height. The deployment height represents the position of the Acoustic Doppler Current Profiler (ADCP) within the water column. \n", - "\n", - "In this context, the center of the first depth bin is situated at a distance that is the sum of three elements: \n", - "1. Deployment height (the ADCP's position in the water column)\n", - "2. Blanking distance (the minimum distance from the ADCP to the first measurement point)\n", - "3. Cell size (the vertical distance of each measurement bin in the water column)\n", - "\n", - "To ensure accurate readings, it is critical to calibrate the 'range' coordinate to make '0' correspond to the seafloor. This calibration can be achieved using the `set_range_offset` function. This function is also useful when working with a down-facing instrument as it helps account for the depth below the water surface. \n", - "\n", - "For those using a Teledyne RDI ADCP, the TRDI deployment software will prompt you to specify the deployment height/depth during setup. If there's a need for calibration post-deployment, the `set_range_offset` function can be utilized in the same way as described above." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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grDAmVJ61mg0eN3rXscll1zCJz/5Sd7whjfMSrKS5znvete7WL16NY1Gg3322Yf3vve9uPEPZgqCIAjCDohXqnpTaGrL/Jo4bjwXXHAB995774zWOekrLN/4xjcedb1Sinq9zn777cfq1aunHRjAhz70IT71qU9x5ZVX8vSnP51bb72V0047jYGBAc4555wZaUMQBEEQ5oSd+JbQN7/5TS666CKOOuooXv/61/Oyl72Mer0+rTonnbCceOKJE14PKynXKaV47nOfy7XXXsvixYunFdwPf/hDTjjhBF7ykpcAsPfee/PlL3+ZW2+9dVr1CoIgCIIwe9x222389Kc/5fLLL+ctb3kLZ511Fq985St53etex6GHHjqlOiednl1//fUceuihXH/99QwODjI4OMj111/Pc57zHP7t3/6Nm2++mc2bN/PWt751SgGN57nPfS7f/e53+fWvfw3AT37yE2655ZbHfRup0+k8YgpgQRAEQZh37GQuoYdz4IEH8tGPfpQNGzbwuc99jg0bNnDEEUdwwAEH8PGPf5zBwcFJ1TelmW4vu+wyDj/88GrdC17wAur1On/913/Nz3/+cz72sY/xute9brJVP4K//du/ZXBwkKc85SkYY7DW8v73v5+//Mu/fMx91q5dy4UXXjjttgVBEARhVtmJbwmNxzlHmqZ0Oh289yxZsoRLL72Ud7/73XzmM5/hFa94xTbVM+mj/e1vf0t/f/8j1vf39/O73/0OgCc96Uk8+OCDk636EXzlK1/hi1/8Il/60pe4/fbbufLKK/n7v/97rrzyysfc57zzzquu/AwODrJ+/fppxyEIgiAIM830Hrid3rT+24PbbruNs88+m+XLl/OWt7yFgw8+mF/+8pfcdNNN/OpXv+L888/nTW960zbXN+krLIcccghve9vb+PznP8+uu4ZpyR944AHe/va3V/elfvOb37DnnntOtupH8La3vY13vOMdvPKVrwTggAMO4N5772Xt2rWceuqpj7pPrVajVqtNu21BEARBEKbGgQceyC9/+Ute9KIX8dnPfpaXvvSlGGMmlDnllFN429vets11Tjph+exnP8sJJ5zAnnvuycqVK1FKsW7dOvbZZx++/vWvAzAyMsK73/3uyVb9CEZHR9EP02cbY+S1ZkEQBGHHR+nK/zXl/ecpJ510Eq973eseV2646667Turv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29YxmoUxoXXYVsWgNVoHOaF1QUgYRJI6SCiNruSNo5mlHml6axFGhXispxAWhj4ojyPWClvIH8tj1UpVwsTMeWpFn5V97bwns66SPWbOEevQ37oQKJbltQoiS43CEYSOsda0MluNpXJMqGLMleexFBNaH/54lbGG86PQdCWI3nf3M6VEsig3fvxEujteYH6/ebOjUK/Xec1rXsP3vvc97rrrLl7zmtfw2c9+ln322Ydjjz2Wf/mXf5lSvVOeOK6np2fGLvMIgiAIwoJjOm8Izdd7Qg9j9erVvO997+Oee+7hqquu4tZbb+Uv//Ivp1TXNr0l9LKXvWybK7z66qunFIggCIIgLCQcHjeNrGM6+25PbrjhBi6//HKuvvpqoijir/7qr6ZUzzYlLAMDA1OqXBAEQRCEhce6deu44ooruOKKK7jnnnt43vOexyc/+UlOOukkGo3GlOrcpoTl8ssvn1LlgiAIgiA8OtWtnWnsP9/40pe+xOWXX84NN9zAbrvtximnnMLrX/969ttvv2nXPe/lhxs2bODVr341S5cupaenh4MOOojbbrttrsMSBEEQhGmxM74l9NrXvpbe3l6uvfZa1q9fz9q1a2ckWYFtvMLyrGc9i+9+97ssXryYgw8+uHoK+9GYyen5t2zZwhFHHMGaNWv41re+xbJly/jtb3/LokWLZqwNQRAEQRBmht///vcsW7ZsVurepoTlhBNOoFYLr92eeOKJsxLIo/GhD32IlStXTrgltffee2+39gVBEARhttgZbwnNVrIC25iwLF68GF3MX3Daaaex5557Vp9nk2984xsce+yxnHTSSdx0003ssccenHnmmY/7hHGn06kM0gBDQ0OzHqcgCIIgTJaF8pbQTLFNWce5555b/eFfvXo1Dz744KwGVfK73/2OSy+9lCc96Ul8+9vf5owzzuBNb3oTn//85x9zn7Vr1zIwMFAtK1eu3C6xCoIgCMJkmJapeZpXZ3ZEtukKy4oVK/ja177Gi1/8Yrz3/P73v6fdbj9q2VWrVs1YcM45nv3sZ/OBD3wAgIMPPpif//znXHrppZxyyimPus95553HueeeW30eGhqSpEUQBEEQthPWWm655RYOPPBAFi9ePGP1blPC8q53vYs3vvGNnH322SilOPTQQx9RxnuPUgo7bsr06bJ8+XKe9rSnTVj31Kc+la997WuPuU+tVquetxEEQRCE+YrzvlIiTHX/+YgxhmOPPZZf/vKX2z9h+eu//mv+8i//knvvvZcDDzyQ73znOyxdunTGgngsjjjiCO68884J637961+z1157zXrbgiAIgjCbWBeW6ew/XznggAP43e9+x+rVq2eszm1KWAD6+vp4xjOeweWXX84RRxyxXa5ivOUtb+Hwww/nAx/4AH/xF3/B//zP/3DZZZdx2WWXTbquIHsbd7ilZE7pCWW8buAL8aHXUZDLFdJDXI5yOT6qB7lh0kB1WmG7UmF71oGYrkCxFHHFtQltK+9C/aWEcWwIVesJdSVNaA8HgZ7WENXwrWGUNqg4hijpxl88/OyzNMj/AN8uBHh5VogOM9Aa124VosQ0yPYKWaFZuju0YxgnXnTDW9DNPtzwliBT7IRbgD5PQzlrg+TQOXAO5Syu3cLnGb49ik/bQexHkBOWMkDfboX48wylNUprXLFe9fSjag1UUsePDuFaQ3hnUVESRIxa4ztj1J50AHbzRshTVLMfnMVbi07quLEQg46jsH+W4tqjqDgOAsei35QJwkE7NopxNkga8wztbGg/bQepotaVtFE3mqEfCrGjK+SK3hayw1Z4zss7F9rKMxhrofoWhdjbo0HkWPQxUEglu7dX3VgL1WgGOaM2+M5YOL4sQyVZGFNjQ5DUQ/3OQr0vjCcMPgqizTCWi/GVFW3ZvIiPYIVzeTi2cT8DlVzOecrJCxRBWRJpxWjmUErhfSm5CzK5zHn6E00rc9UvUYennbtKlOh9EMyl1ocfl0J6B2GfzHoSo3hw1NKbhJ/VeqQrmV/Hu+oXfOaCeLCS7VlPPdJkzjGalRI/XUj0gkywHulKPqiVop1bemKD0YqsCLo3iahHmtEsSAuBSiRoPeRFubrRhYQwlIsJgr9apBnLuleZS2FhiCfIDtu5m/CfdZD/hW01rRlJc7RS1Io4wj6WehQTa0VuHb1JRK04nnqk6ViHcx6t1SOEjbHRQUzoPL1J9DBZpaq+xsW+EMSQjdjQE2uMUtQjzUhqg2TROmpGF3LEIFfUxRjoiXUheyyO2QTxYl+iKlFiT2wYbAeBpbWQGBXklMXvMktXwljGVx6PVmFsmurcBNmh9R7tPQ4wBAmm0YpO7gv55jixYXGMirBv7jzWQaxD/cLM8P73v5+3vvWtvO997+OQQw6h2WxO2N7f3z/pOrc5YSk59dRTAbjtttv45S9/iVKKpz71qTzrWc+adONPxKGHHso111zDeeedx3vf+15Wr17Nxz72MU4++eQZb0sQBEEQtic76y0hgOOOOw6AP/3TP50wd9t0Hh+ZdMKyadMmXvnKV3LjjTeyaNEivPcMDg6yZs0arrrqKnbddddJB/F4/Mmf/Al/8id/MqN1CoIgCMJcE64e7ZwJyw033DDjdU46YXnjG9/I0NAQP//5z3nqU58KwC9+8QtOPfVU3vSmN/HlL395xoMUBEEQBGHH4aijjprxOic9+9t1113HpZdeWiUrAE972tP4p3/6J771rW/NaHCCIAiCsLMSfEB+GstcH8Hj8/3vf59Xv/rVHH744WzYsAGAL3zhC9xyyy1Tqm/SCYtzjjiOH7E+jmOcm8ePLAuCIAjCPKJ8iHw6y3zla1/7GsceeyyNRoPbb7+9moF+eHi4mlttskw6YXn+85/POeecw3333Vet27BhA295y1t4wQteMKUgBEEQBEHYebjooov41Kc+xWc+85kJFzkOP/zwKUuSJ52wXHLJJQwPD7P33nuz7777st9++7F69WqGh4f5xCc+MaUgBEEQBGGhMb3bQdN7w2i2ufPOOznyyCMfsb6/v5+tW7dOqc5JP3S7cuVKbr/9dq6//np+9atf4b3naU97Gi984QunFIAgCIIgLETsNN8Sms6+s83y5cu566672HvvvSesv+WWW9hnn32mVOekEpY8z6nX69xxxx0cc8wxHHPMMVNqVBAEQRAWOg6m9eDsbD7C8v73v59///d/54477iBJkklfFTn99NM555xz+NznPodSivvuu48f/vCHvPWtb+U973nPlGKaVMISRRF77bXXjPqCBEEQBEGYX6RpykknncRhhx3GZz/72Unv//a3v72ao63dbnPkkUdSq9V461vfytlnnz2lmCZ9S+hd73oX5513Hl/84hdZsmTJlBoVBEEQhIWOdb7SBkx1/9niwgsvBOCKK66Ych3vf//7eec738kvfvELnHM87WlPo7e3d8r1TTph+cd//EfuuusuVqxYwV577fUIP8BUn/4VBEEQhIWEn+aDs6XTa2hoaML6Wq22XXx/j8frXvc6Pv7xj9PX18ezn/3san2r1eKNb3wjn/vc5yZd56QTlhNOOGGCF2BHweviUL0HbcLNP+8KmWFxYsdJ4FAa5UuLW17s6/BKo/I2Pu4J63QhnCu2u6SBsjlKB2FcKdrySgcxYtGGj2vB/OVcENUVMapCsEjSwKdjQSQ4sCwIE6MYn9qiKYsiRhmDy1O06StkfSZ8LcV8LkgBdaNZSRF9lnWlfs4VckIT2hodYsKPT5QEOV8hDfSFnK/cpnQhRUy7ZVxrCFVvgnP4ThsVxahaHTe8teh7G2SApWAQKuGhimL86FDVt7oWhIZ0CjHalgcw2hRiSBPabreCzNA5VJ6Gvkrq6GY/dssmlDHhONJCslhvhjgKESFA5+470UmEG96K2W0V3jl0sR/O4fMMFSdB7pi2Q18W0kQVx/ixVoilEE6WYkcVJ5XosBqLabfPfHsU6qC0KeSUMRTzGfk8DefHmNBfcaPqF9caQjf7w3jwLizOhvHlHViLior13oNSQdgJQZToXSHtLBZnUcrhdVLdUzdakecOlEIBufMPc4KAL0aLUUEkV480uXOM5Q6jFLEO4sNSYhdEiUFMV66rR5rhjq1+cZdSv1gHmWE5fblWimYS5ICd3LGkobBe0cldJdmLjSI2QRpYjzSZLWR5CnpiHSR3RmO0KrY7YqMrQaDz4T/eUgSYWY81XVlgia4khIaRFNpFDGbcr8ZGbBhJc9q5o1aPiLVisJMTjyuklQpCQRfa6omDhDA2mlpkiI2tzgVQSQB7E0PmfCUU1Eqhi3oz6yqZIihs7sitK0SMQTK4uBHz4GhWHVMpGMwyy0AtIisEgz2xCXWnFP0cxlDHuiCWVF2xZDsPUsQQp6/OYaw1sVFkWSgXjidIM8uu8D7IMmOtyPIgyLTeUzPd7eXQK9v13uN9EGZaG8YfxTqjg1AxKRp4+LMeRqnwO3ecWNF6oDj3OxorV66c8Pn888/nggsumJtgCq688ko++MEP0tfXN2H92NgYn//857dPwjLXnSAIgiAIOwPWd5PQqe4PsH79+gn248e6unLBBRdUt3oeix//+McTrohMlqGhoSqZHB4epl6vd+O1lv/4j/9g2bJlU6p7mxOW0dFR3va2t3HttdeSZRkvfOEL+cd//Ed22WWXKTUsCIIgCAuZmbI19/f3T0hYHouzzz6bV77ylY9b5uGvIU+WRYsWoZRCKcX+++//iO1KqSdMmh6LbU5Yzj//fK644gpOPvlk6vU6X/7yl/n//r//j69+9atTalgQBEEQhO3HLrvsMusXGW644Qa89zz/+c/na1/72oSXc5IkYa+99mLFihVTqnubE5arr76az372s1V29upXv5ojjjgCay3GmCk1LgiCIAgLlfn8ltC6det46KGHWLduHdZa7rjjDgD222+/x33Tp7Q033333axcuRKtJz2h/mOyzQnL+vXred7znld9fs5znkMURdx3332PeOBHEARBEITHZ6ZuCc0G73nPe7jyyiurzwcffDAQrqAcffTRT7j/XnvtBYTHSdatW0eaphO2H3jggZOOaZsTFmstSZJM3DmKyPN80o0KgiAIgjB/ueKKK6Y1B8sDDzzAaaedxre+9a1H3T6VCWi3OWHx3vPa1752wtPH7XabM844Y8JcLFdfffWkgxAEQRCEhcZMvSU0H3nzm9/Mli1b+NGPfsSaNWu45ppr+MMf/sBFF13EP/zDP0ypzm1OWE499dRHrHv1q189pUYFQRAEYaEzn28JTZfvfe97fP3rX+fQQw9Fa81ee+3FMcccQ39/P2vXruUlL3nJpOvc5oTl8ssvn3TlgiAIgiA8Os553DQenJ3OvrNNq9Wq5ltZsmQJDzzwAPvvvz8HHHDAlGfEn7nHdwVBEARBEIAnP/nJ3HnnnQAcdNBBfPrTn2bDhg186lOfYvny5VOqc9Iz3QqCIAiCMH3cNJ9hmccXWHjzm9/M/fffD4R53I499lj++Z//mSRJpvwwryQsgiAIgjAH7IzPsNx1113st99+nHzyydW6gw8+mHvuuYdf/epXrFq1asqT1y2sW0ImDjI4CCYtE+NKoRwU4rhiADgbZHHegY4qSZzyLsjplA7SQhMF4V5ZziT4pAdvErxJwvpSqqgNyuZBfAgoG0R93oTXxVUlscvxJq5kgsrlQbLoXJDxEWR5OFeIDE23/lodFcfhEEaHMX2L8Hm3jGsN4dutQlboQGvs5o1BrlfIAH0hRPRZFuSEzgapn3P4tI0b3hraKYSD5GlXYhjFoe48xRfxl5LAanEWFSVBntho4or4vHNh/04bn2X4PA0xaINtjQQRYK1O+vvfoerNUG6shbe2KKdDH0RxkD9qTT7aJt28OYQxvBU3VggGtQn9UvRb1NPApTm200EZg22n2NZw6I8shTwNfZe2ca0hiOLqmEuq+vIUn2e40WGIYnS9GY7H2tBfRZtECd5aVHneojjs127h8xTXGu4KLeMkjINCVOjTdjWuynGjXF6Nb+XyMH6VDmOpLKd1EHHartCzGmNKExfeN6MVeSHAK99kyIrQvfdERhFpVUnlPEF4pxREhdhOqSC5i7WqxHW1SFfCPoDYKHqTiNgUMkSCINGOEx5mLogUO9bhfJDflfWUYkTrCgGgUtQKuWFZfyla1EoRG1UJ+AB6YoN1nnbuyIp/V8t9yzg71mFUt91YK1whLBwvTcyKf5VtIVDMrcM53xUIFjJIU8RYSvZ27UmK+hyZDXXGhaiwvxZRizR1o6u+iIymJzY47+nk4QzUI41RQUKZua7Qr/yDmBVSv+HU0hMXAkIVzk0Zm1FQG1e3VorM+urcxUbTE4c4emJd9avRqhIuhv6DzPpKCBmbUI8uxkQlw8RTixSJUZUMcTymqBu64sOyROknjEwYg7ro91A2tKPLvhgnNNTlUuzvirpD++HzbE7GthDYf//9WblyJaeccgpXXHEF99xzDwA9PT0861nPmtZMu3KFRRAEQRDmgDIxn87+842bbrqJm266iRtvvJGzzjqLdrvNqlWreP7zn8+aNWtYs2YNe+yxx5TqloRFEARBEOaAnfEtoec973k873nP413vehdZlvHDH/6QG2+8kRtvvJEvf/nLdDod9ttvv+qB3MkgCYsgCIIgCDNOHMcceeSRHHrooRx22GF8+9vf5jOf+Qx33XXXlOqThEUQBEEQ5gDLNGe6nbFIZpZ2u81//dd/ccMNN3DjjTfy4x//mNWrV3PUUUdx6aWXVoLEySIJiyAIgiDMATvjW0JHHXUUP/7xj9l333058sgjeeMb38hRRx3FbrvtNu26JWERBEEQBGFG+K//+i+WL1/OmjVrOProoznyyCOn9WbQeBbWa82CIAiCME8o3xKazjLf2Lp1K5dddhk9PT186EMfYo899uCAAw7g7LPP5l//9V954IEHply3XGERBEEQhDnAFfPETGf/+Uaz2eS4447juOOOA2B4eJhbbrmFG264gQ9/+MOcfPLJPOlJT+JnP/vZpOuWhEUQBEEQ5gA7zYRlR5jkrtlssmTJEpYsWcLixYuJoohf/vKXU6pLEhZBEARBEGYE5xy33norN954IzfccAM/+MEPaLVa7LHHHqxZs4Z/+qd/Ys2aNVOqWxIWQRAEQZgDdsYrLIsWLaLVarF8+XKOPvpoLr74YtasWcO+++477bolYREEQRCEOcC66SUd1j1xme3NRz7yEdasWcP+++8/43VLwiIIgiAIwoxw+umnz1rdC+u15sKc7AvjLQSDrTdRYVcONmdVmG9VaWAu9/Xj0lmlwj5RfZzhOQcbzM1eR93yRZ1oXSyhTh8V1maXB4Owd4VZOWxXtZ5g6/UumJRL+3FpQtaPcfoqM7KujMs+bePGWqHeKNh7fRZsyCF2h++0w/bCQuzzFGVM1wbtbKgrz4Ip2drKTFyZiov2VVLHF3ZjtMENbi4symnXeFy0a5p9406RIxtpBSOxc6g4Jh8dwzR6UHGMz1JMLfSbHRut6qAwNYe4M7yz3eMp+snnKS7LQ71aY7dswmU5qlYP9mWj8dYFOzPg0hzfGcONbMW1hvHtFroezonSBj2wNJwT54KFubBalzHY4a2hn5xFN5qoOEZpXfW/SkrjtQ196brjy+dZYdS2Xbt0ZxSK8+HTdhhXSR01NtQdo+O/FmNS2axrH1calXdC+3latenHjXMzUZpLIffFe09SbPS+ayUubcCp9eTW44HIBCNuPdJYB4lWj/hv0HlPXJybWAf7b26prMb1SFc2Yus9NaN5oFWcG09lR4511zBc1leaemMdbMplew+faGu8Obq0FgfLsK7KaqXo5K4yGDdiQ1Tak62rbMwhThioRRgdygWjs6r69NEm+qpFmsWNuDqGWqSpRZp27hioR1W9ndzSl0Rd83BhTe6vRWTWVXHWorJPJ1qnY6PJi3LOh8+9SYTzvrJR9xQxQ7AXl6/NZjYYjzPrq5jK+rsGZ1PYuTVGh3MfLNDBvh1rjfcQFfsFw3YwREdakRbnKTEapbqG5tIkXcZYrjdahXHowvfl2MydL9YH83dUrA9xhH27x9gdl+phtujtQXlLaDrLQkKusAiCIAjCHLAzPsMymyysKyyCIAiCIOyQyBUWQRAEQZgDdsaJ42YTSVgEQRAEYQ4onwObzv4LiR3qltDatWtRSvHmN795rkMRBEEQBGE7ssNcYfnxj3/MZZddxoEHHjjXoQiCIAjCtJGHbifHDnGFZWRkhJNPPpnPfOYzLF68eK7DEQRBEIRpI681T44dImE566yzeMlLXsILX/jCJyzb6XQYGhqasAiCIAjCfCN3ftrLQmLe3xK66qqruP322/nxj3+8TeXXrl3LhRdeOMtRCYIgCIKwPZnXV1jWr1/POeecwxe/+EXq9fo27XPeeecxODhYLevXr5/lKAVBEARh8sgtockxr6+w3HbbbWzatIlDDjmkWmet5eabb+aSSy6h0+lgjJmwT61Wo1ZM3S4IgiAI8xWZh2VyzOuE5QUveAH/93//N2HdaaedxlOe8hT+9m//9hHJiiAIgiAIOyfz+pZQX18fz3jGMyYszWaTpUuX8oxnPGPS9XkdBTGfd12hH4AqxHnFV6+KbnE2yAwhCAl1kCSiC3mi0kFgaEzYbpLwtRQolu0oPTEG70IbpZRvXPulBFHZDJ91ip2C5K6U+flOGxUlQZxXShGjpCsgdLYrSiy++iwN8r04CcdYlFW1Oj5Pu/VoE2SB2uCGt0Ih6tN9i6p2JrQRJaikjm40Q73OQZ5ClOBGh4O8r2gzVGQK0Z9FaY0ba4Vja7fwYy2yjeur9nW9B59lRL29qDgObTvXjaU8fXEcJI3O4tN26J+kDs4S9zbD8RftuCwvujQIC6OeOpSiQcBlOW5kK740ohVSQ4Bo+Wp8nqHiJPRZezQIEAlCydD2WDg+gjwRZ/Ht0RCPNuEYdIhVGYOq94TtcRIkifVmdVy6b1EQI5YxaBNiHWt1z6GOQuxKh9jytBpTKm93x57SKDtue3keIUg7vQMbxoT1QS7YFfaFCaqUUvhioqryH7tYK4xWxFpN+E9Ro4h0kOxlzuGBuKjQeY8mCPFKMV8QCIaySaQwOkjwYhOEhPWolBqGbQBGUwn3kiiU67YBvYmp9inrCWJFxUAtCvJCF6SGZf0ASxoRo5mtpHvOeyKju8dqdNU31lNIDh2xUeTFuKkbTV/ZhvWVTDHWilqkyZynFplCMNgVES7tScispyc2xEZXssN6pKlFhkZsMFrhvGegFtETh2OMjSY2msho6uP6rezvUtLYKOoFyKyjHoXjKmMIgscgJGznjsx6WqmtpIiZ85XQsjeJ6KsZYq3pq5lK7Dh+MjNT9H090sU5Df0f5JZBPGgLqWYpPdTFYlS4ZaJUGGeeIETUxfkd7yq0Log3NWE/paikh+PHplGFKLEYm957Yk0laNzeWO+nvSwk5vUVFkEQBEHYWZF5WCbHDpew3HjjjXMdgiAIgiAI25kdLmERBEEQhJ0BucIyOSRhEQRBEIQ5QBKWyTGvH7oVBEEQBEEAucIiCIIgCHOC9Q7r3LT2X0hIwiIIgiAIc4BMHDc55JaQIAiCIMwB83Vq/nvuuYfXv/71rF69mkajwb777sv5559Pmqaz0t62IldYBEEQBEGo+NWvfoVzjk9/+tPst99+/OxnP+Ov/uqvaLVa/P3f//2cxSUJiyAIgiDMAbkDNY2rJPksPcJy3HHHcdxxx1Wf99lnH+68804uvfRSSVgEQRAEYaFhnUfPwGvNQ0NDE9bPhgR4cHCQJUuWzGidk0WeYREEQRCEHZiVK1cyMDBQLWvXrp3R+n/729/yiU98gjPOOGNG650sCydhMQmYCK90V24IlcQQpYMArpBJVWV0uAhVSgsBvEmC3DBvo7OxUFY9sitLwaE3cbWfNwk+KQR3hYDQx7VuG0rjs061TykZDAJBje+MVUJCby1KmyDC64yhtEaNl9ppgy/2t1seCPI8rdHNfnynHeR5eQbO4cda+LRdSfyA0CZAnoZ2SuFia6iSAI5HRTG63lOJB8sYiOLqs4qCgFH3LQ6ywHYh8ivaHLr7fnQSVXJA3bcoCAajJBw7QVyo+xajjO4KGcs6CrEgEOJt9qOTCFfKDQshodIaXe+p+hFAGY1NM3ynjY4jot5edLOvqF8HSWOeoXv6ivrj0Hc2SBfdWCvIGZv9qKRexedaQ7jRoSCvrGSUWdVu1X/lMbhwXnW9iW72Q62JqvWUhfB5iq43g2hRR6G/S3Gm1mHMKo2yefG1FHiaMIaVBpt32y3K+bgBBEGc9x5bCBCtr34ssNXX7n+F3pfyOFAqCO1KiZ33FJJBTy1SoZyDyEAzMcRGMZpZGrEuRHya8T63du7o5K6QDoalJzYsrsdYF0R2tXHWdlPIEXUhxmvEupAzhrqdDwK/du6CzLAQIlrnMYVkr5QeGh3i1irIBmuRoSc29MQ6SBeLNoxW1E1Yp7VioB7TX4+rvhwvIlzak6BVkCT2xBqtFCNpXpVd0gi/bzIXhIXWB3FiLdL0xOF3jHWe0cxW5epRqGc0syH+4hhKGaFWisWNmFoRY19iGKhFxEZTjzUD9WiCzNEUsslSLBlEhbqSMGY2tDn+uPpqEbEJ57YvKY6hGCyx1pV4EiDSXRFmKTP0nqIthVKQFEJNoxWaMK6i4qQaHSScvhAg+kLMaYry5V2Schy18674MCnaTZ0ndx5XHHOQLart/gdxph66Xb9+PYODg9Vy3nnnPWp7F1xwAUqpx11uvfXWCfvcd999HHfccZx00km84Q1vmPU+eTzklpAgCIIgzAEzdUuov7+f/v7+Jyx/9tln88pXvvJxy+y9997V9/fddx9r1qzhsMMO47LLLptynDOFJCyCIAiCsADYZZdd2GWXXbap7IYNG1izZg2HHHIIl19+OVrP/Q0ZSVgEQRAEYQ6YrxPH3XfffRx99NGsWrWKv//7v+eBBx6otu2+++6z0ua2IAmLIAiCIMwB1vlpvdY8WxPH/ed//id33XUXd911F3vuueeEbd7P3ey6c3+NRxAEQRCEecNrX/va4sHmRy5ziVxhEQRBEIQ5wHuPn8ZVkrlOILY3krAIgiAIwhzgnJ/WcygLTX4oCYsgCIIgzAHTvc2y0K6wyDMsgiAIgiDMe+QKiyAIgiDMAd5N8xkWuSUkCIIgCMJsI8+wTA65JSQIgiAIwrxnYSUs3j1ylYkhT7tSOKW6MsRin1KE6ONG+GyC9M/rIFPEdCWAPqrho/q4+hPwvlrnoxrYrNuG0ijv8LUmGBNkdnGtKz2s1cHEQVwHkGfoRhOfp6i4lPvVUXGCdw6fp0HGV4gVlTZB/FcI9XAuCAhrIR6V1AuhYjJBQlgJBJ2t1qukjs8KkV6eVkLASmzYaE74Wh4DeYaqNyfUg9ahzbJcIRhc/JS90VGMavYHuWMUh/KAMkFs6MdaxXEWMsqxVqgfUFqDNqhaIxxLnmL6FoVtcULULM5NlKDiBNtOIU/RzX50FFNb3Ieq1dFJFPq43gxSx0YT126F446Sqh99FvYHcFmQ2Pk8A2fRcYR348ZcUc7naXUsSpvq+HzRpxTrfJ5Cc3GQF9qsGo+qkFgCqLTVPWdKVwLNaqy7PIw57yq5p3I5yoVY1bjxXa7LnacWaRTgCgGiUl3hodFBFugL2SFQifZy5zE6SOYqWZ0KkkEAhw/SPMICEyV51nuc98TF8fUlUSXKayZBPmgdNBNNEim8D223M0dsFFHxY1LKDnUhNCxjjLXGOl+I/RS1SNOxrhArBuFfKeuLtaK/FtETGzIb4qoZjfNBythbixioRWil6K/HWBe220JImNlQpmY0RsGyZo16FESCjdigC8lgrENZrRTt3GEUldxwNLP0xEFWOJJachtEkEAlgsycp5Nb6lEQGdaMruSG1XEbTV8t9F9sFNb7SvrYm4Rj6EsMsQ7bemKD82Fb5kL/DNQj2rmjJzbVeXNFPbFW9CYRRkNWjPnYqGrcOO9RKpx/UwgOy7HlqnMT5ImlSNMRBIbWQzMObcTF2CvrKAWJRhd1+fBHzaiwPQgVi7qAzHUnWyuFjzBxArZH/pWYPaofy2ksCwm5JSQIgiAIc4C8JTQ5FtYVFkEQBEEQdkjkCosgCIIgzAHy0O3kkIRFEARBEOYAea15csgtIUEQBEEQ5j1yhUUQBEEQ5oJpXmFhgV1hkYRFEARBEOYA5z1qGm/6uAX2lpAkLIIgCIIwB3g/zWdYFljCIs+wCIIgCIIw75ErLIIgCIIwB8hbQpNDEhZBEARBmAOcAzWteVhmMJgdALklJAiCIAjCvGdhJSxlOholldxQuTx8Hv/wknegVNimoyAe9K4QAUZBRgddQWKxjy+FhuO/pyuV8zpC5Z0gqYsb+CgOi9IhNmu7UjqbBlmgtUFeB6haA6IY71whECxMb8VXVQjjKMSH5BneWXRR1jtbSPWySlgYhHthf5+2g6yvlCCW9TkbBIlFW6rRhCjBZ1kQAOYZuncRPstCbFES5H+9i8J2a1FxHIR/hfCwlP7p3kW4sRa+M4aKE/TAUlSzP0gPTXFccYyKggBS9y0qpIoOU6uFz1pX0sNSABnEghqfjTvWLEXHxfl0FlVvBmFhlIT2mv2YZh9oQ7zbykIWaUO/lH2qDeQpvjOGb49W40nVm0HGqHUlbKykjfVm6JNonCSzkEi6sp+LY1JRgu7pK47J4KMEn2f4PEPFtSAurAXZJXkWxJjQHW86Apd3x+aEMdod435cLOPH0IRVikKUV3wGMudRUMnnchekdmV5YIL0UCmITNhWChCjQlaXGMVoFqR93sOieoRRCq0UmXNoBfU4yAETo6gXMr/YBJmiJggWY6MKAZ+mkwdxXz3SFMWpRboSBcYmyPIacRAE1qOu8LAkNooljdCvznsGalGoo4hbKwppYZAXLmkEQeKSRlyI+BS1QqQ4UIsYqHcXXfRB5oIQ0HpY3IixPtQ5klqW9dbQKsgGY63piTWx0dQiTVSIDZc1axjVlQFqpVhcj6lHmr5ahPOezDp26QnneZeeGK1U1SdBDqkY7lhqUdcCWMoYtQoySFP0a6M4D2UfPDSWhbHhQn9lzmOU4qGxnMToSqg41MmJdDg/mhBvKScEyF1XThnGRuhfpUqJYTgH5UWIUnxoxo0npSApx5ymkkOWY7Ycv86Hh1RV0W+miCXSCqUUSWFD3J5/FEuX0HSWhYTcEhIEQRCEOWC6xuWFZmteWFdYBEEQBEHYIZErLIIgCIIwBzjnp/nQrdwSEgRBEARhlpHXmieH3BISBEEQBGHeM68TlrVr13LooYfS19fHsmXLOPHEE7nzzjvnOixBEARBmDblFZbpLAuJeZ2w3HTTTZx11ln86Ec/4vrrryfPc170ohfRarXmOjRBEARBmBbhle3pLQuJef0My3XXXTfh8+WXX86yZcu47bbbOPLII+coKkEQBEGYPvIMy+SY1wnLwxkcHARgyZIlj1mm0+nQ6XSqz0NDQ7MelyAIgiAIs8u8viU0Hu895557Ls997nN5xjOe8Zjl1q5dy8DAQLWsXLlyO0YpCIIgCNuG99N8hmWB3RLaYRKWs88+m5/+9Kd8+ctfftxy5513HoODg9Wyfv367RShIAiCIGw73nncNBa5JTQPeeMb38g3vvENbr75Zvbcc8/HLVur1ajVatspMkEQBEEQtgfzOmHx3vPGN76Ra665hhtvvJHVq1fPdUiCIAiCMCNMV2Aot4TmEWeddRZf/OIX+dKXvkRfXx8bN25k48aNjI2NTboulbfDNybYbL3SeBMFg21pkPIOr6PCuOyrdbjComyCWdnHjaLS0H3exPi4gRpftrTfFm2VbSiXB72osyib46M6yjuUDTbgqn0VDL7KmMo8DEwwMQOoOFxN8llamZK9s8FYHMXB+FvUo7TB52mwCReG4lBHUpmRAXye4cbCq+O6XpiZnUMZg240J5h9o2V7hM9VfCne2crq7J3Dbd0UtmldGYxDbBrVaIb248JSDPiibVVvhs+dri3ZtYaxnQ7e2q6lutao+kD39KGb/cGeXPZRTz+mb1FYHyX40eJBbGeJmvUJn32WBXN0owlF/+ievmBTzrPiWA2uPVrF4EeH8GkbnUThWOrNwiy9uDpen6fBOh0noQ8LgzQQzkU9tKfiGN3shzxDNZroTiv0aZbiO6N4k4Q2x1rh+Hxh104aYeyMx3vQUbCEF+VQCm9iVJ4WYzcK566wsCmXY7Qid8GQa11phYXMhSqtD6bl0qbr/URDbjAph1+miQlmXOe7ZbUCRfgxqEfBDOzwRDqYnXsKM3Ct2LcWBWuwLV7jLO3Q1nsa/397dx5XVbnuAfz3rrVHRgEHQAG1HFMp8VrqUSxzSClNS/MYqbcsSzPLBk9cEzM1S8uOJ5uOerLjzeGqeTIzzTI1HEnScmoQRcXUBJFhT2s994+194LNIDjA3uDz/Xz4wF7j+6y92Lys6WcQetKy0ZO26057NrmjiUPMBgSatH3FqRDMsuROXdbShiUB1LMa9LRpIbSEZwCoH2DSbx01ylpbC50qJCEQZDIg3J2C7FS0328tpVlCqEVLcHaqBIt7WXaXClkCgkwygk0ywqxG5Nmc7uTh4uWbZQn1A4xaOrIs4FQIAUYJ9QNMCDVry61nNeCSQ/FKibYYtJRks1y8PrM73VkSAioRzLIMs6ylWYdatFRnk3teAFrCtMUAoyxQP8AIp6pqydnQ0oxl93vpVAlW9zwGSejJyQAQaJRgNUh68rMsFSd3m9zJyIC2D1kN2nDPn12FtH1DKvEaKB6vlhrudJ8S0acjrT1E5JXm7Pk4l93jPO02uJOfJaHt60IIr325uvFzWK6MX3dY3nvvPVy8eBE9e/ZEVFSU/rV8+XJfN40xxhhjNcjvTwkxxhhjdZGqEsDhh1Xm1x0WxhhjrK4iVdFOoV/D/DcS7rAwxhhjPsAdlivj19ewMMYYY4wBfISFMcYY8wlS1Ws8wqJWPlEdwh0WxhhjzAdIUbTHI1zD/DcSPiXEGGOMMS/33XcfYmNjYbFYEBUVheTkZJw+fdqnbeIOC2OMMeYDRIp+4e1VfVH1HWG58847sWLFChw5cgSrVq3Cb7/9hgceeKDa1lcVfEqIMcYY8wF/vkvo2Wef1X+Oi4vD5MmTMWjQIDidThiNxmpb7+Vwh4UxxhirxfLy8rxeX+8Q4AsXLmDp0qXo2rWrzzorAJ8SYowxxnzimk4HlTg6ExMTg9DQUP1r1qxZ16V9L730EgIDAxEREYETJ05g7dq112W5V+uG6bCQkLQAOCq+DUwoLpCs9RbJHSIoXHZ40tVIMoAMZkBI2ne4wws9h+FUl/Ya0ILzhKTN6w5FFKpLW6ds1Id5ghUFqSCDSQtUlAzuUEWztjxStencQXsAtO+qAtVh04IQ3eGBACDMFkBVQfYikMuhheJJWtihNp8KGIxaIGKJ2+g8YYCQJC3wz2TRw/okqzt40B2cKLnDAPXwQgBwOaBc/BOSJQBQVS1gMDhMbxMVFWjLtARCGEyQgupBmLXXauEliMAQr9qE2Qpy2LSQRINR26aqCnLYtPW6AxWFLEGYLZACg7XQQFWBaivUgyI974cwWbT1SRKkgGB92WS3act2OWEIa6Ct32DSa5NDI7z2HSk0QgsYVLQQSmG2wNCgsb4NREAI4HJ4zSdkWVu/O1SSnE4teNGphQ7CYHK/b4oeHCmZLCCnE5AM+vtOkgFqUUFxOCWpECaLO2BSC8nUlynLEC6bO6hTdodslthHSUsvJKNFm082FO+XqqKHJxokoQXQCcAkSxDu4DpZ0sYBgNUg6SFx7sxBPUiOiNzzCBBpgYCS0MIGTbKA2R2iZ5QErEYtJE+CtpAgowxZAGZDcXCdFpInuX+WYHGHF5pkAcn9u+oJ2DMbhN5GT4adLMG9LgGLUUKAUYYshBYsqKruYEaBAKMMoztwMdAkQyoxTBbQAwmdigqVCLI7IzXfoWhBf7JA/QCTHsZoMUoIMsnueUgPW1QJCLUYYDFIsBplmA1am8yyti2CzbK+vEKnFnAIAI2CTAi1GKC4I0u0wEShBzU6VRVCAPkOF2wuFQbZEwpZ/DHv+VELpZQQHmCEQsXLsRglmGRPkKIMq3t7FbmDG82yBJeqhTECWnil4g65NMhAVJBZD6e0GiWEW7W2mw1Ce4/c4YMmWcDuIsiSgEMhCGjBiLLQplHcgZqewEVniUfQm+TiME1FhVfwohDekS7a+qDvD57FePZTghasKNzfazD3EMD167BkZWXh4sWL+tff/va3cteXmpqq/25W9LV37159+hdeeAH79u3Dxo0bIcsyHnnkEZ9G5vApIcYYY6wWCwkJQUhISKXTjR8/Hg899NBlp2natKn+c/369VG/fn20bNkSbdq0QUxMDHbu3IkuXbpca5OvCndYGGOMMR+o6QfHeTogV7Uu95EVu91+VfNfD9xhYYwxxnxAVZXi09hXO3812L17N3bv3o2//OUvCAsLw++//45XXnkFN910k8+OrgDcYWGMMcZ8wl9va7ZarVi9ejWmTp2KgoICREVFoV+/fli2bNl1vfvoSnGHhTHGGGO69u3b45tvvvF1M8rgDgtjjDHmA/56hMVfcYeFMcYY8wVFAUnX0Ong8EPGGGOMMf/CR1gYY4wxHyC6truEqjP80B9xh4UxxhjzAVLVa+uwXOFzWGo7PiXEGGOMMb/HR1gYY4wxH6BrfHDcjXaX0I1zhMVg0ULfJAMguwP/DCYtnFBxh8N5Qg6JikMSiTyJWgCpWkCcJ0RRSO7X7mk8QYbuYSQkkMGizSek4uULob2WDPrOSiYryGgFySZ3G9zrDwwrDkBUFS0UUJIBl1Obz1niMckuJ4TJAskSCMkSqIUdShLgDv/TAgQlkMvpFZ4lDCaQqkIKjYBkDYQc1kCbVlVB7mWqBXmQ3GGCcmiEFvTnDlcU1kAtoNAdkAgAUkAIhDUQkjUQUnA9CEuA1t6iAshhDQCXE1JAsHuzS1qAoLudUmAIpOAwPYxRC080Qg6NgDGqKSRPSGFEFOTQCC1U0WTRvlsD9W0kjFqgobAGam10OrT6GsVCjojSNmnBJUBVIIdG6GGJUnCYFpAIaCGFBpO2PFnWtoc7MFK4Y9bl4HqQI6IgDEZtOxu174b6kSCnA3JwPT0MkRw2bZlGo/Y+BYRAcm8/rc1G7b2X3OGXpL0HWju0ushWoLeDJAOE0QSSTVp7FQWqKUi7+8BogXA59P2UJAPIZIVwObTgQ/c+D8kAoTj03UhSnJDcQWgKUZmwM0kASokwOuEOn5NKvJYEYFe0wDxJFAfUmdxJiZ5FWmQJAUYttFAhwCgBDpVgkQVcKvRQREm4AwwNQg/XM0gCKhEM7l8Pg6wF6EkCCDDKUAlwKJ6gQAGTJKCoBKtRgtE9rywEQs0GyBIQbDIg2GRw1yIQGWSCJLSAxTCrEZI7MLF+gDY81Ky9/6FmA4JMBphlGSaDNo3dpUIW2rSBJhk2lwqTOwCwfoARQe71RAWbEWCUtUBGybN9tZBEi0GCLLSAxgCjDKM7mS/QJMPh0uqyukMIPe2UoAU2xoZaIQsg2Czr81gMEgKN2ndAW77VHV5olCQEmwwINEp6OKVDIVjcjZKF0EMbAaBRoBkGqThYUnJ/RBplLWzQqRbPa5K0/chqkFDkUiGEgEUWMLgDLD37khBaGKbsDskUojhs0+IOoDTJWhCixb2drQZtuCSK90O5RPilLNwfzaJ431VL7LOl1XD2ofvR/Nf2dSO5cTosjDHGGKu1+JQQY4wx5gN8SujKcIeFMcYY8wHusFwZ7rAwxhhjPqCqCgR3WKqMr2FhjDHGmN/jIyyMMcaYD5CiAuIajrAoN9ZdQtxhYYwxxnyAH81/ZfiUEGOMMcb8Hh9hYYwxxnyAVOXaTgndYBfdcoeFMcYY8wHusFwZPiXEGGOMMb9X54+weHJQLl26VJzPIyRA0TJWhOLQc36E6gIJCUJx6llB2vSiOC/I3aP13DtPkqxNJ4SW2eKZHwBIhSDScltUxZ3bouXDQFW0cZIM4dLygMjoglSYDwgB4bJrWUAurQ3CaQPZC6AWFUI2FEDNL4QkjHo8OdltWvaPqkAYtPWrRYWQYAQ57BAmBeSwg5y24mwieDaHDKWgCJJk0jKKJAlUVAThIsBg1McbrIUQCqAUFEI4VagFRRCqcGccuSAJI5SCQgCA5NLWLwwukMsBCVruilJQBNlcALWgEJJkhlpUCLWwCJAVSJBBRUUglxOyqRBqQRFgcOc8qSqE0QVJleEotMFQUAghyRCyEUqBNo+QJAhVFC9PFVA9dQFwFdogkQRBBkiqgKuwCFRkgyQMkC3a+lT3stWCIiiFNsiWQsiyBc7CIsiGQiju8RASyGkDFRVBNhaCFCeUgiIIgwtCFZBcAsKpwFVQBFku1N8LV0ERjPkFUAoKIbmElp9E7nwnuw3CaIRwCagFBRBOFXAQlIJCyMYCCEkCOQDo8wNCzgdsBVCNlyA5i7QsIZcEqSgfZFIgnDaoirb/kWzUc4NIcv/qe76TCtVMEKoLEBIUyQinSpAEYHOq8NyLILtzggAtp0dRSc8cKp0lVOS+g8ElS3C482IUIgho2TceKhHckT8QRgn5DgWqLMGmFM8j2WUUKSoEAIXcmTCkZcQ4VUKRU4XizghyKKRl98gSXCrBadAydlyyQL7NBZMsQTVKyLe54HSvQ3LKcLn/WZUlQFG13Jp8uwKXqqLQqcKiaPtwgU1BoUtBvnBAIYLdpcLuIqhGCSaDlo1TYFNgVY1wqQSDJFCQb0e+sKPArkA1SpCEQIFD0belJARcKqHQpSJfNaLApkA4JBTYFBhlAdUowWWQUGBzgdxZQoWFDuQbnSgocqGwyIUCxQBhMqCg0AmYZBTmFyHf6EJBkQv5ZIRREpCFtn1MsvbdYdAylfJtClSjDJdRQAAocGpZSKpRQr5d0eYzCBQ5VX0/UIxCz2oyygJOheBQCJJDRqFThWqUoLo/f50qwSVLcBHBIUkgIjiJIOwyLjm0DW+SJH3bS3oGkECRSwVMEpwK6fuhURL6Oov3I7hzkbT3QJY8mVbavunJGHKqBKdBa4PqHZMFwP23AiiToVUdyGm7tqMknr81N4g632Hx7HzNb4n3cUsYY4zVFpcuXUJoaGi1LNtkMiEyMhJnDq645mVFRkbCZDJdh1b5P0E10Y30IVVVcfr0aQQHB1eY0Okv8vLyEBMTg6ysLISEhPi6OdeM6/FvXI9/43p8g4hw6dIlREdHQ5Kq76oJm80Gh8NR+YSVMJlMsFgs16FF/q/OH2GRJAlNmjTxdTOuSEhIiF//Ql8prse/cT3+jeupedV1ZKUki8Vyw3Q0rhe+6JYxxhhjfo87LIwxxhjze9xh8SNmsxlTp06F2Wz2dVOuC67Hv3E9/o3rYcxbnb/oljHGGGO1Hx9hYYwxxpjf4w4LY4wxxvwed1gYY4wx5ve4w8IYY4wxv8cdlhrE1zf7P36PWE3g/YyxK8cdlhqiKIqea1QX2O12rF69+ro8Wtof2Gw2vPzyy/jwww993ZTrwm63Iy0tDcePH/d1U66Z0+nEqVOn9Ne1/Y89fxYwdnW4w1ID3n77bXTr1g2DBg3CxIkT8dtvvwHQco5qo4KCArRr1w4PPPAAtm7d6uvmXLOFCxciMjISu3fvhtFoRFFRka+bdE3mzZuHpk2b4oknnkB8fDzef/99KMo1JML60Ny5c9GiRQsMGDAASUlJ2LFjh99ngl0OfxYwdvX4OSzV6JdffsHYsWORlZWFlJQUHD58GFu2bEFwcDA2btzo6+ZdFSJCYWEhkpOT8dtvv8FsNuPbb79FYGCgr5t2VX777TeMHj0aI0aMwBNPPOHr5lyzKVOmYOXKlXjrrbfQsmVLLFmyBPPnz8fp06dhtVp93bwr8tZbb2H+/PmYM2cO8vLysHbtWnz//fdYuXIlevbs6evmXRH+LGDsOiBWLRRFoblz51L//v3p1KlT+vCVK1dSfHw8HTp0yIetuzY//vgj3XbbbXTs2DEKDAykd999Vx+nqqoPW3bl5s6dS7fddhsRER0/fpymTJlC//znP2nbtm0+btmVO3/+PN1+++00Z84cfdjRo0epbdu2dO7cOSKqHe+PoijkdDrpnnvuoSeffNJr3F/+8hfq168f7du3zzeNuwr8WcDY9cGnhKqJy+VCixYtMG7cOERHR+uHfIOCgnDmzBlERET4uIVXhkociBNCICYmBk2bNsXYsWMxffp0fbzdbvdVE6+Ip72//vorevfujS+//BKdOnXCnj178P7776NXr1547733atXpocDAQOzfv9/r0ecpKSmIiorCypUrcfr0aR+2ruokSYKqqjhw4AA6duwIQLvGCNBOdx09ehQbNmyoVftaXfosKKkufBaw2oM7LNfJkiVL8Oyzz2LJkiX4448/YDKZcO+996J///4AoJ93z8vLQ3R0tN8fni9Zz9mzZ72uG8jKytL/+M2ZMwcmkwl33XUX2rdvjw0bNviqyZdVUT316tXDihUrsH79erz22mtYt24d9uzZg6effhoff/wxtmzZ4tuGV6B0PYAWV//cc8/hlVdewaBBgxAaGopffvkFHTp0wN///ncMHjwY69at83HLy9qwYYNXh1hVVZhMJnTt2hX//ve/AWi1qaqKhIQE9OnTB6tWrcL58+d91eTLKlkPEUGWZQwYMKDWfhaUfn9Kqo2fBawW89mxnTrizJkz1KtXL2rcuDHdf//9FBsbS61bt6adO3fq06iqqh8efeaZZyg5OZmItEPF/qYq9bz55puUkpJCRETff/89NWnShIQQNHnyZHI6nb5qerkqqictLY2IiNLT0ykyMpIkSaLvv/9en+/ixYvUokULeuedd3zV9HJVVM+OHTv0aY4dO0Zjxoyhhx56iFwuFxFp+2DHjh3p5Zdf9pv97uDBg5SYmEhCCJo+fToRef9OLFmyhJo0aULr168nIqKioiIiIsrKyiIhhNc+6Q8qq8ejtnwWVKWeuXPn1prPAlb78RGWa7Rt2zZkZ2fjhx9+wOrVq3H06FEEBwdjxowZ2L17NwDtvyzPf1VfffWVfsGgJEnIzMzUp/EHl6snLS0NgNbuvXv3YujQobjzzjsxePBgdOrUCUeOHPFx68uqqJ6ZM2di3759aN++Pe6//36YzWZIkvbroKoqQkJCEB4ejoMHD/q4Am+Xq2fnzp0AgLCwMOzZswcjR46ELMuw2WwQQiA8PBwZGRl6nb6UmZmJ2bNno0GDBpgwYQLeeOMNnD17FpIk6Xc03XHHHbj99tsxc+ZMANpRFiKC2WxGTEyMX703l6un9O92bfgsqKwez3sky3Kt+SxgtZ/vP7lqMSLCtm3b0KBBAwQHB0NVVZjNZsybNw9//PEHli5dCofDoZ+T379/P3Jzc9GvXz9cuHABjz76KJo3b46jR4/6xa2aldWzfPlyqKoKu92O7du3w2azYefOnXjnnXfwzjvv4LPPPsPnn3/u6zJ0ldXz8ccfQ5IkjBs3Do0bN8b06dPxyy+/QJIkHDp0CKqqYvjw4b4uQ1dZPZ9++insdjtCQ0Nx8eJFpKenA9D+0B89ehQFBQUYNmyYj6vQNGzYELfeeiteeOEFTJ48Gc2aNcOzzz4LoPgPeosWLfDwww/j+PHjeP755+F0OiGEwIEDB2A2m/3qTqHL1VMef/8sqKweWZYBALm5uUhLS/P7zwJWR/jq0E5t5zms+9JLL1GbNm2IiPTD70REL7/8MnXt2pU2b96sD1u2bBl17tyZZs2aRSEhIdSjRw86ePBgzTa8AlWp5/bbb6c9e/bQH3/8Qd9//z3Z7XavZcybN8/rLghfqko9d9xxB23ZsoWIiNLS0igmJoZiY2Np6NChFBERQQ899BDl5eXVfOPLUdX97ZtvviEiotmzZ5MQgoYNG0YTJkyghg0b0pAhQygnJ6fG216apxabzaYPW7FihddpHs/pBLvdTsuXL6eAgADq2LEjjRo1ikJCQujxxx+noqIiv7gTpSr1lD6VUhs+Cy5Xj8PhICKizMxMSktL8+vPAlZ3cIflKnl+qdPT08loNNKmTZuIqPiX/NixY9SsWTNasGCBPs+oUaNICEEtWrSgVatW1XyjL6Oq9ZS8bdGfXcn745n2p59+oqVLl9KLL75IX375pW8aXoGreX/efvttevzxx+n+++/XrwPxN5668vLyKCkpiTp37lzudF9//TXNmTOHRo8eTevWravJJl6RqtYzcuRIv/0sKKmq9TBWE7jDchm5ubn0+uuv088//1zhNOfPn6fBgwdT+/bt9WGe/3wHDBhAw4YNIyLtP8bFixfThx9+WL2NvozrWY8/4Ho0JesZOnRotbezKqpSS2lpaWlkNptpyZIlRKTVlZubW11NvCLXqx7PEbtFixb5/WdBaaXrURSFLl26VF1NZKwMvoalAtOmTUNYWBi2bt2Kxo0bVzhdREQExo0bh5MnT2LGjBkAtPO7DocDNpsNsbGxAACDwYBRo0ZhzJgxNdL+0q53Pb7G9ZRfT1xcHADfXrhZ1VpK69SpE5588kmkpKTg0KFDeOSRRzB37lwUFBRUY2srdz3rmT17NhwOB0aPHu33nwWlla4nOTkZb7zxhs/fH3YD8XWPyd+sX7+eYmJi6KabbqryYXS73U4LFiwgIQRNmjSJvv32W5o/fz5FR0d7XcPiC1wP11NTrqaW0vbu3UtCCBJCUOvWrX16XQfXU5Y/1cNuPNxhKWXIkCEkhNAfZX78+HH67rvv6NixY5Sfn09E3hc7lvTmm2/SX/7yF2rTpg3FxsbSypUra6zdFeF6inE91etaalFVlTZv3kyRkZEUGxvrF9epcD3F/LEeduPh8ENoh89VVYUsyzh37hyaNWuGKVOm4OTJk1i7di0iIiKQnZ2NO++8E59++mmZ+VVV1Z9tQUQ4fPgw2rRpU9Nl6Lgeb1xP9bnWWjxcLhfmzJkDu92OqVOn1mAF3rie8vlLPewG55Nukp/4+uuvvV57/ruYMmUKCSFo4MCBtGnTJsrIyKDFixdTVFQUjRs3jogu/wRLX+F6uJ6acj1r8dThy6e9cj3+XQ9jRDfoKaH09HT6r//6LxJC0KeffkpE2l08Jf8ATJw4kfbv3+813+LFi8lgMND58+drtL2V4Xo0XE/1q0u1EHE9Hv5aD2Ml3XAdloyMDBowYAA9+OCDNHToUGrZsqU+TlVV/b8Izzndkr744gtq0KABbd26tcbaWxmupxjXU73qUi1EXE9J/lgPY6XdcLc1N2nSBB07dsTUqVMxYcIEOJ1OpKamAvC+NiAgIKDMvOnp6WjVqhU6depUk02+LK6nGNdTvepSLQDXU5I/1sNYGb7uMdUkz2FRT+prYWEhTZ8+ncLCwig7O5uIyl4lf+7cOTp9+jRNmzaNGjdurD/sydfXQ5RsA9fD9VS3ulRLyTZwPf5ZD2PluaE6LCV5Do/+/PPP1LlzZ3rooYeIyPuX9dChQzRlyhSKi4ujNm3a+PyZHZfD9XA9NaUu1ULE9fh7PYx51LkOi91u14PTSvMMV1VV/+V1Op20aNEiCg4Opm3btunLINJyWtavX+/TrA+uh+upKXWpFk9buB7/rYexK1WnOixTp06lXr160eDBg2nt2rX64VFPsmhpnv9EsrKyaNCgQdStWzc6ceIEDRkyRM/L8CWuh+upKXWpFiKux9/rYexq1IkOy/79+yk+Pp5uvfVWWrBgASUmJlJCQgJt2bLFa7rly5eTxWKhTz75pMwyli1bRkIIkiSJbrnlFsrMzKyp5pfB9XA9NaUu1ULE9fh7PYxdizrRYZk2bRr16dNHPyyam5tLQUFB+sOTcnJyaNiwYdSgQQOaM2cO2Ww2fV6n00lr166liIgIatGiBX311Vc+qaEkrofrqSl1qRYirsff62HsWhh8fZfStSAi5OfnIy0tDTExMfrwCxcuoHv37qhfvz4AICgoCEOGDMHbb7+NqKgor2U4HA6sXbsWzz77LFJSUmq0/aVxPVxPTalLtQBcj7/Xw9j1UOuyhLZv347Y2FjExsbqw5566ils3boV9957LywWC2bPno3Y2Fj8+eef6NGjB5566in06tULRAQhhD6f57WiKJBl2RflcD1cD9dylbge/66HseuuBo/mXJPNmzdTs2bNKC4ujqKioig5OZn27NlDRERnz56l999/n8aPH0+NGjWif//733Tx4kXavHkzDRs2jPr27Vvh1fW+wvVwPTWlLtVCxPX4ez2MVZda0WHJysqiLl26UEpKCh0/fpw+//xzuvXWW6lXr1505MgRfboZM2bQoEGDvJ43MH36dEpISKCsrCxfNL1cXA/XU1PqUi1EXI+/18NYdaoVj+Y/dOgQ9u3bh5EjRyI2NhZJSUmYPXs2VFXFK6+8ok+3fft2dOjQwevQaH5+PsLCwtC4cWNfNL1cXA/XU1PqUi0A1+Pv9TBWnWpFh+XChQto3bo1VFXVh91999144IEHsGvXLqxfvx4A0KVLF8ybNw/z58/Hvn37kJKSgo8//hjJyckQQoD85HIdrofrqSl1qRaA6/H3ehirVj48ulNlBw4cILPZTJ999pnX8MOHD9PAgQNp5MiR+rAhQ4ZQy5YtqXXr1pSQkKA/4dGfcD1cT02pS7UQcT3+Xg9j1anW3CXUv39/FBYWYt26dQgKCtKHP/PMMzh69ChWrFiB4OBg2Gw2XLp0CadPn0Z8fLwPW3x5XA/XU1PqUi0A1+Pv9TBWbXzdY6qqjIwMMhgM9N5773k9HGn69OkUGxvrlaVRG3A9/q0u1VOXaiHiehi7UdWaB8fFx8fjpZdewquvvgpZljF8+HCoqordu3djxIgRMBi0UkpelObPuB7/VpfqqUu1AFwPYzeqWnNKyGPcuHFYtWoVYmNjcfbsWQQEBGDFihVo166dr5t2Vbge/1aX6qlLtQBcD2M3mlrXYbHb7Th48CAyMjJgMpkwYsQIXzfpmnA9/q0u1VOXagG4HsZuNLWuw8IYY4yxG0+teA4LY4wxxm5s3GFhjDHGmN/jDgtjjDHG/B53WBhjjDHm97jDwhhjjDG/xx0WxhhjjPk97rAwxhhjzO9xh4Uxxhhjfo87LIwxxhjze9xhYdUmNTUVt956a42vd8uWLRBCQAiBQYMG1fj6rydPLbm5udd92T179sTEiROv+3IZY6w6cIeFXRVPh6Cir1GjRuH555/H5s2bfdbGI0eO4F//+pfP1u/vVq9ejenTp/u0DT///DOGDBmCpk2bQgiBefPmlZnm0qVLmDhxIuLi4mC1WtG1a1fs2bPHa5qK9sM333xTn8Zut+Ppp59G/fr1ERgYiPvuuw8nT56stI0nTpzAvffei8DAQNSvXx8TJkyAw+HQx9tsNowaNQrt27eHwWC4ok7yqlWr0LZtW5jNZrRt2xZr1qzxGr9161bce++9iI6OhhACn332WZWXzVhdwx0WdlWys7P1r3nz5iEkJMRr2DvvvIOgoCBERET4rI0NGzZEvXr1fLZ+fxceHo7g4GCftqGwsBDNmzfH66+/jsjIyHKneeyxx7Bp0yZ88sknOHDgAPr06YO7774bp06d0qcpue9lZ2dj0aJFEEJgyJAh+jQTJ07EmjVrsGzZMmzfvh35+flISkqCoigVtk9RFAwYMAAFBQXYvn07li1bhlWrVmHSpEle01itVkyYMAF33313lWvfsWMHhg0bhuTkZPz4449ITk7G0KFDsWvXLn2agoICxMfH4x//+EeVl8tYnUWMXaPFixdTaGhomeFTp06l+Ph4/fXIkSNp4MCBNGPGDGrYsCGFhoZSamoqOZ1Oev755yksLIwaN25MCxcu9FrOyZMnaejQoVSvXj0KDw+n++67j44dO1Zhe7799lsCQDk5OV7DV65cSe3atSOLxULh4eHUq1cvys/P18cvWrSIWrduTWazmVq1akXvvvuu1/xZWVk0bNgwCgsLo4CAAEpISKCdO3fq4xcsWEDNmzcno9FILVu2pCVLlnjND4A++ugjGjRoEFmtVrr55ptp7dq1XtN88cUX1KJFC7JYLNSzZ09avHixVy2ZmZmUlJRE9erVo4CAAGrbti198cUXFW6Ld999l26++WYym83UsGFDGjJkiD4uMTGRnnnmGf11XFwczZgxg0aPHk1BQUEUExNDH3zwwRVtg//85z/UsWNHMpvN1KxZM/39rYq4uDh6++23vYYVFhaSLMu0bt06r+Hx8fGUkpJS4bIGDhxId911l/46NzeXjEYjLVu2TB926tQpkiSJNmzYUOFy1q9fT5Ik0alTp/Rhn376KZnNZrp48WKZ6T37eFUMHTqU+vXr5zWsb9++9NBDD5U7PQBas2ZNlZbNWF3ER1hYjfrmm29w+vRpbN26FW+99RZSU1ORlJSEsLAw7Nq1C2PHjsXYsWORlZUFQPsP/M4770RQUBC2bt2K7du3IygoCP369fM6LF+Z7OxsDB8+HP/93/+NQ4cOYcuWLRg8eDDIHVb+0UcfISUlBTNmzMChQ4cwc+ZMTJkyBR9//DEAID8/H4mJiTh9+jT+85//4Mcff8SLL74IVVUBAGvWrMEzzzyDSZMm4aeffsITTzyB0aNH49tvv/Vqx7Rp0zB06FDs378f/fv3x4gRI3DhwgUAQFZWFgYPHoz+/fsjIyMDjz32GCZPnuw1/7hx42C327F161YcOHAAs2fPRlBQULk17927FxMmTMCrr76KI0eOYMOGDejRo8dlt9PcuXPRqVMn7Nu3D0899RSefPJJHD58uErb4KuvvsLDDz+MCRMm4ODBg/jggw/wr3/9CzNmzKjy+1Say+WCoiiwWCxew61WK7Zv317uPH/88Qe++OILPProo/qw9PR0OJ1O9OnTRx8WHR2Ndu3aIS0trcL179ixA+3atUN0dLQ+rG/fvrDb7UhPT7/asvRll2yPZ9mXaw9jNzRf95hY7XclR1ji4uJIURR9WKtWrah79+76a5fLRYGBgfTpp58SEdHChQupVatWpKqqPo3dbier1UpfffVVue0p7whLeno6AaDMzMxy54mJiaH//d//9Ro2ffp06tKlCxERffDBBxQcHEx//vlnufN37dqVxowZ4zXswQcfpP79++uvAdD//M//6K/z8/NJCEFffvklERH97W9/ozZt2njV+tJLL3nV0r59e0pNTS23DaWtWrWKQkJCKC8vr9zx5R1hefjhh/XXqqpSw4YN6b333iOiyrdB9+7daebMmV7DPvnkE4qKiqpSe8s7wkJE1KVLF0pMTKRTp06Ry+WiTz75hIQQ1LJly3KXM3v2bAoLC6OioiJ92NKlS8lkMpWZtnfv3vT4449X2KYxY8ZQ7969yww3mUxl9heiKzvCYjQaaenSpV7DKmonER9hYYyPsLAadcstt0CSine7Ro0aoX379vprWZYRERGBs2fPAtD+M/71118RHByMoKAgBAUFITw8HDabDb/99luV1xsfH49evXqhffv2ePDBB/HRRx8hJycHAHDu3DlkZWXh0Ucf1dcRFBSE1157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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ds['vel'][1].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# The ADCP transducers were measured to be 0.6 m from the feet of the lander\n", - "api.clean.set_range_offset(ds, 0.6)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So, the center of bin 1 is located at 1.2 m:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'range' (range: 28)>\n",
-              "array([ 1.2,  1.7,  2.2,  2.7,  3.2,  3.7,  4.2,  4.7,  5.2,  5.7,  6.2,  6.7,\n",
-              "        7.2,  7.7,  8.2,  8.7,  9.2,  9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n",
-              "       13.2, 13.7, 14.2, 14.7])\n",
-              "Coordinates:\n",
-              "  * range    (range) float64 1.2 1.7 2.2 2.7 3.2 ... 12.7 13.2 13.7 14.2 14.7\n",
-              "Attributes:\n",
-              "    units:    m
" - ], - "text/plain": [ - "\n", - "array([ 1.2, 1.7, 2.2, 2.7, 3.2, 3.7, 4.2, 4.7, 5.2, 5.7, 6.2, 6.7,\n", - " 7.2, 7.7, 8.2, 8.7, 9.2, 9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n", - " 13.2, 13.7, 14.2, 14.7])\n", - "Coordinates:\n", - " * range (range) float64 1.2 1.7 2.2 2.7 3.2 ... 12.7 13.2 13.7 14.2 14.7\n", - "Attributes:\n", - " units: m" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ds.range" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.2. Discard Data Above Surface Level\n", - "\n", - "To reduce computational load, we can exclude all data at or above the water surface level. Since the instrument was oriented upwards, we can utilize the pressure sensor data along with the function `find_surface_from_P`. However, this approach necessitates that the pressure sensor was calibrated or 'zeroed' prior to deployment. If the instrument is facing downwards or doesn't include pressure data, the function `find_surface` can be used to detect the seabed or water surface.\n", - "\n", - "It's important to note that Acoustic Doppler Current Profilers (ADCPs) do not measure water salinity, so you'll need to supply this information to the function. The dataset returned by this function includes an additional variable, \"depth\". If `find_surface_from_P` is invoked after `set_range_offset`, \"depth\" represents the distance from the water surface to the seafloor. Otherwise, it indicates the distance to the ADCP pressure sensor.\n", - "\n", - "After determining the \"depth\", you can use the nan_beyond_surface function to discard data in depth bins at or above the actual water surface. Be aware that this function will generate a new dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "api.clean.find_surface_from_P(ds, salinity=31)\n", - "ds = api.clean.nan_beyond_surface(ds)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAHyCAYAAADiG2SEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACeEUlEQVR4nOzdeZwdVZ3//9c5td61t6STTsgKAgooCC6ALJExbDIuiDgom44P+GIEZBgUcQkuZHAcZBQFYYCg6MjMIIyOuPBTAqJhZIuIwyIaSAwJISG93LW28/ujbl9sE6C7b6dv0vk8H496JLdu1alzl3R/cupUvZUxxiCEEEIIMQXpdndACCGEEGJ7kUJHCCGEEFOWFDpCCCGEmLKk0BFCCCHElCWFjhBCCCGmLCl0hBBCCDFlSaEjhBBCiClLCh0hhBBCTFlS6AghhBBiypJCR4hJsHTpUpRSI9bNnz+fM844oz0d2ob58+ejlOLss8/e6rkVK1aglOK//uu/XraN5cuXo5RqLps2bWo+9/vf/55zzjmHgw8+mFwuh1KKFStWbLOdzs7OZhtLlixp6XUJIXZtUugI0Sa33XYbn/70p9vdja1cf/31PPHEEy218f3vf5+VK1fS2dnZXPfAAw9w++23093dzVFHHfWy+/9//9//x8qVK1vqgxBCgBQ6QrTNAQccwO677/6y24RhSBRFk9QjmqMtn/zkJ1tq54ADDuDNb34ztm0315166qk8++yz/OhHP+K000572f0POugg3vzmN7fUByGEACl0hJhwP/rRj9h///3xPI8FCxbw5S9/eZvb/fWpq+HTQ9/+9rf5h3/4B2bPno3neTz11FOT1HPo7u7mE5/4BN///ve57777JrRtreXHjRBi8tmvvIkQYrR+/vOf8453vIODDz6Y733ve8RxzJe+9CWee+65Ubdx8cUXc/DBB3PNNdegtaa3t/clt43jGGPMK7aptR51oXHeeedx1VVXcdFFF3HPPfeMut9CCLEjkkJHiAl0ySWXMGPGDO6880583wfg6KOPZv78+aNuY/fdd+c///M/R73tM88884rbffazn2Xp0qWjajOTybB06VI+/OEP8z//8z+8/e1vH9V+QgixI5JCR4gJUi6Xuf/++znnnHOaRQ5AoVDghBNO4KabbhpVOyeeeOKoj/nDH/6Qer3+itvNmjVr1G0CnHnmmXzlK1/hE5/4BMcdd9yY9hVCiB2JFDpCTJAtW7aQJAkzZ87c6rltrXspfX19o972Na95zahPXY2FZVlcdtllvPOd7+Smm25iwYIFY9pfCCF2FDI7UIgJ0tXVhVKKDRs2bPXctta9lL++387L2X333XEc5xWXz33uc6Nuc9g73vEODj30UD772c9Sq9XGvL8QQuwIZERHiAmSy+V44xvfyPe//33++Z//uXn6amhoiB/+8Ifb5Zjb69TVsMsvv5y3vOUtfPWrXx3X/kII0W5S6AgxgT7/+c9zzDHH8La3vY1/+Id/II5jLr/8cnK5HC+88MKEH2+//fab8Db/0qGHHso73vEO/vu//7vltiqVCnfccQdA89L1u+++m02bNpHL5Tj22GNbPoYQQvw1KXSEmEBve9vbuP322/nUpz7FySefzMyZMznnnHOoVqtceuml7e7euCxbtoz/+Z//IY7jltrZuHEjJ5100oh1w1eCzZs3j6effrql9oUQYluUGc1MRiGEGIXly5dz5pln8tRTTzFv3rwRd0Yei+H7AzmOw0c+8hGuuuqqCe6pEGJXIZORhRATbo899sBxnBGhnmPR09OD4zgT3CshxK5IRnSEEBNm8+bNrF69uvl4//33H9eozqpVq5oZX729vcydO3fC+iiE2LVIoSOEEEKIKUtOXQkhhBBiypJCRwghhNgFLFu2jDe84Q0UCgV6e3t55zvfyRNPPPGK+919990ceOCB+L7PwoULueaaayahtxNHCh0hhBBiF3D33XfzkY98hPvuu48777yTKIpYvHgx5XL5JfdZvXo1xx13HIcddhgPP/wwn/zkJzn33HO59dZbJ7HnrZnyc3SSJOHZZ5+lUCiM6db6Qgghdj3GGIaGhpg1a9aYM+LGolarEQRBy+0YY7b63eZ5Hp7nveK+zz//PL29vdx9990cfvjh29zm4x//OD/4wQ947LHHmuvOPvtsfvvb37Jy5crWOj9JpvwNA5999lnmzJnT7m4IIYTYiaxdu5bddtttu7Rdq9XoyeSp0NpNOAHy+TylUmnEus9+9rPNm3G+nIGBAQC6u7tfcpuVK1eyePHiEeuOPvporr/+esIw3CluAzHlC51CoQCkX9pisdjm3gghhNiRDQ4OMmfOnObvju0hCAIqxJzGbNwWZpAEJHyrtG6r32+jGc0xxnDBBRfw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DeTOyKmzzjqLcrn8ks/PnTuXG2+8cdztS6EjhBBCtINqcY6OmhpzdN71rne97PNdXV2cfvrp425/apSDQgghhJgyfvWrX1Gv1yekLSl0hBBCiHYYvuqqlWWKOvbYY1m3bt2EtCWnroQQQog2kDk6L62Vycd/beq+S0IIIYTY5bW10Lnnnns44YQTmDVrFkopbr/99hHPG2NYunQps2bNIpPJcOSRR/L73/++PZ0VQgghJpKcunpJ3/zmN5kxY8aEtNXWQqdcLvO6172Oq666apvPf+lLX+KKK67gqquu4v7772fmzJm87W1vY2hoaJJ7KoQQQkyw4RsGjnuZuidlTjnlFOI45vbbb+exxx5rqa22ztE59thjOfbYY7f5nDGGK6+8kksuuYR3v/vdANx0003MmDGD7373u5x11lnb3K9er4+YqT04ODjxHRdCCCFa1Gow51QL9Xzve9/L4YcfzpIlS6hWqxx00EE8/fTTGGP43ve+x4knnjiudnfYcnD16tVs2LCBxYsXN9d5nscRRxzBr3/965fcb9myZXR0dDSXOXPmTEZ3hRBCCNGCe+65h8MOOwyA2267DWMM/f39fPWrX+ULX/jCuNvdYQudDRs2AGx1jm7GjBnN57bl4osvZmBgoLmsXbt2u/ZTCCGEGBetW1+mkIGBAbq7uwH4yU9+woknnkg2m+X444/nD3/4w7jb3eEvL//rxNJXSjH1PA/P87Z3t4QQQojWSHr5CHPmzGHlypV0d3fzk5/8hO9973sAbNmyBd/3x93uDlsOzpw5E2Cr0ZuNGzdO2ExsIYQQQuwYzj//fN7//vez2267MWvWLI488kggPaW13377jbvdHbbQWbBgATNnzuTOO+9srguCgLvvvptDDjmkjT0TQgghWqe01fIylZxzzjncd9993HDDDdx7773oxqm5hQsX7rxzdEqlEqtWrWLVqlVAOgF51apVrFmzBqUU559/Ppdddhm33XYbjz76KGeccQbZbJZTTjmlnd0WQgghWqdanJ+jxvcr/Bvf+AYLFizA930OPPBAfvnLX77ktitWrEAptdXy+OOPj/dVv6wDDzyQd73rXeTz+ea6448/nkMPPXTcbbZ1js4DDzzAokWLmo8vuOACAE4//XSWL1/ORRddRLVa5ZxzzmHLli286U1v4mc/+xmFQqFdXRZCCCF2Wrfccgvnn38+3/jGNzj00EP55je/ybHHHsv//d//MXfu3Jfc74knnqBYLDYfT58+fTK6OyGUmchAiR3Q4OAgHR0dDAwMjPiQhBBCiL82Gb8zho+xecV/UMxnx99OqULPke9l7dq1I/r6chflvOlNb+L1r389V199dXPdq1/9at75zneybNmyrbZfsWIFixYtYsuWLXR2do67r+20w87REUIIIaa0Cboz8pw5c0bcP25bBQuk81wffPDBEfenA1i8ePHL3p8O4IADDqCvr4+jjjqKu+66a2Je/yTZ4S8vF0IIIcRL29aIzrZs2rSJOI7HdH+6vr4+rr32Wg488EDq9Trf/va3Oeqoo1ixYgWHH374xL2I7UgKHSGEEKIdWr3pX2PfYrE4ptNsY7k/3V577cVee+3VfHzwwQezdu1avvzlL2+XQqdWq/HII4+wceNGkiQZ8dzf/u3fjqtNKXSEEEKINpjsrKtp06ZhWVbL96d785vfzM033zymY4/GT37yE0477TQ2bdq01XNKKeI4Hle7MkdHCCGEaIeW5ueM/a7Kruty4IEHjrg/HcCdd945pvvTPfzww/T19Y3p2KOxZMkSTjrpJNavX0+SJCOW8RY5ICM6QgghxC7jggsu4NRTT+Wggw7i4IMP5tprr2XNmjWcffbZQJoXuW7dOr71rW8BcOWVVzJ//nz22WcfgiDg5ptv5tZbb+XWW2+d8L5t3LiRCy64YMLTD6TQEUIIIdqhDVlXJ598Mps3b+Zzn/sc69evZ9999+WOO+5g3rx5AKxfv541a9Y0tw+CgAsvvJB169aRyWTYZ599+NGPfsRxxx03/n6/hPe85z2sWLGC3XfffULblfvoCCGEEA2TeR+dLQ/+lGI+N/52SmW6Djx6yvx+q1QqnHTSSUyfPp399tsPx3FGPH/uueeOq10Z0RFCCCFE2333u9/lpz/9KZlMphk9MUwpJYWOEEIIsVNRLZ66UlMr1PNTn/oUn/vc5/jEJz7RDPScCFLoCCGEEO2g1LiDOZv7TyFBEHDyySdPaJEDcnm5EEIIIXYAp59+OrfccsuEtysjOkIIIUQ7KN3iiM7UGquI45gvfelL/PSnP+W1r33tVpORr7jiinG1K4WOEEII0QZGaUwLxUor++6Ifve733HAAQcA8Oijj4547qUiKkZjVIXOI488MuaGX/Oa12DbUkcJIYQQ4pVtr1T0UVUi+++/P0opRnvLHa01Tz75JAsXLmypc0IIIcSUJaeuJsWoh1z+93//l+nTp7/idsYY9t1335Y6JYQQQkx5SrV25dQUuOrq3e9+N8uXLx/1DQ/f//7385WvfIXe3t5RH2NUhc4RRxzBHnvsQWdn56gaPfzww8lkMqPuhBBCCLHL0TpdWtl/J/ff//3fPP/886Pa1hjDD3/4Qz7/+c9PfKEz1vNmd9xxx5i2F0IIIcSuxxjDnnvuuV2PIbOFhRBCiDaQq67GNwF59uzZY9p+zIWOMYb/+q//4q677mLjxo0kSTLi+e9///tjbXJSxM88QpKxIYkxSYJyPJJSP8pxIYkh3wOV/vTvtpvulMQo18cENUy1DLaDCWpYXb0kQ/0klUGsnr7mtvHAZtyDT2zbaxRCiF3R79YPECeGomcRJgZXK2IDceMCmoydFgRxYnB0Oq8lTAzDl9dYSqEUuJaiPFievI7LZGSOOOKI7X6MMRc65513Htdeey2LFi1ixowZLV3bLoQQQgixPY250Ln55pv5/ve/z3HHHbc9+iOEEELsGmREZ1KMudDp6OiQ++MIIYQQrZJCZ1KM+V1aunQpl156KdVqdXv0RwghhBBiwox5ROekk07i3//93+nt7WX+/PlbhW499NBDE9Y5IYQQYqoySrV41dXUmiO7dOlSzjzzTObNmzeh7Y650DnjjDN48MEH+cAHPiCTkYUQQojxklNXI/zwhz/kC1/4AkcccQQf+tCHePe7343v+y23O+ZC50c/+hE//elPectb3tLywYUQQgghAB588EEeeeQRbrzxRj72sY/xkY98hPe973188IMf5A1veMO42x1zOThnzpxRZ1IIIYQQ4iUMZ121skwxr33ta/nKV77CunXruOGGG1i3bh2HHnoo++23H//6r//KwMDAmNscc6HzL//yL1x00UU8/fTTYz6YEEIIIRqGT121skxRSZIQBAH1eh1jDN3d3Vx99dXMmTOHW265ZUxtjfnU1Qc+8AEqlQq777472Wx2q8nIL7zwwlibFEIIIXY5EgGxtQcffJAbb7yRf//3f8fzPE477TS+/vWvs8ceewDpYMu5557LySefPOo2x1zoXHnllWPdRQghhBDiZb32ta/lscceY/HixVx//fWccMIJWJY1YpvTTjuNf/zHfxxTu2MudE4//fSx7iKE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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ds['vel'][1].plot()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.3: Apply an Acoustic Signal Correlation Filter\n", - "\n", - "After removing data from bins at or above the water surface, we typically apply a filter based on acoustic signal correlation to the ADCP data. This helps to eliminate erroneous velocity data points, which can be caused by factors such as bubbles, kelp, fish, etc., moving through one or multiple beams.\n", - "\n", - "You can quickly inspect the data to determine an appropriate correlation value by using the built-in plotting feature of xarray. In the following example, we use xarray's slicing capabilities to display data from beam 1 within a range of 0 to 10 m from the ADCP.\n", - "\n", - "It's important to note that not all ADCPs provide acoustic signal correlation data, which serves as a quantitative measure of signal quality. Older ADCPs may not offer this feature, in which case you can skip this step when using such instruments." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAHyCAYAAADiG2SEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSpElEQVR4nOzdd3gU1d4H8O/M1iy7CUkoSTChBpAiIigCCigCChaECxZEQK+KoIJYkYugUuziK4rlKgKiCKLotYBIL1KlKF2lREioIdnNZuuc94/NDNkklGSX7Cb5fp5nHtiZM2d+50zhcObMjCSEECAiIiKqhORIB0BERER0sbChQ0RERJUWGzpERERUabGhQ0RERJUWGzpERERUabGhQ0RERJUWGzpERERUabGhQ0RERJUWGzpERERUabGhQ1Xa+PHjIUkSTpw4EelQotKOHTswbNgwtG/fHtWqVYMkSVi+fPkFry9Jkja9/vrrQcv+85//4Oabb0adOnUgSRIGDx5cYh4jR47U8rBarSGUhoiqIjZ0iOisNm3ahAULFiAhIQFdu3YtUx73338/fv31VwwYMCBo/ltvvYWTJ0/i1ltvhdFoPOv6jz/+OH799Vf07NmzTNsnoqpNH+kAiCh6DRw4EIMGDQIAfPXVV/jf//5X6jwuueQSXH311cXm2+12yHLg/1qzZs066/p169ZF3bp1UbNmzVJvm4iIPTpEADIyMtCnTx/ExsYiLi4O99xzD44fP14s3ZdffqndxrFarejRowe2bNkSlGbTpk248847Ua9ePcTExKBevXq46667cPDgwaB0n376KSRJwtKlS/HAAw8gMTERsbGxuPfee5GXl4esrCz0798f1atXR3JyMp588kl4vd6LWg9FqQ2RipY3EZGKVxoiALfffjsaNWqEr776CuPHj8eCBQvQo0ePoIbFpEmTcNddd6FZs2aYO3cuZs2aBbvdjmuvvRY7d+7U0h04cABNmjTBlClTsGjRIrzyyivIzMzElVdeWeJYoH//+9+Ii4vDnDlz8J///Aeff/45HnjgAfTq1QutWrXCV199hUGDBuGNN97AO++8c96yKIoCn8933snv94en8oiIopkgqsLGjRsnAIjHH388aP7s2bMFAPHZZ58JIYQ4dOiQ0Ov14tFHHw1KZ7fbRVJSkujfv/9Zt+Hz+YTD4RDVqlUTb7/9tjZ/+vTpAkCxPHv37i0AiDfffDNo/uWXXy6uuOKK85Zp0KBBAsB5p86dO583r8LmzZsnAIhly5Zd8DoAxLhx486brlq1amLQoEHnTDNo0CBRrVq1C942EZEQQnCMDhFQbKBs//79MWjQICxbtgwDBgzAokWL4PP5cO+998Ln82npzGYzOnfujGXLlmnzHA4HXnrpJcyfPx8HDhwI6jnZtWtXsW3ffPPNQb8vvfRSLFiwAL169So2/+effz5vWcaPH49HHnnkvOlsNtt50xARVXRs6BABSEpKCvqt1+uRmJiIkydPAgCOHj0KALjyyitLXL/weJO7774bS5YswdixY3HllVciNjYWkiShZ8+eyM/PL7ZuQkJC0G/1CaSS5rtcrvOWJS0tDZdccsl500mSdN40REQVHRs6RACysrJQp04d7bfP58PJkyeRmJgIAKhRowaAwJNHdevWPWs+OTk5+P777zFu3Dg8++yz2ny3241Tp05dpOiD3XfffZgxY8Z503Xu3LlU78QhIqqI2NAhAjB79my0adNG+z137lz4fD506dIFANCjRw/o9Xr89ddf6Nu371nzkSQJQgiYTKag+f/973/LbfAvb10REZ3Bhg4RgK+//hp6vR7dunXDjh07MHbsWLRq1Qr9+/cHANSrVw8vvvgixowZg7///hs33ngj4uPjcfToUWzYsAHVqlXDCy+8gNjYWHTq1AmvvfYaatSogXr16mHFihX4+OOPUb169XIpS7169VCvXr2w5OV0OvHjjz8CANatWwcAWLFiBU6cOIFq1arhpptuKnPeK1as0B7h9/v9OHjwIL766isAgd4mvjeHiMKBDR0iBBo648ePx7Rp0yBJEm655RZMmTIl6I29o0ePRrNmzfD222/jiy++gNvtRlJSEq688koMHTpUS/f5559jxIgRePrpp+Hz+dCxY0csXry42ODiiuDYsWPo169f0Lzx48cDCLzI78CBA2XOe9y4cVixYoX2e/ny5dqttGXLlmm9aUREoZCEECLSQRBR5SRJEsaOHYvnn38eOp2uTAOgFUWBoii4//77MX/+fDgcjosQKRFVVnxhIBFdVC+99BIMBgPeeOONMq0/atQoGAwGzJw5M8yREVFVwB4dIrpoNm3apP09NTUVtWvXLnUeGRkZ2uP9Op0OrVu3Dlt8RFT5saFDRERElRZvXREREVUCK1euxC233IKUlBRIkoQFCxYELRdCYPz48UhJSUFMTAy6dOmCHTt2BKVxu9149NFHUaNGDVSrVg233nor/vnnn3IsRfixoUNERFQJ5OXloVWrVpg6dWqJy1999VW8+eabmDp1KjZu3IikpCR069YNdrtdSzNy5Eh88803mDNnDlavXg2Hw4Gbb765Qn8EmLeuiIiIKhlJkvDNN9+gd+/eAAK9OSkpKRg5ciSeeeYZAIHem9q1a+OVV17BQw89hJycHNSsWROzZs3CHXfcAQA4cuQIUlNT8eOPP6JHjx6RKk5IKvR7dBRFwZEjR2Cz2fjdHiIiOichBOx2O1JSUoK+TxduLpcLHo8n5HyEEMX+bTOZTMXevH4h9u/fj6ysLHTv3j0or86dO2Pt2rV46KGHsHnzZni93qA0KSkpaNGiBdauXcuGTiSoLU0iIqILlZGRcUEfvi0Ll8uF+nWtyDoW+q0eq9Va7L1R48aN017aWRpZWVkAUOzJx9q1a+PgwYNaGqPRiPj4+GJp1PUrogrd0FG/1XMNekIPQ4SjISKiaOaDF6vx40X9zpvH40HWMT/2b66LWFvZe41y7QrqtzmIjIwMxMbGavPL0ptTWNEeopJ6jYq6kDTRrEI3dNSK18MAvcSGDhERnUPBiNTy+Ee7mjUwlZW/INbY2Nighk5ZJSUlAQj02iQnJ2vzjx07pvXyJCUlwePxIDs7O6hX59ixY+jQoUPIMUQKn7oiIiKq5OrXr4+kpCQsXrxYm+fxeLBixQqtEdOmTRsYDIagNJmZmfjjjz8qdEOnQvfoEBERRSMFAgrK/lBzWdZ1OBz4888/td/79+/H1q1bkZCQgLS0NIwcORKTJk1Ceno60tPTMWnSJFgsFtx9990AgLi4ONx///144oknkJiYiISEBDz55JNo2bIlbrjhhjKXJdLY0CEiIgozBQqUENcvrU2bNuG6667Tfo8aNQoAMGjQIHz66ad4+umnkZ+fj2HDhiE7Oxvt2rXDzz//HDRm6a233oJer0f//v2Rn5+Prl274tNPP4VOpwuhNJFVod+jk5ubi7i4OHTBbRyjQ0RE5+QTXizHt8jJyQnLuJeSqP8uHdlzSciDkVOa/HNRY60q2KNDREQUZn4h4A+hHyGUdSkYGzpERERhFokxOlQyPnVFRERElRZ7dIiIiMJMgYCfPTpRgQ0dIiKiMOOtq+jBW1dERERUabFHh4iIKMz41FX0YEOHiIgozJSCKZT1KTzY0CEiIgozf4iDkUNZl4JxjA4RERFVWuzRISIiCjO/CEyhrE/hwYYOERFRmHGMTvTgrSsiIiKqtNijQ0REFGYKJPghhbQ+hQcbOkRERGGmiMAUyvoUHrx1RURERJUWe3SIiIjCzB/iratQ1qVgbOgQERGFGRs60YO3roiIiKjSYo8OERFRmClCgiJCeOoqhHUpGBs6REREYcZbV9GDDR0iIqIw80OGP4TRIf4wxlLVcYwOERERVVrs0SEiIgozEeIYHcExOmHDhg4REVGYcYxO9OCtKyIiIqq02KNDREQUZn4hwy9CGIzMb12FDRs6REREYaZAghLCTRMFbOmES0RvXdntdowcORJ169ZFTEwMOnTogI0bN0YyJCIiIqpEItrQ+fe//43Fixdj1qxZ+P3339G9e3fccMMNOHz4cCTDIiIiCok6GDmUicIjYg2d/Px8zJ8/H6+++io6deqERo0aYfz48ahfvz6mTZsWqbCIiIhCpo7RCWWi8IjYGB2fzwe/3w+z2Rw0PyYmBqtXry5xHbfbDbfbrf3Ozc29qDESERFRxRaxJqPNZkP79u3x0ksv4ciRI/D7/fjss8+wfv16ZGZmlrjO5MmTERcXp02pqanlHDUREdH5BQYjhzZReES0b2zWrFkQQqBOnTowmUz4v//7P9x9993Q6XQlph89ejRycnK0KSMjo5wjJiIiOj+l4FtXZZ1CeWKLgkX08fKGDRtixYoVyMvLQ25uLpKTk3HHHXegfv36JaY3mUwwmUzF5n+z93fE2nTY4XWirk6GVQ7cDsvyO5CksyJbcWK9uzrMkhd1dHakG6xY41JQS+dEusEKr/DBLXzael7hg0EKVM0+rwM2GUjSWdEjpdVFqgkiIipq0ZFt6JHSClMPrsFhvw2tjHmIly3Y53Wghk5GvGwBcOaa7VBcyPT7YJOBk4oMm+SHTdbBrviRprch1+5HfOPyiT309+jw8fJwiYomY7Vq1ZCcnIzs7GwsWrQIt912W6RDIiIiokogoj06ixYtghACTZo0wZ9//omnnnoKTZo0wZAhQyIZFhERUUiUEG8/8YWB4RPRhk5OTg5Gjx6Nf/75BwkJCejbty8mTpwIg8EQybCIiIhC4hcS/CF8gTyUdSlYRBs6/fv3R//+/SMZAhEREVVi/NYVERFRmKlPT5V9fd66Chc2dIiIiMJMETKUEJ66UvjUVdhExVNXRERERBcDe3SIiIjCjLeuogcbOkRERGGmILQnp5TwhVLl8dYVERERVVrs0SEiIgqz0F8YyH6IcGFDh4iIKMxC/9YVGzrhwoYOERFRmCmQoCCUMTp8M3K4sMlIRERElRZ7dIiIiMKMt66iBxs6REREYRb6e3TY0AkX1iQRERFVWuzRISIiCjNFSFBCeWFgCOtSMDZ0iIiIwkwJ8dYV36MTPpWmoeMVPmx1XYLmtlM45LMjTW/DSUVGouxDvGzBjTGegpRWZPkd6Gi2IlsJHEgGSY+9Pg+aFxxXBkkPh+KCVTajnt4MgxSopkVHtsErfHAIDwyQYZXNQTGo66h/qjZ7PGhjNCJbcSJetiDL7wAAJBakUfMvWh638MEqm7VtxssWZCtOAMB6d3U0M5wEACTrYvBmdlNcY9mLVH0eHki7JjyVSkQVypx/fsVOjxmp+jwkyAY4hA9JusA1L0lnRYdtfbHisi9hkPTadakwr/ABgLb8b09N9LPmAACyFScMkGGS9HAID3Z6zOholrX1DJIeC/ONuDHGgzUuBVeZFBgkvbbtwgrPU69vVsmoXQsLLx/993bU05tRQ5eHeNkCAEg3nMlP3TYAWGUzasCJI36gucGixZ2mtxWUjb0kVVGlaegQERFFC0XIUEJ4ciqUdSkYGzpERERh5ocEfwg9SKGsS8HYZCQiIqJKiz06REREYcZbV9GDDR0iIqIw8yO020/+8IVS5bGhQ0REFGbs0YkerEkiIiKqtNijQ0REFGb8qGf0YE0SERGFmYAEJYRJlHJ8j8/nw3/+8x/Ur18fMTExaNCgAV588UUoinImJiEwfvx4pKSkICYmBl26dMGOHTvCXfSow4YOERFRBffKK6/g/fffx9SpU7Fr1y68+uqreO211/DOO+9oaV599VW8+eabmDp1KjZu3IikpCR069YNdrs9gpFffLx1RUREFGbhunWVm5sbNN9kMsFkMhVL/+uvv+K2225Dr169AAD16tXDF198gU2bNgEI9OZMmTIFY8aMQZ8+fQAAM2bMQO3atfH555/joYceKnOs0Y49OkRERGGmfr08lAkAUlNTERcXp02TJ08ucXvXXHMNlixZgr179wIAtm3bhtWrV6Nnz54AgP379yMrKwvdu3fX1jGZTOjcuTPWrl17kWsjstijQ0REFKUyMjIQGxur/S6pNwcAnnnmGeTk5KBp06bQ6XTw+/2YOHEi7rrrLgBAVlYWAKB27dpB69WuXRsHDx68SNFHBzZ0iIiIwswPGf4Qbpqo68bGxgY1dM7myy+/xGeffYbPP/8czZs3x9atWzFy5EikpKRg0KBBWjpJCh7kLIQoNq+yieitqwsZJU5ERFTRhOvW1YV66qmn8Oyzz+LOO+9Ey5YtMXDgQDz++OPara6kpCQAZ3p2VMeOHSvWy1PZRLShcyGjxImIiOjcnE4nZDn4n3SdTqd1HNSvXx9JSUlYvHixttzj8WDFihXo0KFDucZa3iJ66+p8o8SJiIgqIgUylBD6Ekq77i233IKJEyciLS0NzZs3x5YtW/Dmm2/ivvvuAxC4ZTVy5EhMmjQJ6enpSE9Px6RJk2CxWHD33XeXOc6KIKINnWuuuQbvv/8+9u7di8aNG2ujxKdMmVJierfbDbfbrf0u+tgdERFRNPALCf5S3n4qun5pvPPOOxg7diyGDRuGY8eOISUlBQ899BCef/55Lc3TTz+N/Px8DBs2DNnZ2WjXrh1+/vln2Gy2MsdZEUS0oXO+UeJFTZ48GS+88EI5R0lERFQ6ZRlnU3T90rDZbJgyZcpZOwqAQK/O+PHjMX78+DLHVRFFdIxO4VHiv/32G2bMmIHXX38dM2bMKDH96NGjkZOTo00ZGRnlHDERERFVJJIQQkRq46mpqXj22WcxfPhwbd6ECRPw2WefYffu3eddPzc3F3Fxccje2wAxVgGDdKaDaofXieYGCw757DBKEpJ01mLre4UPJxUXrJIeVtlc4ja8wheUb0nLAcAtfLDKZjgUF0ySHg7hQbxs0WJprDfCIOm1uAqvCwAGSY9sxQkAiJctyFacQes3NwTPK7x9ddv7vA7U0MmwSkbMddTCbdWOBJVrn9eBenozHsy4Dh+mLtO2q3IorrPWAwAsd0noYhbwCp9WPjVmq2TEBreMA94a+DyzHXxdjpw1H6LKZtGRbWddpp7/ha8JwJlrS9FrzCGfHWn64FsJRdNm+R3aNS1bccIqGQEEn8/7vA6kG6zan2paIHC+rnEb0MUstPxPKi4k6axafhvcMjqa5aDtF42p6DYLlyFBNmjXk8LrL3dJaGXMg1Uy4qTiQqJshkN4tDKoeapxqHEVvT69n1MHQ+MOF9u2WsYTfgUbXGnoWe0f/Jh3CQbYTiHX7kd847+Rk5NzQY9sl4X679KDK/rBaDWUOR+Pw4sPO8+7qLFWFRG9dXW+UeJEREQVkR8S/KX8MGfR9Sk8ItrQOd8ocSIiIqJQRLShcyGjxImIiCoaRZR+QHHR9Sk8ItrQuZBR4kRERBWNImQoIXy9PJR1KRhrkoiIiCotftSTiIgozBRIUEIYUBzKuhSMDR0iIqIwK+83I9PZ8dYVERERVVrs0SEiIgozDkaOHmzoEBERhZmCEL91xTE6YcOGDhERUZiJEAcjiwra0Nm7dy+WL1+OY8eOFfvKQaTekceGDhEREYXso48+wsMPP4waNWogKSkJknSmsSZJEhs6RERElYUiQrx1VQGfupowYQImTpyIZ555JtKhBGFDh4iIKMyq4mDk7Oxs9OvXL9JhFFPxapKIiIiiTr9+/fDzzz9HOoxi2KNDREQUZlXx1lWjRo0wduxYrFu3Di1btoTBYAha/thjj0UkLjZ0iIiIwqwqfgLiww8/hNVqxYoVK7BixYqgZZIksaFDREREFdf+/fsjHUKJ2NAhIiIKs6p466owIQQABD1iHimSUKOpgHJzcxEXF4fsvQ0QYxUwSHpkK07EyxZ4hQ8GSa/9qcpWnLBKxqB5hZfFyxbtd9F1i84raXlJ1HRq/kW3czZZfge+zG2B++N2wwul2DpFt7/cJaGjyQsA2nx1W48cuQovJ62EVTYX284hnx0AkKa3wSt8Qeur2zmpuJCks6L5ew9jx7BpyPI7YJX0Wn4lrXe+co491gIv1fqj2PoOxVUszsL7M9OfjzS9DctdEtY7G+LB6ttxwq/gsN+GOjo7DvttaGvMR99L2p1121Q5PP7XLjTUn0K6wYodXidSdIH5Oz1mdDQHnrUoejxlK04AgFsosEp6mCQ9HMKDeNmCHV4nVjnT0dWyB8m6M8e3Q3HBJOlhkPTY53Ug3WCFV/iw3augjdEIIHC+zsi5HM8k/AngzDF9UnHBJMmwSka4C+aZCs4T9bzK8juQpLNq6xW+XhTddg2dHHRenes8K+k6qNZH0fXWuBStztTyqOe4uv4hnx1pehuGHLoW09NWaensCmCTAZMka9c4AOeMU63HkuI9W1kAYINbRkezjH1eB+rpzUHXuvZrH8Ly9tNwUpHR3GAJqtexx1rgXuNaNL30KHJychAbG1vidkKl/rt008IHYKhmLHM+3jwPfrrxo4sa68Uwc+ZMvPbaa9i3bx8AoHHjxnjqqacwcODAiMXEHh0iIqIwq4o9Om+++SbGjh2LRx55BB07doQQAmvWrMHQoUNx4sQJPP744xGJiw0dIiIiCtk777yDadOm4d5779Xm3XbbbWjevDnGjx/Phg4REVFlURV7dDIzM9GhQ4di8zt06IDMzMwIRBTAFwYSERGFmcCZR8zLMlXEwbONGjXC3Llzi83/8ssvkZ6eHoGIAtijQ0RERCF74YUXcMcdd2DlypXo2LEjJEnC6tWrsWTJkhIbQOWFDR0iIqIwq4q3rvr27Yv169fjrbfewoIFCyCEQLNmzbBhwwa0bt06YnGxoUNERBRmVbGhAwBt2rTBZ599FukwgrChQ0RERGWSm5urvecnNzf3nGkj9T4gNnSIiIjCrKr06MTHxyMzMxO1atVC9erVS3wTshACkiTB7/dHIEI2dIiIiMKuqjR0li5dioSEBADAsmXLIhxNydjQISIiojLp3Lmz9vf69esjNTW1WK+OEAIZGRnlHZqG79EhIiIKMyGkkKeKpn79+jh+/Hix+adOnUL9+vUjEFEAe3SIiIjCTH3xXyjrVzTqWJyiHA4HzObiH5QuL2zoEBERhVlVGaMDAKNGjQIASJKEsWPHwmI585V6v9+P9evX4/LLL49QdBFu6NSrVw8HDx4sNn/YsGF49913IxARERERlcaWLVsABHp0fv/9dxiNRm2Z0WhEq1at8OSTT0YqvMg2dDZu3Bj0uNkff/yBbt26oV+/fhGMioiIKDShjrOpSGN01KethgwZgrfffjti78s5m4g2dGrWrBn0++WXX0bDhg2DRnETERFVNFXp1pVq+vTpkQ6hRFEzRsfj8eCzzz7DqFGjShzMBAButxtut1v7fb63MBIREVH52bhxI+bNm4dDhw7B4/EELfv6668jElPUPF6+YMECnD59GoMHDz5rmsmTJyMuLk6bUlNTyy9AIiKiC1QVHy+fM2cOOnbsiJ07d+Kbb76B1+vFzp07sXTpUsTFxUUsrqhp6Hz88ce46aabkJKSctY0o0ePRk5OjjZF8gVEREREZyMKbl2VdaqIDZ1Jkybhrbfewvfffw+j0Yi3334bu3btQv/+/ZGWlhaxuCQhhIjY1gscPHgQDRo0wNdff43bbrvtgtfLzc1FXFwcju2pi8RYI7zCB7fwwSoHP6+/z+uATQZMkox42aLNSzdY4RU+GKQzd/CyFaeWBgC8wqf9vXC6c1HzdCgumCQ9DJK+2HYKb8+u+JGsi4Fb+OCFAqtkPOu2zhZv4W1aZTOyFSfcQoFdAZJ1elhlc7E06m+1jOeKs/C2C6fJVpwwQC5W51l+B5J0Vq0O3AXbGHLgZnxef6EWx7d5Kbit2hEt5sJlP1csZ1tedLsO4YFVMhYrn/pn4W2qx0RJee/wOtFYfyY2h+LCT87auMlyNKgu1TopqRzqn/u8DtTTm4v9XV33hF+BreC/ICcVGc0NFm1+usGK5S4JrYx5iJctcCguANDqb727Om6M8SBbcaLvrjvxWvpXaFPwBMQOrxN1dTK8UGBX/HALCck6PTL9vqByH/C5tN9qnQKB88ctFABAks6KHV4nAKC5wYJDPjuSdTHI9OcjQTZgj09GrBTotk43WLXjRI1V3dZJxYUk3ZltlaTwPnUIH6xS4HjO8juQKJu1/aiet+qxry4rKa9zKXwOnfAr2v7xCh/WuA3oYj5zySwpv6LnZNE6LXy+qQofP4WPQzWvotelotvb6TGjo1nW8j6puLTyq/vvbOVWt124ngEUO6cdigsf5zTFiPgDAIBDPjvS9DYtZrWeCu8Xh+LCQ4duxOx6yy/o2lK4/s9Vx+fSaNlgrO40FQDgKfjnrfe2f2NBq/+ier4F8Y3/Rk5OzkUbMKv+u3TFV6Ogq2Yqcz7+PDd++9ebFzXWcKtWrRp27NiBevXqoUaNGli2bBlatmyJXbt24frrr0dmZmZE4oqKHp3p06ejVq1a6NWrV6RDISIiCpkAIEQIU6QLUAYJCQmw2+0AgDp16uCPP/4AAJw+fRpOpzNicUV8MLKiKJg+fToGDRoEvT7i4RAREYVMgQSpir0Z+dprr8XixYvRsmVL9O/fHyNGjMDSpUuxePFidO3aNWJxRbxl8csvv+DQoUO47777Ih0KERERldHUqVPhcgVufY4ePRoGgwGrV69Gnz59MHbs2IjFFfGGTvfu3REFw4SIiIjCpiq9MFCVkJCg/V2WZTz99NN4+umnIxhRQMQbOkRERJWNIiRIVeCFgaV5n12kBlWzoUNERBRm6qDiUNavCKpXr37Wl/yq1K+aF/7kU3liQ4eIiIjKRP3OVTRjQ4eIiCjMqsoYnYrwbcqoeI8OERFRZVIVPwEBAKtWrcI999yDDh064PDhwwCAWbNmYfXq1RGLiQ0dIiIiCtn8+fPRo0cPxMTE4LffftM+wm232zFp0qSIxcWGDhERUZiF8p0rdapoJkyYgPfffx8fffQRDAaDNr9Dhw747bffIhYXx+gQERGFWVV56qqwPXv2oFOnTsXmx8bG4vTp0+UfUAH26BAREVHIkpOT8eeffxabv3r1ajRo0CACEQWwoUNERBRmgR6dUAYjR7oEpffQQw9hxIgRWL9+PSRJwpEjRzB79mw8+eSTGDZsWMTi4q0rIiKiMKsqj5cX9vTTTyMnJwfXXXcdXC4XOnXqBJPJhCeffBKPPPJIxOJiQ4eIiIhC4vf7sXr1ajzxxBMYM2YMdu7cCUVR0KxZM1it1ojGxoYOERFRmImCKZT1KxKdTocePXpg165dSEhIQNu2bSMdkoZjdIiIiMKsKr4wsGXLlvj7778jHUYxbOgQERGFmwjDVMFMnDgRTz75JL7//ntkZmYiNzc3aIqUStPQ8QofDJIeVtmMQz570LJ0gxVJOiviZQu8wgev8CHdELhnaJDO3L1zKC7EyxYAQLbi1Jark7qdwn8Wdshnh0Nxab9NBes5FFfQdgqLly1I09tgkPQwSXrEyxZtHQCY54iDQ3Fp8biFD01XDwxaX43zk9zasMrmgnQKknRWpBus2jyV+tsg6bVyqH9X41S35xU+rT6LpgEAA2Qtv157b9LmJ+nO3JNV94tVNmNS6gJt/bmOuhhgOwVTwe942QKH8BSLKcvv0PIqXP+Z/vygcq1xBcq8z+uAVTbDUKg+DZIe2YoTBkmP93PqYINbRrbi1JYvd0naMQEAJwvtR6/wobnBouWh1uENlkxYZbNWJ4WPicJpC28bCByPavpkXSC2LL8DWX4H4mULbAVnpUcIpOjOlC/dYMUrpxqhi1kgXrZgn9eBg35Fq3+74seNMR6scSkAgHcaz4FdMcErfNjndaC5wYLV7lhYJSOSdTFI1umLHRt7fR6kG6xane/zOrAqvw6SdFYYICNJZ8VhvxFe4UOirGjr2WQdHMIDd8H/QuvoPLDJgKfgErPTE9jOQb8StH//8p45J7MVp1Znhfe1SZIL/tTDJMnwQsE+rwNJOqu2n+Jli3bOxMsWJOmsWOM2FDtPEwuVV93uPm+g7g/57JhtT9DqJF62wCQJzLLXQbbixBq3AV3MIujcAIAsvyMo9g9PX6ZtI1txwiE82rGlxlj0elL4nKqnPxOjen5bJSOKUvdRvGxBR7OsHYcGSY/EguM/W3HisN8IuwKtjt/OrheUj3os2gt2p3qu7vMGn3dW2Yz743YDAHZ4nUjT24Kupw7hARA499VtW2UzZtdbrl0D1fpWrynZihOHfHYYJD12eAN/90IJ2m5iwTm2xqVo1yOv8GFhvrHE6/DSa9/BSSVwrCbrYpCmt2Fl6xnasUkXz4033oht27bh1ltvxSWXXIL4+HjEx8ejevXqiI+Pj1hcHKNDREQUbqHefirDuocPH8YzzzyDn376Cfn5+WjcuDE+/vhjtGnTJpClEHjhhRfw4YcfIjs7G+3atcO7776L5s2blz3OQqL1S+Zs6BAREYVZeb8ZOTs7Gx07dsR1112Hn376CbVq1cJff/2F6tWra2leffVVvPnmm/j000/RuHFjTJgwAd26dcOePXtgs9nKHiwAr9eL8ePH44MPPkDjxo1Dyivc2NAhIiKKUkXHtphMJphMpmLpXnnlFaSmpmL69OnavHr16ml/F0JgypQpGDNmDPr06QMAmDFjBmrXro3PP/8cDz30UEhxGgwG/PHHH5Ck6LtFWGnG6BAREUWLcD11lZqairi4OG2aPHlyidv77rvv0LZtW/Tr1w+1atVC69at8dFHH2nL9+/fj6ysLHTv3l2bZzKZ0LlzZ6xduzYsZb733nvx8ccfhyWvcGKPDhERUbgJqUzjbILWB5CRkYHY2Fhtdkm9OQDw999/Y9q0aRg1ahSee+45bNiwAY899hhMJhPuvfdeZGVlAQBq164dtF7t2rVx8ODBssdZiMfjwX//+18sXrwYbdu2RbVq1YKWv/nmm2HZTmmxoUNERBSlYmNjgxo6Z6MoCtq2bYtJkyYBAFq3bo0dO3Zg2rRpuPfee7V0RW8tCSHCdrvpjz/+wBVXXAEA2Lt3b9CySN7SYkOHiIgozMp7MHJycjKaNWsWNO/SSy/F/PnzAQBJSUkAgKysLCQnJ2tpjh07VqyXp6yi9akrjtEhIiIKt3J+YWDHjh2xZ8+eoHl79+5F3bp1AQD169dHUlISFi9erC33eDxYsWIFOnToUOrinc8///yDw4cPhz3fsrigHp3t27eXOuNmzZpBr2eHERER0cX2+OOPo0OHDpg0aRL69++PDRs24MMPP8SHH34IIHDraOTIkZg0aRLS09ORnp6OSZMmwWKx4O677w5LDIqiYMKECXjjjTfgcAReOGmz2bQPfcpyZPpWLqglcvnll0OSJIgL7EuTZRl79+5FgwYNQgqOiIioIgr1e1WlXffKK6/EN998g9GjR+PFF19E/fr1MWXKFAwYMEBL8/TTTyM/Px/Dhg3TXhj4888/h/wOHdWYMWPw8ccf4+WXX0bHjh0hhMCaNWswfvx4uFwuTJw4MSzbKa0L7nJZv349atased50Qgi0aNEipKCIiIgqvHL+XtXNN9+Mm2+++azLJUnC+PHjMX78+Iuy/RkzZuC///0vbr31Vm1eq1atUKdOHQwbNiy6GzqdO3dGo0aNgt6weC6dOnVCTExMKHERERFVWOXdoxMNTp06haZNmxab37RpU5w6dSoCEQVc0A2zZcuWXXAjBwB+/PHHoFHdREREVLm1atUKU6dOLTZ/6tSpaNWqVQQiCuBoYSIionArw5NTxdavYF599VX06tULv/zyC9q3bw9JkrB27VpkZGTgxx9/jFhcpW7oCCHw1VdfYdmyZTh27BgURQla/vXXX5cqv/N9bZWIiKjikQqmUNavWDp37oy9e/fi3Xffxe7duyGEQJ8+fTBs2DCkpKRELK5SN3RGjBiBDz/8ENdddx1q164d0tsOL+Rrq0RERFQxpKSkRGzQ8dmUuqHz2Wef4euvv0bPnj1D3vj5vrZKRERUIVWhW1f79u3D888/jw8++KDY5ypycnLw8MMPY8KECRF75Uyp394TFxcXtmDP97XVotxuN3Jzc4MmIiKiqFPOb0aOpNdeew2pqaklfpMrLi4OqampeO211yIQWUCpGzrjx4/HCy+8gPz8/JA3rn5tNT09HYsWLcLQoUPx2GOPYebMmSWmnzx5ctDn6lNTU0OOgYiIiMpu5cqV6Nev31mX9+/fH0uXLi3HiIKV+tZVv3798MUXX6BWrVqoV68eDAZD0PLffvvtgvO60K+tqkaPHo1Ro0Zpv3Nzc9nYISKi6COkwBTK+hXEwYMHUatWrbMur1GjBjIyMsoxomCl7tEZPHgwNm/ejHvuuQd9+/bFbbfdFjSVxtm+tnro0KES05tMJu2T9YU/XW+QdDBIZ9psafqSX2ed5XfALXw4qbi0eY6Cv+/zOmCVzcjyB77PYZWM8AofvMIHAMhWnMhWnHAX/C68vSy/Aw7FhTS9DV4o2jKDpEe24kSm36elU/MqKTaDpIdX+JCtODHkQODtlv2sObDKZsTLlkBcshm7r5kVtK66zn2xR7XfSTqrFrtKjatwmdR5DsWFJS6LtuyEX9HiVevTK3xamdR0e3xnDqEfGv+kzVf/tMpmOBQXvMKH93PqIN1g1Zar8Rauy3jZgkz/md5Cg6TXyuJQXMX2c+G67GgOxJJuCKRX4weACSeaIl62IFtxYmjcYXQ0y4iXLVpsHU3eoLryFHzuRN0va1xnni5Ujws1v5MFeaixqftqvbu6Vg+Ft5Xld8ArfNjr8+DjnKbwCh+sBeUEgCSdFYmyWdsPAGBX/HAoLoyK363tu3SDFU/v76ttI01vQ6Nlg9HM6IIBMhrrjehiFlpcs+0JaKg/BYOkh0HS46BfwSGfHck6vXZ8NzdYcOWWflqdJ+v06F3tJLL8DpgkPbL8DrQxGmGQ9EiUzTjurwav8OFLezrcQsESZxNYZTOskh67vTak6M7sGy8UpOiC97e6zwrX22x7QtC+2Okxa8fCCb+CeNmCenqzdpyrrAV1lq048ezRVuhiPtP3r9aRu9A54RAeGCQ9auhkJOmsSNPbMMB25qVm2YoTGb5quC/2KKySUctPjRMADvuNSNJZES9bcMKvwCt8eCbhTzx7tBXWuA2wSkZYJaMWg1U2B52HhoI6LRzndu+Zc0897pe4LNq1SqUeI7323hR0/BU+r0/4FbQxGpGs08MhPIiXLbjd9jsAYLPHo+VlkPSwFewKdTvpBqt2fqnXJvUa2dxg0bZpkPTY53UgXrZgniMOO7yBddRyL3dJ2r5R4xp3pKeWJk1vg1f40NxgQZrehnjZgkM+u5ZenTqaZRgkPdL0NhgkPbqancWuR2OPtcCIA31hk/wAgJOKC8tdEjL9PqQbrDjqz0N5Ub9eHspUUcTFxeGvv/466/I///yzxNta5aXUPTo//PADFi1ahGuuuSbkjZ/va6tEREQU3Tp16oR33nkH119/fYnL/+///g/XXnttOUd1Rql7dM424KgsHn/8caxbtw6TJk3Cn3/+ic8//xwffvghhg8fHpb8iYiIIqIKDUYePXo0fvrpJ/zrX//Chg0bkJOTg5ycHKxfvx59+/bFokWLMHr06IjFV+qGzhtvvIGnn34aBw4cCHnj6tdWv/jiC7Ro0QIvvfRSsa+tEhERVTjqGJ1QpgqidevW+Oqrr7By5Uq0b98eCQkJSEhIQIcOHbBq1SrMnTsXV1xxRcTiK/Wtq3vuuQdOpxMNGzaExWIpNhi5tB/uOt/XVomIiCoaSQSmUNavSG6++WYcPHgQCxcuxJ9//gkhBBo3bozu3bvDYrGcP4OLqNQNnSlTplyEMIiIiKgii4mJwe233x7pMIopdUNn0KBBFyMOIiKiyqMKvRk52l3QGJ3SvoHYbreXKRgiIqJKoQqN0Yl2F9TQiY+Px7Fjxy440zp16uDvv/8uc1BERERE4XBBt66EEPjvf/8Lq9V6/sQAvF7v+RMRERFVVrx1FTUuqKGTlpZ2zo9tFpWUlFTsaSwiIqIqo4o0dEoztCVSb0e+oIZOON6ZQ0RERJVL9erVIUnnHk8khIAkSfD7/eUUVbBSP3VFRERE51FFenSWLVsW6RDOiw0dIiKicKsiXy/v3LlzWPJJSEg4f6JCJEnCb7/9dkHfxmRDh4iIiMLG6XTi0KFD8Hg8QfMvu+yys65z+vRpTJkyBXFxcefNXwiBYcOGXfCtMDZ0iIiIwqyqfQICAI4fP44hQ4bgp59+KnH5+Romd955J2rVqnVB23r00UcvOK5Sf9STiIiIzqMKfb1cNXLkSGRnZ2PdunWIiYnBwoULMWPGDKSnp+O7774757qKolxwIwcIvJi4QYMGF5S2TA2dVatW4Z577kH79u1x+PBhAMCsWbOwevXqsmRHREREFdzSpUvx1ltv4corr4Qsy6hbty7uuecevPrqq5g8eXLE4ip1Q2f+/Pno0aMHYmJisGXLFrjdbgCB1tWkSZPCHiARERFFv7y8PK1XJiEhAcePHwcAtGzZEr/99lup87Pb7Xjqqadw5ZVX4oorrsCjjz6KEydOlDqfUjd0JkyYgPfffx8fffRR0EsBO3ToUKaCEBERVTYSzozTKdMU6QKUQZMmTbBnzx4AwOWXX44PPvgAhw8fxvvvv4/k5ORS5/fAAw/gxIkTeOGFFzBu3Dj8/fffGDBgQKnzkYQQpboTaLFYsHPnTtSrVw82mw3btm1DgwYN8Pfff6NZs2ZwuVylDqKscnNzERcXh+y9DRBr0yHL70CibIZBCoyx3ud1IN1gRZbfgSTdmc9XqPMBwCt8WnpVlt8BuwKkG6w45LMjWRejpVHTF91WYctdErqYRdB2sxUn4mWLliZbccIqGeEWPpxSvEjT24rl41BcsMrmoO0e8tnR9/f78HOrGdr6VtkcFJdJkhEvW7Q49nkdqKGTYZWMMEh6eIUPAGCQ9MXiKkxdVjgO9e9F622eIw79rDnwCh8cwlMszzUuBR3NMrIVJ1a7auAa8wnEyxYc8tmx3nUJbrBkwgA5qLzvnW6EEfEHgmLJVpwAgCN+oLnBouWb5Xdgt9eGpgZ70L4uvL8digsmSQ+38CHT79OOgcK8woe9Pg8SZQVJOqtWVw7h0epP3aZaB17hw0nFpR0PO7xOpOiAE34laLsAcMDn0uapZS0phpNK4DyySnqYJH2x46/oPlJt9njQxmgMyu/6Hbfi86afa3mpeScWbP+k4tKOmZLOh9n2BAywndJi3uF1wggF9fRnjv8svwNWSY+fnLVxbcxhJOmsyFaccItAPe7zOoLSH/LZkaa3BdVDh219sbbVfC0/dT+2WHc3/rj682LHQbxs0fIFoO0LdRuF66Lw/KLXg8IK16e6HxY4muD+2IPI9Ofjzh2DsbbVfLyfUwdD4w5juUtCR5O3xOtA4TwBFDsnip7fqnPlVdI6JxWXVh71WDNI+qDrnFrmkvavSr12WCVj0PGerTi1c1Pdvnr9OuBzoYZOLrF82YoTOz1mdDQHli93SWhlzEO8bNGun6rtXkXbV0VjLXxNKVwm9dpcUp2tcSlY7WyMm23bMeqvfljU9Ad4hQ/5Dgnxjf9GTk7ORXtLr/rvUt2XJ0I2l3yOXwjF5cLBZ8dc1FjDbfbs2fB6vRg8eDC2bNmCHj164OTJkzAajfj0009xxx13nHP9t956CyNHjtReQNiwYUPs3bsXOp0OALB7925cffXVOH36dKniKvVTV8nJyfjzzz9Rr169oPmrV6++4IFBREREVLkU7m1p3bo1Dhw4gN27dyMtLQ01atQ47/p//vkn2rVrhw8++ACtW7dGt27d0KtXL/Tu3RterxezZs1Cjx49Sh1XqRs6Dz30EEaMGIFPPvkEkiThyJEj+PXXX/Hkk0/i+eefL3UARERElU4VeTPyuVgsFlxxxRUXnP7dd9/Fr7/+ivvuuw/XXXcdJk+ejM8++wyLFy+G3+9Hv3798Mgjj5Q6jlI3dJ5++mnk5OTguuuug8vlQqdOnWAymfDkk0+WKQAiIqJKpwo2dPx+Pz799FMsWbIEx44dg6IoQcuXLl163jzat2+PjRs34uWXX0b79u3x2muvYf78+SHFVaYXBk6cOBFjxozBzp07oSgKmjVrBqu15HveREREVPmNGDECn376KXr16oUWLVqc92OfZ6PX6/Gf//wHd9xxB4YOHYoZM2Zg6tSpSEpKKlt+ZVoLgS6ptm3blnV1IiKiSqsqvhl5zpw5mDt3Lnr27Fmm9X///Xfcf//92LVrFy677DJ88sknWLJkCT755BN06NABTz31FB5++OFS51vqhs7tt99eYitNkiSYzWY0atQId999N5o0aVLqYIiIiCqFKnjrymg0olGjRmVef8iQIejUqRNmzpyJhQsXYujQoVi2bBnuu+8+3HLLLRg5ciRmzpyJX3/9tVT5lvo9OnFxcVi6dCl+++03rcGzZcsWLF26FD6fD19++SVatWqFNWvWlDZrIiIiqqCeeOIJvP322yjlW2s0e/bswbBhw9C0aVM8+uij2L9/v7asZs2amD17Nl544YVS51vqHp2kpCTcfffdmDp1KmQ50E5SFAUjRoyAzWbDnDlzMHToUDzzzDP8JAQREVVNVbBHZ/Xq1Vi2bBl++uknNG/ePOilwgDw9ddfn3P9Ll264MEHH8Sdd96JpUuXomPHjsXSdO/evdRxlbqh8/HHH2PNmjVaIwcAZFnGo48+ig4dOmDSpEl45JFHcO2115Y6GCIiosqgKo7RqV69Om6//fYyrz9z5kxMnDgR3377LVq1aoVnn302LHGVuqHj8/mwe/duNG7cOGj+7t27tU+wm83mMo+2JiIiqvCEFJhCWb+CmT59epnX3b59O1q0aIHXX3/9gtLv2LEDTZo0gV5//mZMqRs6AwcOxP3334/nnnsOV155JSRJwoYNGzBp0iTce++9AIAVK1agefPmpc2aiIiIqqDWrVsjKysLNWvWvKD07du3x9atWy/oiwylbui89dZbqF27Nl599VUcPXoUAFC7dm08/vjjeOaZZwAE7qHdeOONpc2aiIiocqiCY3Rat2593qeyBw8ejOuuu65YGiEExo4dC4ul5G8vFuXxeC44rlI3dHQ6HcaMGYMxY8YgNzcXAIp9cCwtLa202RIREVUaVXGMzo033ohp06ahZcuWuOqqqyCEwKZNm7B9+3YMHjwYO3fuxA033ICvv/4at912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1aoVnnnmGbz44ovQ6XS46667oCgKNmzYgAEDBkCvD4RZeLBeNGN5ohvLE90qU3kqU1mIKqqouHWlGj58OObPn4+0tDQcO3YMFosFc+fORYsWLSIdWpmwPNGN5Ylulak8laksRBVNVDV03G43du7cia1bt8JoNGLAgAGRDikkLE90Y3miW2UqT2UqC1FFE1UNHSIiIqJwiorByEREREQXAxs6REREVGmxoUNERESVFhs6REREVGmxoUNERESVFhs6REREVGmxoUNERESVFhs6REREVGmxoUNERESVFhs6VGbjx4/H5ZdfXu7bXb58OSRJgiRJ6N27d7lvP5zUspw+fTrseXfp0gUjR44Me75ERBUJGzpUIrUhcbZp8ODBePLJJ7FkyZKIxbhnzx58+umnEdt+tPv666/x0ksvRTSGHTt2oG/fvqhXrx4kScKUKVOKpbHb7Rg5ciTq1q2LmJgYdOjQARs3bgxKc7bj8LXXXtPSuN1uPProo6hRowaqVauGW2+9Ff/88895Yzx06BBuueUWVKtWDTVq1MBjjz0Gj8ejLXe5XBg8eDBatmwJvV5fqsb1/Pnz0axZM5hMJjRr1gzffPNN0PKVK1filltuQUpKCiRJwoIFCy44byK6MGzoUIkyMzO1acqUKYiNjQ2a9/bbb8NqtSIxMTFiMdaqVQvVq1eP2PajXUJCAmw2W0RjcDqdaNCgAV5++WUkJSWVmObf//43Fi9ejFmzZuH3339H9+7dccMNN+Dw4cNamsLHXmZmJj755BNIkoS+fftqaUaOHIlvvvkGc+bMwerVq+FwOHDzzTfD7/efNT6/349evXohLy8Pq1evxpw5czB//nw88cQTQWliYmLw2GOP4YYbbrjgsv/666+44447MHDgQGzbtg0DBw5E//79sX79ei1NXl4eWrVqhalTp15wvkRUSoLoPKZPny7i4uKKzR83bpxo1aqV9nvQoEHitttuExMnThS1atUScXFxYvz48cLr9Yonn3xSxMfHizp16oiPP/44KJ9//vlH9O/fX1SvXl0kJCSIW2+9Vezfv/+s8SxbtkwAENnZ2UHz582bJ1q0aCHMZrNISEgQXbt2FQ6HQ1v+ySefiKZNmwqTySSaNGki3n333aD1MzIyxB133CHi4+OFxWIRbdq0EevWrdOWv/fee6JBgwbCYDCIxo0bi5kzZwatD0B89NFHonfv3iImJkY0atRIfPvtt0FpfvjhB5Geni7MZrPo0qWLmD59elBZDhw4IG6++WZRvXp1YbFYRLNmzcQPP/xw1rp49913RaNGjYTJZBK1atUSffv21ZZ17txZjBgxQvtdt25dMXHiRDFkyBBhtVpFamqq+OCDD0pVB99995244oorhMlkEvXr19f274WoW7eueOutt4LmOZ1OodPpxPfffx80v1WrVmLMmDFnzeu2224T119/vfb79OnTwmAwiDlz5mjzDh8+LGRZFgsXLjxrPj/++KOQZVkcPnxYm/fFF18Ik8kkcnJyiqVXj/EL0b9/f3HjjTcGzevRo4e48847S0wPQHzzzTcXlDcRXTj26FBYLV26FEeOHMHKlSvx5ptvYvz48bj55psRHx+P9evXY+jQoRg6dCgyMjIABP7Hf91118FqtWLlypVYvXo1rFYrbrzxxqDbB+eTmZmJu+66C/fddx927dqF5cuXo0+fPhBCAAA++ugjjBkzBhMnTsSuXbswadIkjB07FjNmzAAAOBwOdO7cGUeOHMF3332Hbdu24emnn4aiKACAb775BiNGjMATTzyBP/74Aw899BCGDBmCZcuWBcXxwgsvoH///ti+fTt69uyJAQMG4NSpUwCAjIwM9OnTBz179sTWrVvx73//G88++2zQ+sOHD4fb7cbKlSvx+++/45VXXoHVai2xzJs2bcJjjz2GF198EXv27MHChQvRqVOnc9bTG2+8gbZt22LLli0YNmwYHn74YezevfuC6mDRokW455578Nhjj2Hnzp344IMP8Omnn2LixIkXvJ+K8vl88Pv9MJvNQfNjYmKwevXqEtc5evQofvjhB9x///3avM2bN8Pr9aJ79+7avJSUFLRo0QJr16496/Z//fVXtGjRAikpKdq8Hj16wO12Y/PmzWUtlpZ34XjUvM8VDxFdBJFuaVH0K02PTt26dYXf79fmNWnSRFx77bXab5/PJ6pVqya++OILIYQQH3/8sWjSpIlQFEVL43a7RUxMjFi0aFGJ8ZTUo7N582YBQBw4cKDEdVJTU8Xnn38eNO+ll14S7du3F0II8cEHHwibzSZOnjxZ4vodOnQQDzzwQNC8fv36iZ49e2q/AYj//Oc/2m+HwyEkSRI//fSTEEKI0aNHi0svvTSorM8880xQWVq2bCnGjx9fYgxFzZ8/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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "%matplotlib inline\n", - "ds['corr'].sel(beam=1, range=slice(0,10)).plot()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It's beneficial to also review data from the other beams. A significant portion of this data is of high quality. To avoid discarding valuable data with lower correlations, which could be due to natural variations, we can use the `correlation_filter`. This function assigns a value of NaN (not a number) to velocity values corresponding to correlations below 50%.\n", - "\n", - "However, it's important to note that the correlation threshold is dependent on the specifics of the deployment environment and the instrument used. It's not unusual to set a threshold as low as 30%, or even to forgo the use of this function entirely." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "ds = api.clean.correlation_filter(ds, thresh=50)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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43W3i+OYww8/fMTtS6EjhBBCtIDSBko38WTkJvadKGbPns3+++9PZ2fnsLafN28elmWN6BhS6AghhBCiJZYuXTqi7f/yl7+M+BhS6AghhBCtoI1kaWZ/8bomxwCfEEII8UajdfPLFuDFF1/k/PPPH/X+W8anJIQQQkwwyjCaXrYEq1ev5rzzzhv1/jJ0JYQQQoiWeeKJJzb5+lNPPdVU+1LoCCGEEK0gc3QA2H333VFKEcfxBq8Nrh/Js3b+lRQ6QgghRCto3WShMzlmn3R2dnLRRRdx0EEHbfT1v/71rxx55JGjbl8KHSGEEEK0zB577MHKlSuZPXv2Rl/v7e3d6NWe4ZJCRwghhGgBeTJy4oQTTqBUKr3m67NmzeKaa64ZdftS6AghhBCtoJqco6Mmxxyd9773vZt8vb29nY9//OOjbn9ylINCCCGEmDR+//vfU6vVxqQtKXSEEEKIVhi866qZZZI67LDDWLFixZi0JUNXQgghRAvIHJ3X1szk4381eT8lIYQQQmzxWlro3HPPPRx55JHMmDEDpRS33nrrkNfjOGbhwoXMmDGDVCrFgQceyF//+tfWdFYIIYQYSzJ09Zq++93vMm3atDFpq6WFTqlUYrfdduOyyy7b6Otf/epXueSSS7jssst46KGHmD59Ou985zsZGBgY554KIYQQY2zwgYGjXibvoMxHPvIRwjDk1ltv5e9//3tTbbV0js5hhx3GYYcdttHX4jjm0ksv5ZxzzuF973sfANdeey3Tpk3jhz/8ISeccMJG96vVakNmavf39499x4UQQogmNRvMOdlCPT/0oQ+x//77c/LJJ1OpVNhzzz157rnniOOYH//4x7z//e8fVbsTthxcunQpq1ev5uCDD26scxyHAw44gPvvv/8191u0aBGFQqGx9PT0jEd3hRBCCNGEe+65h/322w+AW265hTiO6e3t5Zvf/CYXXHDBqNudsIXO6tWrATYYo5s2bVrjtY05++yz6evrayzLly/frP0UQgghRkXr5pdJpK+vj46ODgBuv/123v/+95NOpzniiCN45plnRt3uhP+U/jWx9PVSTB3HIZ/PD1mEEEKICadFk5G/853vMHfuXFzXZY899uDee+99zW2XLFmCUmqD5cknnxztu35NPT09PPDAA5RKJW6//fbGiM769etxXXfU7U7YQmf69OkAG1y9WbNmzZjNxBZCCCG2JDfeeCOnnnoq55xzDo899hj77bcfhx12GMuWLdvkfk899RSrVq1qLNtuu+2Y9+3UU0/lox/9KFtttRUzZszgwAMPBJIhrV122WXU7U7YQmfu3LlMnz6dO++8s7HO8zzuvvtu9tlnnxb2TAghhGie0kbTy0hdcsklfPKTn+Q///M/edOb3sSll15KT08Pl19++Sb36+rqYvr06Y3F2AwToU866SQefPBBrr76au677z50fWhu3rx5Tc3RaeldV8VikWeffbbx9dKlS3n88cfp6Ohg1qxZnHrqqVx44YVsu+22bLvttlx44YWk02k+8pGPtLDXQgghxBhQTc6zUcm+/3p3seM4OI6zweae5/HII49w1llnDVl/8MEHb/ImH4D58+dTrVbZcccdOffcc1mwYMHo+70Je+yxB3vssceQdUcccURTbba00Hn44YeHfFinn346AB//+MdZvHgxZ555JpVKhZNOOon169fztre9jd/85jfkcrlWdVkIIYSYUP717uIvfelLLFy4cIPt1q5dSxiGI7rJp7u7myuvvJI99tiDWq3GD37wAw466CCWLFnC/vvvP2bvYXNqaaFz4IEHbjLPQinFwoULN/oNE0IIId7IRjv89Or9AZYvXz7kxpuNXc0Zst8IbvLZfvvt2X777Rtf77333ixfvpyLL75YCh0hhBBCbMLgk5Gb2R+GfYfxlClTMAyj6Zt89tprL66//vqR9bWFJuxkZCGEEEKMHdu22WOPPYbc5ANw5513jugmn8cee4zu7u6x7t5mI1d0hBBCiFZo9qF/o9j39NNP5+ijj2bPPfdk77335sorr2TZsmWceOKJQPLQ3RUrVnDdddcBcOmllzJnzhx22mknPM/j+uuv56abbuKmm24afb83oVqt8sQTT7BmzRqiKBry2r//+7+Pqk0pdIQQQogWaEXW1VFHHcW6des4//zzWbVqFTvvvDO33XYbs2fPBmDVqlVDnqnjeR5nnHEGK1asIJVKsdNOO/HrX/+aww8/fNT9fi233347xxxzDGvXrt3gNaUUYRiOql0Vb2o28CTQ399PoVCgr69PnpIshBBik8bjd8bgMV7+w6/IZzOjb6dYouNt75o0v9+22WYbDjnkEL74xS+O6YOBZY6OEEIIIVpuzZo1nH766WOefiCFjhBCCNEKLcq6mqg+8IEP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9a1v8YUvfIGTTjqJNWvWMGPGDE444YQxv3IkhBBCTHa2bbPHHntw55138t73vrex/s477+Td7373RvfZe++9+eUvfzlk3W9+8xv23HPPMc+kGrTddtux7bbbAmNz1WjUTxtKp9PsueeevPWtb90sRQ5ALpfj0ksv5fnnn6dSqfCPf/yDCy64ANu2N8vxhBBCiPESj8EyUqeffjrf//73ufrqq/n73//OaaedxrJlyzjxxBOB5IaeY445prH9iSeeyPPPP8/pp5/O3//+d66++mquuuoqzjjjjFG+60277rrr2GWXXUilUqRSKXbddVd+8IMfNNXmiK/ovPe9791ohaWUwnVdttlmGz7ykY+w/fbbN9UxIYQQYjKL6neENbP/SB111FGsW7eO888/n1WrVrHzzjtz2223NYaHVq1aNeRW7rlz53Lbbbdx2mmn8e1vf5sZM2bwzW9+k/e///2j7/hruOSSS/jCF77AySefzL777kscx/z+97/nxBNPZO3atZx22mmjanfEhU6hUODWW2+lra2NPfbYgziOeeyxx+jt7eXggw/mxhtv5KKLLuK3v/0t++6776g6JYQQQojN46STTuKkk07a6GuLFy/eYN0BBxww5s/J25hvfetbXH755UOuKL373e9mp512YuHCheNX6EyfPp2PfOQjXHbZZY07oqIo4pRTTiGXy/HjH/+YE088kc997nNjHgkhhBBCTBZxHDfuYBrt/pPJqlWr2GeffTZYv88++7Bq1apRtzviOTpXXXUVp5566pDbvrXWfOYzn+HKK69EKcXJJ5/MX/7yl1F3SgghhJjsBoeumlkmk2222Yaf/OQnG6y/8cYbG5OTR2PEV3SCIODJJ59ku+22G7L+ySefJKw/Rdh13c0StS6EEEJMJpOsVmnKeeedx1FHHcU999zDvvvui1KK++67j9/+9rcbLYCGa8SFztFHH80nP/lJPv/5z/OWt7wFpRR//OMfufDCCxvjanfffTc77bTTqDslhBBCiC3L+9//fv7whz/wjW98g1tvvZU4jtlxxx354x//yPz580fd7ogLnW984xtMmzaNr371q7z44otA8jjo0047jc997nNAkptx6KGHjrpTQgghxGTXiruuJro99tiD66+/fkzbHHGhYxgG55xzDueccw79/f0AGzx6etasWWPTOyGEEGKSksnINOqI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p0/nj3/8I5ZlUalUWt2lplx66aXMmTOHE044gd12240rrriCMGwiIbmFvv71r7PttttyxBFH8K53vYsHHnhgwmfWbYr8LBBi/MlzdDajZ555hhNPPJHly5dzzjnn8OSTT7JkyRJyuRy/+c1vWt29UYnjmHK5zNFHH80//vEPHMfhrrvuIpPJtLpro/KPf/yD4447jo9+9KOccMIJre5O077whS/w05/+lEsuuYTtttuO6667jm9961usXLmSVCrV6u6NyCWXXMK3vvUtLr74Yvr7+/n5z3/O73//e376059y4IEHtrp7IyI/C4RooVhsFmEYxl//+tfjww8/PF6xYkVj/U9/+tN4t912i//+97+3sHfN+dOf/hTPnz8/Xrp0aZzJZOJvf/vbjdeiKGphz0bu61//ejx//vw4juP4+eefj7/whS/E3//+9+N77723xT0bubVr18Zve9vb4osvvrix7umnn4533HHH+KWXXorj+I3x/QnDMPZ9Pz7ssMPiT33qU0Nee/vb3x4feuih8WOPPdaazo2C/CwQorVk6GozCYKAbbfdlk9/+tPMmDGjcWk6m82yevVqOjs7W9zDkYlfdeFPKUVPTw9z5szhxBNP5Mtf/nLj9Vqt1qoujshgf5999lne+c538n//93/sueeePPTQQ1xxxRUcdNBBXH755W+oYaxMJsMTTzwx5BH755xzDt3d3fz0pz9l5cqVLezd8GmtiaKIP//5z7z5zW8GkjlUkAzLPf3009x+++1vqHNtMv0seLXJ8LNATH5S6IyR6667jtNOO43rrruOF198Edu2OfLIIzn88MMBGvMK+vv7mTFjxoQfRnj1+1mzZs2QeRHLly9v/NK8+OKLsW2bd7zjHeyyyy7cfvvtreryJr3W+2lra+MnP/kJt912GxdccAG/+tWveOihh/jMZz7Dtddey5IlS1rb8dfwr+8HwHVdTj/9dL74xS/ynve8h0KhwDPPPMOuu+7KN7/5Td73vvfxq1/9qsU939Dtt98+pJCOogjbttlnn324/vrrgeS9RVHEHnvswcEHH8xNN93E2rVrW9XlTXr1+4njGMMwOOKII96wPwv+//buPC6qcv8D+OewDYMsAYIDCISpLIkYeE30KhruUphcQTNCr1GWhpRa3rgGai64lF7LMq9aGVfIK2ouuYuIICFBoKDWDQQVRRNU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n/FETnQyMzPpL3/5CwmCQFu3biWi+rOiGv/HERkZSTk5OUrbbd68mQwMDOjGjRtqrbc9nKce53n8dCkLEedpoK15GHsUnriJTnZ2No0dO5YmTJhAwcHB1LNnT3GdQqEQP7U0fGfd2N69e8nGxoaSk5PVVm97OM99nOfx0qUsRJynMW3Mw9ij8sSdXt61a1d4e3sjOjoaERERqKmpQUxMDADlYx9MTEyabZuZmQlXV1f07dtXnSW3ifPcx3keL13KAnCexrQxD2OPjKZnWurUsPu24S7I9+7do0WLFpGlpSWVlJQQUfOzDq5fv05XrlyhBQsWkIODg3iRL00f79G4Bs7DeR43XcrSuAbOo515GHuUnqiJTmMNu3HPnj1L/fr1o4kTJxKR8h95fn4+zZ8/n5ydncnd3V3j11xpC+fhPOqiS1mIOI+252Hsz9K5iY5cLhdvCNhUQ7tCoRD/6GtqamjTpk1kZmZGJ06cEMcgqr+P0L59+zR6LxrOw3nURZeyNNTCebQ3D2PqolMTnejoaPL396fx48fTrl27xN24DXfabarhk09xcTGNGzeOBg4cSEVFRRQUFCTez0WTOA/nURddykLEebQ9D2PqpBMTnZycHPLy8qI+ffrQunXryM/Pj3x8fCgpKUmpX0JCAhkbG9OWLVuajREfH0+CIJCenh49++yzVFhYqK7ym+E8nEdddCkLEefR9jyMaYJOTHQWLFhAI0aMEHfflpeXk6mpqXjRrLKyMgoJCSEbGxtauXIlVVVVidvW1NTQrl27yNramnr06EEHDhzQSIbGOA/nURddykLEebQ9D2OaYKDps77+DCJCRUUFUlNT4ejoKLbfvHkTgwYNQufOnQEApqamCAoKwqeffgo7OzulMaqrq7Fr1y68++67iIqKUmv9TXEezqMuupQF4DzanocxTepw97pKSUmBk5MTnJycxLa3334bycnJePHFF2FsbIzY2Fg4OTnhjz/+wODBg/H222/D398fRARBEMTtGpbr6uqgr6+viTich/NwlofEebQ7D2NaQ417j/6UI0eOkIuLCzk7O5OdnR2FhoZSRkYGERGVlpbSl19+STNnzqQuXbrQd999R7du3aIjR45QSEgIjRw5stWzFTSF83AeddGlLEScR9vzMKZtOsREp7i4mHx9fSkqKoouXrxIu3fvpj59+pC/vz+dP39e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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ds['vel'][1].plot()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.4 Rotate Data Coordinate System\n", - "\n", - "After cleaning the data, the next step is to rotate the velocity data into accurate East, North, Up (ENU) coordinates.\n", - "\n", - "ADCPs utilize an internal compass or magnetometer to determine magnetic ENU directions. You can use the set_declination function to adjust the velocity data according to the magnetic declination specific to your geographical coordinates. This declination can be looked up online for specific coordinates.\n", - "\n", - "Instruments save vector data in the coordinate system defined in the deployment configuration file. To make this data meaningful, it must be transformed through various coordinate systems (\"beam\"<->\"inst\"<->\"earth\"<->\"principal\"). This transformation is accomplished using the `rotate2` function. If the \"earth\" (ENU) coordinate system is specified, DOLfYN will automatically rotate the dataset through the required coordinate systems to reach the \"earth\" coordinates. Setting `inplace` to true will modify the input dataset directly, meaning it will not create a new dataset.\n", - "\n", - "In this case, since the ADCP data is already in the \"earth\" coordinate system, the `rotate2` function will return the input dataset without modifications. The `set_declination` function will work no matter the coordinate system." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Data is already in the earth coordinate system\n" - ] - } - ], - "source": [ - "dolfyn.set_declination(ds, 15.8, inplace=True) # 15.8 deg East\n", - "dolfyn.rotate2(ds, 'earth', inplace=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To rotate into the principal frame of reference (streamwise, cross-stream, vertical), if desired, we must first calculate the depth-averaged principal flow heading and add it to the dataset attributes. Then the dataset can be rotated using the same `rotate2` function. We use `inplace=False` because we do not want to alter the input dataset here." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "ds.attrs['principal_heading'] = dolfyn.calc_principal_heading(ds['vel'].mean('range'))\n", - "ds_streamwise = dolfyn.rotate2(ds, 'principal', inplace=False)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Average the Data\n", - "\n", - "As this deployment was configured in \"burst mode\", a standard step in the analysis process is to average the velocity data into time bins. \n", - "\n", - "However, if the instrument was set up in an \"averaging mode\" (where a specific profile and/or average interval was set, for instance, averaging 5 minutes of data every 30 minutes), this step would have been performed within the ADCP during deployment and can thus be skipped.\n", - "\n", - "To average the data into time bins (also known as ensembles), you should first initialize the binning tool `ADPBinner`. The parameter \"n_bin\" represents the number of data points in each ensemble. In this case, we're dealing with 300 seconds' worth of data. The \"fs\" parameter stands for the sampling frequency, which for this deployment is 1 Hz. Once the binning tool is initialized, you can use the `bin_average` function to average the data into ensembles." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "avg_tool = api.ADPBinner(n_bin=ds.fs*300, fs=ds.fs)\n", - "ds_avg = avg_tool.bin_average(ds)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "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: 183, dirIMU: 3, range: 28, 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.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",
-              "  * beam            (beam) int32 1 2 3 4\n",
-              "  * 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.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",
-              "    U_std           (range, time) float32 0.04232 0.04293 0.04402 ... nan nan\n",
-              "    temp            (time) float32 14.49 14.59 14.54 14.45 ... 13.62 13.56 13.5\n",
-              "    pressure        (time) float32 9.712 9.699 9.685 9.67 ... 9.58 9.584 9.591\n",
-              "    mag             (dirIMU, time) float32 72.37 72.4 72.38 ... -197.1 -197.1\n",
-              "    accel           (dirIMU, time) float32 -0.3584 -0.361 ... 9.714 9.712\n",
-              "    ...              ...\n",
-              "    boost_running   (time) float32 0.1267 0.1333 0.13 ... 0.2267 0.22 0.22\n",
-              "    heading         (time) float32 3.287 3.261 3.337 3.289 ... 3.331 3.352 3.352\n",
-              "    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.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",
-              "    inst_model:                Signature1000\n",
-              "    ...                        ...\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.1898
" - ], - "text/plain": [ - "\n", - "Dimensions: (time: 183, dirIMU: 3, range: 28, 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.001030683 ... 2...\n", - " * dirIMU (dirIMU) " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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GFq6ea+e/XSTXvu8VPsam3pjvG6nzh5WoEuO66nj+2Qn7V+KgXZx7P/EMr0kRIMGiDGX06GzhhXorGEFWl1Wpec+26yXlm5RWWWdfv/uGj383jpdelxPXXdyH3XP4h0LABJDRW2jXlq6Rc9+tllflVU1z++fl65LjuupC0cVqWuaN445BJCsaNAAh9DAggz9+rwhumPiQL25olR/mb9eX5VV6a/vl+jJDzfolP65+t7oYn17cJ78Ht6CDaBzCYYMfbRul15YskVvrihVfaDpnVw+t1PnDi/UpccVa3QvRncEOopnaGKDBg1wGPjcLn1nVA9NGlmk99bs0CPvrdMnJbs1b/UOzVu9Q5l+ty4eU6xrTurDm7EBxN26HdX616ItennpVpVV1jXPH1SQoUuP66lJI4u4dRaIARo0sZE0DZqlGyuVntH0PWQYzfODQcOyXGMoPB0wQraw8LRhjaZAlHhmQdNy5vQkyWk6CC8aWRgxDSQuh8Oh8QPzNH5gntbtqNaLS7boxSVbVVpR19xrc/bR3XX9SX00vEdW0lZMAA6/usag3vqiVHM+2axPN+xunp+V4tF5I7rru8f00MjiLtRLiOrjdXst0+bfPV63dWActzM87fdYw7ym6RTbHQyW33G2n1y+/euoqmxse6aT3IIFC/S73/1OixcvVmlpqV566SVNmjQpapz58+drypQpWrlypQoLC3X77bfrxhtvPDwZbkXSNGiAzqZvt3TdduYgTTljoBas2aG/vr9eH6zdpdc+36bXPt+mgfkZ+t7oHrpgVCHvbABwyHxVVqlnP92sF5dsUWVd08svnQ7pW4Py9L3RPTR+UJ58bm6JBQ4Fh6PpE8v02qumpkYjRozQNddco+9+97sHXb6kpERnn322fvCDH+jpp5/WBx98oJtuukndunVrU/xDgQYNEGcup0PjB+Vp/KA8rdxWoccXluj1FaVavb1Kv3nzS9339lf69qA8XTG2l07sy1u1AXxztQ0Bvf55qeZ8tklLN+1tnl/UJUWXHFusi8YUqyCLP6QAyWDixImaOHFim5d/5JFH1LNnT82aNUuSNHjwYC1atEi///3vadAAkIYWZmnm5JG66/yhen35Nj2/eIuWbtqrd1dt17urtqt3TqouO76nJo0qotcGQLscePnls59t1qvLtqm6vqk3xu106Iwh+brkuJ46uR9/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10svvRSDrWi/DjVoPv30U7333nsqLy9vUQHPnDkzJhkDAAAAcGjNnDlT1113na6//npJ0qxZs/TOO+/o4Ycf1owZM1os//HHH6t37976yU9+Iknq06ePbrjhBv32t79t0/r+9re/KTc3V+ecc44k6fbbb9ejjz6qIUOGaM6cOW0eCMCs3e+huffee3XCCSfoySef1KJFi7R06dLmz7Jly9qdAQAAACAZHRi2OZYfqemVK+ZPfX19q+tvaGjQ4sWLNWHCBMv8CRMm6MMPP2w1zrhx47Rlyxa9+eabMgxD27dv1/PPP9/cQDmYe++9VykpTXdMfPTRR3rooYf029/+Vrm5ufrpT3/a1qKzaHcPzZ/+9Cc98cQTuvrqqzu0QgAAAACHjv1Z9rvuukvTpk1rsdzOnTsVDAaVn59vmZ+fn6+ysrJW0x43bpyeeeYZTZ48WXV1dQoEAjr//PP14IMPtilvmzdvVr9+/SRJL7/8sr73ve/phz/8oU488USddtppbUrDrt09NE6nUyeeeGKHVgYAAACgyYFnaGL5kZoaDRUVFc2fqVOnHiQf9uf9jIjvoFy1apV+8pOf6Ne//rUWL16st99+WyUlJbrxxhvbtM3p6enNAwi8++67Ov300yVJfr9f+/btixY1onb30Pz0pz/Vn//8Z82aNatDKwQAAABw6IZtzszMVGZm5kGXz83NlcvlatEbU15e3qLX5oAZM2boxBNP1G233SZJGj58uNLS0nTyySfrnnvuUffu3aOu84wzztD111+vUaNGac2aNc23qq1cuVK9e/c+aJ5b0+4Gzc9//nOdc8456tu3r4YMGdLifTMvvvhihzICAAAA4PDxer0aPXq05s6dq+985zvN8+fOnasLLrig1Ti1tbVyu61NCJeraRTMtoza9+c//1m//OUvtXnzZr3wwgvNr4ZZvHixLr300g5tR7sbND/+8Y81b948jR8/Xjk5ORG7owAAAABE5lDLV3V80/Taa8qUKbriiis0ZswYjR07Vo8++qg2bdrUfAvZ1KlTtXXrVv3973+XJJ133nn6wQ9+oIcfflhnnnmmSktLdeutt+q4445TYWFhxPU8+uijOv/881VQUKCHHnqoRfj06dM7kPsm7W7Q/P3vf9cLL7zQ5pEMAAAAAHROkydP1q5du3T33XertLRUw4YN05tvvtk8fHJpaak2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9tlnN88bPny4iouL9atf/UqTJk1qd/rtbtCkpqZq9uzZ+t3vfqd169bJMAz169dPaWlp7V75wRx77LF66aWXNHXqVN19993q06ePZs2ape9///sxXxcAAABwOB3oWYllep3dihUr1KdPnxbz+/Tpo1WrVnUozQ6/WDMtLa1DD+2017nnnqtzzz33kK8HAAAAwKE1ePBg3XPPPXr88cfl9/slNb125Z577tHgwYM7lGa7GzTjx4+P+jDPf//73w5lBAAAAEgmyTLKmdkjjzyi8847T8XFxRoxYoQk6fPPP5fD4dDrr7/eoTTb3aAZOXKkZbqxsVHLli3TF198oauuuqpDmQAAAACSTTLecnbccceppKRETz/9tL766isZhqHJkyfrsssu6/AjLO1u0Pzxj39sdf60adNUXV3doUwAAAAASA6pqan64Q9/GLP0YvZC0csvv1xPPPFErJIDAAAAjmgOR+w/ieD//u//dNJJJ6mwsFAbN26U1NRp8sorr3QovZg1aD766KPmB3sAAAAAwO7hhx/WlClTNHHiRO3Zs6f5RZpdu3bVrFmzOpRmu285s7880zAMlZaWatGiRfrVr37VoUwAAAAAycbpcMgZw26VWKZ1qDz44IN67LHHNGnSJN13333N88eMGaOf//znHUqz3Q2azMxMywgKTqdTAwcO1N13360JEyZ0KBMAAAAAjnwlJSUaNWpUi/k+n081NTUdSrPdDZqnnnqqQysCAAAAEOZUDJ//iHFah0qfPn20bNky9erVyzL/rbfe0pAhQzqUZrsbNEcddZQ+++wz5eTkWObv3btXxxxzjNavX9+hjAAAAADJJNYP8ifAHWe67bbbdPPNN6uurk6GYejTTz/VnDlzNGPGDP31r3/tUJrtbtBs2LCh+eEds/r6em3durVDmQAAAABw5LvmmmsUCAR0++23q7a2VpdddpmKior0pz/9SZdcckmH0mxzg+bVV19t/v7OO+8oKyureToYDOo///mPevfu3aFMAAAAAMnGqRgPCqAE6KKR9IMf/EA/+MEPtHPnToVCIeXl5X2j9NrcoJk0aZIkyeFw6KqrrrKEeTwe9e7dW3/4wx++UWYAAAAAHNkCgYDee+89rVu3Tpdddpkkadu2bcrMzFR6enq702tzgyYUCklqepDns88+U25ubrtXBgAAAKBJMj5Ds3HjRp11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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "%matplotlib inline \n", - "from matplotlib import pyplot as plt\n", - "import matplotlib.dates as dt\n", - "\n", - "ax = plt.figure(figsize=(10,6)).add_axes([.14, .14, .8, .74])\n", - "# Plot flow speed\n", - "t = dolfyn.time.dt642date(ds_avg['time'])\n", - "plt.pcolormesh(t, ds_avg['range'], ds_avg['U_mag'], cmap='Blues', shading='nearest')\n", - "# Plot the water surface\n", - "ax.plot(t, ds_avg['depth'])\n", - "\n", - "# Set up time on x-axis\n", - "ax.set_xlabel('Time')\n", - "ax.xaxis.set_major_formatter(dt.DateFormatter('%H:%M'))\n", - "\n", - "ax.set_ylabel('Altitude [m]')\n", - "ax.set_ylim([0, 12])\n", - "plt.colorbar(label='Speed [m/s]')" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/png": "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CiBJEmw2G3755RfMmjULN998s8cFISIiIiJqS4QX/vmaTZs24Y477nAan5ycjIKCAo/jNjnJefrpp5GWlobk5GSUl5eje/fuGDp0KIYMGYLHH3/c44IQEREREbUlvCfH/pyc0tJSp/F79+5FbGysx3GbnOT4+/vjgw8+wL59+/DJJ5/g/fffxx9//IH33nsPZrPZ44K4cuzYMdx4442Ijo5GSEgI+vbti6ysLN3XQ0RERER0Pgk03Jejy2D0Bnng6quvxj//+U/U1dUBACRJwtGjR/Hwww/j2muv9Tiuxw8D7dixIzp27Ojxit1x+vRpXHzxxRgxYgT+97//IS4uDgcPHkRkZKRX10tERERERN7373//G1deeSXi4uJQVVWFYcOGoaCgAIMHD8bTTz/tcVy3kpyZM2e6HXD+/PkeF0btueeeQ2pqKpYsWeIY1759e93iExEREREZRffe1XSMdb5ERETg559/xk8//YQtW7bAZrOhf//+GDVqVLPiupXkbN26VfE+KysLVqsVXbp0AQDs27cPZrMZAwYMaFZh1L788kuMGTMGf/7zn7FmzRokJyfjzjvvxO233+5ymZqaGtTU1DjeN3aNHxERERGR0ez30eh3kZkvXq521mWXXYbLLrtMt3huJTmrVq1yvJ4/fz7Cw8PxzjvvoF27dgDsl5XdcsstuPTSS3UrGAAcOnQIr7zyCmbOnIlHH30Uv/32G+69914EBga67Mlt3rx5mDt3rq7lICIiIiLSmwRAgn7NL77SkPPSSy+5Pe+9997r0TokIUSTkr7k5GSsWLECPXr0UIzfuXMnRo8ejby8PI8K0piAgABccMEFWL9+vWPcvffei02bNmHDhg2NLtNYS05qaip2bt6O8LDwRpawKd5J8r4YJOWuIoRNMacr6inC1TthU01pmKbe4SWpoVMHm6hzuW6nFF4WxiT5K2eVxVQvplUWd3ursGlMU9eR8r16SdlUVZ0pP6OmfLXlW6y1nEaFkpfJ67ophymt5Tyd5mo+79A60qiOSsp3su+HVVJ+U82yJU/vXaGYlv32N47X6zcrv2Nby4sdr4tV1RKEesfrClO9YlqECHC89lcdNYJNDX9fqxVWxbRQU8NxqsamnObup2JVzak8Sqhr0HVU+bz1qmOPWXK9HwjFa9fx1b++JllMm2qifH3e+DY05STLpvh9cG8+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1WsUGt94xf6pWrXG7qMZU4t8HU7HSMn1vuQpeTnV31PlMUS5Rvl+rlXX6u+D/J1Z4zIk9afs7jFLvT45k6T+bBtYm3DcdZe6XuTHIvV5iPz8TH3MCjxzvmTylXtT2vDlagCQkpKCJ554Ak888QRWrVqFt956C3feeSfuueceXHfddbj11lsxaNAgj2K3mSSHiIiIiKglkSTJ+Y/JzYznq0aMGIERI0agrKwMH374IR599FG8+eabqK+v9ygekxwiIiIiIiO08ZYctUOHDuHtt9/G22+/jZKSEowaNcrjWExyiIiIiIiMwCQHVVVV+O9//4slS5Zg7dq1SEtLw1//+lfccsstSE1N9TgukxwiIiIiIiNIJuf7sJsbz0esX78eS5YswSeffILa2lpMnDgR33//fbNab+SY5BARERERGcFsgmTWMzHxnSTnkksuQZ8+ffD000/jL3/5C9q1a6drfCY5RERERERGaMOXq23evBn9+/f3WnwmOUREREREhtA5ydGtw3Tv82aCAzDJISIiIiIyRhtuyfE2JjlERERERAaQTBIkk47PydExlq9jkkNEREREZAS25HgNkxwiIiIiIiOYTPZBz3gEgEkOEREREZExJOjbV4CPNOT069cPkputTlu2bPFoHT6V5MybNw+PPvoo7rvvPixcuNDo4hARERERec4k2Qc94/mAiRMnen0dPpPkbNq0Ca+99hp69+5tdFGIiIiIiJqvjd6TM3v2bK+vwycu3CsvL8df/vIXvP7667o/DZWIiIiIyBASGhIdXQajN6jl8Ikk56677sJVV12FUaNGnXPempoalJaWKgYiIiIiopZGkiTdB19jtVrx73//GxdeeCESEhIQFRWlGDzV4pOcpUuXYsuWLZg3b55b88+bNw8Wi8UxpKamermEREREREQeOHtPjp6Dj5k7dy7mz5+PyZMno6SkBDNnzsSkSZNgMpkwZ84cj+O26CQnJycH9913H95//30EBQW5tcwjjzyCkpISx5CTk+PlUhIREREReYBJDj744AO8/vrrmDVrFvz8/HD99dfjjTfewD/+8Q9s3LjR47gtuuOBrKwsFBYWYsCAAY5xVqsVa9euxcsvv4yamhqYzWbFMoGBgQgMDHSKJWxWCJsVACCZZMtIQjmjrJlP8vDCRvVyQv5eMUmZY0qSWfZaOU0eQ1ItJzSKKd88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REREREQtUIu+J6e2thZZWVl4+OGHFeNHjx6N9evXN7pMTU0NampqHO9LSkoAAKWlpd4rKBERERG1GGfP+4QQBpdEW0V5ua6tLxXl5TpG820tOsk5efIkrFYr4uPjFePj4+NRUFDQ6DLz5s3D3LlzncanpqZ6pYxERERE1DKVlZXBYrEYXQwnAQEBSEhIwKBhg3SPnZCQgICAAN3j+poWneScJUnKHFcI4TTurEceeQQzZ850vLfZbDh16hSio6NdLtMWlZaWIjU1FTk5OYiIiDC6OD6P9akv1qe+WJ/6Yn3qi/WpL9annRACZWVlSEpKMroojQoKCkJ2djZqa2t1jx0QEICgoCDd4/qaFp3kxMTEwGw2O7XaFBYWOrXunBUYGIjAwEDFuMjISG8V0edFRES06YOg3lif+mJ96ov1qS/Wp75Yn/pifaJFtuDIBQUFMRnxohbd8UBAQAAGDBiAlStXKsavXLkSQ4YMMahURERERETUkrXolhwAmDlzJm666SZccMEFGDx4MF577TUcPXoU06dPN7poRERERETUArX4JGfKlCkoKirCP//5T+Tn56Nnz5749ttvkZ6ebnTRfFpgYCBmz57tdGkfeYb1qS/Wp75Yn/pifeqL9akv1ieRnSRaet96RERERERETdCi78khIiIiIiJqKiY5RERERETUqjDJISIiIiKiVoVJDhERERERtSpMcnzU4sWLkZGRgaCgIAwYMADr1q0DANTV1eGhhx5Cr169EBoaiqSkJNx8883Iy8s7Z8wdO3Zg2LBhCA4ORnJyMv75z39C3S/FmjVrMGDAAAQFBaFDhw549dVXvbJ955ur+lS74447IEkSFi5ceM6YrE/X9blnzx5MmDABFosF4eHhuOiii3D06FHNmKzPxuuzvLwcd999N1JSUhAcHIxu3brhlVdeOWfMtlifa9euxfjx45GUlARJkvD5558rpgshMGfOHCQlJSE4OBjDhw/Hrl27zhm3LdYloF2f/C1qunPtn3L8LSJygyCfs3TpUuHv7y9ef/11sXv3bnHfffeJ0NBQceTIEVFcXCxGjRolPv74Y/HHH3+IDRs2iEGDBokBAwZoxiwpKRHx8fHiuuuuEzt27BCfffaZCA8PF//+978d8xw6dEiEhISI++67T+zevVu8/vrrwt/fX3z66afe3mSv0qpPueXLl4s+ffqI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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ax = plt.figure(figsize=(10,6)).add_axes([.14, .14, .8, .74])\n", - "# Plot flow direction\n", - "plt.pcolormesh(t, ds_avg['range'], ds_avg['U_dir'], cmap='twilight', shading='nearest')\n", - "# Plot the water surface\n", - "ax.plot(t, ds_avg['depth'])\n", - "\n", - "# set up time on x-axis\n", - "ax.set_xlabel('Time')\n", - "ax.xaxis.set_major_formatter(dt.DateFormatter('%H:%M'))\n", - "\n", - "ax.set_ylabel('Altitude [m]')\n", - "ax.set_ylim([0, 12]);\n", - "plt.colorbar(label='Horizontal Vel Dir [deg CW from true N]');" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Saving and Loading DOLfYN datasets\n", - "Datasets can be saved and reloaded using the `save` and `load` functions. Xarray is saved natively in netCDF format, hence the \".nc\" extension.\n", - "\n", - "Note: DOLfYN datasets cannot be saved using xarray's native `ds.to_netcdf`; however, DOLfYN datasets can be opened using `xarray.open_dataset`." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "# Uncomment these lines to save and load to your current working directory\n", - "#dolfyn.save(ds, 'your_data.nc')\n", - "#ds_saved = dolfyn.load('your_data.nc')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 7. Turbulence Statistics\n", - "\n", - "The next section of this jupyter notebook will run through the turbulence analysis of the data presented here. There was no intention of measuring turbulence in the deployment that collected this data, so results depicted here are not the highest quality. The quality of turbulence measurements from an ADCP depend heavily on the quality of the deployment setup and data collection, particularly instrument frequency, samping frequency and depth bin size.\n", - "\n", - "Read more on proper ADCP setup for turbulence measurements in: Thomson, Jim, et al. \"Measurements of turbulence at two tidal energy sites in Puget Sound, WA.\" IEEE Journal of Oceanic Engineering 37.3 (2012): 363-374.\n", - "\n", - "Most functions related to turbulence statistics in MHKiT-DOLfYN have the papers they originate from referenced in their docstrings.\n", - "\n", - "### 7.1 Turbulence Intensity\n", - "For most users, turbulence intensity (TI), the ratio of the ensemble standard deviation to ensemble flow speed given as a percent, is all most will need. In MHKiT, this is simply calculated as `.velds.I`\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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nackSXjnnXdw5ZVX1joPOzdERETUaLKysvDggw+idevWl00rhMDTTz9d45vOa8LODRERkQFa8mmphx9+uNZ3S61bt67O5bNzQ0REZICW2rk5deoUOqoPUayFY8eOoXPnznVaBjs3RERE1GjUVz3UVnR0dJ2X0VRvkyciImrSJOWCYl8+zVVpaSkOHDjgdX6O3BARERnAJMkfX/I3Vz/++CPGjBkDu91++cQe+PXITVVVFR5//HHExsYiJCQE3bt3x8qVK+FwOIwOjYiIyCeSSfL5Q5759cjNmjVr8Pzzz+PVV1/F1VdfjaNHj+Kee+5BREQE5s+fb3R4RERE5IV27dpdcr63IzYqv+7cHDlyBBMnTsSNN94IAOjWrRt27dqFo0ePGhwZERGRb1ryizOtVivuu+8+9OvXz+P8n3/+GStWrPC6fL/u3Fx77bV4/vnncfz4cfTs2RNfffUVDh06hNTUVKNDIyIi8klL7twMGDAA0dHRmD59usf5X331VfPt3Dz66KMoLCxEr169YDabYbfb8dRTT+H222+vMY/VatU9ybCoqKgxQiUiIqJauvHGG1FQUFDj/Hbt2mHatGlel+/XnZu0tDT89a9/xWuvvYarr74aWVlZWLBgATp37lxjb2/16tU+9faIiIgag6+3czflW8Efe+yxS86Pjo6u89vDXfl15+bhhx/G4sWLcdtttwEA+vXrh59//hmrV6+usXOTkpKCRYsWab+LiooQHR0NKTAIEMpdVmazM4O1XP9taSV/C7c7smwVzr+VBiXUaRVl+jxBwdXLcNj13yoh5K/yUrnogCDnPJOyeexV8nelTZkuxy/U6a4N3H05WhrlxrgqZVSrdRtnCHkn9WkcVfq8gUp97JWoRl22ltetfoEW59+VVn0e5bfUtW/1comao5IL8rf7vqseK9z3ecC5T6nHrSoP+yGgHRd0XMvxlMb1t7bvSkpoynHOpOzbyrHK43Nx1XmS8Lwcl+OCdtyC0KdRyw1rK3+7HqfdLy51/5+6tnwPNwAr61YKly9gFVXK8kOV9xq5HttDwwCp8f632JJPSzU0v+7clJWVwWTSN1az2XzJW8EtFgssFkuN84mIiMj/HThwAP3790dERESd8/r1c25uvvlmPPXUU/jXv/6F06dP4+2338b69esxefJko0MjIiLyCZ9QfGnXX389unfv3vxenLl582YsXboUc+bMQX5+Pjp37oxZs2bhiSeeMDo0IiIin/C01KWdOnUKp06dwt69e+uc1687N2FhYUhNTeWt30RERC1MTEwMYmJicP3119c5r193boiIiJorkyTB5MPwiy95/cnPP/+MvLw8SJKEyMjIOr813BO/vuaGiIiouVJPS/nyaco2bNiA6OhodO/eHQkJCRg+fDi6d++O6Ohon8/YcOSGiIjIABJ8fM6Np9vym4gnn3wSa9euxWOPPYbx48cjMjISQgjk5+dj7969WL58OUpKSvD44497VT47N0RERNSotm3bhldffRWTJk3STe/cuTMGDBiAnj174v7772fnhoiIqCmRTJ6fO1jr/O7PQWxCzp8/j6uuuqrG+T179sTFixe9Lp/X3BARERnB12fcNOGLboYOHYqnnnoKVVVV1eZVVVVh1apVGDp0qNflc+SGiIiIGtXmzZuRmJiITp064brrrkNkZCQkSUJeXh4OHDgAi8WC9PR0r8vnyA0REZEBjLpbasuWLYiNjUVwcDDi4+Nx8ODBGtMeOnQII0eORPv27RESEoJevXphw4YNujQ7duzwOLJUUVFRQ6nyuyKPHz+Op556CuHh4Th16hR++uknhIeH46mnnsL333+Pq6++2rsKgiM3REREhpA7KL68FbzuedLS0rBgwQJs2bIFI0eOxAsvvIAJEybg2LFj6Nq1a7X0oaGhuP/++3HNNdcgNDQUhw4dwqxZsxAaGop7771XSxceHo4ffvhBlzc4OPiSsYSFheG+++7DfffdV/eKXAZHboiIiFqI9evXY8aMGZg5cyZ69+6N1NRUREdHY+vWrR7TDxw4ELfffjuuvvpqdOvWDXfddRfGjx9fbbRHkiRERUXpPjUpKiqqU8zFxcV1Sg+wc0NERGSI+jotVVRUpPtYrVaPy7PZbMjIyEBiYqJuemJiIg4fPlyrmDMzM3H48GFcd911uuklJSWIiYlBly5dcNNNNyEzM7PGMtq2bYv8/PxaLQ8ArrzySvz000+1Tg/wtBQREZEh6uv1C9HR0brpy5Ytw/Lly6ulP3fuHOx2OyIjI3XTIyMjkZeXd8lldenSBWfPnkVVVRWWL1+OmTNnavN69eqFHTt2oF+/figqKsLGjRsxcuRIfPXVV4iLi6tWlhACL730Elq3bl2relZWVtYqnasW1bkRZSUAAMkc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W1u2bEFsbCyCg4MRHx+PgwcP1pj20KFDGDlyJNq3b4+QkBD06tULGzZsqJburbfeQp8+fWCxWNCnTx+8/fbbtYplyJAhOHHiBLZu3Yr//e9/WLt2ra5jAwB9+vTBbbfdVqc6cuSGiIjIAEa8WyotLQ0LFizAli1bMHLkSLzwwguYMGECjh07hq5du1ZLHxoaivvvvx/XXHMNQkNDcejQIcyaNQuhoaG49957AQBHjhxBUlISnnzySUyePBlvv/02pk6dikOHDmHYsGGXjOenn35CTEzMJdOEhoZi+/btdaonR26IiIiMoF7j48unjtavX48ZM2Zg5syZ6N27N1JTUxEdHY2tW7d6TD9w4EDcfvvtuPrqq9GtWzfcddddGD9+vG60JzU1FePGjUNKSgp69eqFlJQUjB07FqmpqZeNZ8yYMTh//ny16QUFBejevXud66di54aIiKgFsNlsyMjIQGJiom56YmIiDh8+XKsyMjMzcfjwYVx33XXatCNHjlQrc/z48bUq8/Tp07Db7dWmW61WnDlzplYxecLTUkREREaop7ulioqKdJMtFgssFku15OfOnYPdbkdkZKRuemRkJPLy8i65qC5duuDs2bOoqqrC8uXLMXPmTG1eXl5enct85513tL/37t2LiAjnXWt2ux0fffQRunXrdsmYLoWdGyIiIgNIJv0TQ7zJDwDR0dG66cuWLcPy5ctrzuf+CBQhLnv9zsGDB1FSUoLPPvsMixcvxm9+8xvcfvvtXpc5adIkLd/06dN18wIDA9GtWzesW7fukjFdCjs3RERERqinkZucnByEh4drkz2N2gBAhw4dYDabq42o5OfnVxt5cRcbGwsA6NevH3799VcsX75c69xERUXVuUyH8gyp2NhYfPHFF+jQocMll19XvOaGiIioCQsPD9d9aurcBAUFIT4+Hunp6brp6enpGDFiRK2XJ4TQvf8pISGhWpn79u2rVZmnTp2q944NwJEbIiIiQ6jviPIlf10tWrQIycnJGDx4MBISErBt2zZkZ2dj9uzZAICUlBScOXMGO3fuBAA899xz6Nq1q/bsmUOHDmHt2rWYN2+eVub8+fMxevRorFmzBhMnTsTu3bvx4Ycf4tChQx5j2LRpE+69914EBwdj06ZNl4z3gQceqHMdgSbQuTlz5gweffRRvP/++ygvL0fPnj3x8ssvIz4+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Momrr75anD59urHCr4b1YX0aE+vD+hA1N82ic7NixQqRmJioDcsWFBSI1q1baw+xunjxokhKShIdO3YUa9euFRUVFVreyspKsXv3btG+fXsRFxcn9u7da0gdXLE+rE9jYn1YH6LmJsDou7V8IYRASUkJDh8+jOjoaG36hQsXMGrUKHTo0AEA0Lp1a9x6663YsGEDrrjiCl0ZNpsNu3fvxsKFC7FkyZJGjd8d68P6NCbWh/Uhaq6a3LulDh06hK5du6Jr167atDlz5uDAgQO4+eabERwcjDVr1qBr1644f/48Ro8ejTlz5mDs2LEQQkCSJC2f+ttut8NsNhtRHdaH9WlUrA/rQ9QiNOIokU8++ugjERsbK2JiYsQVV1whkpOTxRdffCGEECI/P188//zz4v777xeRkZHir3/9qygsLBQfffSRSEpKEuPHj6/xDgOjsD6sT2NifVgfopakSXRucnJyREJCgliyZIn4+eefxbvvvisGDBggxo4dK3744Qct3VNPPSUmTZqke5bDk08+KeLj40VOTo4RoXvE+rA+jYn1YX2IWpom8fqF//73v8jMzMT06dPRtWtX3HTTTVizZg0cDgeeeOIJLd2hQ4dwzTXX6IZmS0pK0LZtW1x55ZVGhO4R68P6NCbWh/UhammaROfmwoUL6NWrFxwOhzbtd7/7HaZMmYLPP/8ce/bsAQAkJCQgNTUVmzdvRmZmJpYsWYJXX30VycnJkCQJwk8uL2J9WJ/GxPqwPkQtjoGjRrX2zTffCIvFIv75z3/qpn///fdi4sSJYvr06dq0W2+9VfTs2VP06tVLxMfHa0/l9CesD+vTmFgf1oeopWkyd0v9/ve/R1lZGd577z20bt1amz5//nwcP34cb7zxBsLCwlBRUYHi4mL88ssv6N+/v4ERXxrrw/o0JtaH9SFqSZrEaSkAWL16NT799FP89a9/hdVq1aZ37NgRx44dQ0hICADAYrGgY8eOfr/jsz6sT2NifVgfopakyTzEr3///nj00UexcuVKmM1m3H777XA4HPjPf/6DO++8EwEBclVcL7bzZ6yPf2N9/BvrQ0SX0mROS6nmzp2Lt956C127dkV+fj5atWqFN954A3379jU6NK+wPv6N9fFvrA8RedLkOjdWqxXHjh1DVlYWgoKCcOeddxodkk9YH//G+vg31oeIPGlynRsiIiKiS2kyFxQTERER1QY7N0RERNSssHNDREREzQo7N0RERNSssHNDREREzQo7N0RERNSssHNDREREzQo7N0RERNSssHND1Mzs378fkiShoKDA6FCIiAzBJxQTNXHXX389BgwYgNTUVACAzWbDhQsXEBkZyRctElGL1GTeCk5EtRMUFISoqCijwyAiMgxPSxE1YXfffTc++eQTbNy4EZIkQZIk7NixQ3daaseOHWjTpg3ee+89XHXVVWjVqhWmTJmC0tJSvPrqq+jWrRvatm2LefPmwW63a2XbbDY88sgjuPLKKxEaGophw4Zh//79xlSUiKgOOHJD1IRt3LgRx48fR9++fbFy5UoAwHfffVctXVlZGTZt2oTXX38dxcXFuOWWW3DLLbegTZs22LNnD3766SfceuutuPbaa5GUlAQAuOeee3D69Gm8/vrr6Ny5M95++23ccMMN+OabbxAXF9eo9SQiqgt2boiasIiICAQFBaFVq1baqajvv/++WrrKykps3boVPXr0AABMmTIFf/nLX/Drr7+idevW6NOnD8aMGYOPP/4YSUlJOHnyJHbt2oX//e9/6Ny5MwDgoYcewgcffIDt27dj1apVjVdJIqI6YueGqAVo1aqV1rEBgMjISHTr1g2tW7fWTcvPzwcAfPnllxBCoGfPnrpyrFYr2rdv3zhBExF5iZ0bohYgMDBQ91uSJI/THA4HAMDhcMBsNiMjIwNms1mXzrVDRETkj9i5IWrigoKCdBcC14eBAwfCbrcjPz8fo0aNqteyiYgaGu+WImriunXrhs8//xynT5/GuXPntNEXX/Ts2RN33nknpk2bhn/84x84deoUvvjiC6xZswZ79uyph6iJiBoOOzdETdxDDz0Es9mMPn36oGPHjsjOzq6Xcrdv345p06bhwQcfxFVXXYU//OEP+PzzzxEdHV0v5RMRNRQ+oZiIiIiaFY7cEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K/8fHjIq1Mp2PlcAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Turbulence Intensity\n", - "ds_avg['TI'] = ds_avg.velds.I\n", - "ds_avg['TI'].plot(cmap='Reds', ylim=(0,11))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 7.2 Power Spectral Densities (Auto-Spectra)\n", - "\n", - "Other turbulence parameters include the TKE power- and cross-spectral densities (i.e the power spectra), turbulent kinetic energy (TKE, i.e. the variances of velocity vector components), Reynolds stress vector (i.e. the co-variances of velocity vector components), TKE dissipation rate, and TKE production rate. These quantities are primarily used to inform and verify hydrodynamic and coastal models, which take some or all of these quantities as input.\n", - "\n", - "The TKE production rate is the rate at which kinetic energy (KE) transitions from a useful state (able to do \"work\" in the physics sense) to turbulent; TKE is the actual amount of turbulent KE in the water; and TKE dissipation rate is the rate at which turbulent KE is lost to non-motion forms of energy (heat, sound, etc) due to viscosity. The power spectra are used to depict and quantify this energy in the frequency domain, and creating them are the first step in turbulence analysis.\n", - "\n", - "We'll start by looking at the power spectra, specifically the auto-spectra from the vertical beam (\"auto\" meaning the variance of a single vector direction, e.g. $\\overline{u'^2}$, vs \"cross\", meaning the covariance of two directions, e.g. $\\overline{u'w'}$). This can be done using the `power_spectral_density` function from the `ADPBinner` we created (\"avg_tool\"). We'll create spectra at the middle water column, at a depth of 5 m, and use a number of FFT's equal to 1/3 the bin size." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "rng = 5 # m\n", - "vel_up = ds['vel_b5'].sel(range_b5=rng, method='nearest') # vertical velocity\n", - "U = ds_avg['U_mag'].sel(range=5, method='nearest') # flow speed, for plotting in the next block\n", - "\n", - "ds_avg['auto_spectra_5m'] = avg_tool.power_spectral_density(vel_up, freq_units='Hz', n_fft=ds_avg.n_bin//3)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the auto-spectra, we're primarly looking for three components: the energy-producing region, the isotropic turbulence region (so-called \"red noise\"), and the instrument noise floor (termed \"white noise\"). \n", - "\n", - "The block below organizes and plots the power spectra by the corresponding ensemble speed, averaging them by 0.1 m/s velocity bins. Note that if an ensemble is missing data that wasn't filled in, a power spectrum will not be calculated for that ensemble timestamp." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Text(0.5, 0, 'Frequency [Hz]'),\n", - " Text(0, 0.5, 'PSD [m2 s-2 Hz-1]'),\n", - " (0.01, 1),\n", - " (0.0005, 0.1)]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import matplotlib as mpl\n", - "plt.rcParams.update({'font.size': 18, \"font.family\": \"Times New Roman\"})\n", - "\n", - "\n", - "def plot_spectra_by_color(auto_spectra, U_mag, ax, fig, cbar_max=4.0):\n", - " U = U_mag.values\n", - " U_max = U_mag.max().values\n", - "\n", - " # Average spectra into 0.1 m/s velocity bins\n", - " speed_bins = np.arange(0.5, U_max, 0.1)\n", - " time = [t for t in auto_spectra.dims if 'time' in t][0]\n", - " S_group = auto_spectra.assign_coords({time: U}).rename({time: \"speed\"})\n", - " group = S_group.groupby_bins(\"speed\", speed_bins)\n", - " count = group.count().values\n", - " S = group.mean()\n", - "\n", - " # define the colormap\n", - " cmap = plt.cm.turbo\n", - " # define the bins and normalize\n", - " bounds = np.arange(0.5, cbar_max, 0.1)\n", - " norm = mpl.colors.BoundaryNorm(bounds, cmap.N)\n", - " colors = cmap(norm(speed_bins))\n", - "\n", - " # plot\n", - " for i in range(len(speed_bins)-1):\n", - " ax.loglog(auto_spectra[\"freq\"], S[i], c=colors[i])\n", - " ax.grid()\n", - "\n", - " # create a second axes for the colorbar\n", - " cax = fig.add_axes([0.8, 0.07, 0.03, 0.88])\n", - " #cax, _ = mpl.colorbar.make_axes(fig.gca())\n", - " sm = mpl.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm,\n", - " spacing='proportional', ticks=bounds, boundaries=bounds, \n", - " format='%1.1f', label='Velocity [m/s]')\n", - " \n", - " # Add -5/3 slope line\n", - " m = -5/3\n", - " x = np.logspace(-1, 0.5)\n", - " y = 10**(-3)*x**m\n", - " ax.loglog(x, y, '--', c='black', label='$f^{-5/3}$')\n", - " ax.legend()\n", - "\n", - " return ax, sm\n", - "\n", - "\n", - "# Set up figure\n", - "fig, ax = plt.subplots(1, 1, figsize=(5,5))\n", - "fig.subplots_adjust(left=0.2, right=0.75, top=0.95, bottom=0.1)\n", - "\n", - "# Plot spectra by color\n", - "plot_spectra_by_color(ds_avg['auto_spectra_5m'], U, ax, fig, cbar_max=2.0)\n", - "# Set axes\n", - "ax.set(xlabel=\"Frequency [Hz]\", ylabel=\"PSD [m2 s-2 Hz-1]\", xlim=(0.01, 1), ylim=(0.0005, 0.1))\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the figure above, we can see the energy-producing turbulent structures below a frequency of 0.2 Hz (one tick to the right of \"10^-1\"). The isotropic turbulence cascade, seen by the dashed f^(-5/3) slope (from Kolmogorov's theory of turbulence) begins at around 0.2 Hz and continues until we reach the Nyquist frequency at 0.5 Hz (1/2 the instrument's sampling frequency, 1 Hz). The instrument's noise floor can't be seen here, but will show up as the flattened part of the spectra at the highest frequencies. For this instrument (Nortek Signature1000), the noise floor typically varies around 10^-3, depending on flow speed and range distance.\n", - "\n", - "### 7.3 TKE Dissipation Rate\n", - "\n", - "Because we can see the isotropic turbulence cascade (0.2 - 0.5 Hz) at this depth bin (5 m altitude), we can calculate the TKE dissipation rate at this location from the spectra itself. This can be done using `dissipation_rate_LT83`, whose inputs are the power spectra, the ensemble speed, and the frequency range of the isotropic cascade." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "# Frequency range of isotropic turubulence cascade\n", - "f_rng = [0.2, 0.5]\n", - "# Dissipation rate\n", - "ds_avg['dissipation_rate_5m'] = avg_tool.dissipation_rate_LT83(ds_avg['auto_spectra_5m'], U, freq_range=f_rng)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have just found the spectra and dissipation rate from a single depth bin at an altitude of 5 m from the seafloor, but typically we want the spectra and dissipation rates from the entire measurement profile. If we want to look at the spectra and dissipation rates from all depth bins, we can set up a \"for\" loop on the range coordinate and merge them together:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "import xarray as xr\n", - "\n", - "spec = [None]*len(ds.range)\n", - "e = [None]*len(ds.range)\n", - "\n", - "for r in range(len(ds['range'])):\n", - " # Calc spectra from each depth bin using the 5th beam\n", - " spec[r] = avg_tool.power_spectral_density(ds['vel_b5'].isel(range_b5=r), freq_units='Hz')\n", - " # Calc dissipation rate from each spectra\n", - " e[r] = avg_tool.dissipation_rate_LT83(spec[r], ds_avg.velds.U_mag.isel(range=r), freq_range=f_rng) # Hz\n", - "\n", - "ds_avg['auto_spectra'] = xr.concat(spec, dim='range')\n", - "ds_avg['dissipation_rate'] = xr.concat(e, dim='range')\n", - "\n", - "del spec, e # save memory" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have a profile timeseries of dissipation rate, we need apply some quality control (QC). Since we can't look at each individual spectrum to ensure we can see the isotropic turbulence cascade, we want to QC the output from `dissipation_rate_LT83` to make sure what was calculated actually falls on a f^(-5/3) slope. We can do this using the function `check_turbulence_cascade_slope`, which uses linear regression on the log-transformed LT83 equation (ref. to Lumley and Terray, 1983, see docstring) to calculate the spectral slope for the given frequency range. \n", - "\n", - "In our case, we're calculating the slope of each spectrum between 0.2 and 0.5 Hz. We'll use a cutoff of 20% for the error, but this can be lowered if there still appear to be erroneous estimations from visual inspection of the spectra." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "# Quality control dissipation rate estimation\n", - "slope = avg_tool.check_turbulence_cascade_slope(ds_avg['auto_spectra'], freq_range=f_rng)\n", - "\n", - "# Check that percent difference from -5/3 is not greater than 20%\n", - "mask = abs((slope[0].values - (-5/3)) / (-5.3)) <= 0.20\n", - "\n", - "# Keep good data\n", - "ds_avg['dissipation_rate'] = ds_avg['dissipation_rate'].where(mask)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we plot the dissipation rate below in a colormap, we can see that the profile map has a lot of missing data. One of the reasons is that the 1 Hz sampling rate doesn't provide enough information needed to make dissipation rate estimations, and the other part is that turbulence measurements push the boundaries of what ADCPs are capable of.\n", - "\n", - "Also, 5x10^-4 $m^2/s^3$ sounds reasonable for a dissipation rate estimate for the 1.25 m/s current speeds measured here. They can be a magnitude or two greater for faster flow speeds and depend heavily on bathymetry and regional hydrodynamics." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAngAAAHuCAYAAAAMQHH5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACgS0lEQVR4nOzdd3wT9f/A8dclnRRayt67spG99wYRlT0EEZChiKyvLAFBoKigCA5QEdlT4aeC7DJlI0MEBNmbQmmB0qZN7vfHkbQhSVfSkfp+Ph73aHL3WZdcknfv7vP5KKqqqgghhBBCiExDl94NEEIIIYQQriUBnhBCCCFEJiMBnhBCCCFEJiMBnhBCCCFEJiMBnhBCCCFEJiMBnhBCCCFEJiMBnhBCCCFEJiMBnhBCCCFEJuOR3g1wByaTiZs3b5ItWzYURUnv5gghhMjAVFXl0aNHFChQAJ0u9c6jREVFYTAYnC7Hy8sLHx8fF7RIZCQS4CXBzZs3KVy4cHo3QwghhBu5du0ahQoVSpWyo6KiyOXryxMXlJUvXz4uXbokQV4mIwFeEmTLlg3QPqz+/v7p3BohhBAZWUREBIULF7b8dqQGg8HAE2CYh4K3E+VEA7Nv38ZgMEiAl8lIgJcE5suy/v7+EuAJIYRIkrS4pcdXAR8n6tHJdPSZlnSyEEIIIYTIZOQMnhBCCOGmPBRtSXF+1zVFZDDy3gohhBBuSq9oS4rzu64pIoORS7RCCCGEEJmMnMETQggh3JScwROOSIAnhBBCuCm9ojoZ4Ekv2sxKLtEKIYQQQmQycgZPCCGEcFN6J3vRyiXazEsCPCGEEMJN6XVO3oMnV2gzLblEK4QQQgiRycgZPCGEEMJNSS9a4YgEeEIIIYSbkgBPOCIBnhBCCOGmJMATjsg9eEIIIYQQmYycwRNCCCHclPSiFY5IgCeEEEK4KR3OBXg6CfAyLblEK4QQQgiRycgZPCGEEMJNOd3Jwom8ImOTAE8IIYRwUzqdtqQ4v+uaIjIYeW+FEEIIITIZOYMnhBBCuCm5RCsckQBPCCGEcFMS4AlH5BKtEEIIIUQm47YB3oYNG6hbty4//vhjgumOHTvGSy+9RPHixSlVqhSjR4/m6dOnadNIIYQQIhXpdc4vInNyu7d29erV1KpVi3bt2rF///4E0/7666/UrVuXZs2acenSJY4ePcq+ffto1qwZT548SaMWCyGEEKlDpzi/iMzJ7QK86tWrs3v3boKCghJMd+3aNXr27EnTpk0ZMWIEAAEBASxYsIADBw7wv//9Ly2aK4QQQqQanU5B78Sikwgv03K7AK9EiRJ4e3tTpUqVBNNNnjyZR48e8eabb1qtL126NDVq1GDevHmcOXMmNZsqhBBCCJEu3C7AM/Px8XG4LSYmhjVr1gBQt25dm+21a9dGVVW+//77VGufEEIIkdrkEq1wxG2HSVEUx0flnj17iIiIwNvbm4IFC9psr1ixIgAhISGp1j4hhBAitTnbUULvuqaIZxYvXpxqZffu3TvJad02wEvIn3/+CWA3uAPInj07AKdOncJoNKLXWx/i0dHRREdHW55HRESkTkOFEEIIkan06dMnwZNQKaGqKoqiSIB37949IC6Qe15AQAAAsbGxhIeHkyNHDqvtwcHBTJ48OVXbKIQQQjjL2cusconW9QIDAxk6dKhLy1RVlS+//DJZeTJlgHf//n0AsmTJYne7Lt7MzFFRUTbbx44da+l5C9oZvMKFC7u4lUIIIYRz5BJtxpMzZ04mTZrk8nKXL1+erPSZMsDz8vICtIjXHoPBYHn8/Nk7AG9vb7y9vVOncUIIIYQQqSxTBnj58uUDcDiY8cOHDwHw8/NLsDeuEEIIkZHpFOfGstOpAPZPhoiUcXRyKa3LzZQBXqVKlQC4efOm3e137twBoHLlymnVJCGEEMLl5B68jOfvv//OEOW67Th4CWnSpAleXl7cvXuX0NBQm+0XLlwAoE2bNmndNCGEEEJkYp6enhmi3EwZ4Pn7+9O1a1cAdu/ebbN9//796HQ6unTpktZNE0IIIVzG3MnCmUVkTm771sbGxgJgNBrtbp80aRJ+fn42Aw7+9ddfHDt2jP79+yc6n60QQgiRkSnP5pNN6aLINdpUZR7VI77IyEgmTJhAqVKlyJIlCyVLlmTkyJHcvXvXpXW7ZYD39OlTTp48CcCBAwfspilZsiTz589nw4YNLF26FICrV6/y+uuvU69ePT7//PM0a68QQgiRGmSqsozpu+++I3fu3OTJk4eiRYvyww8/ANpECm3atGH69OlcvHgRVVUJDAzkl19+oXLlypw+fdplbXC7AK9bt27kypWLU6dOAfD999+TM2dO5s2bZ5O2Z8+ebNy4ka+//poSJUrQtm1bevXqxY4dOxyOkSeEEEIIkVKLFi1i4MCB3L9/H1VViYqK4u233+btt9/myy+/ZM+ePQCMHDmS27dvc+TIEc6fP8+aNWt46623ePr0qUvaoaip1Z83E4mIiCAgIIDw8HD8/f3TuzlCCCEysLT4zTDXsbucnqz6lJ+Ge2xUafi3UX7fXOjFF1/k1KlT1KpVi+XLl1O8eHGioqKYN28e48aNIzo6mt69e7Nw4UKbvCEhIRw/fpzhw4c73Q63O4MnhBBCCI0z99+ZF+Fa//zzDzqdjtWrV1O8eHEAfHx8GDZsGNOnTwdgwoQJdvM2adLEbufQlMiU4+AJIYQQQqSH/PnzYzQa7U5x+u6777Ju3TpKlCjhML/5FjRnyRk8IYQQwk3pdM4vwrXatWvH/fv3iY6Ottmm1+sZM2aMw7w7duzg6tWrLmmHvLVCCCGEm5IAL+OZMmUKJUuW5LPPPrO7PaFJFoKDg/H19XVJO+StFUIIIYRwkezZs7Nv3z5u3rzJ119/nay8p06dokaNGi5ph9yDJ4QQQrgpZztK6GQcjVSRNWtW5s6dm+whT5YvX07p0qVd0gYJ8IQQQgg3pVOcu8yqM7muLcJWci+3Nm3a1GV1yyVaIYQQQog0NnPmTKZMmZJq5csZPCGEEMJNOX2JVk7zpJuPP/6YBw8eMHHixFQpXwI8IYQQwk0pTvaEVSTAy7QkwBNCCCHclKJTUJw4gycBXuYlb60QQgghRCYjZ/CEEEIIN+XsYMVyD17mJQGeEEII4aakk4X7qlu3LhEREalWvry1QgghhEg2g8HAjBkzKF26NCVLlqRRo0bs3r072eXcvn2bgQMHUqJECYoXL07Xrl0TnY917dq11KhRgxIlSlCpUiW+//57l9Zx5coV3nzzTQoVKkSRIkUoXLgwffv25dq1a8neP0f+7//+j5CQEJeV9zwJ8IQQQgg3Ze5k4cySEtHR0bRu3ZolS5awdetW/v33X4YMGULz5s1Zs2ZNksu5dOkS1atXJywsjNOnT3PhwgUKFChA9erVOXfunN0848aN480332TmzJlcvHiR1atXM27cOIYOHeqSOs6fP0+1atV48OABx48f5+rVqxw9epQrV65QvXp1Ll68mOT9S4qrV6+ydu1a9u/f79JyFVVVZaKSRERERBAQEEB4eDj+/v7p3RwhhBAZWFr8ZpjrONPEl2weKb9E+yhWpWzI02S3ddiwYXzxxRccPHiQmjVrWtb36NGD//u//+Ovv/6iePHiCZZhNBqpVasWV69e5dKlS/j5+VnWFy9enMDAQI4cOYKnp6clz/r163nttdf4+OOPef/99y3rv/32WwYOHMiqVavo0qWLU3W8/PLL7Nu3j2vXrlnSA1y7do0iRYrQpUsXVq1aleTXCmDEiBGWx9myZWPy5MkAfPnll4wcOZLY2FgA2rRpw7p166zak1JyBk8IIYQQSXb58mW++uorypUrZxXcAfTq1YvIyEjGjh2baDkrVqzg6NGjdO7c2SqQ0uv1dO/enZMnT7JgwQLLepPJxPvvv4+iKPTp08eqrB49eqDX6xkxYgRGozHFdQDs2LGDoKAgq/QAhQsXJleuXJw6dSrRfXve7NmzWb58OVWrVmX8+PEA7N+/n/fee4+YmBhee+01vvjiC+7fv8+sWbOSXb49EuAJIYQQbio9LtGuWrWK2NhY6tata7OtVq1aAKxbt4779+8nWM6yZcsA7JZTu3ZtAL777jvLusOHD3P+/HlKlixJnjx5rNJnzZqV8uXLc+PGDTZu3JjiOgD8/Pz4+++/bTpAmEwmIiMjqVy5coL75chPP/3E66+/jpeXFwDDhw8HoGfPnqxdu5YhQ4awceNGVqxYkaLynycBnhBCCOGmdIpi6UmbokVJfoC3YcMGAEqUKGGzLUeOHBQsWBCDwcC+ffsclhEZGcnOnTsdllOxYkUA/vzzTx4+fJhovfHzmDsupKQOgPbt2/P48WPeeecdq/SbN29Gr9czadIkh/vlSK5cuahXr55VWYcOHSJr1qx89tlnlvWBgYE8ePAg2eXbIwGeEEIIIZLszz//BKBQoUJ2t2fPnh2A48ePOyzjzJkzREVFOSzHXIaqqpw8eTJF9aakDoCpU6dSuHBhli5dytChQzGZTNy9e5fg4GC2b99O6dKlHe6XI7lz5yYmJgbQ7v8bM2YMiqLw3nvvkTt3bku6K1eucPPmzWSXb4+MgyeEEEK4KUXn3HRj5rzPX4709vbG29vbJn1UVBSPHz8G4gKk5wUEBAAQGhrqsN579+5ZHtsrx1xG/HLMeZJab0rqAMiXLx8hISE0b96cuXPncv36dQICAvi///s/AgMDHe5TQlq2bEmfPn3o2bMn8+fP58SJExQsWNCqo4jBYGDw4MEpKt8eOYMnhBBCuCmdXnF6Aa0DQUBAgGUJDg62W1/8++qyZMliv03PRk82nz1LSTm6eCMwm8sx50lqvSmpw6xkyZIsW7aMoUOHEhISwo8//si0adMwmUwO9ykhU6dOJTIyknbt2vHrr7+SN29eVq1aRdasWQHtPsAaNWqwadOmFJVvj5zBE0IIIdyUM2PZafm1v9euXbMaJsXe2TvA0kEAtEub9hgMBkC7H8+RxMoxlxG/HHOepNabkjrMtm3bxq5du/jiiy8YMGAALVu2ZNasWVy/fp3ly5dbBYdJ4efnx7p167h+/Tp3796lXLly+Pj4WLZXrVqVH374IVllJkYCvGRoWS+YA6ds/6tpXH8eADv3DgKgZtHuABy6ovWEqVdpnCXtvpPTAahVog8AHlkLAODpX8SqDCGEECKt+Pv7J2kcvBw5cuDl5YXBYODJkyd205g7LOTKlcthOfny5bM8fvLkidXl0vhlxC8nX758/P3330muNyV1AOzbt49OnTpx+fJlAMqXL8+uXbuoX78+q1at4sUXX0zSMDD2FCpUyO79gNWqVUtReQmRS7RCCCGEm1L0itNLcuj1esqVKwfgsDPAnTt3ABIcTqRChQooz3rw2ivHXIaXlxdly5YFoFKlSsmqNyV1mEwmBgwYQLVq1azu2ytVqhTr16/Hw8ODGTNmJHj5OaOQAE8IIYRwV86OgZeCy7utWrUC4PTp0zbbQkNDCQ8Px8/PjwYNGjgsIzAw0DJIsr1yLly4AEDDhg0tAw4nVG/8PG3atElxHWfPnuXvv/+2GWcPtHHz2rVrR0REBGfPnnW4bxmFBHhCCCGESLJ+/fqh0+nYvXu3zTbzfKodO3Z0eB+f2YABAwASLKdHjx6Wdc2bN6d48eKcOXPGqocsaJdbz5w5Q/HixS0DGKekDvN9edevX7fb5qCgIMD6/r6MSgI8IYQQwk25qhdtcgQFBTFgwABOnTplM9bdokWL8PX1tRoMOCQkhFq1ajFnzhyrtL169aJixYqsXr3a6pKnwWBg5cqVVKhQgddff92y3sPDg+DgYEwmk2WGCrOlS5diMpmYNm0aer0+xXVUqlSJEiVKcOjQIS5evGiz7wcPHqRs2bKWy9QZmQR4QgghhJtK63vwzGbOnEm1atUYNGgQDx48QFVV5s6dy6+//srixYutZo6YNWsWhw4dsszBaubp6cny5cuJjY1lxIgRxMbGEhkZSd++fTGZTKxduxZPT0+rPF27dmXgwIFMnTrVMjjxnj17GD9+PMOHD6d79+5O1aHT6Vi0aBGenp507tyZ8+fPAxAdHc3YsWM5fvw4ixcvTtFrltYkwBNCCCFEsvj5+RESEkLt2rWpXr06QUFBbN++ncOHD9OpUyertN27dydbtmy88cYbNuVUqFCB/fv3c+fOHYKCgqhcuTLZs2fnxIkTDmeM+Oabb/jwww/p1q0bJUuWZPTo0SxevNhqyi9n6qhfvz6HDh3ihRdeoH79+hQqVIgXXniBW7ducezYMapXr56CVyztKaqjAWWERUREBAEBAdSqMEaGSRFCCJEg829GeHh4koYecaaOa10D8fdK+bmaCIOJwqvCUrWtInGPHz9Gr9fj6+vrsjLlDJ4QQgjhptLrEq1ImsuXL3P48GHLkCyOGAwGWrduTe/evdmyZYtL6pYATwghhBDChf7991/q169PyZIlqV27NgUKFKBu3bqsW7fObvocOXLw5ZdfsnTpUtq2beuSNkiAJ4QQQrgpOYOX8dy+fZsGDRqwf/9+VFVFVVVy587NsWPH6NSpE61bt+b27ds2+SpWrIivr6/DqdiSSwI8IYQQwk0pep3Ti3CtyZMnc/v2bfR6PRMmTODhw4fcvn2bJ0+esG3bNrJkyULlypUt4/DFJ/fgCSGEEELO4GVAv/32G4qiEBwczOTJky2dV/R6PU2aNOHnn39m5cqV9O/fn/Xr11vlNU+t5goS4AkhhBBCuMjdu3dRFIXBgwc7TNO4cWP27t3LDz/8wA8//JAq7ZAATwghhHBTcgYv4ylYsCA6nS7R6cwCAwNZv349Bw8edDiGnzMkwBNCCCHclKJzMsDTSYDnap06dcJoNPLHH38kmlan0zF//nxu3rzJtGnTXNoOCfCEEEIIIVxk0qRJvPjiiwwfPpxHjx4lKc/MmTMJDw/nwYMHLmuHh8tK+g/Ysm9sktJ5BhS3eh55Y7dNGp2XdtOleWaLuuVHAdCq7xkAwvfMtqQ9cH5+kupt2eNIXFuXp3wqFXM5j45p8+15530RgJ27+qW4TCGEiM88w4/5O/B59StPtjzee3yS1baGNWdaPd99aJRNfnVlNQCUbkcBaNp8JQA7tnUDoFnbXwDYvrF9om1tOcsEgOGXhYD978JWb2lzlm7+LijR8lzJ2Z6wit6FjRGANo3bnj17mDJlCq1bt2b06NG0b5/4cfbJJ5/w5MkT5s2b55J2SIAnhBBCuCln76OTe/BSh5+fHx9//DEmk8numHeOfPXVV2TLls0lbZBLtEIIIYQQqUCn01GgQIFk5QkLC3NN3S4pRQghhBBpT684v4gMwWg0EhIS4rJhU+QSrRBCCOGm5BKtezCZTHz88ccsWbKEq1ev8vTp01SvUwI8IYQQQohUNHLkSObMmZOkeWZdNZuFXKIVQggh3JTMReseFi1aBMCHH37InTt3MBqNmEwmmyUkJASdzjXviZzBE0IIIdyVzsn76GSg4zTh5eVFrly5mDhxYoLpGjVqRIsWLVxSZ6YP3ffu3Uvbtm3Jly8fhQsXpnTp0kyaNImoqKj0bpoQQgjhFJmqzD28/vrrxMbGJukS7YoVK1xSZ6YO8NasWUOjRo2oVasW165d49q1a6xcuZKFCxfSrFkzDAZDejdRCCGEEJncRx99RPny5Vm+fHmiacuWLeuSOjPtJdro6GgGDx5M8+bNmTQpbhT0KlWqMG3aNHr37s2CBQsYPHhwOrZSCCGEcIJeAWfuo9MnfkZJOM/X15ctW7bQr18//P39CQgIsEljnr/2zp07Lqkz0wZ4J0+e5P79+1SuXNlmW9WqVQE4depUGrdKCCGEcB0ZJsU93L17l759+7Jp0yZWrlyZJnVm2gDPz88PgAMHDthsM0/+ay/4E0IIIYRwpbfeeouNGzcCULJkSQoUKGDTW9ZkMnHmzBnu37/vkjozbYBXtmxZgoKC2L17NwsWLKBfv7jJodetW0fFihV544030rGFQgghhJOcnY1CzuCliR07dqAoCmvWrKFDhw4O0925c4dixYq5pM5M28lCURS+/fZbvLy8GDx4MMuWLQNg3759HD16lO3bt+Pt7W03b3R0NBEREVaLEEIIkdHIOHjuoWjRouTPnz/B4A4gb968jBs3ziV1Zup3tnHjxvz00094eHjQq1cvhg0bxrp169i8eTO5c+d2mC84OJiAgADLUrhw4TRstRBCCCEykylTphAWFkZkZGSiaevWreuSOjN1gAfQrl07PvnkE4YOHcqcOXP4+uuvWbNmTYJ5xo4dS3h4uGW5du1aGrVWCCGESAbzQMcpXWSg4zTRoUMHPvvsM2bOnJlo2m7durmkTkVNyqh7buyTTz4hKCiI1157jdWrV1sGG5wzZw5DhgxJUhkREREEBAQQHh6Ov7+/zfamzbUeMY/P/x8Ah64kfZDCOmWGAqDovQD447T25tcOGmhJo/PKBoDeJycAe46OtSqjRYedAGz9ubHDepo0WQLAw5PzAfjz/t4kt1EIkXE1qjMHgF37h1rWNX9lKwA6v0AAjA9vArB9Y3uH5TRrp90ArkZpt6Ts2Kb9yLQaeBGAzfNLaM/fvmLJY7qn/fO7dU19q7LM3zchIb2SvB/m78L9Z+c4TFO/8mQA9h7Xhr5q1vYXbYNOu518+29tE63H/N164Pz8JLctIS3f+AsAxU/7nt78ddFEfzNcwVzHw1ll8PfVp7ycp0ayjzybqm0V2hk8gO3bt1OzZk2yZctmkyY2NpYjR46wefNmjEaj03Vm2k4WADNnzuTnn3+29KTt0qULXl5edOrUiaFDh1KlShXq1auXzq0UQgghRGYWEhLC7t27AdizZ4/dNIqioKoqiuKas6qZNsC7cuUKH3zwAePHj7da/+qrrzJjxgz+97//MXnyZLZs2ZJOLRRCCCGcJL1o3cKUKVNo1KgRnTt3pmTJknY7ecbExLBv3z5LIOisTBvgbdiwgejoaPLkyWOzbdiwYXzyySccOnQoHVomhBBCuIjOyfvo5B68NNGgQQN69uzJkiVLEkxnMpnsxi0pkWk7WZjnmb1+/brNNg8PD4oVK4aXl1daN0sIIYRwHb3O+UWkialTpxITE5NgGp1Ox65du1xSX6Z9Z9u1a4der2ft2rXExsZabQsPD+fs2bN07NgxnVonhBBCiMxo+fLldtcXLVoUT0/PRPOXL18+WeU6kmkDvFKlSvHpp59y9uxZ3nzzTcLDwwG4ffs23bp1o2jRokyfPj2dWymEEEI4wZkhUpy9f0/Y9eGHH2aIcjNtgAcwfPhwNmzYwM2bNylevDhFixalUaNGVK1alT/++IPAwMD0bqIQQgiRcjIOXoaTWqPPJbfcTNvJwqxt27a0bZv42EhCCCGEEM5y1TAnzpab6QM8IYQQItOSYVIynMuXL1OiRAmXl3vjxo1kpZcATwghhHBXMkxKhhMbG8vly5ddXq6cwRNCCCGESCcmkym9mwBIgCeEEEK4LVWvoDpxmdWZvCJjkwBPCCGEcFdyiVY4kKmHSRFCCCGE+C+SM3hCCCGEm5JLtMIRCfCEEEIId6XDuWtxch0v05IALxla1gvmwKlgm/XRd08CcOjKCgAa1ZkDwK79Q23S1irRBwC9by4A9p+dY7cunwI1LY9NT8MA0HlltZt268+NE217SEgvAOqUOZxoWiFE8jVr+wsA2ze2t7u99Xu3LI83fZE/2eW36LATgJi7ZwHwLFgZAJPhicM8SrYcWpuWVwegZY8jAGx59rzVwIuWtNt/0waEb9xoAQBNm68EYMe2blbPvSo3t+TZuqa+VX3mNKrJAED9ypMB8KvRw5Im5tJRq3LNr5v5+61epXEAePjls+TxCCwGgDHqPgANa87U8vhqsxEZH999ljJuUPvKv2qvy/GX/azaeOD8fKvn5u9kgIMXfyTZYqIAUHzyJD+vC6h6587CqXoXNkZkKBK7CyGEEEJkMnIGTwghhHBXipO9aFNpWi2R/uQMnhBCCOGmVJ3i9CLSxtOnT5k8eTIVK1akWLFilvU7d+6kd+/e/P777y6tT87gCSGEEEKkorCwMBo3bsxff/2FqqrkypXLsq1x48aUL1+epk2b8vvvvzNnjv1785NLzuAJIYQQbkrVOb+I1PfBBx9w6tQpypUrR7du3fDx8bHanjt3bqZPn85XX33Fl19+6ZI65a0VQggh3JQEeO5h3bp1jBs3jlOnTrF8+XKyZrUdFaNKlSqoqso333zjkjrlrRVCCCGESEUmk4nJkycnmObevXsA/Pvvvy6pU+7BE0IIIdyUzGThHgoVKoSSSI/lb7/9FoC8efO6pE45gyeEEEK4KblE6x5eeeUVpk6d6nD7V199xfz581EUhY4dO7qkTjmDJ4QQQgiRikaNGkWDBg04ePAgnTp1IjIyki1btnDu3DlWr17NH3/8AUBQUBATJ050SZ0S4AkhhBBuytmzcHIGL234+vqyfft2hg4dyoABAzAajbRp0wYAVVUBaN++Pd9++y3Zs2d3SZ0S4AkhhBBuSgI89xEQEMCiRYv4+OOP2b17N1evXiU2Npb8+fPToEEDSpQo4dL6JMATQggh3JRJAZMTQZpJ+likiV9//ZWXX34ZgHz58tGlSxe76ZYtW0bPnj1dUqfE7kIIIYQQqWjkyJFJSle9enUZ6FgIIYT4r5NetJlL3rx5mTdvnkvKkku0QgghhJsy6Zy8RCsBXqrYs2cP06ZNw2AwAHDjxg2aNm2aYJ6oqCjOnDmDp6enS9ogAV4yxD66YvW8Vok+APgWqA1AzaLdATh0ZYXDMg5e/BGAxo0WWK1v1vYXALZvbA+Azie7ZdvOXf0AaNH1gFWelj2OALBleXUAmjZfadn29LrW5Xr/WW3S4sb151k9FymT/+xhy+NbZWoAUDniewCO+/e3m6f6z1GWx0c6+NhN02K21otq6zDHN8TUXhUDwIGu2oe/1eSnAGye5KuVEe/42LpKOyZbdNipPf+5sd0ymzRZYnnskScoWXkT0np0mNXzTR8HJruM+OpX1kaA33t8EgDN52ivl+7oaQAeHdQGCPXOVc6SxxB2AYA/Ts9Mcb11ygwFbD835tcG4l6fJ+c3ANC0eaRWf+g5qzZv+iK/w3padN4LQMytvwDYuXeQTRpTVAQAiqefVu+z9wlq26Td9n8t7NZj/q4w17d1TX3LNvN3hLnulm9obTEfZzu2ddOeT4+xKdf83aP3z6elfe6YafXWectjczlmxoibAHj4aXmNT7VjRzUaLGnM34v1KmnH+O5DowDb46Jhzbj3+vizNA2qBQOw5+hYm3YD6Lz87a635/nvaQA8tc901KGfn62wfe/Ef0+DBg1YsGAB/fv3Z/PmzSiKws6dOxPN5+npKWfwhBBCiP+69OxFazAY+Oyzz1i4cCGxsbEUKlSIjz76iIYNGyarnNu3bzNp0iS2bt2KqqrUrFmTTz/9lCJFijjMs3btWj7++GPu379P1qxZGTp0KP372/8nO6V1xLdr1y6WLVvG/fv3KV68OC+99BJNmjRJME/BggXZsGEDAwYMYPPmzSxdutRhWkVR8PX15YUXXiAgICBJbUqMBHhCCCGEm1KdvESb0gAvOjqaNm3acOfOHbZu3UqRIkVYs2YNzZs3Z9myZXTu3DlJ5Vy6dIkGDRpQt25dTp8+jZeXF6NGjaJ69ers2bOH0qVL2+QZN24cc+fO5bfffqNRo0acPXuWhg0bcvLkSebMsb1KlZI6zO7evUv//v25fPky8+bNo27dukl/kQCdTsf8+fPp1q0bjRo1SlZeZ8nVdyGEEEIky+jRowkJCWHhwoWWs2CdO3emU6dO9OnTh0uXLiVahtFopHPnzhgMBhYuXIivry96vZ6ZM2fi4+NDly5diImxviVg/fr1BAcHM2HCBEvAVKZMGaZOncrcuXNZvXq103WY/fPPP9SsWROTycSBAweSHdyZ6fV61qxZk2i6devWsW/fvhTVYY8EeEIIIYSbUnWq00tyXb58ma+++opy5cpRs2ZNq229evUiMjKSsWPt3/MY34oVKzh69CidO3fGz8/Psl6v19O9e3dOnjzJggVx96ubTCbef/99FEWhT58+VmX16NEDvV7PiBEjMBqNKa7D7Pbt27Rq1YpcuXKxdu1asmTJkuj+OKt9+/Z07tyZDRs2uKQ8uUQrhBBCuKn06EW7atUqYmNj7Z7RqlWrFqCdjbp//z45c+Z0WM6yZcsA7JZTu7bWeei7775j0CCt48rhw4c5f/48pUqVIk+ePFbps2bNSvny5Tl58iQbN260DCqc3DpAmzqsU6dOXL16ld9++w0fH/ud45JrwYIFbNy4kfDwcEwmk9U2k8lEaGgot2/f5p133uGll15yuj4J8IQQQgiRZOYzTPam1sqRIwcFCxbkxo0b7Nu3j/bt29ukAYiMjLT0KrVXTsWKFQH4888/efjwIdmzZ0+wXnOekydPEhISwssvv5yiOgAWL17Mvn376Nq1K+XLl3fwKiTPnDlzGDZsWJLSFixY0CV1yiVaIYQQwk2Zz+A5swBERERYLdHR0Q7r/PPPPwEoVKiQ3e3mQOn48eMOyzhz5gxRUVEOyzGXoaoqJ0+eTFG9KakDYOrUqQA0b96cDz74gNatW1OkSBGqV6/OvHnzUNXkX9b+4YcfqFGjBj/++CNbt26lcePG/Prrr4SEhBASEsKOHTto0qQJy5cvZ8+ePcku3x45gyeEEEK4KZNOxZSC++ji5wcoXLiw1fpJkybx4Ycf2qSPiori8ePHQFyA9DzzMB+hoaEO6713757lsb1y4g8VYi7HnCep9aakjuPHj3PhwgUURWH//v2MHj2aqVOncvbsWTp37szgwYM5fvx4ssequ3LlChcvXiQwUBsT9P79+9y5c8fqUmxAQACdOnWiZcuW5MiRI1nl2yNn8IQQQgg3ZVKcPIP3bGz1a9euER4eblkcdZK4f/++5bGjjgc6nRZamM+epaQccxnxyzHnSWq9Kalj165dAFSqVIkFCxbwwgsvAFpP3Z9++sky7MnGjRsd7ps9hQsXtgR3AB06dLDp8VulShUMBgNDhgxJVtmOSIAnhBBC/Mf5+/tbLd7e3nbTeXl5WR47ulRpnp4robNQiZVjLiN+OeY8Sa03JXVcv34dsH8f3AsvvECzZs0AWLhwod02OBIQEMBPP/1kee7h4UHTpk359NNPLeuuXbvGvXv3+O2335JVtiMS4AkhhBBuynyJ1pklOXLkyGEJnJ48eWI3zcOHDwHIlSuXw3Ly5ctneWyvHHMZ8csx50lqvSmpIyJCmxLQ39/+FHbmS6pnzpyxu92RYcOG0blzZ/R6PdWqVQPg3Xff5dtvv6VLly6MGjWKOnXqEBMTY9NDOKUkwBNCCCHclKs6WSSVXq+nXDltzuebN2/aTXPnzh0AKleu7LCcChUqoCiKw3LMZXh5eVG2bFlAu2yanHpTUkfu3LmBuEDveebOGs8Pc5KYjh07Mm3aNPz9/fHw0Lo/+Pr6snr1anbu3Mlnn33GzZs30el0TJ48OVllOyIBnhBCCCGSrFWrVgCcPn3aZltoaCjh4eH4+fnRoEEDh2UEBgZaBkm2V86FCxcAaNiwoWWA4oTqjZ+nTZs2Ka6jevXqCdZhHhPPfG9ecowdO5awsDAOHjxoWVelShVOnTrF3Llz+eKLLzhx4gQ9e/ZMdtn2SIAnhBBCuCmT4vySXP369UOn07F7926bbfv37we0M1aO7uMzGzBgAECC5fTo0cOyrnnz5hQvXpwzZ85Y9ZAF7XLrmTNnKF68uGUA45TU0aJFC3LkyMGVK1f4+++/bfKYp2Dr0KFDgvuWHHnz5uWdd97h3XffpVy5cpb7/JwlAZ4QQgjhprTLrM7cg5f8OoOCghgwYACnTp2yGetu0aJF+Pr6MmnSJMu6kJAQatWqxZw5c6zS9urVi4oVK7J69WqrHrcGg4GVK1dSoUIFXn/9dct6Dw8PgoODMZlMlhkqzJYuXYrJZGLatGno9foU1+Hn52dp+yeffGKz74sXL6ZixYpWQaErnTlzxjI4s7NkHLxk2HHSetybgxd/tHpep4wW7derNA6AfSen25TRsOZMAHReWQFo3EibA0+fLf+zMoYCsP/sHJu8xoc3rJ4brh7Ryqiv/d25d1C8rd2s0lpvi9Oi6wHL462rattN87xWb1+xPN78ddEk5UltVddHWh4fezX15gy8VaaGzbrj/v3tpi1wfQsANzu0tKyrv0i7b+NG6asAXKpdDAD1uS/Z6j/bDi+g01v/q715kq/Vc3vvn+KT1ep56/duAbDpC+14CwnpFbdtlPWYVVt/bmz1vFEd7ZjctX+oTT3Pt9v/+A4AVIP5fYmrx3zMJXa8NWsXNwyBdyHtda9Vog8Afv/7EQC9XzYAspRqDcDTSzssef44PdOqvAbVggHYc3Ssw3bUDhoIgMmg3X/jk7ea3bapRtvJyQ+cnw9A01ZaT7m9x7UfiaS8blvX1H/2qL7DNOi0r2vze2Z+v2LPa4O/Kl6+Nml1fto4X5t/0O4vavnGXwDoC9teXjJ/R5hf9+2/tbXKAxW0ssZ52uT1yFMKgC3Lq9stw3DhQLzUQVZpVKPWk9H8+tQtPwqIe/3i0/toPR3N35NZK3YBoEWHnQDsPjTKJo/Oy89mHUDNot0BOHRlhd3t8Vn2Z6M2K0PLXsct27Ysqfzskfb6NK4/j9jYp4mW6e5mzpzJ4cOHGTRoEBs3biQwMJAvv/ySX3/9lWXLllnNHDFr1iwOHTrE33//zdChcZ8DT09Pli9fTuPGjRkxYgRz5szBYDAwYMAATCYTa9euxdPT+njr2rUrISEhTJ06laZNm1KpUiX27NnD+PHjGT58ON27d7dKn5I6hg4dypEjR1i0aBFVq1bl3XffxWg0MnHiRK5evcq+ffss99G52kcffeSysiTAE0IIIdyU6uRctM//c5lUfn5+hISEMGHCBKpXr45Op6NChQocPnzY0hnCrHv37uzevZvevXvblFOhQgX279/PmDFjCAoKwtPTk5YtW3LixAmHvUm/+eYbKlSoQLdu3YiOjiZv3rwsXryYV155xW76lNTx448/8uKLL/Lll18ybdo0cuXKRYMGDThx4gR58+ZN8ut0/fp1QkNDKV26NL6+vgmmHTFiBCtXrrR0DHGWBHhCCCGEmzIpKibFiZksnMibLVs2Zs+ezezZsxNM17NnzwQ7DgQFBVmNEZcYRVEYMmRIsgYETm4dOp2OkSNHMnLkyCTnie/ff/+lb9++7N27F9DOJI4cOZIpU6ZYXUIGuH37Nq+//johISGAzEUrhBBCCJHhhIWF0axZM/bu3YuqqqiqisFgYMaMGVaXqAE2bNhApUqVCAkJQVVVunXrZjUvrjMkwBNCCCHclFHn/CJc66uvvuLq1av4+PjQqVMnRo8eTYcOHdDr9cyfP59Lly4RExPDe++9R/v27QkNDSUgIIBly5axfPlyh3PtJpdcohVCCCHcVEoGK34+v3Ct33//naJFi7JlyxaCgoIs6/fv30+rVq0IDg7m8OHDnDx5ElVVadq0KT/++KNlEGVXkQBPCCGEcFPpeQ+esO/ixYvMmzfPKrgDqFOnDh988AFjxowBtEGTp0+fzrBhw1KlHRK7CyGEEEK4SHh4OE2aNLG7zTyMS+XKlTly5Ijd4G7VqlUuaYdLzuDt2rWLtWvXcv/+fZYvXw5oAxseOnSI3r17kz9/fldU45TY2FhWrVrFb7/9hoeHB4UKFWLAgAEUL148vZsmhBBCpIiz99HJPXiuFxsbi7+/v91thQsXJl++fBw6dMjhWHojRoyga9euTrfDqQBPVVX69+/Pjz/+CEDOnDkt25o0aYKiKNSrV49PPvmETp06OdVQZxw7dozXX3+dMmXK8Pnnn1O0aMYYnFcIIYRwhomUTTcWP79wrdjYWC5fvkyRIkVstqmqSvbs2S09a+OLjIxk7dq13L592yXtcCrAmzVrFgsXLkSn05EnTx5U1fpafuPGjRkzZgzdunVj06ZNNG/e3KnGpsT//d//0a1bN8aMGWM1dYoQQgghRGooWbJkgtt9fHxSvQ1OnZz97rvvaNmyJTdv3uTmzZt2u/a2aNECk8nE5MmTnakqRXbt2kXXrl3p16+fBHdCCCEyHZOTQ6RIL9rUYR7/LiWLqzh1Bu/27dscPHjQEtjZm17DaDQC2mXStHTnzh1ee+018ufPz8yZMxPPIIQQQrgZk+LkJVrXzIol4smWLRuffvopJUuWTNactZGRkaxatYolS5a4pB1OBXjFihVLdEC+devWASQ6B5urjRkzhrCwMKZPn54mp0KFEEIIIfr168eAAQNSlLdVq1aWuMlZTp2crVWrFr/99pvD7UeOHOGjjz5CURSaNWvmTFXJcv36dRYtWoS3tzdBQUEMHDiQRo0aUbhwYZo3b86OHTvSrC1CCCFEajEqzi/CtZzpb6DT6Rg8eLBL2uHUGbyJEydSv359zp49S8eOHQEwGAycO3eOVatW8fnnn/P06VOyZs3KlClTXNLgpFi7di2qquLl5cWBAweYNm0auXLl4vfff6d79+60aNGCJUuW0KNHD7v5o6OjiY6OtjyPiIhIq6YLIYQQSSYzWWQ8bdu2dSr/jBkzXNIOp97aQoUKsW7dOr799ltKlSrF2bNn8fX1pXLlygQHB/P06VPy58/Pxo0bKV26tEsanBS7du0CoG/fvowfP55cuXIB0KZNG2bOnInJZGLAgAHcu3fPbv7g4GACAgIsS+HChdOs7UIIIYQQznJ6oOMqVarw999/s27dOkJCQrh69SqxsbHkz5+fhg0b0q1btzS//+769esAFCxY0GZbz549GTVqFOHh4axevZp33nnHJs3YsWMZMWKE5XlERASFCxemZb1gDpwKdljv/rNzAGhcf57V+vqV43oQ7z2u9eZt3GgBANF3TgBgvLwNAK/AMjbl1g4aCIDeVxtnsG75/QCoRoNVvSmxdVXtZOfZ/HX6jSP4U2wdADp67Ldaf+zVLOnRHLte3PAIgJsvtQSg3lKjZdvFegcByHajhFWebUOtr5P4PPKyPN77hvX/YYVO/A3A9RfLWa1vNSPW8njzGO2jbbihHV8tOjwGQPHLDkDLN+4DsGVRBUseNTzs2SPtH6Lmr2zV2vZ/LQDwzFMWgKatfrLk2bG5o1Ub/O/42F0fX1KPOTUq7sz5jm3dnj3S/jNu9fYVAEz3rgHgUawSAF6Pblny1Ks0DgCfIvUB8K3wMgANa2qdrnYfGgXEfb4APPwKALD3/HwAGlTTPu81CnUA4PD1n4G41yQ+c337Tk4HoFnbXwDYtX+ow300l5+llnY1wfzZatnjCABblle3pI25q73vjRtp+7hzV79nW7S2tHrrvCWt+iRce1Dc+jhTsmUHwHT/7rM1eSzbzN9bOr/cVuUpftm0WjrvBcAYcceSx/w+x96/8mzNs/aa4o5FAMXL9vOpxjwFwCNnKav1Pvm1Mlp02GlZ9+ScdiuQTyHt82+MegDA1jXae2s+HuK/lweevYfPv/7m19Yjq+3vQ82i2iwDh66ssFofdVXb94Y1tfdA0XvF21rZKu3OvYOIiIggIGAEacHZy6xyiTbzcslMFh4eHnTu3JnOnTu7ojinmS+p2htJ2tfXlyZNmrB+/XrOnDljN7+3tzfe3t6p2kYhhBDCWdKLVjji1CXa9u3bJzntr7/+SteuXenQoQPfffedZfiU1JA7t/YfqKN75woVKgSAySRjeAshhHBfRkVxehGZk1MB3tmzZzEajezfv5+1a9eyfv16Ll26ZJNu2bJlvPrqq+TJk4epU6dy5coVGjRowMOHD52p3qHq1bVT/KdPn7a73TxsygsvvJAq9QshhBBCpCenArwbN25QoEAB6tevT9euXenYsSOlSpWiWbNmXLhwwZLus88+A2D06NGUK1eOqVOn0rBhQ1577TXnWu9At27a/Tpbt24lNjbWZvulS5fQ6XS8+uqrqVK/EEIIkRbMl2idWUTG4qqZv5wK8J4+fcq9e/dQVZXAwEAqV67Miy++yJEjR6hbty5Xr14F4Ny5cwDkz5/fknf48OHs2rWLVatWOdMEu2rXrs1rr73GzZs3Wbp0qdW2u3fvsmnTJgYMGECxYsVcXrcQQgiRVkxOXp41ySXaDOXChQsZY5gU0HrRbt++ndDQUI4ePcqxY8e4desWHTp0sEShT59qvaX0er0lX968ecmXLx+LFi1ytgl2LVy4kAoVKjB06FD27NkDwIMHD+jduzdVqlTh888/T5V6hRBCCCGet3TpUtq2bUuFChUoWbIkJUqUsFoKFy5M2bJlMRgMLqnPqV60er2ezZs3W8aZM8uSJQuzZ8+mSpUqlslz7c3Hli1btlSbozYgIIA9e/Ywfvx4unTpgre3N9mzZ6dLly6MGjUKLy+vxAsRQgghMjAZJsU9TJo0ialTp6KqaqJpFRedVXUqwMuXL59NcGf2+PFjYmJiLD1V7Y2FFxERQVhYmM16V8mePTtfffUVX331VarVIYQQQqQX7T66lAcEcg9e2vj6668BeOONN+jXrx/58+e3e+LryJEjln4EznIqwCtatCizZ89m2LBhVusvXLjAW2+9xYsvvkhMTAygBVvxhYaGcufOHYcBohBCCCFEZuDh4UGuXLlYuHBhgumKFi1KxYoVXVKnU/fgjRgxghEjRlC2bFk6depEp06dqFGjBmXLliVr1qzs3LmT4OC4mR/Cw8MtjxcvXgxAjRo1nGmCEEII8Z8l4+C5h4EDBxITE5OkS7QhISEuqdOpM3gdOnRg6tSpTJo0ydJTFqBz584sW7aMVatW0a+fNp3Om2++SefOnWnatCkeHh5MnDgRRVHo27evc3sghBBC/EcZUTCS8iDNmbwi6SZMmMDhw4dZunQpvXr1SjBt+fLlLVOuOsPpqcrGjRtH165d+f333zEYDNSpU4c6dbT5Anv27EnDhg25evUq9erV48mTJwwfPpwFCxagqiqdO3emY0fHc1YKIYQQQri7ffv2MXz4cKZPn07WrFnJmTOnTZrY2Fj27dvHrVu37JSQfC6Zi7ZkyZIMGTLE7rbChQtTuHBhAPz8/Pj2228ZMWIEly5domXLlq6oXgghhPhPMjk5lp2Mg5c2+vbta5npa9euXWlSp0sCvKTo378/33//PQBlypShTJkyaVW1EEIIkSkZ0WF04nZ6Z/KKpBs3bhz9+/enUKFCFC5cGE9PT5vhUKKiojh79iwREREuqTPVAzyj0cju3btZvHixJcATQgghhPNMTnaUkDN4aeONN97gu+++Y//+/Qmme/DgAUWKFHFJnU4FeEajkeDgYJYvX87Vq1ctM1YIIYQQQgiNXq9nypQpxMbG2h3/zixHjhx88cUXLqnTqQBvyJAhfPvtt2k6MnN6Uk3W04fUKtEHAN8CtQHYuXeQ1d86ZYYCkKVEc5uyvAq+CMDTa9o0ah5ZCzqs17dQfQBCQqx73tQtPyrRNjeqMweAXfuH2t3equ8Zy+PNP5S12ta0+UoAdmxzzaCLz8t/SbsP4VbxRknO09Ej4f9+MoIH+W8+e1QagKvNNlm23cr/kvaglPaneZQ25+A2nzFWZdwtdtfyuOk3+QA4224bAHpjYbv1Xq/6yPK4wN/avR4Vnh1nSvbcAGz+uqjDdm/+LsjquTHittXzbf/XwmFesx2D7a9v1m6j5fH239pabTMfx3+cnmldVrzjrkXnvQA8Or4EAP+67wKwdY322Wg18CIAer/cljw7d2k9+M3H8ZZFFZ5tqUB8B87Pt2lvg2ra8E57jo61v0PxmD/nvkWtj+PtG9tr9bf6SdufzbYdyp4v//nPa6uJTyzbFL02+45Hdu2/+3pLjQDse12bAvL598+ezV8WevZI+9vyjb9sE72qtVO5Gm61Wnl4DwC9f16bLOZ9e35fLe9LvDxNmmjvoVep2lbtNuf1yKN9OGJuxX03eeXSvpueXtG+Mzz9rc9wKJ7aa6PzymbTtmZtfwHi3o8ty6sDUKPQdJu0h66ssFkHEH3vBABHbm1ItPy0ZkKHyYnLrM7kFcnTooX2HRoTE8PBgwe5evUq/v7+VKhQgWLFilnSmUcfcZZT7+yKFdqHYeLEiVy9etUyc8Xzy5EjR/D09HRJg4UQQgihkXHw3Mvs2bMpVKgQjRo1olevXrzyyiuULFmS2rVrs2PHDpfW5VSAlz17dvLmzcuHH35IoUKF0Ov1dtNVrVqVVq1aOVOVEEIIIYTbeuONNxg5ciT37t1DVVWyZMlCgQIFyJMnD0eOHKFFixZMnTrVZfU5FeCNHDmSx48fYzAYEk0bf0YLIYQQQjjP3IvWmUWkvsWLF7NkyRJKlSrF119/zZUrV3j06BHXrl3j1q1bPHnyhHXr1vH999+zdetWl9Tp1Dv77rvv0r17d8skuglp1qyZM1UJIYQQ4jkS4LmHefPm0aVLF/766y8GDRpkGR/YzNvbm/bt27N+/Xo+++wzl9TpVCeLxYsXU69ePebNm4fJZCJXrlw2aWJjY/njjz+4e/eunRKEEEIIITK3CxcusGXLlkT7I1SuXNkl05SBkwHe559/zsmTJwE4ePCgw3SqqmaKXrRCCCFERhKr6IlV7N//nrT8iY+CIZyXP39+smbNmmi60NBQbty44ZI6nQrwJkyYQKdOnahTpw7FihVzODLzsWPHuHDhglMNFUIIIYQ1E4pTl1lNyMmXtFCgQAGOHTtG1apVHaZ59OgRr7/+OkFBiQ95lBROBXgdOnSgRYsWbN68OcF0UVFR5M1rO3aSEEIIIVIuFh2xTgR4zuQVSffee+/x8ssvExwczKuvvoq/vz8A0dHRnDt3jhUrVrBo0SLu3LnDDz/84JI6nZ6qbPr06QmOzHz8+HHKlSvH6tWrna1KCCGEEMLttG7dmoEDB9KnTx90Oh0BAQEoikJYWJgljaqq9OnThzfeeMMldTodulerVi3BaTeyZctG48aNqVKlirNVCSGEECIeI3qnF5E2Jk6cyKZNm6hatSphYWE8ePAAVVVRVZUCBQowb948l529AxecwXvw4AH79u0jPDwck8lktc1kMhEaGsqJEyfo1atXopdyhRBCCJF0seiJdSJIi8WUeCLhMi1btqRly5ZcvHiR06dPExkZScmSJalatSo6nWsvlzsV4B0+fJhWrVoRHh6eYDpVVTl27JgzVQkhhBBCZAolSpSgRIkSdrfdvXuXPHnyOF2HUwHe5MmTefz4MY0aNaJQoULs2LHDMpmu2e+//07Hjh3p1auXUw0VQgghhDXpZJH5VKpUidu3bztdjlMB3qFDh9iyZQuNGzcGYNq0aTRq1Ij69etb0ixcuJBdu3ZRu3ZtpxoqhBBCCGsmJ++jM8klWpfatm0bv/zyC/369ePFF1+0rF+8eHGieWNiYti5cyf37t1zSVucCvCyZs1qCe4A+vbty9ixY60CvF69ejF8+HDmzp3Lu+++60x1QgghhBAZVpcuXQgPD+fo0aPs27fPsn7atGlJGg/YlRNDOBXgBQQEEBoaapmiLH/+/Kiqyp9//mnpNavT6fDw8GDmzJkS4AkhhBAuFKvq0atOdLJQ5QyeKw0bNozVq1czaNAgq/UDBw7kf//7H02bNiVv3rx2pywzGAwcPHiQS5cuuaQtiqqqKZ6nZNy4caxatYqGDRtStWpV3n33Xc6ePctLL73E3LlzKVKkCLNmzWLRokVkz56dBw8euKTRaS0iIoKAgADCw8MtgxPGV7f8KAD0PjkBiA7Vpm9T9N7ael/bOXr/OD0TgPqVJwOw9/gkAGoHDQTgwPn5Lml701Y/AaAaIrW/MU8A2LlXO/havvGXJe2WRRWs8jZr+wsA2ze2d0lbMqtHh+oBkK2m9t/aTNoBMIrfHOZ5KVp730fHaGkaZj3sMG3+i3sAuFWigdX6OstjAdjfQ/s/rfmcuI/ytqHaf4Ct+p4BYPMPZQFo9pW2ffs72t/Wo0ItedQcAQD89fJZAG5UrAhAozpzrOrdtX+o5XHj+vOAuOPJkWbtNloe63y1z9DWNfUdJbfRtPlKAJ5c3ARAtoo9tTbHPNXK9NHKVI0xljyKl6/delq/d8vq+aYv8tvU1+rtKwCEbRgDwKErKxy2zbxv239ra7Xe/Nr41O4EQNTh/7Ns27mrn8PyrNo6Nq4D26bggCTlie/FDY8AyLvsHACP2lUG4o6Z1iPi5giPOXsAiPu8lwnRtp1tot3sbf4u2bG5Y5LrNx9fm2bGfQc2f2UrALrs2uuuRj7U/hq091KfsxAQd8xC3HsWuX8ZALsPad+55mPTM4+Wdtv/Wd8DHl/Dmtp3rqL3AqyP46QyvwZR1/db1pm/y+NL7DfDFcx1DH3YBW9/rxSXEx1hYE721anaVgFhYWG89dZbrF27NsF0kZGRFChQgIcPHzpdp1Nn8MaMGcOGDRtYtGgRK1eu5O2336ZMmTK8/fbbtGvXzuo0Y4cOHZxurBBCCCGEuwkMDGT48OGJpsuSJQvLli1zSZ1OBXhPnz5l4MCBZM2alYoVK6LXa6eJR44cSfbs2Zk3bx4mk4lWrVrxwQcfuKTBQgghhNDEokfv1Dh4MtBxWpg3b57NZVt75s6dyzvvvOOSOp3qH92yZUveffddtm3bZjNTRb9+/Th8+DBHjx5l+vTpZMmSxamGCiGEEMKa8dlAxyldZCaLtPHZZ58lKV3Xrl2ZNm2aS+p0KsAzd+Vt317u0RJCCCHSWqzq4fQiMo5Hjx65bLoyp97Z2bNn88477/DKK68kmjYoKIjz5887U50QQgghRIa3Z88eRo0aZTkRduPGDYczV5hFRUVx9+5dChQo4JI2OBXgdenShfz58/POO+8wcuRISpcubZMmKiqKH374gYsXLzpTlRBCCCGeE4sendyDl+E0aNCAkJAQ3nvvPRYsWICiKFy+fDnRfHny5GHevHkuaYPT4+A9fvwYgAULFrikQUIIIYRImlhVj86pcfAkwEstWbJk4bvvvqNgwYIsXryYkJAQh2kVRcHX15fcuXO7rH6nAry33noryTcOumpkZiGEEEIId/Hhhx8SFhZG0aJF07RepzpZDBs2jBw5cvDPP/8QExODyWSyWYxGI1u3bpUATwghhHCxWHRO9aKNdS4MEEn0xRdfJJpmzZo1rFy50mV1OnUGr1ChQrzzzjuUKlXKYRpFUWjWrJkMdCyEEEK4mNHJnrBG1ejC1ghnvPbaaxQoUIDIyEj69u3rdHlO94+ePHlyktKtXr3a2aqEEEIIIdxObGwskydPZuPGjYSHh2MyWc8BbDKZePjwIREREYwdO9YlAZ6cmxVCCCHcVKyqd3pJKYPBwIwZMyhdujQlS5akUaNG7N69O9nl3L59m4EDB1KiRAmKFy9O165duXr1aoJ51q5dS40aNShRogSVKlXi+++/d3kd8V2/fp3AwED69OmT5DzxTZ06lWnTpvHnn39y8eJFLl++bLVcvXqViIgIABo3bpyiOp4nAZ4QQgjhpox4OL2kRHR0NK1bt2bJkiVs3bqVf//9lyFDhtC8eXPWrFmT5HIuXbpE9erVCQsL4/Tp01y4cIECBQpQvXp1zp07ZzfPuHHjePPNN5k5cyYXL15k9erVjBs3jqFDh7qsjvhUVaVv3748fPgwyfv1vJUrV9KuXTt27tzJ+fPneeWVVzh69CiXLl3i0qVLXLx4kU6dOvHrr7+yatWqFNcTnwR4QgghhEiW0aNHExISwsKFCylSpAgAnTt3plOnTvTp04dLly4lWobRaKRz584YDAYWLlyIr68ver2emTNn4uPjQ5cuXYiJibHKs379eoKDg5kwYQKNGjUCoEyZMkydOpW5c+fa3A6Wkjqe9/XXX7N///7kvDw27t69y+rVq2nYsCElS5ZkwIAB7N69m6JFi1K0aFGKFSvG9OnT6du3L1euXHGqLjMJ8IQQQgg3lR6XaC9fvsxXX31FuXLlqFmzptW2Xr16ERkZydixYxMtZ8WKFRw9epTOnTvj5+dnWa/X6+nevTsnT560GmPXZDLx/vvvoyiKzaXSHj16oNfrGTFiBEZjXMeR5NbxvPPnz/PJJ58wfvz4RPcnIUWKFMHHx8fyvHXr1mzYsMEquCxVqhQ+Pj68/fbbTtVlJgGeEEII4aZiVZ2TAV7yw4BVq1YRGxtL3bp1bbbVqlULgHXr1nH//v0Ey1m2bBmA3XJq164NwHfffWdZd/jwYc6fP0/JkiXJkyePVfqsWbNSvnx5bty4wcaNG1NcR3xGo5E33niDzz77jHz58iW4L4nJkycPs2bN4sqVKxgMBhRFoVOnTrz//vuWNCdOnODmzZvs2rXLqbrMZJbhZGra6ifL4x2bOwLwx+mZSc7fsKZ1Ws9A67npPPxs56CrU0a7r2D/2TkANKqj/dX7aQf4jm3dAGjSZElcuUWqWLXREUXv+L+37RvbWz2vvUr7T8P7Udxhs6u/Nr5hq8lPAdg8ydcqT4vZquXx1mHP0s6IBeBk130A3CqunWbPf2mX1fOEzKQdAKP4LdG0STENbRif8fyc7LzZau6zeh4SXQOAUd62aV+K1nqdb/CepK0w/32m8DHtfpAmL35jWXerxGyrNOW3hAEQUzAagIYL8wIQUTwyXirtP1XTI+sv2O3vaH9bTdfey80zc1m2tXzjLwBujKsIQIsOOwHYtV87/hrXt50+Z+feQTbr7FH0npbHW9fUB6Bpc228p9iI6wDsPjTKYX7PktpZgoPPjvXnmT+XnkUqWdZt/i7IKk2ztr8A8O+HFQC4XLOEVV6I+7xs/lobkLRRnToANG6k/Ye/c1c/m7o98hS3et6i6wEt7bPXpmWv41rb8thO5dhyltaTTol51qPu6g0ATC9ol7yUXNls8iRHvmNeAGxeXh2Ayr8+MbcagE2fxf1ItnqrLAB1lmufz7M9tG1V12vHVa7mr9qUb06bdZ22z+i0creu0n44N8U7vsz0+UoCoEZqN5Sbjwfz+4NeK6PVQNvpLZ8/RkwGbX+MEbdt0jrKW6/SuETTmr9LQ0J6Wa2PvLgFgAPn59vkSegYSU1GPFCc+ClPyT14GzZsALA7t2qOHDkoWLAgN27cYN++fbRv394mDUBkZCQ7d+50WE7Fitr30J9//snDhw/Jnj17gvWa85w8eZKQkBBefvnlFNUR38cff0ypUqXo2LEjP/74o906k2rs2LE0b96c999/n/z583P16lX69etHrVq1qFGjBkWLFmXz5s2YTCaKFSvmVF1mcgZPCCGEEEn2559/AtpYuPaYA6Xjx487LOPMmTNERUU5LMdchqqqnDx5MkX1pqQOsxMnTrBw4ULmzp3rcB+So0mTJixZsoRKlSpRt25ddDoder2eNWvWEB4ezs8//8yTJ0/ImjUrs2fPdkmdcgZPCCGEcFNGVY/ixFAnxmd5zUN0mHl7e+PtbXsZIioqyjIH/fNnvMwCAgIACA0NdVjvvXv3LI/tlWMuI3455jxJrTcldYA2/Msbb7zBt99+a5XGWT169KBHjx5W64oXL86pU6fYtm0bJpOJOnXqkCuX7ZnvlJAATwghhHBTsaoenAjwzJ0sChcubLV+0qRJfPjhhzbp499XlyVLFrtl6nTaxUHz2TN7EivHXEb8csx5klpvSuoAmDhxIk2bNqVJkyYO2+9K3t7evPTSSy4vVwI8IYQQ4j/u2rVr+Pv7W57bO3sH4OXlZXmsqqrdNAaDAdDux3MksXLMZcQvx5wnqfWmpI4//viDjRs3cujQIYdtd8ahQ4dYtGgRR48e5eHDh2TLlo2yZcvy8ssv07FjR6ug01kS4AkhhBBuyqh6oDg1F62W19/f3yrAcyRHjhx4eXlhMBh48uSJ3TTmAYETutQYv1fqkydPbC6Fxh9U2FxOvnz5+Pvvv5Ncb3LrePLkCf3792fp0qVWQ5q4gslk4p133uHbb78FrAPOo0ePsmzZMsqXL8/KlSspV66cS+qUAE8IIYRwU666RJtUer2ecuXKcfz4cW7evGk3zZ07dwCoXLmyw3IqVKiAoiioqsrNmzdtgi9zGV5eXpQtq/XwrlSpEjt27Ehyvcmt4+eff+bMmTNUq1bNYbsXLVrEokWLKFq0KJcvX3aY7nnTpk1j/nyt93X+/Pnp2bMn1atXJ0eOHNy7d4/z58+zYMECGjVqxOHDh13Sk/Y/1Yv2t99+Q1EUp7s7CyGEEP9VrVq1AuD06dM220JDQwkPD8fPz48GDRo4LCMwMNAySLK9ci5cuABAw4YNLQMUJ1Rv/Dxt2rRJUR1Zs2aldOnSdhfz2UB/f3/L3LvJ8f3336MoCi+//LJl8OQuXbrQvHlzunfvzsSJE7lw4QIvv/wyH3zwQbLKduQ/E+Ddv3+ft956K72bIYQQQriMSdVhVPUpXkwpGOi4X79+6HQ6du/ebbPNPKVXx44dHd7HZzZgwACABMuJ3+u0efPmFC9enDNnzlj1kAXtcuuZM2coXry4ZQDj5Nbx2muvcfbsWbtLcHCwVZrt27cnuG/Pe/DgAR4eHixdutRhJxFPT0++/PJLQkJCklW2I/+ZAG/QoEGWrt1CCCFEZmBUPZxekisoKIgBAwZw6tQpm7HuFi1ahK+vL5MmxQ3iHhISQq1atZgzZ45V2l69elGxYkVWr15t1YvVYDCwcuVKKlSowOuvv25Z7+HhQXBwMCaTyTJDhdnSpUsxmUxMmzYNfbwB/JNbR2pp0qQJefPmJVu2hAcvz5Ili1XnkPhiY2OTVed/IsBbtmwZd+7c4bXXXkvvpgghhBBub+bMmVSrVo1Bgwbx4MEDVFVl7ty5/PrrryxevNhq5ohZs2Zx6NAhm/lcPT09Wb58ObGxsYwYMYLY2FgiIyPp27cvJpOJtWvX4unpaZWna9euDBw4kKlTp1oGJ96zZw/jx49n+PDhdO/e3ek6UsOcOXNQFCXRacj++usvm2nYzJJ7X16m72Rx48YNxo0bx86dO5k8eXJ6N0cIIYRwGaOTnSyMKczr5+dHSEgIEyZMoHr16uh0OipUqMDhw4epVKmSVdru3buze/duevfubVNOhQoV2L9/P2PGjCEoKAhPT09atmzJiRMnHAY633zzDRUqVKBbt25ER0eTN29eFi9ezCuvvGI3fUrqcDWdTseaNWv46KOPAG2A4/gMBgNnzpxh1KhRTJw4katXr1pt27JlC7du3UpWnZk+wOvXrx+TJk2yeTGFEEIId5deAR5AtmzZmD17dqJTa/Xs2ZOePXs63B4UFMRPP/3kcPvzFEVhyJAhDBkyJMl5klvH8/r06UOfPn1SnL9u3bqWAG3jxo0JprUXCKdEpg7wvvnmG3x8fOjbt296N0UIIYRwOZOTU5WZnMgrku69995j9OjR+Pr6kitXrmQNaBwTE8OdO3cwmUzJqjPTBnj//vsvn376KQcOHEh23ujoaKKjoy3Pn5+jTwghhBAiqQYNGsTXX3/NyZMnE+1oYc+5c+eoWLFisvJkyk4WJpOJ3r178/nnn6fo+npwcDABAQGW5fk5+oQQQoiMwOjkMCnGFAyTIpIvW7ZsTJw4MUXBHUDp0qVp0aJFsvJkyjN4n3zyCWXKlHF4w2Vixo4dy4gRIyzPIyIiLEHejs0dk1xOrRJ9AAjs/LllnUeg9b2AISG9AGjW9hcAFL1t92hP/yJWz3ftHwpAg2rauDyNGy0AQO+X25Jmy6IKANSrNE7b5pPDqnxzGdH/xO/Ro40W3qyddn9A1NW9AGTpOw2AA8Mc9zTaPMkXgFYztG7cm8doh9bWYYpt2jHmw66R1fpc5yprD+K9RObyrgxcBcDZQO0+jlH85rAtF69oYyCVKJrw2dtv1WaWx+MV6zGN1C+0qWI+GPUPANNiHHdPn0k7qza94qWNt5T/7GEAOpeeZ0m7wXuB3Txm16qWBiBq92HLuoIlfwfA9FQbhf1Wy7rWDXj2Mlb/Oe5SS+Vftal88mTJDsQdI95ltMmzldzmYyXuPX3SQnv/W48KBWDrz42tqtm5dxApte3/4r6YWvY4AsCObd0SzNNqYtx0RJvnaz3ymjRZAsR9bloNvAiAZ0HbqX3Mx/H239oCoPPTPgOXa2pltR5xV2tHvM/083m8imiDpG5dpR1TLXsdB0DJFhjXth+0163V9BirtGZbllTW8n5qtKyruj4SgGMjtfGwWn2k5d38ddHn9sL281NnuXYs+l/Wpjo62/IyAGW+jjtGY6tpbdo+QRuHrODpE1qeLAUBaD5Hq/dWmYeWPAWfhGtpzsc8W6N9TnOf0o6rmzW0YabqLc1qyZM1VNumNqgHQFSA1qaGC7W/u9+0bb+prPYB19+xvjLiWUZ73TZ9ZvtPeau+Z6yeN22l3Uvllf/FZ4Xafj7N34/mNOb31Kx+Za3TXdSduDlHj9zaAMQdX7WDBgJw4Px8q7/27NzVz+G21GRS9SgmuUTrDt58880kpRs3bhzTp0+3Wb9hw4Zk1ZfpQveTJ0/y448/JnrTZ0K8vb0t8/IldX4+IYQQQogHDx6kOO8///zD559/nnjCJMh0Z/C++OILzp07l2BQ9uabb/Lmm2/yxhtvyLRlQggh3JbJyV60cgbPtVq3bs3WrVt57733+Oyzzyzry5Qpg8FgSDBvTEwMt2/fTnZnCkcyXYCXJ08eSpcubXfbrVu3iIiIIF++fAQEBJA/f/40bp0QQgjhOiZVB07cR5eSqcqEY+fOnUNVVc6dO2e1vkqVKqxatSpJZSiK7a0NKZHpArzg4GDLnHHP69OnD4sWLSI4ONip8WyEEEIIIZ73xx9/sG/fPlq2bGm1/u233+bYsWP88MMP5M2b1+7sGQaDgZCQEN5++22XtCXTBXhCCCHEf4Wq6lGduMzqTF5hK3/+/HTq1MlmfYMGDWjfvj316tVLMH9QUBArV650SVskwBNCCCHclMmkB2d60TqRVyTPp59+mqR0O3bscEl9EuAJIYQQQqSTq1evcujQIQoWLEidOnVcVu5/KsD78ccfpdesEEKITENVdahOdJRwJq9Iuvhj62bLlo3Jk7VxGL/66itGjBhBbKw2lmObNm1Yt26d3Xv0kkveWSGEEMJNmUw6pxeR+mbPns3y5cupWrUq48ePB2D//v0MHTqUmJgYXnvtNb744gvu37/PrFmzXFLnf+oMnhBCCJGZaGfwnOlkIQFeWvnpp5+sOlkMHz4cgJ49e7JkyRLL48aNGzNmzBin65N3VgghhBAiFeXKlcsquNu8eTOHDh0ia9asVgMiBwYGOjUTRnxyBk8IIYRwV04OdOxUXpFkuXPnJiYmBk9PT4xGI2PGjEFRFN577z1y546bR/7KlSvcvHnTJXXKOyuEEEK4KdWkc3oRqa9ly5b06dOHjRs30qFDB06cOEGBAgV4//33LWkMBgODBw92WZ3yzgohhBBCpKKpU6cSGRlJu3bt+PXXX8mbNy+rVq0ia9asAHz33XfUqFGDTZs2uaxOuUQrhBBCuCsnBzp2Kq9IMj8/P9atW8f169e5e/cu5cqVw8fHx7K9atWq/PDDDy6tUwI8IYQQwl3JPXhupVChQhQqVMhmfbVq1VxelwR4yVSnzFDL4/1n51htq1t+FAAmwyMADl78EYDWo0ItaXZs7mhVjs5LOz277+T0Z2XsBqBJkyWWPDrfQACatvrJqgxFrw2EuHNXP4ftNRkeAxATfgmALIUbWSfQ2w6maHpyHwBP/yJaklsPtf0YEQPAps/yWNK2eus8AJu/C9JWXL3xbEtRABouVC1pvcO1v1uHKQDUXBsNwKFO3gDkvhQAQP5/Dlry3BpTC4Ait/2t2vjCfW2uvtrZDwDwz9q4KWDKdaoBwPP/Cy02NQSgt057jQco25/fdQvlvb8BmPae9frTt2taHk/LpZW33OM3AH6K1UYgfzNE279JJaMA+HTnmbgCmmh/3g15YPXcrODpEwAczRP3unldKwtAqQPaa8ow6zytP9COtyNTs1nWldqrvQ/58hUEwKfAs7kRTSYANj1L22ryU0uefZN8AWjw+XcANG1eHADFR3vto68fBmDv8Uk8r16lcQBcWfI6ANdfLGe1vVXfuNdgy/LqVtsa1pwJwO5Do6zWR21dEJf/egsAPAILP2vbs7kanx2/HjmL2pTdrK1Wp/nzp8tRwKp883HcoFqwZZ1X/hetd8wUa/V0y5LKPK9ljyPaA0/zf+MVtHpHh2lPddoPaPyfUa/oLFZl3Kms1dPyDe3z9NfU2wCU2NHUkuZS1dMAVDylfS43BT/7vFy4p5XxWlzbj7+s/W32lfb3xjvPtpXX/pRFe02y1Pwpbt9aDtTa/ex4enGD9jcfXgA8qhoCgO/uNpY8W4d5W+1H02+0Y3/Hs9uIqq6PfLa/cd8zB4aZH2vtb/X2FQAMlYtalWV5/YDNP2ifgRYddmrlP/sONOc13viH5+05OtZmXXweAdqP7BE7x7P5+1nRW++f+VhJrGwhkmP58uX88ccfFCpUiLfeeoucOXO6pFwJ8IQQQgh3JZdo3ULVqlUB8PDwoGnTpsyYMQOA7t27s3r1alRV+6f+m2++4fDhw+TJk8dhWUkl52aFEEIId6Xq44K8lCxODJIsku748eP4+vqyatUqS3C3ePFiVq1ahaenJ3PmzOHkyZO89NJLfPDBBy6pU87gCSGEEEKkIkVRWLlyJYULa7eZxMTEMGHCBBRF4cMPP2TIkCEAzJkzhxdffDGhopJMAjwhhBDCXZkUcGYsO5PiurYIhwoWLGgJ7gAWLFjAtWvXKFq0KCNHjrSs9/Dw4Pbt2y6pUwI8IYQQwk0pJj2KE/fROZNXJF1gYCB3794lT5483L17lw8//BBFUZg0aRKennGdkPbt28fDhw9dUqcEeEIIIYSbUlQ9ihP30TmTVyTdoEGDaNq0KW3btmXt2rXcvXuXOnXq0KdPH0uaixcv0rdvX5fVKQGeEEIIIUQqGjx4MAaDgblz5xIaGsrLL7/M/PnzLdsHDhzI+vXriYyMJEuWLAmUlHQS4AkhhBDuyqRz8h48GUwjrbz33nu89957drfNnz/fKuBzBQnwhBBCCDcl9+BlPuZ79ZwlobsQQgghRAZRqVIll5QjZ/CEEEIIN6UY9ShGJ87gOZFX2Nq2bRu//PIL/fr1sxrPbvHixYnmjYmJYefOndy7d88lbZEATwghhHBTOpMOndyDl2F06dKF8PBwjh49yr59+yzrp02bxoULFxLNr6oqiuKasQklwBNCCCGEcIFhw4axevVqBg0aZLV+4MCB/O9//6Np06bkzZvXauw7M4PBwMGDB7l06ZJL2iIBnhBCCOGmFJPOyU4WcgbPlSZOnMjEiRNt1r/55pv88ccfrF27NsH8kZGRFChQwCVtkQBPCCGEcFOKqnMqSFNUCfDSQmBgIMOHD080XZYsWVi2bJlL6pR3VgghhBAildWrVy9J6V566SWX1Cdn8JKhaaVBePrkcrjd+DQUgIMXfwSgfuXJAMQ+uWlJU3+bdupV75NT++sbaFWGX7lXAdi6pn6i7fEuWtvhtur5tQNE0XsDcPj6z1Ztimt0jOVhvUrjANB5ZgNgz9GxALTqewaAzT+UtalHNUQD0KLrAa24+5efbSkKwO43Hd8sGnjmWcoj57V6Bn4OwOOfP7ekKXX3BgCxxbT9aPmpEYAsAx8DsPVKRwBudY27n6FieFUAGnhq5VwMKwPAjYK7ASh+7ycALuXuaMkzjQ5WbRvPz3bbXPrPuP+JlreZadV+Q84ZADTOq72OpyJHA+Dd5A9LnmJ31wPwVV1tPwIiagAw+I9tAPxaoz8A7/i3tOS55FlMq8fj/LM1QVZtUj21j3H1n6Ms655UuA7AlZYlAcj3r3aceUSqVnk3T/K12UefUk0A2LpKO75avvEXALq7f9ukNTM+vQ/A9RfL2d0e/9hpPUr7nGyaqX2Wdh8aZTePV/64oQLi8mt/zcebLmd+bfvXRW3bFKF97vT3rCfubv3BIwBi8lsf51Zp3rsFxH0Om32lrd/+jp2GVqmitSU0AoBG36vP2p9dK2OY9hkouz3UkiX/P9rxWuDvYwDkbHgCgBverwJQdI92zEZlM1jy1C6zEoBHuT4CoM7yWABu9airJSgV16Saa7XP5b0uvz1box3rux9rx1uRXTu1tU1Xx9uRgQBEF9Fel9AipwB4HKjth/G69tq37tTbkqPV5B+BuONIF6M+ew207beaHgWgxB91LXk6xozXyn1vAACGytp7d7dY2LMU2rFqyhMQV88Q7XjWl6igteHZe6g+1HobRl8/AkCLDnHfAyZDpJbHXxtPbMvy6gB4+hcBYOeufgA0bfWTJc+OzdrrtP/sHOyxd6ykN51Jj86ZsexkHLxUZzAY2LRpE7t27eLixYtERkYSGBjICy+8QLNmzWjUqFGq1CsBnhBCCOGmtHvwnLhEK/fgparvvvuOSZMmcefOHbvbp02bRvny5Zk9ezZNmzZ1ad3yzgohhBBuSjHq0TmxyDh4qcNkMvH6668zaNAgbt++jaqqDpe//vqLli1b8tlnn7m0DRLgCSGEEEK40AcffMDy5ctRVZVixYoxY8YMDh48yL179zAYDNy/f59jx44xe/ZsypUrh8lk4n//+1+ivWyTQwI8IYQQwk2ZBzp2ZhGudfXqVWbNmoVOp2P8+PGcP3+e999/nxo1apAzZ048PDwIDAykcuXKDB06lL/++otZs2bh4eHBiBEjMBgMiVeSBPLOCiGEEG7KfA+eM4twrZUrVxITE0NwcDAfffQRen3il8GHDx/OwoULuX79OqtWrXJJO+SdFUIIIYRwkb1791KvXj3+97//JStfjx496NatG1u2bHFJOyTAE0IIIdyUzqhzqpOFzihhgKudP3+e9957L0V5hw0bxpEjR1zSDhkmRQghhHBTzt5Hp8olWpe7c+cOjRs3TlHemjVr8uTJE5e0Q95ZIYQQQggXiY6OJlcux5MiJMbT0zPxREkgZ/CEEEIIN6Uz6Zy6zCpn8FwvKiqKmJiYFAdqjx49ckk75J0VQggh3JT0os14VFXln3/+SVHesLAw7t+/75J2yBk8IYQQQggX6tq1Kzly5Eh2vsjISJe1QQI8IYQQwk3pjAo6o5Li/KoTeYVjf//9d4rzKopr3hMJ8IQQQgg3Jb1oMx5FUejcuTOlSpVK1n14sbGxXLhwgdWrV7ukHRLgCSGEEG5KZ1LQmZw4g+dEXmFft27dWLZsWYrz+/r6uqQdEroLIYQQQrhI/fr10zW/mZzBS4YdJ+fRsprt1CPN2v4CgN5XG/emXqVxAMQ+vgnAwYs/2qTdvrG93TpiQy89exT3BjeqMweAXfuHAtB6VCgAW9doaVp02Kk9/7mxJc+RWxusym1YcyYAe49PslrvXb6l5fHO+SWstrV+7xYAm38oa7etAEq27Fq7b/wFgEf+MgC0mhGrbQ+L6+5tuvavtq5sRQBu1ogCIPfVwlo9DAfgSidvS57yW7IAcKHQs3Y+e/nzX9HaWmZbA23FgLg2hd4vBcB9z2itvojcANTcrz3/peHHAPQ17rTkeUnV9vWaRyAAZbdrr3GbpqMA+Ez5UWtz6bh6ijz7e6V6EADXL/QGoE5BbQTzJfVfB6DS1rhpZxRF27f+Nz8B4FbxRgDkbPQpAFV9DwPwE7bM9eS/uEcr69n+3ZzU3E7qWtqfF7Q/tUNjAMgapX3kze/P5jFxXwHmdVtX1QagSZMlAISE9AKgafO/bGppXH8eAAfOzwegWbuNAGz/ra2dNmnUXNmtnj9/fDd/ZSsApidxPclavqHVrfhox4MudyGt/V9qf1tN1AYGfVIy7j/fvXsHWdXTenQYAHera/NCHnvVtm2NvlcB8H1u7kjPq2HPHgXa5DFm0dJu+dh6W/EDl589KgbAmWZx42IVy3YRgKx5n/W0298BgLDy2vv/4Nlls1tFm8YrcRoATbI9y9JDS2M+VgucjSv/0DvacVboxLPPrvYRoGFWrfyGU8wpt1vy1FyrHU88uy/8lfJfAvC1br7VfhU89YHlcckiPtrfP64B8O/QwlZpaz87luLbf7sJADe/Lmq1/oVdWv2thlzXVhTNb9lmfp9bf/Ds+yTyKQBbllcHoEVn7bvE/J0IcceRLl8R4lM8/aye79jc0fLY/D25+5D2uTcfm6rRYLU+vqatfrIpJy0pRueGSTHJTBYuN3jwYKfy9+3b1yXtkABPCCGEcFOKUUFxoqOEM3lFxiahuxBCCCFEJiNn8IQQQgg3pVOd62ShU+UMXmYlAZ4QQgjhpuQSrXBELtEKIYQQQmQyEuAJIYQQbso8Dp4zS0oZDAZmzJhB6dKlKVmyJI0aNWL37t3JLuf27dsMHDiQEiVKULx4cbp27crVq1cTzLN27Vpq1KhBiRIlqFSpEt9//71L6wgJCaFZs2Zky5YNPz8/6taty8qVK5O9b+kpUwd4qqoyf/58XnzxRXx8fMiRIwevvPIKR44cSe+mCSGEEE5TjM4vKREdHU3r1q1ZsmQJW7du5d9//2XIkCE0b96cNWvWJLmcS5cuUb16dcLCwjh9+jQXLlygQIECVK9enXPnztnNM27cON58801mzpzJxYsXWb16NePGjWPo0KEuqWPp0qU0b96cHTt2EBUVRWRkJPv376d79+6MHDkyyfuWVGfPnuXdd9/lt99+IyYmxmXlZuoAb+DAgQwaNIiTJ08SGxtLWFgYv/zyC3Xr1uXnn39O7+YJIYQQbmn06NGEhISwcOFCihTRxhrs3LkznTp1ok+fPly6dCmREsBoNNK5c2cMBgMLFy7E19cXvV7PzJkz8fHxoUuXLjYBz/r16wkODmbChAk0aqSNI1qmTBmmTp3K3Llzbab5Sm4d9+7dY8iQIYwfP55bt24RExPD0aNHqV5dG3Pxs88+Y8uWLSTkww8/ZOTIkQwcODBJsUaZMmWYNGkSixcvJnfu3PTq1SvRPEmRaQO833//nXXr1rFo0SIiIiKIiopi/fr15M6dm5iYGN58801CQ0PTu5lCCCFEiqXHJdrLly/z1VdfUa5cOWrWrGm1rVevXkRGRjJ27NhEy1mxYgVHjx6lc+fO+PnFDUCt1+vp3r07J0+eZMGCBZb1JpOJ999/H0VR6NOnj1VZPXr0QK/XM2LECIzGuNOSya1j+fLlTJs2jSlTppAvXz4AqlatysaNG8mRQxsFfOnSpQnu15QpU/jnn3/44IMP6NBBG8T86tWrdhezXLlysXr1arp3787y5csTfe2SItMGeD/++CNbt26ld+/eZMuWDQ8PD1555RVWrFgBQEREBL/88ks6t1IIIYRIufS4RLtq1SpiY2OpW7euzbZatbRZdNatW8f9+/dttsdnnq/VXjm1a2uzoHz33XeWdYcPH+b8+fOULFmSPHnyWKXPmjUr5cuX58aNG2zcuDHFdXh5edmdiSJ37ty88cYbgHaWLzHfffcdhQvHzeyyZs0a2rZtS/HixalcuTKzZs1i06ZNNvmCg4NRFNf0bM60AV6DBg2oXLmyzfpmzZpRpUoVIGlvkhBCCJFRKSbnl+TasEGbCrNEiRI223LkyEHBggUxGAzs27fPYRmRkZHs3LnTYTkVK2pTWv755588fPgw0Xrj5wkJCUlxHYMHD0ansx8aBQVp00UWLVrU7nazLFmyWM7+mY0cOZKNGzeiqiq//PILX3zxBQMGDLDJmz17dvLmzZtg+UmVaQO8IUOGONyW1DdJCCGEENb+/PNPAAoVKmR3e/bs2QE4fvy4wzLOnDlDVFSUw3LMZaiqysmTJ1NUb0rqSIj5tq5XXnklwXReXl521xcpUoTcuXNTv359u9vN4l9KdsZ/cqDj0NBQvL29ad26dXo3RQghhEgxxaSiGFWn8oN221J83t7eeHt726SPiori8ePHQFyA9LyAgACABO9zj38FzV455jLil2POk9R6U1JHQrZt20bFihVp1apVomkdMd/Hlxb+cwGeubtz//79HR4k0dHRREdHW54/f+ALIYQQGUFKL7PGzw9Y3S8GMGnSJD788EOb9PHvq8uSJYvdMs2XOM1nz+xJrJz4l0nN5ZjzJLXelNThyIkTJ9i7dy87d+50eAk3KVx1f11S/OcCvO+//55s2bIxZcoUh2mCg4OZPHlyGrZKCCGESD/Xrl3D39/f8tze2TuwvvyoqvbPHBoMBiDhs1WJlWMuI3455jxJrTcldTgyfPhwRo8eTYMGDRJM5wrx2+WM/1SAd//+faZNm8aiRYsSfDPHjh3LiBEjLM8jIiJs/rsRQggh0ptidPIS7bO8/v7+VgGeIzly5MDLywuDwcCTJ0/spjF3WMiVK5fDcuJ3Qnjy5InV5dL4ZcQvJ1++fPz9999JrjclddjzxRdfkDVrVj766COHaeKLjo5m4cKFdoPK8PBwh9tMJhMXLlzg2rVrSaonMf+pAO+tt97if//7X6L33jm69wDgwPn5lsd1ymijZu8/O+fZmvYANKw5EwC9T9KvtTeuPw8AQ9iFZ2viBjrctd96dG7DqV0AtOhaEAAlm3Zg1q8cd9Zx7/FJANQopI3B45O3ht36fOp1ddgmw9k/nj3q+Ky+AwBsXVXbksZ47QwAO7Z1A6BZW23oGf3JWC1BjngfsLZa7+V9r+u1tF9pr7E+Uuun739H6/zS6ve4y+PZXshq1ab8V3YAUDXfHgAulqwEwIsb4t6vXHpt3anW2oe51N4bWll3tDTdvLQOOKf1vS157v6tdaHPU07rXv97/WkA7HpcB4DyxsUAbIh3Zr7Qib8B8Mj/DwDzCmn78ehySQBqndFeA+XG75Y8Nwq20fbjotb+iCP1AGhY3foG4JKhcSPB/5urs9U2zywPAagYeOzZvmvDEpx4KRuOPGqlDQ/04ERLAIodym2TZvMY668D73qvWj3X+eUE4t5jgJ17B1mt276xvcM2PF9Py17Hgbjju1k77bXXeWmXUjyLV7PkMd69DIA+p/Y6Kdm0H6IWnfcCsHWNdtNyy1m216paTdcGMd38caDd9pi3A/zTU3tfKjxuopX3qfaexhbT8tZfpJXvdyuunttVHz17ZF2+IVs4AD1iRwGw3GOmZVu+S9o/jNcKaqPoZ6+vjat1M+s7Vm0q1n+9Jc/lPK8CEPKs413Ubu3YKVjvZQDCasbVP5mtACh53gQg/yXtXqRieU4AUMDrDgA/eU6La3BrbaqnQ8/asPuxdnzx7CNo3o96ZfSWLKsrfgxA2e2+ALyvat9bnyhLAMjywBOAkX1rWfK8E66Nj9b0G+25+RLhP+9o3xXV72uXym6WOWHJ02pyWQA2TzUf49pf8/tjfv/NxwOARzltfDb10SPi8yyk9Zxs+cZfAGxZVMGybfehUVZpvV9oqpUR9RhHdmzu6HBbmjCp2uJM/mTQ6/WUK1eO48ePc/PmTbtp7tzRji97I1mYVahQAUVRUFWVmzdv2gRf5jK8vLwoW1Z7/ytVqsSOHTuSXG9K6njerl27WLduHRs3bkSv19tN87ynT5/Sv39/h9sT2uZKmbYX7fOmT59OkSJFGDVqVOKJhRBCCGGXuZPB6dOnbbaFhoYSHh6On59fgpczAwMDLYMk2yvnwgXtZEfDhg0tvUoTqjd+njZt2qS4jvhOnz7NhAkTWLduncP7/hzx9PSkYMGCFClSJMlLgQIFHJ5cSon/RIC3dOlSzp07x+eff57eTRFCCCFcxnyJ1pklufr164dOp2P37t022/bv3w9Ax44dEw1WzOPAJVROjx49LOuaN29O8eLFOXPmjM04tg8fPuTMmTMUL17cMoBxSuow++effxg8eDCrV68mMND27H9CU7HVqlWL8PBwrl69yqVLl5K8XLt2jdDQUOrUqeOw7OTI9AHezz//zPr161mwYIFN7xWj0eiya91CCCFEmjNfonVmSaagoCAGDBjAqVOnbMa6W7RoEb6+vkyaNMmyLiQkhFq1ajFnzhyrtL169aJixYqsXr3aqherwWBg5cqVVKhQgddff92y3sPDg+DgYEwmk2WGCrOlS5diMpmYNm2a1aXU5NYBWnDXt29fli5dajNg8dOnT/nss89YsmSJw9endevWKT4TlyVLFrsBZ0pk6gBv/fr1LFq0iGXLluHhYX1/0e3bt+nTpw8XL15Mp9YJIYQQ7mnmzJlUq1aNQYMG8eDBA1RVZe7cufz6668sXrzYauaIWbNmcejQIcaPH29VhqenJ8uXLyc2NpYRI0YQGxtLZGQkffv2xWQysXbtWjw9Pa3ydO3alYEDBzJ16lTL4MR79uxh/PjxDB8+nO7duztVx8mTJ2nYsCHHjx+natWq5MqVy7IEBgaSNWtWRo4cmWAQ5uw9dolN8ZZUmbaTxbJly+jTpw9Zs2alYMGCVtsMBgOPHj2icOHCLF68OJ1aKIQQQjjJaNIWZ/KngJ+fHyEhIUyYMIHq1auj0+moUKEChw8fplKlSlZpu3fvzu7du+ndu7dNORUqVGD//v2MGTOGoKAgPD09admyJSdOnLCZb9bsm2++oUKFCnTr1o3o6Gjy5s3L4sWLHc4wkdQ6bt68SePGjQkLCwNw2Fu3Zs2alCpVyuFr83zMkRwGg4Hp06czYcKEFJdhlikDvA0bNtCrVy9UVbXqBv287t27p+mgg0IIIYRLmUza4kz+FMqWLRuzZ89m9uzZCabr2bMnPXv2dLg9KCiIn376Kcn1KorCkCFDEpySNCV1FChQgAcPHiS5TEe2bdtG8+bNU5T3p59+knHwEvLSSy9hcuaAF0IIIdyByckzePJb6XKvvPIK4eHhNreGJSY8PJz333/fZe3I1PfgCSGEEEKkpadPnybYCcMeg8FAhw4duHHjhsvaIQGeEEII4aYUk8npRbje6NGjkzxKh9FopEePHuzcudOlbZAATwghhHBX5k4WzizC5UJDQ2nTpo2lw4YjJpOJ3r17s27dOodz7KaUBHhCCCGEEC7i6enJypUrCQoKolmzZg47e6qqSt++fVmxQptK8oMPPuD48eN4eXm5pB0S4AkhhBDuytyL1plFuNSrr75Kly5dWLduHQ0aNKBp06Z2g7yBAweyePFiFEXhgw8+YMqUKVSqVIlFixa5pB0S4AkhhBDuymgCo9GJRQI8V1u1apXl8RdffEHdunVp3rw54eHhlvVDhgzh+++/R1EUhg0bxuTJky3bunTp4pJ2SIAnhBBCCJFKvvzyS8qUKUPr1q159OgRw4cP5+uvv0ZRFN566y1mzZqVKvVKgCeEEEK4K7lEm+GMGDHCZt2PP/6Iv78/ZcqUsczJ261bN+bNm5ek/CmhqK7utpEJRUREEBAQQHh4OP7+/pb1zdptBGD7b22t0jdutMDqud4vt+Wx8ck9AHbu6pfsdrTosBOArT83tr+96wHLYzXqEQDb/q+FVVs9ipQHYPPXRQFoPeKuTTmx/54AwBQVAcCOzR2ttrfsddzyWPHx08r7LijR9recpX2RKOFPtTxTtLxNvtW2hwzQ/jZcGHdI3i/4EICwQpcAyJr3HwBizte2KjvGN9Ly2PNpFgC8n/0920SbiqbVRG3amVMD9gFws1BLmzYOML0NwL4IrfyoWF8A/s3V2SZt+YfaNHeF5mlzEm7KVRWAEhV+AeBS7WIAzCbu+Mhu0to569EbAPjqtef3nmoTWl/Krb3WJUPXxO1brA8AV/O9DEC1R/MBuHu+MQDXqpa2aZv5NT3XZhsA/he0qYPMr4VZ6w8eWR5vmpoNiHt/tyypbJXW3vHXrK22rx4Fy2orihQBYPMEbaLt5nO093LbUNsZY1q9fQUA0+1LVuWa6zcfWxB3fJnL05/W8lCooFV9tVfFWPIE7LoJgPoozGp/ym/Rnhs9tbTxX5Oy20O1vKEBANwpqo1JVXqFVr6aN5fWttC4nnF/vaHlKXFMew12v6nta/6zh7X6im3XXgOfMZY8xQ9c1v7+WQyAM613AVD0UF0ADnTV5sbcG1HDkqe+v1Zegb+PAXCzXFXiqxzxveXxu9m0idhXG7TR9C8d0L5vYsppx/7UHLMB6KnfgyM/mhoD0Ee302p9mbC4Sd6z7HoNgFtVtO+eW0WbWqUtdnc9AMrFypZ15s+F+b00eWqv147B2vbexmEALNbPtuR5YddtAIqcyAvYHk8VN2mXviL9IyzrInNoefKf1b7zTHqtvuMv+1nlNX9WIO47yMx8PPlvPKeVUU0rS/841pJm8zjtvaq/SPt+2/uGzuFvhiuZ62g28Bwe3tlSXE5s9CO2zy+dqm39rwkMDOT+/fvodNbn0J48eUKjRo04duwYr776KmvXrrVJExsbS+7cuRPtfZsUmXImCyGEEEKI9BAeHk7fvn3p0qULPj4+VttGjBjBRx99xFtvvWUz7t3Tp09Zt24dERERuIIEeEIIIYSbUk1GVKPRqfzC9ZYsWZLgbBbt2rVL9TZIgCeEEEK4K5NRW5zJL1zOmbvfFMX2lpaUkE4WQgghhLtyaoiUZ4twuR9//JHIyEhMJlOSl8jISBYvXuyyNkiAJ4QQQgjhIvny5aN37942998lxsfHh9dff508efIknjgJ5BKtEEII4a5MJicv0cowKa5mb+iT5Jg/f75L2iEBnhBCCOGujLHa4kx+4VLXrl1jxowZPHr0iKCgIPr06ZOs/O3bt3dJOyTAE0IIIYRwkXfffZfq1auzaNEiypYtm27tkABPCCGEcFOq0clhUqSThcspisKaNWsoWrRourZDAjwhhBDCXZlitcWZ/MKl8ufP71Rwd/fuXZd0tJBetEIIIYQQLpIlSxan8teqVcsl7ZAzeEIIIYS7MjnZyULO4GUo586d4/r16y4pSwI8IYQQwk2pRiOqLuVBmtyD53rXr1+nYcOGyc4XGRnJmTNnMLlo6BoJ8IQQQgghXCQqKoq9e/emOL+rpiqTAE8IIYRwV9LJIsMJDAxk6NChyc73+PFjtmzZwl9//eWSdkiAJ4QQQrgrYyw4cYlWBjp2vRw5cjBp0qQU5f3ggw/Ily+fS9qhqKqquqSkTCwiIoKAgADCw8Px9/dP7+YIIYTIwNLiN8NcR6M26/Dw9EtxObExT9j1+2vy++ZCQUFBnD9/PsX5W7ZsyZYtW5xuhwyTIoQQQgjhIg8fPnQqvyuCO5AATwghhHBbqjEW1RjjxCKXaF3t/v37bN++Pb2bIQGeEEII4bbMnSycWYTLvfrqq4wbN46DBw+mWxukk4UQQgghhIs8fPiQx48f8+jRI3S69DuPJgGeEEII4aZUk3ap1Zn8wrX8/f0zRIcVCfCEEEIId2WMAcWJIM2J4FBkbHIPnhBCCCFEJiNn8IQQQgg3pRpjUZ04gye9aDMvCfCEEEIIN6WaDKgmvVP5ReYkl2iFEEIIITIZOYMnhBBCuCtjDChO/JRLJ4tMSwI8IYQQwk2pxhhUxYlLtBLgZVoS4AkhhBBuSjUZUI0pv9tK7sHLvOQePCGEEEKITEbO4AkhhBBuSjXGoCKXaIUtCfCEEEIIN6UaDahOXIxTjXKJNrOSS7RCCCGEEJmMnMETQggh3JRqMqAqilP5ReYkAZ4QQgjhprRLtE4EeHKJNtOSS7RCCCGEEJmMnMETQggh3JTWi9aZM3jSizazkgBPCCGEcFOqKRoV1Yn8cok2s5JLtEIIIYQQmYycwRNCCCHclTEaVU35GTzkDF6mlenP4BkMBmbMmEHp0qUpWbIkjRo1Yvfu3endLCGEEMJpqtGAaox2YpEAL7PK1GfwoqOjadOmDXfu3GHr1q0UKVKENWvW0Lx5c5YtW0bnzp3Tu4lCCCFEiqnGaFTVlPL8JulkkVll6jN4o0ePJiQkhIULF1KkSBEAOnfuTKdOnejTpw+XLl1K5xYKIYQQQrhepg3wLl++zFdffUW5cuWoWbOm1bZevXoRGRnJ2LFj06l1QgghhPOcuzyrLSJzyrSXaFetWkVsbCx169a12VarVi0A1q1bx/3798mZM2daN08IIYRwmmo0OHmJNtaFrREZSaY9g7dhwwYASpQoYbMtR44cFCxYEIPBwL59+9K6aUIIIYQQqSrTnsH7888/AShUqJDd7dmzZ+fGjRscP36c9u3bW22Ljo4mOjrutHV4eDgAERERqdRaIYQQmYX5t8Kp4UuSKMb4BJNJn+L8RtXowtaIjCRTBnhRUVE8fvwY0AI5ewICAgAIDQ212RYcHMzkyZNt1hcuXNh1jRRCCJGpPXr0yPJb42peXl7ky5ePv28fcbqsfPny4eXl5YJWiYwkUwZ49+/ftzzOkiWL3TQ6nXZ1Oioqymbb2LFjGTFihOW5yWTiwYMH5MyZE0VJ+Zx/aSUiIoLChQtz7do1/P3907s5TpP9ydhkfzI22Z+0p6oqjx49okCBAqlWh4+PD5cuXcJgcH4cOy8vL3x8fFzQKpGRZMoAL/5/Io5OkZs/FDly5LDZ5u3tjbe3t9U6R2cCMzJ/f/8M+wWYErI/GZvsT8Ym+5O2UuvMXXw+Pj4SmAmHMmUnixw5cliCvCdPnthN8/DhQwBy5cqVVs0SQgghhEgTmTLA0+v1lCtXDoCbN2/aTXPnzh0AKleunFbNEkIIIYRIE5kywANo1aoVAKdPn7bZFhoaSnh4OH5+fjRo0CCtm5bqvL29mTRpks1lZncl+5Oxyf5kbLI/Qvw3KWpa9ONOB+fPn6dMmTKUL1+ekydPWm379ddfad++Pb1792bRokXp1EIhhBBCiNSRac/gBQUFMWDAAE6dOsXx48etti1atAhfX18mTZqUPo0TQgghhEhFmfYMHmgdLBo1aoSHhwcbN24kMDCQL7/8klGjRrFs2TI6deqU3k0UQgghhHC5TDlMipmfnx8hISFMmDCB6tWro9PpqFChAocPH6ZSpUrp3TwhhBBCiFSRqc/gCSGEEEL8F2Xae/CEEEIIIf6rJMATIoUuXbrE0aNHMRrdf7Ju84l8OaEvhBCZgwR4GZDJZErvJrjUkydP+Oijj2yGq3FXT58+ZcaMGUyfPp3Y2Fj0en16N8kpkZGRhIeHA7jFXMuJiY2NTe8muJR8HwghUiJTd7JwRwsXLuSPP/7Ax8eHF198kSZNmlCyZMn0bpZT1q9fz6RJk9Dr9RQvXpxs2bKld5OcsmrVKmJiYvjmm2/w8HDvj1BwcDCrV68mS5YshIeHM3ToUF555RXy5s2LqqpuF/B9+umn7Nu3j8DAQKpVq0arVq0ICgoCcMv9ke8DIUSKqSJDOHjwoFqlShVVURSrpXjx4urvv/+umkym9G5iin300UeqoihqlSpV1J07d6Z3c5zy559/qlWqVFH37t2rqqqqGo3GdG5Ryhw4cEAtV66c2rZtW/Xw4cPqwoUL1VatWqmKoqjjxo1zu/26ceOG2rhxY/WVV15Rt2zZovbr10/NnTu3GhAQoE6aNEl9+vRpejcxWeT7QAjhLLlEmwHcvXuXoUOHcvz4cSpUqMA777xD1apVCQgI4PLly8yePdtmsGZ3YL43LSwsjIIFC3LixAlWrlzJ3bt307llKffrr79Srlw56tWrB4BO554foYULF9KpUyc2bNhA9erV6dOnD4sWLaJSpUr89ttv3Lt3L72bmCw7d+7E39+f9evX06JFC77//nuWL19OsWLFmDJlCsOGDSM0NDS9m5kk8n0ghHAF9/x1yiTUZze0b9q0icOHDzNlyhROnjzJ3Llz2bdvHwsXLiR37tzs2rWLv/76yyqPOzAHP0+ePKF+/fpUr16dNWvWsHfvXrfaD7OIiAjmz59PlSpVAIiKikrnFqXMsWPH+Pbbb2nYsCEQtx958+Zl8ODBXLp0iaxZs6ZnE5Nt7ty55MmTB4jbn+bNmzNv3jwUReHbb7/lk08+4caNG+nZzATJ94EQwpUkwEtH5vuB9u3bR7169Rg/fjyg/afr7e3Nq6++ypgxY4iOjmb37t3p2dQUURSFp0+f8uDBA8aPH0+7du148OABixcv5uLFi+ndvGQ7d+4c9+/fp06dOgD4+PgAcPnyZcLCwtzm5v5//vkHT09PoqOjAfDy8rJsy5s3L40aNcLPz88tbu43mUw8evSImzdv2uyPqqrUrl2bqVOnArB06VJWrVqVbm1NjHwfCCFcSQK8dGIymSw/oPnz52fo0KGWL3i9Xm/Z1rVrV4KCgrhy5QrR0dEZ9iZxe8GAyWTC19eXsLAwYmJi6NatG3Xr1uX3339ny5Ytlh/kjPjfu739+eeff4iOjsbPzw+AkJAQGjRoQNOmTalYsSI9evRg+/btad3UJIl/vJUuXZqYmBiWLVvGzZs3rS4zq6pqmeXFHS4/63Q6oqOjiYiI4PDhw9y4cQOdToeqqpbjatiwYTRr1ozbt2+zevVqDhw4kM6tts/c3szwfWCPO38fCOGOMv43eCZw6dIlpkyZwg8//MD69euJjY1Fp9NZfkBVO737dDodJpOJAgUKUKVKFQwGA97e3hniy8/R/jxPp9Px8OFDHj16RMGCBQkKCqJHjx54eXmxaNEiy2Wm9P6RSmx/zK/5zZs3Abh16xazZs3i888/55VXXqFly5b4+Piwdu1aunfvzpw5czAYDOmyL5D48VayZEm6du3KihUr6NatG/Pnz+f06dOEhYURERFB27Zt063t9ty+fZs//vgDwGbMQVVVLT1m7927ZzmzpSgKOp0Oo9GIr68vw4YNI2fOnPz1119s3bqVmJiYNN8PM0f7E/9z4E7fBwm9P/G5y/eBEJlGWvfq+K8JDg5WixQpoo4cOVJt0aKF6uPjo1asWFH94Ycf1NjYWFVVVTUsLEw9ffq0TV5zT7nJkyervXv3zhA95xLaHzNzO00mk/rkyRP11VdfVS9evKiqqqrevXtX7dChg6ooijpx4kRLnpMnT6btjjyTnP0ZNWqUqiiKGhwcrK5YscJq+9WrV9U6deqoiqKoZcuWVdevX5/m+6KqCe9P/OPn3r17auPGja16aJYpU0bNly+fGhgYqDZu3FgdMWKEGhISYumBmh49aw0Gg9qxY0e1RIkSqsFgUFVVtfkcPH36VH399ddVRVHUd999Vw0NDbVbVq9evVRFUdRmzZqpZ8+eTfW225PQ/pj/hoeHu833QVLeHzN3+D4QIjORAC8VXb58WW3Tpo3Vl/WGDRvUwMBAVVEUddiwYeqNGzcSLWfQoEHqe++9l4otTZqk7M+tW7dUVVUtweuFCxfU0qVLW5Xz008/qYUKFVJLliypjh49Ws2fP7/asGFD9fbt22m3M2ry9kdVVXX+/Pmqoihqrly51NWrV6uqqqrR0dGWwOevv/5SW7Rooep0OrV///5qeHh4htufmzdvWrY9evRI3b9/v/rZZ5+pzZo1U/v376/26tVLrVq1qurp6akqiqJ6enqqPXv2VB89eqSqquMf79Qyd+5cNUuWLKqiKOqnn36qqqp1oGluzzfffKMqiqIGBQWpe/bssSrDfCweOHBA9fDwUL29vdUDBw5Y5U8rie1PUmSU7wNVTf7+ZOTvAyEyGwnwUtHYsWMtX2YGg8HyY7JgwQK1dOnSqqIoar9+/RzmN/8wDR48WF2zZo2qqtoPkrmcsLCwVGy9reTuT2xsrHr27Fm1Z8+eqsFgUCMjIy3bOnXqZHX2aPjw4er9+/cz9P5s2rRJzZMnj1q6dGnLGYbnA4TVq1erxYoVUytVqpTmAV5y9yd+2/fv36/u27dPVVUt8Dt37pwaHBysVqtWTVUUxRJQpGVAFBISonbp0kV97bXXVEVR1Hz58qnXrl1TVTXus2Fuj9FoVAsUKKAqiqKOGjXK4WvfvXt3VVEUdfz48WmzE/EkZX8SktG+D5K7P0ajMUN/HwiR2UiAl0piY2PVVq1aqQ0aNFCfPHmiqmrcf7ZPnjxRv/nmG9XPz09VFEVdvny5qqq2P57mL8m+ffuqO3bssNr2+PFj9bffflOjoqJSe1csbUnu/qiqqu7du1etX7++5fmtW7fU/v37W77Ivby81LFjx6bJPsSXnP1ZtmyZqqqqevz4cbV06dKqr6+v+vHHH1v9QJnfu4iICLVv376qoijqmTNnMuT+2Dvexo8frx48eNAqn6qq6rVr19Ry5cqpAQEB6qVLl9JobzRXrlxRVVW7BNulSxdVURR18ODBNunMn5N58+apiqKoOXPmVDdt2mS1H+Y0+/fvVxVFUXv16pWkoMqVkro/jmSk7wNVTdn+7Nu3L0N+HwiRGUkni1Sgqip6vZ6YmBgePHjA48ePgbheiVmyZKFdu3b06tULgLFjx3L37l0URbG6aVqv1xMWFsaTJ08sQ3OY/f7773zzzTd4e3tn2P0BuHHjBi+99BIAU6ZMoXDhwixYsICgoCDat2+PyWTi9OnT/PPPP6m+H87uj3mqqKioKDZt2sSpU6csZZrfu2zZslG9enX8/PzS5L1xZn8URcFoNBIVFcWRI0c4fPiwVb7Y2FgKFSrEwIEDMZlMll6OacU8rp2Pjw/jxo3Dx8eH+fPn29zQb54LuFevXtSsWZMHDx7w7bffcvbsWUtZ5jT58+enaNGiPH36NM3nEE7q/jiSUb4PzFKyP7du3cpw3wdCZFrpGV1mZk+fPlUbNWqkKoqibtq0SVVVVY2JibFKc+jQITUoKEhVFEX96KOPVFW1vbRx9uxZ9e2337Zat3HjRrVEiRKqr6+v+vfff6fiXsRJ7v58+OGHqqpqlywLFCigFi9eXFUURc2WLZs6evRoNTIyUg0LC1ObNWum+vj4qF988YXVGbGMtj+TJk1SVVW7+TtfvnyqoijqwIED1cuXL1vyRkdHq6qqqitXrlSLFStmuW8tI+6P+XhTVe3SXt68ea0ubZpMJkv+devWqTlz5lTv3LmTRntj3/jx41VFUdTWrVtb1j3fQeHgwYNWl/muX7+uqmrcaxEZGakWLVpUnTJlShq33lZC++NIRvk+sCcp78+6desy5PeBEJmRBHgpkNiXsPnS0NSpU1VFUdTGjRvbTffkyRN1xowZqqIoqq+vr6X3X/z7atasWWMJLs6cOaN269bN8gPWsmVLl/zoptb+hIWFqb/88ouaPXt2VVEUtXv37uqff/5plWfBggWqp6enWqhQIfXUqVNO70tq7s/du3dVVVXV2bNnqwUKFFB1Op3as2dPm5vKx4wZo3788cdJaktSpPbxZjAY1CZNmqjFihVT161bZ5Pvf//7n1UPR2el9DW5ffu2WqJECavL5vH/ITKX+/nnn6sFChRQPT091XfffdeqjLt376pVqlSx6YjhjNTaH3t1ZITvA0eSsj8rVqxQc+bMmabfB0L8V0mAlwzh4eFqcHCw5V4lR8xfkFu3blVz5MihKoqi/vLLL6qq2n7hHTt2TK1evbqqKIr6xRdf2JQxY8YMddWqVeqnn35q6dmYI0cOdcGCBRl+f77//nv1wYMH6qhRo9Sff/7ZKp15SIXQ0FC1X79+6rx58zL8/syaNUtVVe0s0IoVK9TChQtbflhnz56tnj59Wh04cKBaq1Yt9cSJExl+f2bPnq2qqvZefPzxx6qPj49asGBBdfHixeqtW7fU8PBwtX///mqlSpXUw4cPp9n+JGTBggWqoihq+fLl1cePH6uqGhfgmv9GR0ermzZtsgQbAwYMUHft2qUaDAa1b9//b+/Oo6I67zeAf98ZBJwAAgqERaJFjYpV49EerZqFREVTl8QWD11MaU9N0LjEtM3RJsbYJG7Npua0EovNH0RIJNHWk8VoSwShVuvSGkWEeIJLFSUSVIZlZp7fH/zmysiwzzB3hudzjifhru/jHF++d+573/sLzJ8/3yXj79ydpyk99QetaSmPvf3l5eX47W9/2y39AVFPxwKvnd5++2307t0bSql2z9FUXFyMGTNmQCmF6dOna7eJml4hV1dXY8WKFTAajXj66ae123xA4zcuycnJiIqK0q7Sf/Ob37hkIHV35LHfSmq63tk3Lq74lqu7Ph/7nHBAY7G0YsUKxMbGIj4+HvHx8UhPT3fYxlvyVFZW4s0330RkZCSUUhg5ciQiIiLw1FNPeSyPM2azGQ899JDDbeaWpuUoLi7Gq6++ioSEBIwbNw7Dhg1Denq6x/79ONORPHrrD5xpT57u6A+IiAVemz7//HMMHz5c61AnTJiAkpKSdu+/YcMGhIaGIigoCNu2bQPQvMPbvXs3goODkZSUBOB2B3fmzBntvDNmzMDZs2e9Mk/TTK7myc/H7tatW7h48aLDHHOd5anPx+6rr75CQUEB9uzZg7Kysq6FQdfzOLN//34opRAWFobS0lIArU8zUlNTg0uXLrVrzsm2eDKPHvsDZ9qTh0UckfuxwGvF0aNHtaklEhISsHXr1nbPNWXvwL788ktMmTIFSimMGjVK+yVjsVi0baqqqjB48GAMGTIEVVVV2jHWr1+P8PBwfPbZZ16bx51zc+kpjyt+Yekpjyt0JU9b7FPR/PznPwfQ9t+/pz+ftrQnj576g7Z09PMhItdjgdeKiooKBAUFYcmSJV26+s/KykJiYqJDh2dnv7JNSUlpNjje/gSgq3gqj7s6d+ZxztfyOFNcXIw+ffpAKYX9+/e79Ngt8XQevfYHznji8yEiRyzwWmC1WlFZWYm0tDTtNkNH2X9x3rhxA3/+85/h7+8PpRS2bt2qTUdRX18Pi8WCcePGaU8qumMCVk/mccc7TJmnOV/L05ZXXnkFSil8//vfR1VVFd566y2cPHnSLedino7rzjxE1BwLvFZUVVVh6NChOHnyJGw2Gw4dOoSPP/4YhYWFKCsrcyjE2vNL8p133kFYWBgCAgLw7LPPamO28vLyMH36dJSXl7stC8A8bWEe13J1nqasVisuX76svYLNYDBgyJAhOHPmjKtjaJin/TyRh4gc9egCz96BOeu87MvmzZuHpKQkTJ48WRs4rFTjC+fnzp2LnJycDp3zP//5D1JSUhAWFoYRI0bgkUceQWJiInJzc5mHeZinAwoLC2EymTBgwADs3Lmz08exYx595yGijulxBZ79NlZWVpb2toWWmM1mJCcna0+Y2eecavqzUo3v9uzIrOv19fUoKytDUVER3n//feZhHubp4FsLSkpKMHjwYDzzzDOdzgIwj97zEFHn9bgCD2iccX3MmDEYN26c0xesN/15+fLlCAsLw9KlS1FUVIT9+/fj9OnTeO211zBz5kwopTBo0CDk5eV1ew475mGe7qSHPGazWRtXyDy+nYeIOqfHFXjnz5/XppHw9/fH4sWLnU4Ia1dUVITi4mKnx6qtrcWLL74Ik8mE5cuXA3DPgPXWMA/zdCfmYR4i8g49qsCzWq34xz/+gT179mDjxo2Ijo5GXFyc9lqn1qaLsNlsWufW9P8rKyuxfPlyREdHuz/AHZjnNuZxP+a5jXmISO96VIEHQJvvqbKyEitXroRSCj/60Y9w9epVAJ27Qj127BjmzJmDr7/+2qVtbQ/maRvzuA7ztI15iEgPDNLDxMTEiIhIeHi4PPbYYzJ27Fj59NNP5cMPPxQREYOh438lwcHBcv36dYmPj3dpW9uDedrGPK7DPG1jHiLSgx5X4ImIABARke9+97vyxBNPSG1trWRlZUlJSYmIiNhstg4dz2QyycyZM13ezvZintYxj2sxT+uYh4j0oEcWeEopEREJCAiQadOmSXJyshw8eFB27NghIq1f5TrrHPPz82XUqFHuaWw7MM9tzON+zHMb8xCRXvXIAq+phIQEmT9/vvTp00dycnKkoKBARFq+yrV3jjdv3hQRkQ8++EAuXLggSUlJ3dPgNjAP83Qn5mEeItIpD47/65I7Bwt35YXply9fxlNPPQWlFBYsWACz2dziMf/6179iyJAhuO+++xATE4PU1FScP3++0+e2Y56WMQ/ztIV5WqaHPETU/fw8XWB21JkzZ2T9+vXSu3dvASCPP/64PPLII9ptic6IioqSefPmyf79+2X37t0yZcoU+eEPf+h02/PnzwsAMZlMsnnzZnn88cc7fV4R5mkP5mGeljBP2zyZh4g8yBNVZWdYLBYsW7YMcXFxeO655/D8889r703cuHEjgLanAGj68mw7+1VsdXU11qxZA6UUZs2ahf/973/aevsfuytXrjAP8zAP8zAPEemW1xR4GzZswKOPPurQ+Zw8eRKJiYkIDg7GzZs3W9zXarU6dGDOOkIAOH78OCZOnAiTyYS33npLW15XV6cdx1WY5zbmYZ6OYp7b9JiHiDxP9wWe1WpFRUUF7r33XmzYsAFA48vT7R3aH/7wB4SEhODf//53s31tNptDZ3f48GHMnTsXH3/8sdPxJ2azGRkZGTCZTOjfvz+ef/55PPTQQ8jNzWUe5mEe5mEeIvIaui/wAODUqVPo1asXvvjiCwCNnaL9arO4uBgRERG4dOlSi/tXVFRg8eLFUEpBKYUnn3wStbW1DtvYj1dWVoaBAwdCKYWoqChkZGQwD/MwD/MwDxF5Fa8o8AoLCxEYGIiUlBSH5TabDXv37sXChQu12wx3Wr9+PaKjo6GUgtFoxJo1a1o919KlS6GUwurVq13W/jsxz23MwzwdxTy36TEPEemDbgq8ffv24cSJEzh37hwaGhoA3L7qvH79OpKSkqCUwo9//GN88cUX+PbbbwEAeXl5OHHihMOx7Lcnjh49ql3V/uxnP9MGFgPOx6kcOHAAy5Ytc8k7F5mHeZiHeXw1DxHpn8cLvOPHj2Py5MkYP348Hn74YQQHB2PmzJk4duyYQye1b98+JCcnQymFXr16ISYmBj/4wQ+QmJiIyZMnY/Hixdi8eTPKy8sdjr9ixQrt1gfQ2PG1NKeUKwYZMw/zMA/z+GoeIvIeHi3wbt26hblz52LLli0AGh/lX7duHcLDw9G7d2+sWrXKYfuqqiqsXbsWc+bMwcCBAxEZGYmRI0ciICAABoMBSin07dsXL7/8MioqKhz2vXNAMvMwD/MwD/MQka/yaIGXm5uLuLg4XLx4UVtWW1uLv/3tb9qthzfeeKNZZwYA3377LT755BMAjYOUd+zYgbS0NG2/l156CdXV1QBanjaAeZiHeZiHeYjIF3mkwLPfQnj22WcxbNgwh2X2/7788stQSqF///7YvHmztq/9NsOOHTsc5nKy++STTzBp0iTcc889OH36tFtz2DEP8zBP5zGPvvMQkXfy2Dd4VqsVKSkpMBqNWkfVdHqAuro6PPDAA1BKYfz48Thw4IC2DQCkpqZq8zdZLBbtKrahoQE7d+6EUgr5+fnMwzzMwzzMQ0Q9jsFDr0cTg8Egd999t9hsNvnss89ERMRgMIjBYBCr1Sr+/v6yYsUKiYyMlGPHjsmuXbukrq5ODIbGJp87d06ysrK0/YxGo4iI+Pn5SWRkpEREREhgYCDzMA/zMA/zEFGP45ECT/3/i7MTEhLEaDTKP//5T7lw4YK23t6ZTZs2TWbPni319fVSUFAgR44cERGR2tpa8ff3l127dsnhw4e141ksFhERuXLliiQmJsqwYcOYh3mYh3mYh4h6Hg9+e4jdu3dDKYX4+HhtQLGd/ZbEiRMn0K9fP/j5+WHbtm3aGJY33ngDSimMGDECR48eRU1NDYDG6Qa+973v4d133+3eMGAe5ulezMM8REQt8fg8eEOHDoVSCosWLUJlZaXTbdLT06GUQmpqqsPy1NRUmEwmGAwGJCcnY9KkSUhISEBOTk53NN0p5rmNedyPeW5jHiKi2xQAePIbxJycHElNTZWQkBDJzs6WqVOnauNQrFarGI1GOXfunCQkJMjdd98tR44ckZiYGBERqampkdOnT8u+ffvEbDZLRESELFq0yJNxmId5uhXzMA8RkVOerjDr6+sxadIkKKUwd+5clJaWOqy32Wyw2WyYM2cOYmNjcfPmzRZnatcD5mGe7sQ8zENE5IxHHrJoqlevXrJu3ToREfnwww8lKytLrl69KiKNV7hKKVFKSf/+/UUpJXV1ddqgYz1iHubpTszDPEREzni8wBMRmThxorzwwgsiIrJ161bJzMwUkcanzWpra0VE5OLFizJ06FAJDQ31VDPbjXn0jXn0jXmIiFzA018h2pnNZqxevRohISFQSmHLli3ak2a1tbVISUlBQUGBh1vZfsyjb8yjb8xDRNQ1uinw7Pbs2YMxY8ZAKYUJEybgpZdewvDhw/GrX/0KN2/e9HTzOox59I159I15iIg6x+NP0TrT0NAge/bskfLycikvL5cZM2bIww8/7OlmdRrz6Bvz6BvzEBF1nO4KPAA+NciYefSNefSNeYiIOkcXD1k01bTz01nt2SnMo2/Mo2/MQ0TUObr7Bo+IiIiIukZ33+ARERERUdewwCMiIiLyMSzwiIiIiHwMCzwiIiIiH8MCj4iIiMjHsMAjIiIi8jEs8IiIiIh8DAs8IiIiIh/DAo+IiIjIx7DAIyIiIvIxLPCIvNj27dslJCREtm/f7ummdIrFYpEPPvhAHnjgAUlLS/N0c4iIfAYLPCIvtnPnTrlx44bk5uZ6uikdduXKFVmwYIE8+eSTcuDAAenMa7EvX74sgYGBopRy+BMXFycNDQ1uaDURkXdggUfkJQ4cONBs2dKlS2XcuHGyZMkSD7Soa6KioiQzM1N+/etfd/oYr7/+utTV1TVbvmTJEunVq1dXmkdE5NX8PN0AImqbzWaTRYsWyX//+1+H5VOnTpWpU6d6qFWuERkZ2an9rl+/Lu+9954cP35cAgICHNYNGDDABS0jIvJeLPCIvMDatWvl5MmTnm6GW/j5da4b2rJli/z0pz+VUaNGubhFRETej7doiXQuMzNTXnjhBU83Q1dqampk06ZNYrPZ5ODBg2Kz2TzdJCIiXWGBR6RjGzZskLVr12oPIAwaNEgGDRokK1eulFu3bsk777wjY8aMkdWrVzvsV11dLWvWrJHQ0FAREfnmm28kLS1NQkJC5J577pG//OUv2rZ5eXkyceJEMZlMct9990lRUZHTtpw6dUpSU1NlxIgREhQUJCNHjpTMzEyX5rVarfL73/9eYmNjJSgoSGbPni2lpaXNtsvIyJBr167Jxo0bZdKkSTJgwAB5++23xWq1urQ9REReC0SkeyKCpv9cT506hdTUVAQGBkJE8OKLL2rrMjIyMHDgQG2fyspKDB8+HDExMdr2BoMBRUVF+OijjxAQEID+/fvDaDRCRNC3b19UVVU5nP/TTz/FgAEDkJ+fDwA4f/48Ro8eDRHB6tWru5Rt+/btEBHMnz8f8+bNQ58+fRAdHa21v1+/fjh79qzDPj/5yU8wYsQImEwmbTsRwYMPPohvvvmmS+0hIvIFLPCIvMCdBZ7dL3/5y2YFntlsxpdffqnts3DhQhQUFAAAbty4gQkTJkBEkJSUhJSUFHz99dcAGou2uLg4iAh27NihHe/atWsIDw9Hdna2w7n/9a9/acXinQVYR9gLvPDwcGzatAkNDQ0AgN27d2sF3NSpU53uW1dXh71792Ls2LEORZ7Vau10e4iIfAFv0RJ5saioqGbLAgMDJSEhQft53bp1MnHiRBERCQoKkoULF4qISFVVlWRnZ0t8fLyIiMTFxcnMmTNFRKS8vFzbPzMzU27cuCGzZ892OM/IkSNFpPEJ348++qjLWWbMmCGLFy/WHrqYNWuWdut57969cvHixWb7+Pv7y5QpU+TQoUOydOlSEWm85fzee+91uT1ERN6MBR6RF2tprrem04YEBwc7rIuJidGWK6Uc1vXr109ERMxms7bs73//uwCQ0aNHy9ChQ7U/o0aNkr59+0rfvn2loqKiy1mMRmOzZYsWLRJ/f38RETl+/HiL+xoMBnnzzTflscceExGR7OzsLreHiMibcZoUoh7GYGj5us6+Dk3eKlFeXi7h4eFSXFzs9rbdyWQySXx8vJSWlkpVVVWb269bt0527dolZWVl7m8cEZGO8Rs8ImqVxWKRq1evtqvAcgf7RMj2J4JbM2TIEImPj5egoCA3t4qISN9Y4BFRq6KjowWAvP/++07XA5C8vDy3nf/69esiIjJ69Oh2bR8dHS3jx493W3uIiLwBCzwiatX9998vIiK/+93v5Kuvvmq2/t1335VLly655dzV1dVy9uxZuf/++yU2NrbN7S0Wi5SVlUl6erpb2kNE5C1Y4BF5gd69e4uISG1trcPy+vp6ERFpaGhwWN70Z4vF4rDO/tYHZ5MC28feNd1/wYIFctddd8m1a9dkwoQJ8qc//UnOnTsnJSUl2kTMs2bN6my0ZuduKiMjQ4xGo7z22msOy69du+b0GJs3b5Zly5bJ8OHDu9weIiJvxgKPyAskJiaKiMjBgwelpqZGXnnlFbHZbJKfny8iIvn5+Q4Fm325iMjhw4cdjmW/nVpaWupQKFksFiksLBQRkaKiIu14cXFxkpmZKX5+flJRUSHp6enyne98R+69915ZtWqVbNu2rUtj3mJjY8Xf319ycnLkj3/8o1Zc5ubmyquvvirZ2dkyduxYbfvXX39dIiIiZPr06dqDH3V1dbJp0yaxWCyycuXKTreFiMhneHISPiJqn0OHDmHw4MGIiIjAM888g/z8fISHhzu8xSEsLAxHjhxBWlqa9lYKEYHRaERycjKqq6sRFRXlsE9AQABWrVqFzz//HKGhoQ7rQkNDcerUKa0NhYWFmDZtGoKDg3HXXXdhypQpOHTokEvynT17Fk8//TQSEhIQFhaG0aNH44knnkBJSUmzbcvLy/Hoo48iNDQUgYGBmDx5Mp577jmcPn3aJW0hIvIFCnByX4SIiIiIvBZv0RIRERH5GBZ4RERERD6GBR4RERGRj2GBR0RERORj+C5aInKJBx98UC5cuNChfUpLS93UGiKino1P0RIRERH5GN6iJSIiIvIxLPCIiIiIfAwLPCIiIiIfwwKPiIiIyMewwCMiIiLyMSzwiIiIiHwMCzwiIiIiH8MCj4iIiMjH/B95uAaYDYWeGQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ds_avg['dissipation_rate'].plot(cmap='turbo', ylim=(0,11))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 7.4 Turbulent Kinetic Energy (TKE) Components\n", - "\n", - "The next parameters we'll find here are the vertical TKE component and the total TKE magnitude. Since we're using the vertical beam on the ADCP, we'll directly measure the vertical TKE component from the along-beam velocity using the `turbulent_kinetic_energy` function. This function is capable of calculating TKE for any along-beam velocity.\n", - "\n", - "We can also use the so-called \"beam-variance\" equations to estimate the Reynolds stress tensor components (i.e. $\\overline{u'^2}$, $\\overline{v'^2}$, $\\overline{w'^2}$, $\\overline{u'v'}$, $\\overline{u'w'^2}$, $\\overline{v'w'^2}$), which define the stresses acting on an element of water. These equations are built into the functions `stress_tensor_5beam` and `stress_tensor4beam`. Since we're using a 5-beam ADCP, we can calculate the total TKE as well using `total_turbulent_kinetic_energy`, which is a wrapper around the 5-beam variance function.\n", - "\n", - "#### Quick ADCP lesson before we dive in:\n", - "\n", - "There are a couple caveats to calculating Reynolds stress tensor components:\n", - " 1. Because this instrument only has 5 beams, we can only find 5 of the 6 components (6 unkowns, 5 knowns)\n", - " 2. Because the ADCP's instrument (XYZ) axes weren't aligned with the flow during deployment, we don't know what direction these components are aligned to (i.e. the 'u' direction is not necessarily the streamwise direction)\n", - " 3. It is possible to rotate the tensor, but we'd need to know all 6 components to do so properly.\n", - "\n", - "That being said, even if we don't know which direction the 3 TKE components ($\\overline{u'^2}$, $\\overline{v'^2}$, $\\overline{w'^2}$) are oriented, we can still combine them and get the total TKE magnitude." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 7.5 ADCP Noise\n", - "\n", - "The first thing we want to do is calculate the Doppler noise floor from the spectrum we calculated above. (We are making the assumption that the noise floor of the vertical beam is the same as the noise floor of the other 4 beams). This gives us a timeseries of the noise floor, which varies by instrument and with flow speed, at that depth bin.\n", - "\n", - "We can do this using the `doppler_noise_level` function. The two inputs for this function are the power spectra and \"pct_fN\", the percent of the Nyquist frequency that the noise floor exists. Because in this particularly dataset we can't see the noise floor, we'll just use 90% or pct_fN=0.9 as an example. If the noise floor began at 0.4 Hz and ran til our maximum frequency of 0.5 Hz, we'd use pct_fN = 0.4 Hz / 0.5 Hz = 0.8.\n", - "\n", - "Because ADCP noise is a function of range as well as flow speed and instrument frequency, we'll use a for loop to measure the noise from each spectra:" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "# Setting up \"for\" loop\n", - "n = [None]*len(ds.range)\n", - "\n", - "for r in range(len(ds.range)):\n", - " # Calculate doppler noise from spectra from each depth bin\n", - " n[r] = avg_tool.doppler_noise_level(ds_avg['auto_spectra'][r], pct_fN=0.9)\n", - "\n", - "ds_avg['noise'] = xr.concat(n, dim='range')\n", - "\n", - "del n # save memory" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we know the Doppler noise level, we can use that as input for the TKE functions. We'll first calculate the vertical TKE component, using the function `turbulent_kinetic_energy`, inputting our raw vertical beam data and the noise floors we calculated above for each ensemble." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "# Vertical TKE component (w'w' bar)\n", - "ds_avg['wpwp_bar'] = avg_tool.turbulent_kinetic_energy(ds['vel_b5'], noise=ds_avg['noise'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we can calculate the TKE magnitude using the function `total_turbulent_kinetic_energy`. This method is a wrapper around the `stress_tensor_5beam` function, which calculates the individual Reynolds stress tensor components and takes the same inputs. As an fyi, this function will drop at least one warning every time it's run, primarily the coordinate system warning. This function also requires the input raw data to be in beam coordinates, so we'll create a copy of the raw data and rotate it to 'beam'. If you do not, this function will do so automatically and rotate the original." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\users\\mcve343\\mhkit-python\\mhkit\\dolfyn\\adp\\turbulence.py:383: UserWarning: The beam-variance algorithms assume the instrument's (XYZ) coordinate system is aligned with the principal flow directions.\n", - " warnings.warn(\" The beam-variance algorithms assume the instrument's \"\n" - ] - } + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Analyzing ADCP Data with MHKiT\n", + "\n", + "The following example illustrates a straightforward workflow for analyzing Acoustic Doppler Current Profiler (ADCP) data utilizing MHKiT. MHKiT has integrated the DOLfYN codebase as a module to facilitate ADCP and Acoustic Doppler Velocimetry (ADV) data processing.\n", + "\n", + "Here is a standard workflow for ADCP data analysis:\n", + "\n", + "1. **Import Data**\n", + "\n", + "2. **Review, QC, and Prepare the Raw Data**:\n", + " 1. Calculate or verify the correctness of depth bin locations\n", + " 2. Discard data recorded above the water surface or below the seafloor\n", + " 3. Assess the quality of velocity, beam amplitude, and/or beam correlation data\n", + " 4. Rotate Data Coordinate System\n", + "\n", + "3. **Data Averaging**: \n", + " - If not already executed within the instrument, average the data into time bins of a predetermined duration, typically between 5 and 10 minutes\n", + "\n", + "4. **Speed and Direction**\n", + "\n", + "5. **Plotting**\n", + "\n", + "6. **Saving and Loading DOLfYN datasets**\n", + "\n", + "7. **Turbulence Statistics**\n", + " 1. TI\n", + " 2. Power Spectral Densities\n", + " 3. TKE Dissipation Rate\n", + " 4. TKE Componenets\n", + " 5. ADCP Noise\n", + " 6. TKE Production\n", + " 7. TKE Balance \n", + "\n", + "\n", + "Begin your analysis by importing the requisite tools:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from mhkit import dolfyn\n", + "from mhkit.dolfyn.adp import api" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Importing Raw Instrument Data\n", + "\n", + "One of DOLfYN's key features is its ability to directly import raw data from an Acoustic Doppler Current Profiler (ADCP) right after it has been transferred. In this instance, we are using a Nortek Signature1000 ADCP, with the data stored in files with an '.ad2cp' extension. This specific dataset represents several hours of velocity data, captured at 1 Hz by an ADCP mounted on a bottom lander within a tidal inlet. The list of instruments compatible with DOLfYN can be found in the [MHKiT DOLfYN documentation](https://mhkit-software.github.io/MHKiT/mhkit-python/api.dolfyn.html).\n", + "\n", + "We'll start by importing the raw data file downloaded from the instrument. The `read` function processes the raw file and converts the information into an xarray Dataset. This Dataset includes several groups of variables:\n", + "\n", + "1. **Velocity**: Recorded in the coordinate system saved by the instrument (beam, XYZ, ENU)\n", + "2. **Beam Data**: Includes amplitude and correlation data\n", + "3. **Instrumental & Environmental Measurements**: Captures the instrument's bearing and environmental conditions\n", + "4. **Orientation Matrices**: Used by DOLfYN for rotating through different coordinate frames.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading file data/dolfyn/Sig1000_tidal.ad2cp ...\n" + ] + } + ], + "source": [ + "ds = dolfyn.read(\"data/dolfyn/Sig1000_tidal.ad2cp\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are two ways to see what's in a Dataset. The first is to simply type the dataset's name to see the standard xarray output. To access a particular variable in a dataset, use dict-style (`ds['vel']`) or attribute-style syntax (`ds.vel`). See the [xarray docs](http://xarray.pydata.org/en/stable/getting-started-guide/quick-overview.html) for more details on how to use the xarray format." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "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: 55000, dirIMU: 3, dir: 4, range: 28, beam: 4,\n",
+       "                          earth: 3, inst: 3, q: 4, time_b5: 55000,\n",
+       "                          range_b5: 28, x1: 4, x2: 4)\n",
+       "Coordinates:\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",
+       "  * beam                 (beam) int32 1 2 3 4\n",
+       "  * 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.4384999...\n",
+       "  * range_b5             (range_b5) float64 0.6 1.1 1.6 2.1 ... 13.1 13.6 14.1\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",
+       "    pressure             (time) float32 9.713 9.718 9.718 ... 9.596 9.594 9.596\n",
+       "    mag                  (dirIMU, time) float32 72.5 72.7 72.6 ... -197.2 -195.7\n",
+       "    accel                (dirIMU, time) float32 -0.00479 -0.01437 ... 9.729\n",
+       "    batt                 (time) float32 16.6 16.6 16.6 16.6 ... 16.4 16.4 15.2\n",
+       "    ...                   ...\n",
+       "    telemetry_data       (time) uint8 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0\n",
+       "    boost_running        (time) uint8 0 0 0 0 0 0 0 0 1 0 ... 0 1 0 0 0 0 0 0 1\n",
+       "    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  (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",
+       "    burst_config:          {"press_valid": true, "temp_valid": true, "compass...\n",
+       "    n_cells:               28\n",
+       "    ...                    ...\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",
+       "    beam_angle:            25
" ], - "source": [ - "ds_beam = dolfyn.rotate2(ds, 'beam', inplace=False)\n", - "ds_avg['TKE'] = avg_tool.total_turbulent_kinetic_energy(ds_beam, noise=ds_avg['noise'], orientation='up', beam_angle=25)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And plotting TKE:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } + "text/plain": [ + "\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, x1: 4, x2: 4)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 2020-08-15T00:20:00.500999927 ...\n", + " * dirIMU (dirIMU) : Nortek Signature1000\n", + " . 15.28 hours (started: Aug 15, 2020 00:20)\n", + " . earth-frame\n", + " . (55000 pings @ 1Hz)\n", + " Variables:\n", + " - time ('time',)\n", + " - time_b5 ('time_b5',)\n", + " - vel ('dir', 'range', 'time')\n", + " - vel_b5 ('range_b5', 'time_b5')\n", + " - range ('range',)\n", + " - orientmat ('earth', 'inst', 'time')\n", + " - heading ('time',)\n", + " - pitch ('time',)\n", + " - roll ('time',)\n", + " - temp ('time',)\n", + " - pressure ('time',)\n", + " - amp ('beam', 'range', 'time')\n", + " - amp_b5 ('range_b5', 'time_b5')\n", + " - corr ('beam', 'range', 'time')\n", + " - corr_b5 ('range_b5', 'time_b5')\n", + " - accel ('dirIMU', 'time')\n", + " - angrt ('dirIMU', 'time')\n", + " - mag ('dirIMU', 'time')\n", + " ... and others (see `.variables`)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_dolfyn = ds.velds\n", + "ds_dolfyn" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Initial Steps for Data Quality Control (QC)\n", + "\n", + "### 2.1: Set the Deployment Height\n", + "\n", + "When using Nortek instruments, the deployment software does not factor in the deployment height. The deployment height represents the position of the Acoustic Doppler Current Profiler (ADCP) within the water column. \n", + "\n", + "In this context, the center of the first depth bin is situated at a distance that is the sum of three elements: \n", + "1. Deployment height (the ADCP's position in the water column)\n", + "2. Blanking distance (the minimum distance from the ADCP to the first measurement point)\n", + "3. Cell size (the vertical distance of each measurement bin in the water column)\n", + "\n", + "To ensure accurate readings, it is critical to calibrate the 'range' coordinate to make '0' correspond to the seafloor. This calibration can be achieved using the `set_range_offset` function. This function is also useful when working with a down-facing instrument as it helps account for the depth below the water surface. \n", + "\n", + "For those using a Teledyne RDI ADCP, the TRDI deployment software will prompt you to specify the deployment height/depth during setup. If there's a need for calibration post-deployment, the `set_range_offset` function can be utilized in the same way as described above." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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grDAmVJ61mg0eN3rXscll1zCJz/5Sd7whjfMSrKS5znvete7WL16NY1Gg3322Yf3vve9uPEPZgqCIAjCDohXqnpTaGrL/Jo4bjwXXHAB995774zWOekrLN/4xjcedb1Sinq9zn777cfq1aunHRjAhz70IT71qU9x5ZVX8vSnP51bb72V0047jYGBAc4555wZaUMQBEEQ5oSd+JbQN7/5TS666CKOOuooXv/61/Oyl72Mer0+rTonnbCceOKJE14PKynXKaV47nOfy7XXXsvixYunFdwPf/hDTjjhBF7ykpcAsPfee/PlL3+ZW2+9dVr1CoIgCIIwe9x222389Kc/5fLLL+ctb3kLZ511Fq985St53etex6GHHjqlOiednl1//fUceuihXH/99QwODjI4OMj111/Pc57zHP7t3/6Nm2++mc2bN/PWt751SgGN57nPfS7f/e53+fWvfw3AT37yE2655ZbHfRup0+k8YgpgQRAEQZh37GQuoYdz4IEH8tGPfpQNGzbwuc99jg0bNnDEEUdwwAEH8PGPf5zBwcFJ1TelmW4vu+wyDj/88GrdC17wAur1On/913/Nz3/+cz72sY/xute9brJVP4K//du/ZXBwkKc85SkYY7DW8v73v5+//Mu/fMx91q5dy4UXXjjttgVBEARhVtmJbwmNxzlHmqZ0Oh289yxZsoRLL72Ud7/73XzmM5/hFa94xTbVM+mj/e1vf0t/f/8j1vf39/O73/0OgCc96Uk8+OCDk636EXzlK1/hi1/8Il/60pe4/fbbufLKK/n7v/97rrzyysfc57zzzquu/AwODrJ+/fppxyEIgiAIM830Hrid3rT+24PbbruNs88+m+XLl/OWt7yFgw8+mF/+8pfcdNNN/OpXv+L888/nTW960zbXN+krLIcccghve9vb+PznP8+uu4ZpyR944AHe/va3V/elfvOb37DnnntOtupH8La3vY13vOMdvPKVrwTggAMO4N5772Xt2rWceuqpj7pPrVajVqtNu21BEARBEKbGgQceyC9/+Ute9KIX8dnPfpaXvvSlGGMmlDnllFN429vets11Tjph+exnP8sJJ5zAnnvuycqVK1FKsW7dOvbZZx++/vWvAzAyMsK73/3uyVb9CEZHR9EP02cbY+S1ZkEQBGHHR+nK/zXl/ecpJ510Eq973eseV2646667Turv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29YxmoUxoXXYVsWgNVoHOaF1QUgYRJI6SCiNruSNo5mlHml6axFGhXispxAWhj4ojyPWClvIH8tj1UpVwsTMeWpFn5V97bwns66SPWbOEevQ37oQKJbltQoiS43CEYSOsda0MluNpXJMqGLMleexFBNaH/54lbGG86PQdCWI3nf3M6VEsig3fvxEujteYH6/ebOjUK/Xec1rXsP3vvc97rrrLl7zmtfw2c9+ln322Ydjjz2Wf/mXf5lSvVOeOK6np2fGLvMIgiAIwoJjOm8Izdd7Qg9j9erVvO997+Oee+7hqquu4tZbb+Uv//Ivp1TXNr0l9LKXvWybK7z66qunFIggCIIgLCQcHjeNrGM6+25PbrjhBi6//HKuvvpqoijir/7qr6ZUzzYlLAMDA1OqXBAEQRCEhce6deu44ooruOKKK7jnnnt43vOexyc/+UlOOukkGo3GlOrcpoTl8ssvn1LlgiAIgiA8OtWtnWnsP9/40pe+xOWXX84NN9zAbrvtximnnMLrX/969ttvv2nXPe/lhxs2bODVr341S5cupaenh4MOOojbbrttrsMSBEEQhGmxM74l9NrXvpbe3l6uvfZa1q9fz9q1a2ckWYFtvMLyrGc9i+9+97ssXryYgw8+uHoK+9GYyen5t2zZwhFHHMGaNWv41re+xbJly/jtb3/LokWLZqwNQRAEQRBmht///vcsW7ZsVurepoTlhBNOoFYLr92eeOKJsxLIo/GhD32IlStXTrgltffee2+39gVBEARhttgZbwnNVrIC25iwLF68GF3MX3Daaaex5557Vp9nk2984xsce+yxnHTSSdx0003ssccenHnmmY/7hHGn06kM0gBDQ0OzHqcgCIIgTJaF8pbQTLFNWce5555b/eFfvXo1Dz744KwGVfK73/2OSy+9lCc96Ul8+9vf5owzzuBNb3oTn//85x9zn7Vr1zIwMFAtK1eu3C6xCoIgCMJkmJapeZpXZ3ZEtukKy4oVK/ja177Gi1/8Yrz3/P73v6fdbj9q2VWrVs1YcM45nv3sZ/OBD3wAgIMPPpif//znXHrppZxyyimPus95553HueeeW30eGhqSpEUQBEEQthPWWm655RYOPPBAFi9ePGP1blPC8q53vYs3vvGNnH322SilOPTQQx9RxnuPUgo7bsr06bJ8+XKe9rSnTVj31Kc+la997WuPuU+tVquetxEEQRCE+YrzvlIiTHX/+YgxhmOPPZZf/vKX2z9h+eu//mv+8i//knvvvZcDDzyQ73znOyxdunTGgngsjjjiCO68884J637961+z1157zXrbgiAIgjCbWBeW6ew/XznggAP43e9+x+rVq2eszm1KWAD6+vp4xjOeweWXX84RRxyxXa5ivOUtb+Hwww/nAx/4AH/xF3/B//zP/3DZZZdx2WWXTbquIHsbd7ilZE7pCWW8buAL8aHXUZDLFdJDXI5yOT6qB7lh0kB1WmG7UmF71oGYrkCxFHHFtQltK+9C/aWEcWwIVesJdSVNaA8HgZ7WENXwrWGUNqg4hijpxl88/OyzNMj/AN8uBHh5VogOM9Aa124VosQ0yPYKWaFZuju0YxgnXnTDW9DNPtzwliBT7IRbgD5PQzlrg+TQOXAO5Syu3cLnGb49ik/bQexHkBOWMkDfboX48wylNUprXLFe9fSjag1UUsePDuFaQ3hnUVESRIxa4ztj1J50AHbzRshTVLMfnMVbi07quLEQg46jsH+W4tqjqDgOAsei35QJwkE7NopxNkga8wztbGg/bQepotaVtFE3mqEfCrGjK+SK3hayw1Z4zss7F9rKMxhrofoWhdjbo0HkWPQxUEglu7dX3VgL1WgGOaM2+M5YOL4sQyVZGFNjQ5DUQ/3OQr0vjCcMPgqizTCWi/GVFW3ZvIiPYIVzeTi2cT8DlVzOecrJCxRBWRJpxWjmUErhfSm5CzK5zHn6E00rc9UvUYennbtKlOh9EMyl1ocfl0J6B2GfzHoSo3hw1NKbhJ/VeqQrmV/Hu+oXfOaCeLCS7VlPPdJkzjGalRI/XUj0gkywHulKPqiVop1bemKD0YqsCLo3iahHmtEsSAuBSiRoPeRFubrRhYQwlIsJgr9apBnLuleZS2FhiCfIDtu5m/CfdZD/hW01rRlJc7RS1Io4wj6WehQTa0VuHb1JRK04nnqk6ViHcx6t1SOEjbHRQUzoPL1J9DBZpaq+xsW+EMSQjdjQE2uMUtQjzUhqg2TROmpGF3LEIFfUxRjoiXUheyyO2QTxYl+iKlFiT2wYbAeBpbWQGBXklMXvMktXwljGVx6PVmFsmurcBNmh9R7tPQ4wBAmm0YpO7gv55jixYXGMirBv7jzWQaxD/cLM8P73v5+3vvWtvO997+OQQw6h2WxO2N7f3z/pOrc5YSk59dRTAbjtttv45S9/iVKKpz71qTzrWc+adONPxKGHHso111zDeeedx3vf+15Wr17Nxz72MU4++eQZb0sQBEEQtic76y0hgOOOOw6AP/3TP50wd9t0Hh+ZdMKyadMmXvnKV3LjjTeyaNEivPcMDg6yZs0arrrqKnbddddJB/F4/Mmf/Al/8id/MqN1CoIgCMJcE64e7ZwJyw033DDjdU46YXnjG9/I0NAQP//5z3nqU58KwC9+8QtOPfVU3vSmN/HlL395xoMUBEEQBGHH4aijjprxOic9+9t1113HpZdeWiUrAE972tP4p3/6J771rW/NaHCCIAiCsLMSfEB+GstcH8Hj8/3vf59Xv/rVHH744WzYsAGAL3zhC9xyyy1Tqm/SCYtzjjiOH7E+jmOcm8ePLAuCIAjCPKJ8iHw6y3zla1/7GsceeyyNRoPbb7+9moF+eHi4mlttskw6YXn+85/POeecw3333Vet27BhA295y1t4wQteMKUgBEEQBEHYebjooov41Kc+xWc+85kJFzkOP/zwKUuSJ52wXHLJJQwPD7P33nuz7777st9++7F69WqGh4f5xCc+MaUgBEEQBGGhMb3bQdN7w2i2ufPOOznyyCMfsb6/v5+tW7dOqc5JP3S7cuVKbr/9dq6//np+9atf4b3naU97Gi984QunFIAgCIIgLETsNN8Sms6+s83y5cu566672HvvvSesv+WWW9hnn32mVOekEpY8z6nX69xxxx0cc8wxHHPMMVNqVBAEQRAWOg6m9eDsbD7C8v73v59///d/54477iBJkklfFTn99NM555xz+NznPodSivvuu48f/vCHvPWtb+U973nPlGKaVMISRRF77bXXjPqCBEEQBEGYX6RpykknncRhhx3GZz/72Unv//a3v72ao63dbnPkkUdSq9V461vfytlnnz2lmCZ9S+hd73oX5513Hl/84hdZsmTJlBoVBEEQhIWOdb7SBkx1/9niwgsvBOCKK66Ych3vf//7eec738kvfvELnHM87WlPo7e3d8r1TTph+cd//EfuuusuVqxYwV577fUIP8BUn/4VBEEQhIWEn+aDs6XTa2hoaML6Wq22XXx/j8frXvc6Pv7xj9PX18ezn/3san2r1eKNb3wjn/vc5yZd56QTlhNOOGGCF2BHweviUL0HbcLNP+8KmWFxYsdJ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5zWsb9++9NBDD5U7PQBas2ZNlZbNWF3ER1hYjfrmm29w+vRpbN26FW+99RZSU1ORlJSEsLAw7Nq1C2PHjsXYsWORlZUFQPsP/M4770RQUBC2bt2K7du3IygoCP369fM6LF+Z7OxsDB8+HP/93/+NQ4cOYcuWLRg8eDDIHVb+0UcfISUlBTNmzMChQ4cwc+ZMTJkyBR9//DEAID8/H4mJiTh9+jT+85//4Mcff8SLL74IVVUBAGvWrMEzzzyDSZMm4aeffsITTzyB0aNH49tvv/Vqx7Rp0zB06FDs378f/fv3x4gRI3DhwgUAQFZWFgYPHoz+/fsjIyMDjz32GCZPnuw1/7hx42C327F161YcOHAAs2fPRlBQULk17927FxMmTMCrr76KI0eOYMOGDejRo8dlt9PcuXPRqVMn7Nu3D0899RSefPJJHD58uErb4KuvvsLDDz+MCRMm4ODBg/jggw/wr3/9CzNmzKjy+1Say+WCoiiwWCxew61WK7Zv317uPH/88Qe++OILPProo/qw9PR0OJ1O9OnTRx8WHR2Ndu3aIS0trcL179ixA+3atUN0dLQ+rG/fvrDb7UhPT7/asvRll2yPZ9mXaw9jNzRf95hY7XclR1ji4uJIURR9WKtWrah79+76a5fLRYGBgfTpp58SEdHChQupVatWpKqqPo3dbier1UpfffVVue0p7whLeno6AaDMzMxy54mJiaH//d//9Ro2ffp06tKlCxERffDBBxQcHEx//vlnufN37dqVxowZ4zXswQcfpP79++uvAdD//M//6K/z8/NJCEFffvklERH97W9/ozZt2njV+tJLL3nV0r59e0pNTS23DaWtWrWKQkJCKC8vr9zx5R1hefjhh/XXqqpSw4YN6b333iOiyrdB9+7daebMmV7DPvnkE4qKiqpSe8s7wkJE1KVLF0pMTKRTp06Ry+WiTz75hIQQ1LJly3KXM3v2bAoLC6OioiJ92NKlS8lkMpWZtnfv3vT4449X2KYxY8ZQ7969yww3mUxl9heiKzvCYjQaaenSpV7DKmonER9hYYyPsLAadcstt0CSine7Ro0aoX379vprWZYRERGBs2fPAtD+M/71118RHByMoKAgBAUFITw8HDabDb/99luV1xsfH49evXqhffv2ePDBB/HRRx8hJycHAHDu3DlkZWXh0Ucf1dcRFBSE1157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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ds[\"vel\"][1].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# The ADCP transducers were measured to be 0.6 m from the feet of the lander\n", + "api.clean.set_range_offset(ds, 0.6)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, the center of bin 1 is located at 1.2 m:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'range' (range: 28)>\n",
+       "array([ 1.2,  1.7,  2.2,  2.7,  3.2,  3.7,  4.2,  4.7,  5.2,  5.7,  6.2,  6.7,\n",
+       "        7.2,  7.7,  8.2,  8.7,  9.2,  9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n",
+       "       13.2, 13.7, 14.2, 14.7])\n",
+       "Coordinates:\n",
+       "  * range    (range) float64 1.2 1.7 2.2 2.7 3.2 ... 12.7 13.2 13.7 14.2 14.7\n",
+       "Attributes:\n",
+       "    units:    m
" ], - "source": [ - "# Remove estimations below 0\n", - "ds_avg['TKE'] = ds_avg['TKE'].where(ds_avg['TKE']>0)\n", - "\n", - "ds_avg['TKE'].plot(cmap='Reds', ylim=(0,11))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "TKE esimations are generally more complete than those of dissipation rates because they are found directly from the along-beam velocity measurements. Missing TKE estimations exist whenever the noise calculated by the function `doppler_noise_level` is greater than the calculated TKE, as TKE can't be less than zero. Noise levels are affected by the instrument's processor and working frequency, water waves and other sources of \"interference\", instrument motion, current speed, intricacies in the spectra calculation, the ability to see the noise floor in the spectra, etc.\n", - "\n", - "You may also note that high TI doesn't always correlate with high TKE. TI is the ratio of flow speed standard devation to the mean, which is naturally lower when flow speeds are higher. When flow speeds are higher, they also have greater kinetic energy and thereby greater TKE.\n", - "\n", - "There is one other important thing to note on TKE measurements by ADCPs: the minimum turbulence length scale that the ADCP is capable of measuring increases with range from the instrument. This means the instrument is only capable of measuring the TKE of larger and larger turbulent structures as the beams travel farther and farther from the instrument head. One of the benefits of calculating w'w' from the vertical beam is that it isn't limited by this beam spread issue." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 7.6 TKE Production\n", - "\n", - "Though it can't be found from this deployment, we'll go over how to estimate TKE Production. There isn't a specific function in MHKiT-DOLfYN for production, but all the necessary variables are. \n", - "\n", - "If we had aligned the ADCP instrument axes to the flow direction (so \"X\" would align with the main flow), we could use the following equation to estimate production:\n", - "\n", - "$P = -(\\overline{u'w'}\\frac{du}{dz} + \\overline{v'w'}\\frac{dv}{dz} + \\overline{w'w'}\\frac{dw}{dz})$\n", - "\n", - "To start, we need the functions `reynolds_stress_4beam` or `stress_tensor_5beam` to get the stress tensor components $\\overline{u'w'}$ and $\\overline{v'w'}$. We also need the vertical TKE component, $\\overline{w'w'}$. \n", - "\n", - "Both of these functions will give comparable results, but it should be noted that `stress_tensor_4beam` assumes the instrument is oriented with 0 degrees pitch and roll, and will throw a warning if they are greater than 5 degrees. The `stress_tensor_5beam` gives more leeway to instrument tilt, but shouldn't be used if pitch and roll angles are greater than 10 degrees." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\users\\mcve343\\mhkit-python\\mhkit\\dolfyn\\adp\\turbulence.py:383: UserWarning: The beam-variance algorithms assume the instrument's (XYZ) coordinate system is aligned with the principal flow directions.\n", - " warnings.warn(\" The beam-variance algorithms assume the instrument's \"\n", - "c:\\users\\mcve343\\mhkit-python\\mhkit\\dolfyn\\adp\\turbulence.py:391: UserWarning: 100.0 % of measurements have a tilt greater than 5 degrees.\n", - " warnings.warn(f\" {pct_above_thresh} % of measurements have a tilt \"\n" - ] - } + "text/plain": [ + "\n", + "array([ 1.2, 1.7, 2.2, 2.7, 3.2, 3.7, 4.2, 4.7, 5.2, 5.7, 6.2, 6.7,\n", + " 7.2, 7.7, 8.2, 8.7, 9.2, 9.7, 10.2, 10.7, 11.2, 11.7, 12.2, 12.7,\n", + " 13.2, 13.7, 14.2, 14.7])\n", + "Coordinates:\n", + " * range (range) float64 1.2 1.7 2.2 2.7 3.2 ... 12.7 13.2 13.7 14.2 14.7\n", + "Attributes:\n", + " units: m" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.range" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2. Discard Data Above Surface Level\n", + "\n", + "To reduce computational load, we can exclude all data at or above the water surface level. Since the instrument was oriented upwards, we can utilize the pressure sensor data along with the function `find_surface_from_P`. However, this approach necessitates that the pressure sensor was calibrated or 'zeroed' prior to deployment. If the instrument is facing downwards or doesn't include pressure data, the function `find_surface` can be used to detect the seabed or water surface.\n", + "\n", + "It's important to note that Acoustic Doppler Current Profilers (ADCPs) do not measure water salinity, so you'll need to supply this information to the function. The dataset returned by this function includes an additional variable, \"depth\". If `find_surface_from_P` is invoked after `set_range_offset`, \"depth\" represents the distance from the water surface to the seafloor. Otherwise, it indicates the distance to the ADCP pressure sensor.\n", + "\n", + "After determining the \"depth\", you can use the nan_beyond_surface function to discard data in depth bins at or above the actual water surface. Be aware that this function will generate a new dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "api.clean.find_surface_from_P(ds, salinity=31)\n", + "ds = api.clean.nan_beyond_surface(ds)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAHyCAYAAADiG2SEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACeEUlEQVR4nOzdeZwdVZ3//9c5td61t6STTsgKAgooCC6ALJExbDIuiDgom44P+GIEZBgUcQkuZHAcZBQFYYCg6MjMIIyOuPBTAqJhZIuIwyIaSAwJISG93LW28/ujbl9sE6C7b6dv0vk8H496JLdu1alzl3R/cupUvZUxxiCEEEIIMQXpdndACCGEEGJ7kUJHCCGEEFOWFDpCCCGEmLKk0BFCCCHElCWFjhBCCCGmLCl0hBBCCDFlSaEjhBBCiClLCh0hhBBCTFlS6AghhBBiypJCR4hJsHTpUpRSI9bNnz+fM844oz0d2ob58+ejlOLss8/e6rkVK1aglOK//uu/XraN5cuXo5RqLps2bWo+9/vf/55zzjmHgw8+mFwuh1KKFStWbLOdzs7OZhtLlixp6XUJIXZtUugI0Sa33XYbn/70p9vdja1cf/31PPHEEy218f3vf5+VK1fS2dnZXPfAAw9w++23093dzVFHHfWy+/9//9//x8qVK1vqgxBCgBQ6QrTNAQccwO677/6y24RhSBRFk9QjmqMtn/zkJ1tq54ADDuDNb34ztm0315166qk8++yz/OhHP+K000572f0POugg3vzmN7fUByGEACl0hJhwP/rRj9h///3xPI8FCxbw5S9/eZvb/fWpq+HTQ9/+9rf5h3/4B2bPno3neTz11FOT1HPo7u7mE5/4BN///ve57777JrRtreXHjRBi8tmvvIkQYrR+/vOf8453vIODDz6Y733ve8RxzJe+9CWee+65Ubdx8cUXc/DBB3PNNdegtaa3t/clt43jGGPMK7aptR51oXHeeedx1VVXcdFFF3HPPfeMut9CCLEjkkJHiAl0ySWXMGPGDO6880583wfg6KOPZv78+aNuY/fdd+c///M/R73tM88884rbffazn2Xp0qWjajOTybB06VI+/OEP8z//8z+8/e1vH9V+QgixI5JCR4gJUi6Xuf/++znnnHOaRQ5AoVDghBNO4KabbhpVOyeeeOKoj/nDH/6Qer3+itvNmjVr1G0CnHnmmXzlK1/hE5/4BMcdd9yY9hVCiB2JFDpCTJAtW7aQJAkzZ87c6rltrXspfX19o972Na95zahPXY2FZVlcdtllvPOd7+Smm25iwYIFY9pfCCF2FDI7UIgJ0tXVhVKKDRs2bPXctta9lL++387L2X333XEc5xWXz33uc6Nuc9g73vEODj30UD772c9Sq9XGvL8QQuwIZERHiAmSy+V44xvfyPe//33++Z//uXn6amhoiB/+8Ifb5Zjb69TVsMsvv5y3vOUtfPWrXx3X/kII0W5S6AgxgT7/+c9zzDHH8La3vY1/+Id/II5jLr/8cnK5HC+88MKEH2+//fab8Db/0qGHHso73vEO/vu//7vltiqVCnfccQdA89L1u+++m02bNpHL5Tj22GNbPoYQQvw1KXSEmEBve9vbuP322/nUpz7FySefzMyZMznnnHOoVqtceuml7e7euCxbtoz/+Z//IY7jltrZuHEjJ5100oh1w1eCzZs3j6effrql9oUQYluUGc1MRiGEGIXly5dz5pln8tRTTzFv3rwRd0Yei+H7AzmOw0c+8hGuuuqqCe6pEGJXIZORhRATbo899sBxnBGhnmPR09OD4zgT3CshxK5IRnSEEBNm8+bNrF69uvl4//33H9eozqpVq5oZX729vcydO3fC+iiE2LVIoSOEEEKIKUtOXQkhhBBiypJCRwghhNgFLFu2jDe84Q0UCgV6e3t55zvfyRNPPPGK+919990ceOCB+L7PwoULueaaayahtxNHCh0hhBBiF3D33XfzkY98hPvuu48777yTKIpYvHgx5XL5JfdZvXo1xx13HIcddhgPP/wwn/zkJzn33HO59dZbJ7HnrZnyc3SSJOHZZ5+lUCiM6db6Qgghdj3GGIaGhpg1a9aYM+LGolarEQRBy+0YY7b63eZ5Hp7nveK+zz//PL29vdx9990cfvjh29zm4x//OD/4wQ947LHHmuvOPvtsfvvb37Jy5crWOj9JpvwNA5999lnmzJnT7m4IIYTYiaxdu5bddtttu7Rdq9XoyeSp0NpNOAHy+TylUmnEus9+9rPNm3G+nIGBAQC6u7tfcpuVK1eyePHiEeuOPvporr/+esIw3CluAzHlC51CoQCkX9pisdjm3gghhNiRDQ4OMmfOnObvju0hCAIqxJzGbNwWZpAEJHyrtG6r32+jGc0xxnDBBRfw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DeTOyKmzzjqLcrn8ks/PnTuXG2+8cdztS6EjhBBCtINqcY6OmhpzdN71rne97PNdXV2cfvrp425/apSDQgghhJgyfvWrX1Gv1yekLSl0hBBCiHYYvuqqlWWKOvbYY1m3bt2EtCWnroQQQog2kDk6L62Vycd/beq+S0IIIYTY5bW10Lnnnns44YQTmDVrFkopbr/99hHPG2NYunQps2bNIpPJcOSRR/L73/++PZ0VQgghJpKcunpJ3/zmN5kxY8aEtNXWQqdcLvO6172Oq666apvPf+lLX+KKK67gqquu4v7772fmzJm87W1vY2hoaJJ7KoQQQkyw4RsGjnuZuidlTjnlFOI45vbbb+exxx5rqa22ztE59thjOfbYY7f5nDGGK6+8kksuuYR3v/vdANx0003MmDGD7373u5x11lnb3K9er4+YqT04ODjxHRdCCCFa1Gow51QL9Xzve9/L4YcfzpIlS6hWqxx00EE8/fTTGGP43ve+x4knnjiudnfYcnD16tVs2LCBxYsXN9d5nscRRxzBr3/965fcb9myZXR0dDSXOXPmTEZ3hRBCCNGCe+65h8MOOwyA2267DWMM/f39fPWrX+ULX/jCuNvdYQudDRs2AGx1jm7GjBnN57bl4osvZmBgoLmsXbt2u/ZTCCGEGBetW1+mkIGBAbq7uwH4yU9+woknnkg2m+X444/nD3/4w7jb3eEvL//rxNJXSjH1PA/P87Z3t4QQQojWSHr5CHPmzGHlypV0d3fzk5/8hO9973sAbNmyBd/3x93uDlsOzpw5E2Cr0ZuNGzdO2ExsIYQQQuwYzj//fN7//vez2267MWvWLI488kggPaW13377jbvdHbbQWbBgATNnzuTOO+9srguCgLvvvptDDjmkjT0TQgghWqe01fIylZxzzjncd9993HDDDdx7773oxqm5hQsX7rxzdEqlEqtWrWLVqlVAOgF51apVrFmzBqUU559/Ppdddhm33XYbjz76KGeccQbZbJZTTjmlnd0WQgghWqdanJ+jxvcr/Bvf+AYLFizA930OPPBAfvnLX77ktitWrEAptdXy+OOPj/dVv6wDDzyQd73rXeTz+ea6448/nkMPPXTcbbZ1js4DDzzAokWLmo8vuOACAE4//XSWL1/ORRddRLVa5ZxzzmHLli286U1v4mc/+xmFQqFdXRZCCCF2Wrfccgvnn38+3/jGNzj00EP55je/ybHHHsv//d//MXfu3Jfc74knnqBYLDYfT58+fTK6OyGUmchAiR3Q4OAgHR0dDAwMjPiQhBBCiL82Gb8zho+xecV/UMxnx99OqULPke9l7dq1I/r6chflvOlNb+L1r389V199dXPdq1/9at75zneybNmyrbZfsWIFixYtYsuWLXR2do67r+20w87REUIIIaa0Cboz8pw5c0bcP25bBQuk81wffPDBEfenA1i8ePHL3p8O4IADDqCvr4+jjjqKu+66a2Je/yTZ4S8vF0IIIcRL29aIzrZs2rSJOI7HdH+6vr4+rr32Wg488EDq9Trf/va3Oeqoo1ixYgWHH374xL2I7UgKHSGEEKIdWr3pX2PfYrE4ptNsY7k/3V577cVee+3VfHzwwQezdu1avvzlL2+XQqdWq/HII4+wceNGkiQZ8dzf/u3fjqtNKXSEEEKINpjsrKtp06ZhWVbL96d785vfzM033zymY4/GT37yE0477TQ2bdq01XNKKeI4Hle7MkdHCCGEaIeW5ueM/a7Kruty4IEHjrg/HcCdd945pvvTPfzww/T19Y3p2KOxZMkSTjrpJNavX0+SJCOW8RY5ICM6QgghxC7jggsu4NRTT+Wggw7i4IMP5tprr2XNmjWcffbZQJoXuW7dOr71rW8BcOWVVzJ//nz22WcfgiDg5ptv5tZbb+XWW2+d8L5t3LiRCy64YMLTD6TQEUIIIdqhDVlXJ598Mps3b+Zzn/sc69evZ9999+WOO+5g3rx5AKxfv541a9Y0tw+CgAsvvJB169aRyWTYZ599+NGPfsRxxx03/n6/hPe85z2sWLGC3XfffULblfvoCCGEEA2TeR+dLQ/+lGI+N/52SmW6Djx6yvx+q1QqnHTSSUyfPp399tsPx3FGPH/uueeOq10Z0RFCCCFE2333u9/lpz/9KZlMphk9MUwpJYWOEEIIsVNRLZ66UlMr1PNTn/oUn/vc5/jEJz7RDPScCFLoCCGEEO2g1LiDOZv7TyFBEHDyySdPaJEDcnm5EEIIIXYAp59+OrfccsuEtysjOkIIIUQ7KN3iiM7UGquI45gvfelL/PSnP+W1r33tVpORr7jiinG1K4WOEEII0QZGaUwLxUor++6Ifve733HAAQcA8Oijj4547qUiKkZjVIXOI488MuaGX/Oa12DbUkcJIYQQ4pVtr1T0UVUi+++/P0opRnvLHa01Tz75JAsXLmypc0IIIcSUJaeuJsWoh1z+93//l+nTp7/idsYY9t1335Y6JYQQQkx5SrV25dQUuOrq3e9+N8uXLx/1DQ/f//7385WvfIXe3t5RH2NUhc4RRxzBHnvsQWdn56gaPfzww8lkMqPuhBBCCLHL0TpdWtl/J/ff//3fPP/886Pa1hjDD3/4Qz7/+c9PfKEz1vNmd9xxx5i2F0IIIcSuxxjDnnvuuV2PIbOFhRBCiDaQq67GNwF59uzZY9p+zIWOMYb/+q//4q677mLjxo0kSTLi+e9///tjbXJSxM88QpKxIYkxSYJyPJJSP8pxIYkh3wOV/vTvtpvulMQo18cENUy1DLaDCWpYXb0kQ/0klUGsnr7mtvHAZtyDT2zbaxRCiF3R79YPECeGomcRJgZXK2IDceMCmoydFgRxYnB0Oq8lTAzDl9dYSqEUuJaiPFievI7LZGSOOOKI7X6MMRc65513Htdeey2LFi1ixowZLV3bLoQQQgixPY250Ln55pv5/ve/z3HHHbc9+iOEEELsGmREZ1KMudDp6OiQ++MIIYQQrZJCZ1KM+V1aunQpl156KdVqdXv0RwghhBBiwox5ROekk07i3//93+nt7WX+/PlbhW499NBDE9Y5IYQQYqoySrV41dXUmiO7dOlSzjzzTObNmzeh7Y650DnjjDN48MEH+cAHPiCTkYUQQojxklNXI/zwhz/kC1/4AkcccQQf+tCHePe7343v+y23O+ZC50c/+hE//elPectb3tLywYUQQgghAB588EEeeeQRbrzxRj72sY/xkY98hPe973188IMf5A1veMO42x1zOThnzpxRZ1IIIYQQ4iUMZ121skwxr33ta/nKV77CunXruOGGG1i3bh2HHnoo++23H//6r//KwMDAmNscc6HzL//yL1x00UU8/fTTYz6YEEIIIRqGT121skxRSZIQBAH1eh1jDN3d3Vx99dXMmTOHW265ZUxtjfnU1Qc+8AEqlQq777472Wx2q8nIL7zwwlibFEIIIXY5EgGxtQcffJAbb7yRf//3f8fzPE477TS+/vWvs8ceewDpYMu5557LySefPOo2x1zoXHnllWPdRQghhBDiZb32ta/lscceY/HixVx//fWccMIJWJY1YpvTTjuNf/zHfxxTu2MudE4//fSx7iKE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ds[\"vel\"][1].plot()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3: Apply an Acoustic Signal Correlation Filter\n", + "\n", + "After removing data from bins at or above the water surface, we typically apply a filter based on acoustic signal correlation to the ADCP data. This helps to eliminate erroneous velocity data points, which can be caused by factors such as bubbles, kelp, fish, etc., moving through one or multiple beams.\n", + "\n", + "You can quickly inspect the data to determine an appropriate correlation value by using the built-in plotting feature of xarray. In the following example, we use xarray's slicing capabilities to display data from beam 1 within a range of 0 to 10 m from the ADCP.\n", + "\n", + "It's important to note that not all ADCPs provide acoustic signal correlation data, which serves as a quantitative measure of signal quality. Older ADCPs may not offer this feature, in which case you can skip this step when using such instruments." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAHyCAYAAADiG2SEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSpElEQVR4nOzdd3gU1d4H8O/M1iy7CUkoSTChBpAiIigCCigCChaECxZEQK+KoIJYkYugUuziK4rlKgKiCKLotYBIL1KlKF2lREioIdnNZuuc94/NDNkklGSX7Cb5fp5nHtiZM2d+50zhcObMjCSEECAiIiKqhORIB0BERER0sbChQ0RERJUWGzpERERUabGhQ0RERJUWGzpERERUabGhQ0RERJUWGzpERERUabGhQ0RERJUWGzpERERUabGhQ1Xa+PHjIUkSTpw4EelQotKOHTswbNgwtG/fHtWqVYMkSVi+fPkFry9Jkja9/vrrQcv+85//4Oabb0adOnUgSRIGDx5cYh4jR47U8rBarSGUhoiqIjZ0iOisNm3ahAULFiAhIQFdu3YtUx73338/fv31VwwYMCBo/ltvvYWTJ0/i1ltvhdFoPOv6jz/+OH799Vf07NmzTNsnoqpNH+kAiCh6DRw4EIMGDQIAfPXVV/jf//5X6jwuueQSXH311cXm2+12yHLg/1qzZs066/p169ZF3bp1UbNmzVJvm4iIPTpEADIyMtCnTx/ExsYiLi4O99xzD44fP14s3ZdffqndxrFarejRowe2bNkSlGbTpk248847Ua9ePcTExKBevXq46667cPDgwaB0n376KSRJwtKlS/HAAw8gMTERsbGxuPfee5GXl4esrCz0798f1atXR3JyMp588kl4vd6LWg9FqQ2RipY3EZGKVxoiALfffjsaNWqEr776CuPHj8eCBQvQo0ePoIbFpEmTcNddd6FZs2aYO3cuZs2aBbvdjmuvvRY7d+7U0h04cABNmjTBlClTsGjRIrzyyivIzMzElVdeWeJYoH//+9+Ii4vDnDlz8J///Aeff/45HnjgAfTq1QutWrXCV199hUGDBuGNN97AO++8c96yKIoCn8933snv94en8oiIopkgqsLGjRsnAIjHH388aP7s2bMFAPHZZ58JIYQ4dOiQ0Ov14tFHHw1KZ7fbRVJSkujfv/9Zt+Hz+YTD4RDVqlUTb7/9tjZ/+vTpAkCxPHv37i0AiDfffDNo/uWXXy6uuOKK85Zp0KBBAsB5p86dO583r8LmzZsnAIhly5Zd8DoAxLhx486brlq1amLQoEHnTDNo0CBRrVq1C942EZEQQnCMDhFQbKBs//79MWjQICxbtgwDBgzAokWL4PP5cO+998Ln82npzGYzOnfujGXLlmnzHA4HXnrpJcyfPx8HDhwI6jnZtWtXsW3ffPPNQb8vvfRSLFiwAL169So2/+effz5vWcaPH49HHnnkvOlsNtt50xARVXRs6BABSEpKCvqt1+uRmJiIkydPAgCOHj0KALjyyitLXL/weJO7774bS5YswdixY3HllVciNjYWkiShZ8+eyM/PL7ZuQkJC0G/1CaSS5rtcrvOWJS0tDZdccsl500mSdN40REQVHRs6RACysrJQp04d7bfP58PJkyeRmJgIAKhRowaAwJNHdevWPWs+OTk5+P777zFu3Dg8++yz2ny3241Tp05dpOiD3XfffZgxY8Z503Xu3LlU78QhIqqI2NAhAjB79my0adNG+z137lz4fD506dIFANCjRw/o9Xr89ddf6Nu371nzkSQJQgiYTKag+f/973/LbfAvb10REZ3Bhg4RgK+//hp6vR7dunXDjh07MHbsWLRq1Qr9+/cHANSrVw8vvvgixowZg7///hs33ngj4uPjcfToUWzYsAHVqlXDCy+8gNjYWHTq1AmvvfYaatSogXr16mHFihX4+OOPUb169XIpS7169VCvXr2w5OV0OvHjjz8CANatWwcAWLFiBU6cOIFq1arhpptuKnPeK1as0B7h9/v9OHjwIL766isAgd4mvjeHiMKBDR0iBBo648ePx7Rp0yBJEm655RZMmTIl6I29o0ePRrNmzfD222/jiy++gNvtRlJSEq688koMHTpUS/f5559jxIgRePrpp+Hz+dCxY0csXry42ODiiuDYsWPo169f0Lzx48cDCLzI78CBA2XOe9y4cVixYoX2e/ny5dqttGXLlmm9aUREoZCEECLSQRBR5SRJEsaOHYvnn38eOp2uTAOgFUWBoii4//77MX/+fDgcjosQKRFVVnxhIBFdVC+99BIMBgPeeOONMq0/atQoGAwGzJw5M8yREVFVwB4dIrpoNm3apP09NTUVtWvXLnUeGRkZ2uP9Op0OrVu3Dlt8RFT5saFDRERElRZvXRER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KQAiIqJKpwo2dPx+Pz799FMsWbIEx44dg6IoQcuXLl163jzat2+PjRs34uWXX0b79u3x2muvYf78+SHFVaYXBk6cOBFjxozBzp07oSgKmjVrBqu15HveREREVPmNGDECn376KXr16oUWLVqc92OfZ6PX6/Gf//wHd9xxB4YOHYoZM2Zg6tSpSEpKKlt+ZVoLgS6ptm3blnV1IiKiSqsqvhl5zpw5mDt3Lnr27Fmm9X///Xfcf//92LVrFy677DJ88sknWLJkCT755BN06NABTz31FB5++OFS51vqhs7tt99eYitNkiSYzWY0atQId999N5o0aVLqYIiIiCqFKnjrymg0olGjRmVef8iQIejUqRNmzpyJhQsXYujQoVi2bBnuu+8+3HLLLRg5ciRmzpyJX3/9tVT5lvo9OnFxcVi6dCl+++03rcGzZcsWLF26FD6fD19++SVatWqFNWvWlDZrIiIiqqCeeOIJvP322yjlW2s0e/bswbBhw9C0aVM8+uij2L9/v7asZs2amD17Nl544YVS51vqHp2kpCTcfffdmDp1KmQ50E5SFAUjRoyAzWbDnDlzMHToUDzzzDP8JAQREVVNVbBHZ/Xq1Vi2bBl++uknNG/ePOilwgDw9ddfn3P9Ll264MEHH8Sdd96JpUuXomPHjsXSdO/evdRxlbqh8/HHH2PNmjVaIwcAZFnGo48+ig4dOmDSpEl45JFHcO2115Y6GCIiosqgKo7RqV69Om6//fYyrz9z5kxMnDgR3377LVq1aoVnn302LHGVuqHj8/mwe/duNG7cOGj+7t27tU+wm83mMo+2JiIiqvCEFJhCWb+CmT59epnX3b59O1q0aIHXX3/9gtLv2LEDTZo0gV5//mZMqRs6AwcOxP3334/nnnsOV155JSRJwoYNGzBp0iTce++9AIAVK1agefPmpc2aiIiIqqDWrVsjKysLNWvWvKD07du3x9atWy/oiwylbui89dZbqF27Nl599VUcPXoUAFC7dm08/vjjeOaZZwAE7qHdeOONpc2aiIiocqiCY3Rat2593qeyBw8ejOuuu65YGiEExo4dC4ul5G8vFuXxeC44rlI3dHQ6HcaMGYMxY8YgNzcXAIp9cCwtLa202RIREVUaVXGMzo033ohp06ahZcuWuOqqqyCEwKZNm7B9+3YMHjwYO3fuxA033ICvv/4at912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1aoVnnnmGbz44ovQ6XS46667oCgKNmzYgAEDBkCvD4RZeLBeNGN5ohvLE90qU3kqU1mIKqqouHWlGj58OObPn4+0tDQcO3YMFosFc+fORYsWLSIdWpmwPNGN5Ylulak8laksRBVNVDV03G43du7cia1bt8JoNGLAgAGRDikkLE90Y3miW2UqT2UqC1FFE1UNHSIiIqJwiorByEREREQXAxs6REREVGmxoUNERESVFhs6REREVGmxoUNERESVFhs6REREVGmxoUNERESVFhs6REREVGmxoUNERESVFhs6VGbjx4/H5ZdfXu7bXb58OSRJgiRJ6N27d7lvP5zUspw+fTrseXfp0gUjR44Me75ERBUJGzpUIrUhcbZp8ODBePLJJ7FkyZKIxbhnzx58+umnEdt+tPv666/x0ksvRTSGHTt2oG/fvqhXrx4kScKUKVOKpbHb7Rg5ciTq1q2LmJgYdOjQARs3bgxKc7bj8LXXXtPSuN1uPProo6hRowaqVauGW2+9Ff/88895Yzx06BBuueUWVKtWDTVq1MBjjz0Gj8ejLXe5XBg8eDBatmwJvV5fqsb1/Pnz0axZM5hMJjRr1gzffPNN0PKVK1filltuQUpKCiRJwoIFCy44byK6MGzoUIkyMzO1acqUKYiNjQ2a9/bbb8NqtSIxMTFiMdaqVQvVq1eP2PajXUJCAmw2W0RjcDqdaNCgAV5++WUkJSWVmObf//43Fi9ejFmzZuH3339H9+7dccMNN+Dw4cNamsLHXmZmJj755BNIkoS+fftqaUaOHIlvvvkGc+bMwerVq+FwOHDzzTfD7/efNT6/349evXohLy8Pq1evxpw5czB//nw88cQTQWliYmLw2GOP4YYbbrjgsv/666+44447MHDgQGzbtg0DBw5E//79sX79ei1NXl4eWrVqhalTp15wvkRUSoLoPKZPny7i4uKKzR83bpxo1aqV9nvQoEHitttuExMnThS1atUScXFxYvz48cLr9Yonn3xSxMfHizp16oiPP/44KJ9//vlH9O/fX1SvXl0kJCSIW2+9Vezfv/+s8SxbtkwAENnZ2UHz582bJ1q0aCHMZrNISEgQXbt2FQ6HQ1v+ySefiKZNmwqTySSaNGki3n333aD1MzIyxB133CHi4+OFxWIRbdq0EevWrdOWv/fee6JBgwbCYDCIxo0bi5kzZwatD0B89NFHonfv3iImJkY0atRIfPvtt0FpfvjhB5Geni7MZrPo0qWLmD59elBZDhw4IG6++WZRvXp1YbFYRLNmzcQPP/xw1rp49913RaNGjYTJZBK1atUSffv21ZZ17txZjBgxQvtdt25dMXHiRDFkyBBhtVpFamqq+OCDD0pVB99995244oorhMlkEvXr19f274WoW7eueOutt4LmOZ1OodPpxPfffx80v1WrVmLMmDFnzeu2224T119/vfb79OnTwmAwiDlz5mjzDh8+LGRZFgsXLjxrPj/++KOQZVkcPnxYm/fFF18Ik8kkcnJyiqVXj/EL0b9/f3HjjTcGzevRo4e48847S0wPQHzzzTcXlDcRXTj26FBYLV26FEeOHMHKlSvx5ptvYvz48bj55psRHx+P9evXY+jQoRg6dCgyMjIABP7Hf91118FqtWLlypVYvXo1rFYrbrzxxqDbB+eTmZmJu+66C/fddx927dqF5cuXo0+fPhBCAAA++ugjjBkzBhMnTsSuXbswadIkjB07FjNmzAAAOBwOdO7cGUeOHMF3332Hbdu24emnn4aiKACAb775BiNGjMATTzyBP/74Aw899BCGDBmCZcuWBcXxwgsvoH///ti+fTt69uyJAQMG4NSpUwCAjIwM9OnTBz179sTWrVvx73//G88++2zQ+sOHD4fb7cbKlSvx+++/45VXXoHVai2xzJs2bcJjjz2GF198EXv27MHChQvRqVOnc9bTG2+8gbZt22LLli0YNmwYHn74YezevfuC6mDRokW455578Nhjj2Hnzp344IMP8Omnn2LixIkXvJ+K8vl88Pv9MJvNQfNjYmKwevXqEtc5evQofvjhB9x///3avM2bN8Pr9aJ79+7avJSUFLRo0QJr16496/Z//fVXtGjRAikpKdq8Hj16wO12Y/PmzWUtlpZ34XjUvM8VDxFdBJFuaVH0K02PTt26dYXf79fmNWnSRFx77bXab5/PJ6pVqya++OILIYQQH3/8sWjSpIlQFEVL43a7RUxMjFi0aFGJ8ZTUo7N582YBQBw4cKDEdVJTU8Xnn38eNO+ll14S7du3F0II8cEHHwibzSZOnjxZ4vodOnQQDzzwQNC8fv36iZ49e2q/AYj//Oc/2m+HwyEkSRI//fSTEEKI0aNHi0svvTSorM8880xQWVq2bCnGjx9fYgxFzZ8/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "ds[\"corr\"].sel(beam=1, range=slice(0, 10)).plot()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's beneficial to also review data from the other beams. A significant portion of this data is of high quality. To avoid discarding valuable data with lower correlations, which could be due to natural variations, we can use the `correlation_filter`. This function assigns a value of NaN (not a number) to velocity values corresponding to correlations below 50%.\n", + "\n", + "However, it's important to note that the correlation threshold is dependent on the specifics of the deployment environment and the instrument used. It's not unusual to set a threshold as low as 30%, or even to forgo the use of this function entirely." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "ds = api.clean.correlation_filter(ds, thresh=50)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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43W3i+OYww8/fMTtS6EjhBBCtIDSBko38WTkJvadKGbPns3+++9PZ2fnsLafN28elmWN6BhS6AghhBCiJZYuXTqi7f/yl7+M+BhS6AghhBCtoI1kaWZ/8bomxwCfEEII8UajdfPLFuDFF1/k/PPPH/X+W8anJIQQQkwwyjCaXrYEq1ev5rzzzhv1/jJ0JYQQQoiWeeKJJzb5+lNPPdVU+1LoCCGEEK0gc3QA2H333VFKEcfxBq8Nrh/Js3b+lRQ6QgghRCto3WShMzlmn3R2dnLRRRdx0EEHbfT1v/71rxx55JGjbl8KHSGEEEK0zB577MHKlSuZPXv2Rl/v7e3d6NWe4ZJCRwghhGgBeTJy4oQTTqBUKr3m67NmzeKaa64ZdftS6AghhBCtoJqco6Mmxxyd9773vZt8vb29nY9//OOjbn9ylINCCCGEmDR+//vfU6vVxqQtKXSEEEKIVhi866qZZZI67LDDWLFixZi0JUNXQgghRAvIHJ3X1szk4381eT8lIYQQQmzxWlro3HPPPRx55JHMmDEDpRS33nrrkNfjOGbhwoXMmDGDVCrFgQceyF//+tfWdFYIIYQYSzJ09Zq++93vMm3atDFpq6WFTqlUYrfdduOyyy7b6Otf/epXueSSS7jssst46KGHmD59Ou985zsZGBgY554KIYQQY2zwgYGjXibvoMxHPvIRwjDk1ltv5e9//3tTbbV0js5hhx3GYYcdttHX4jjm0ksv5ZxzzuF973sfANdeey3Tpk3jhz/8ISeccMJG96vVakNmavf39499x4UQQogmNRvMOdlCPT/0oQ+x//77c/LJJ1OpVNhzzz157rnniOOYH//4x7z//e8fVbsTthxcunQpq1ev5uCDD26scxyHAw44gPvvv/8191u0aBGFQqGx9PT0jEd3hRBCCNGEe+65h/322w+AW265hTiO6e3t5Zvf/CYXXHDBqNudsIXO6tWrATYYo5s2bVrjtY05++yz6evrayzLly/frP0UQgghRkXr5pdJpK+vj46ODgBuv/123v/+95NOpzniiCN45plnRt3uhP+U/jWx9PVSTB3HIZ/PD1mEEEKICadFk5G/853vMHfuXFzXZY899uDee+99zW2XLFmCUmqD5cknnxztu35NPT09PPDAA5RKJW6//fbGiM769etxXXfU7U7YQmf69OkAG1y9WbNmzZjNxBZCCCG2JDfeeCOnnnoq55xzDo899hj77bcfhx12GMuWLdvkfk899RSrVq1qLNtuu+2Y9+3UU0/lox/9KFtttRUzZszgwAMPBJIhrV122WXU7U7YQmfu3LlMnz6dO++8s7HO8zzuvvtu9tlnnxb2TAghhGie0kbTy0hdcsklfPKTn+Q///M/edOb3sSll15KT08Pl19++Sb36+rqYvr06Y3F2AwToU866SQefPBBrr76au677z50fWhu3rx5Tc3RaeldV8VikWeffbbx9dKlS3n88cfp6Ohg1qxZnHrqqVx44YVsu+22bLvttlx44YWk02k+8pGPtLDXQgghxBhQTc6zUcm+/3p3seM4OI6zweae5/HII49w1llnDVl/8MEHb/ImH4D58+dTrVbZcccdOffcc1mwYMHo+70Je+yxB3vssceQdUcccURTbba00Hn44YeHfFinn346AB//+MdZvHgxZ555JpVKhZNOOon169fztre9jd/85jfkcrlWdVkIIYSYUP717uIvfelLLFy4cIPt1q5dSxiGI7rJp7u7myuvvJI99tiDWq3GD37wAw466CCWLFnC/vvvP2bvYXNqaaFz4IEHbjLPQinFwoULN/oNE0IIId7IRjv89Or9AZYvXz7kxpuNXc0Zst8IbvLZfvvt2X777Rtf77333ixfvpyLL75YCh0hhBBCbMLgk5Gb2R+GfYfxlClTMAyj6Zt89tprL66//vqR9bWFJuxkZCGEEEKMHdu22WOPPYbc5ANw5513jugmn8cee4zu7u6x7t5mI1d0hBBCiFZo9qF/o9j39NNP5+ijj2bPPfdk77335sorr2TZsmWceOKJQPLQ3RUrVnDdddcBcOmllzJnzhx22mknPM/j+uuv56abbuKmm24afb83oVqt8sQTT7BmzRqiKBry2r//+7+Pqk0pdIQQQogWaEXW1VFHHcW6des4//zzWbVqFTvvvDO33XYbs2fPBmDVqlVDnqnjeR5nnHEGK1asIJVKsdNOO/HrX/+aww8/fNT9fi233347xxxzDGvXrt3gNaUUYRiOql0Vb2o28CTQ399PoVCgr69PnpIshBBik8bjd8bgMV7+w6/IZzOjb6dYouNt75o0v9+22WYbDjnkEL74xS+O6YOBZY6OEEIIIVpuzZo1nH766WOefiCFjhBCCNEKLcq6mqg+8IEP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9a1v8YUvfIGTTjqJNWvWMGPGDE444YQxv3IkhBBCTHa2bbPHHntw55138t73vrex/s477+Td7373RvfZe++9+eUvfzlk3W9+8xv23HPPMc+kGrTddtux7bbbAmNz1WjUTxtKp9PsueeevPWtb90sRQ5ALpfj0ksv5fnnn6dSqfCPf/yDCy64ANu2N8vxhBBCiPESj8EyUqeffjrf//73ufrqq/n73//OaaedxrJlyzjxxBOB5IaeY445prH9iSeeyPPPP8/pp5/O3//+d66++mquuuoqzjjjjFG+60277rrr2GWXXUilUqRSKXbddVd+8IMfNNXmiK/ovPe9791ohaWUwnVdttlmGz7ykY+w/fbbN9UxIYQQYjKL6neENbP/SB111FGsW7eO888/n1WrVrHzzjtz2223NYaHVq1aNeRW7rlz53Lbbbdx2mmn8e1vf5sZM2bwzW9+k/e///2j7/hruOSSS/jCF77AySefzL777kscx/z+97/nxBNPZO3atZx22mmjanfEhU6hUODWW2+lra2NPfbYgziOeeyxx+jt7eXggw/mxhtv5KKLLuK3v/0t++6776g6JYQQQojN46STTuKkk07a6GuLFy/eYN0BBxww5s/J25hvfetbXH755UOuKL373e9mp512YuHCheNX6EyfPp2PfOQjXHbZZY07oqIo4pRTTiGXy/HjH/+YE088kc997nNjHgkhhBBCTBZxHDfuYBrt/pPJqlWr2GeffTZYv88++7Bq1apRtzviOTpXXXUVp5566pDbvrXWfOYzn+HKK69EKcXJJ5/MX/7yl1F3SgghhJjsBoeumlkmk2222Yaf/OQnG6y/8cYbG5OTR2PEV3SCIODJJ59ku+22G7L+ySefJKw/Rdh13c0StS6EEEJMJpOsVmnKeeedx1FHHcU999zDvvvui1KK++67j9/+9rcbLYCGa8SFztFHH80nP/lJPv/5z/OWt7wFpRR//OMfufDCCxvjanfffTc77bTTqDslhBBCiC3L+9//fv7whz/wjW98g1tvvZU4jtlxxx354x//yPz580fd7ogLnW984xtMmzaNr371q7z44otA8jjo0047jc997nNAkptx6KGHjrpTQgghxGTXiruuJro99tiD66+/fkzbHHGhYxgG55xzDueccw79/f0AGzx6etasWWPTOyGEEGKSksnINOqI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p0/nj3/8I5ZlUalUWt2lplx66aXMmTOHE044gd12240rrriCMGwiIbmFvv71r7PttttyxBFH8K53vYsHHnhgwmfWbYr8LBBi/MlzdDajZ555hhNPPJHly5dzzjnn8OSTT7JkyRJyuRy/+c1vWt29UYnjmHK5zNFHH80//vEPHMfhrrvuIpPJtLpro/KPf/yD4447jo9+9KOccMIJre5O077whS/w05/+lEsuuYTtttuO6667jm9961usXLmSVCrV6u6NyCWXXMK3vvUtLr74Yvr7+/n5z3/O73//e376059y4IEHtrp7IyI/C4RooVhsFmEYxl//+tfjww8/PF6xYkVj/U9/+tN4t912i//+97+3sHfN+dOf/hTPnz8/Xrp0aZzJZOJvf/vbjdeiKGphz0bu61//ejx//vw4juP4+eefj7/whS/E3//+9+N77723xT0bubVr18Zve9vb4osvvrix7umnn4533HHH+KWXXorj+I3x/QnDMPZ9Pz7ssMPiT33qU0Nee/vb3x4feuih8WOPPdaazo2C/CwQorVk6GozCYKAbbfdlk9/+tPMmDGjcWk6m82yevVqOjs7W9zDkYlfdeFPKUVPTw9z5szhxBNP5Mtf/nLj9Vqt1qoujshgf5999lne+c538n//93/sueeePPTQQ1xxxRUcdNBBXH755W+oYaxMJsMTTzwx5BH755xzDt3d3fz0pz9l5cqVLezd8GmtiaKIP//5z7z5zW8GkjlUkAzLPf3009x+++1vqHNtMv0seLXJ8LNATH5S6IyR6667jtNOO43rrruOF198Edu2OfLIIzn88MMBGvMK+vv7mTFjxoQfRnj1+1mzZs2QeRHLly9v/NK8+OKLsW2bd7zjHeyyyy7cfvvtreryJr3W+2lra+MnP/kJt912GxdccAG/+tWveOihh/jMZz7Dtddey5IlS1rb8dfwr+8HwHVdTj/9dL74xS/ynve8h0KhwDPPPMOuu+7KN7/5Td73vvfxq1/9qsU939Dtt98+pJCOogjbttlnn324/vrrgeS9RVHEHnvswcEHH8xNN93E2rVrW9XlTXr1+4njGMMwOOKII96wPwv+//buPC6qcv8D+OewDYMsAYIDCISpLIkYeE30KhruUphcQTNCr1GWhpRa3rgGai64lF7LMq9aGVfIK2ouuYuIICFBoKDWDQQVRRNU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n/FETnQyMzPpL3/5CwmCQFu3biWi+rOiGv/HERkZSTk5OUrbbd68mQwMDOjGjRtqrbc9nKce53n8dCkLEedpoK15GHsUnriJTnZ2No0dO5YmTJhAwcHB1LNnT3GdQqEQP7U0fGfd2N69e8nGxoaSk5PVVm97OM99nOfx0qUsRJynMW3Mw9ij8sSdXt61a1d4e3sjOjoaERERqKmpQUxMDADlYx9MTEyabZuZmQlXV1f07dtXnSW3ifPcx3keL13KAnCexrQxD2OPjKZnWurUsPu24S7I9+7do0WLFpGlpSWVlJQQUfOzDq5fv05XrlyhBQsWkIODg3iRL00f79G4Bs7DeR43XcrSuAbOo515GHuUnqiJTmMNu3HPnj1L/fr1o4kTJxKR8h95fn4+zZ8/n5ydncnd3V3j11xpC+fhPOqiS1mIOI+252Hsz9K5iY5cLhdvCNhUQ7tCoRD/6GtqamjTpk1kZmZGJ06cEMcgqr+P0L59+zR6LxrOw3nURZeyNNTCebQ3D2PqolMTnejoaPL396fx48fTrl27xN24DXfabarhk09xcTGNGzeOBg4cSEVFRRQUFCTez0WTOA/nURddykLEebQ9D2PqpBMTnZycHPLy8qI+ffrQunXryM/Pj3x8fCgpKUmpX0JCAhkbG9OWLVuajREfH0+CIJCenh49++yzVFhYqK7ym+E8nEdddCkLEefR9jyMaYJOTHQWLFhAI0aMEHfflpeXk6mpqXjRrLKyMgoJCSEbGxtauXIlVVVVidvW1NTQrl27yNramnr06EEHDhzQSIbGOA/nURddykLEebQ9D2OaYKDps77+DCJCRUUFUlNT4ejoKLbfvHkTgwYNQufOnQEApqamCAoKwqeffgo7OzulMaqrq7Fr1y68++67iIqKUmv9TXEezqMuupQF4DzanocxTepw97pKSUmBk5MTnJycxLa3334bycnJePHFF2FsbIzY2Fg4OTnhjz/+wODBg/H222/D398fRARBEMTtGpbr6uqgr6+viTich/NwlofEebQ7D2NaQ417j/6UI0eOkIuLCzk7O5OdnR2FhoZSRkYGERGVlpbSl19+STNnzqQuXbrQd999R7du3aIjR45QSEgIjRw5stWzFTSF83AeddGlLEScR9vzMKZtOsREp7i4mHx9fSkqKoouXrxIu3fvpj59+pC/vz+dP39e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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ds[\"vel\"][1].plot()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Rotate Data Coordinate System\n", + "\n", + "After cleaning the data, the next step is to rotate the velocity data into accurate East, North, Up (ENU) coordinates.\n", + "\n", + "ADCPs utilize an internal compass or magnetometer to determine magnetic ENU directions. You can use the set_declination function to adjust the velocity data according to the magnetic declination specific to your geographical coordinates. This declination can be looked up online for specific coordinates.\n", + "\n", + "Instruments save vector data in the coordinate system defined in the deployment configuration file. To make this data meaningful, it must be transformed through various coordinate systems (\"beam\"<->\"inst\"<->\"earth\"<->\"principal\"). This transformation is accomplished using the `rotate2` function. If the \"earth\" (ENU) coordinate system is specified, DOLfYN will automatically rotate the dataset through the required coordinate systems to reach the \"earth\" coordinates. Setting `inplace` to true will modify the input dataset directly, meaning it will not create a new dataset.\n", + "\n", + "In this case, since the ADCP data is already in the \"earth\" coordinate system, the `rotate2` function will return the input dataset without modifications. The `set_declination` function will work no matter the coordinate system." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data is already in the earth coordinate system\n" + ] + } + ], + "source": [ + "dolfyn.set_declination(ds, 15.8, inplace=True) # 15.8 deg East\n", + "dolfyn.rotate2(ds, \"earth\", inplace=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To rotate into the principal frame of reference (streamwise, cross-stream, vertical), if desired, we must first calculate the depth-averaged principal flow heading and add it to the dataset attributes. Then the dataset can be rotated using the same `rotate2` function. We use `inplace=False` because we do not want to alter the input dataset here." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "ds.attrs[\"principal_heading\"] = dolfyn.calc_principal_heading(ds[\"vel\"].mean(\"range\"))\n", + "ds_streamwise = dolfyn.rotate2(ds, \"principal\", inplace=False)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Average the Data\n", + "\n", + "As this deployment was configured in \"burst mode\", a standard step in the analysis process is to average the velocity data into time bins. \n", + "\n", + "However, if the instrument was set up in an \"averaging mode\" (where a specific profile and/or average interval was set, for instance, averaging 5 minutes of data every 30 minutes), this step would have been performed within the ADCP during deployment and can thus be skipped.\n", + "\n", + "To average the data into time bins (also known as ensembles), you should first initialize the binning tool `ADPBinner`. The parameter \"n_bin\" represents the number of data points in each ensemble. In this case, we're dealing with 300 seconds' worth of data. The \"fs\" parameter stands for the sampling frequency, which for this deployment is 1 Hz. Once the binning tool is initialized, you can use the `bin_average` function to average the data into ensembles." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "avg_tool = api.ADPBinner(n_bin=ds.fs * 300, fs=ds.fs)\n", + "ds_avg = avg_tool.bin_average(ds)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "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: 183, dirIMU: 3, range: 28, 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.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",
+       "  * beam            (beam) int32 1 2 3 4\n",
+       "  * 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.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",
+       "    U_std           (range, time) float32 0.04232 0.04293 0.04402 ... nan nan\n",
+       "    temp            (time) float32 14.49 14.59 14.54 14.45 ... 13.62 13.56 13.5\n",
+       "    pressure        (time) float32 9.712 9.699 9.685 9.67 ... 9.58 9.584 9.591\n",
+       "    mag             (dirIMU, time) float32 72.37 72.4 72.38 ... -197.1 -197.1\n",
+       "    accel           (dirIMU, time) float32 -0.3584 -0.361 ... 9.714 9.712\n",
+       "    ...              ...\n",
+       "    boost_running   (time) float32 0.1267 0.1333 0.13 ... 0.2267 0.22 0.22\n",
+       "    heading         (time) float32 3.287 3.261 3.337 3.289 ... 3.331 3.352 3.352\n",
+       "    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.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",
+       "    inst_model:                Signature1000\n",
+       "    ...                        ...\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.1898
" ], - "source": [ - "# Beam-variance equation for 4-beam ADCPs\n", - "stress_vec = avg_tool.reynolds_stress_4beam(ds_beam, noise=ds_avg['noise'], orientation='up', beam_angle=25)\n", - "upwp_ = stress_vec[1]\n", - "vpwp_ = stress_vec[2]\n", - "wpwp_ = ds_avg['wpwp_bar'] # Found from the vertical along-beam velocity (vel_b5) above\n", - "\n", - "# OR #\n", - "\n", - "# Beam-variance equation for 5-beam ADCPs\n", - "tke_vec, stress_vec = avg_tool.stress_tensor_5beam(ds_beam, noise=ds_avg['noise'], orientation='up', beam_angle=25)\n", - "upwp_ = stress_vec[1]\n", - "vpwp_ = stress_vec[2]\n", - "wpwp_ = tke_vec[2]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The shear components can be found from the aptly named functions `dudz`, `dvdz`, and `dwdz` in ADPBinner. These functions, which are useful alone in their own right, estimate the shear in the velocity vector between respective depth bins. There is always correlation between velocity measurements in adjacent depth bins, based on ADCP operation principles, which is why \"estimation\" is also used here for shear.\n", - "\n", - "The shear functions operate on the raw velocity vector in the principal reference frame and need to be ensemble-averaged here. This can be done by nesting the `d*dz` function within the ADPBinner's `mean` function. With the ensemble shear known, we can put all the components together to get a production estimation." - ] - }, + "text/plain": [ + "\n", + "Dimensions: (time: 183, dirIMU: 3, range: 28, 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.001030683 ... 2...\n", + " * dirIMU (dirIMU) " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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GFq6ea+e/XSTXvu8VPsam3pjvG6nzh5WoEuO66nj+2Qn7V+KgXZx7P/EMr0kRIMGiDGX06GzhhXorGEFWl1Wpec+26yXlm5RWWWdfv/uGj383jpdelxPXXdyH3XP4h0LABJDRW2jXlq6Rc9+tllflVU1z++fl65LjuupC0cVqWuaN445BJCsaNAAh9DAggz9+rwhumPiQL25olR/mb9eX5VV6a/vl+jJDzfolP65+t7oYn17cJ78Ht6CDaBzCYYMfbRul15YskVvrihVfaDpnVw+t1PnDi/UpccVa3QvRncEOopnaGKDBg1wGPjcLn1nVA9NGlmk99bs0CPvrdMnJbs1b/UOzVu9Q5l+ty4eU6xrTurDm7EBxN26HdX616ItennpVpVV1jXPH1SQoUuP66lJI4u4dRaIARo0sZE0DZqlGyuVntH0PWQYzfODQcOyXGMoPB0wQraw8LRhjaZAlHhmQdNy5vQkyWk6CC8aWRgxDSQuh8Oh8QPzNH5gntbtqNaLS7boxSVbVVpR19xrc/bR3XX9SX00vEdW0lZMAA6/usag3vqiVHM+2axPN+xunp+V4tF5I7rru8f00MjiLtRLiOrjdXst0+bfPV63dWActzM87fdYw7ym6RTbHQyW33G2n1y+/euoqmxse6aT3IIFC/S73/1OixcvVmlpqV566SVNmjQpapz58+drypQpWrlypQoLC3X77bfrxhtvPDwZbkXSNGiAzqZvt3TdduYgTTljoBas2aG/vr9eH6zdpdc+36bXPt+mgfkZ+t7oHrpgVCHvbABwyHxVVqlnP92sF5dsUWVd08svnQ7pW4Py9L3RPTR+UJ58bm6JBQ4Fh6PpE8v02qumpkYjRozQNddco+9+97sHXb6kpERnn322fvCDH+jpp5/WBx98oJtuukndunVrU/xDgQYNEGcup0PjB+Vp/KA8rdxWoccXluj1FaVavb1Kv3nzS9339lf69qA8XTG2l07sy1u1AXxztQ0Bvf55qeZ8tklLN+1tnl/UJUWXHFusi8YUqyCLP6QAyWDixImaOHFim5d/5JFH1LNnT82aNUuSNHjwYC1atEi///3vadAAkIYWZmnm5JG66/yhen35Nj2/eIuWbtqrd1dt17urtqt3TqouO76nJo0qotcGQLscePnls59t1qvLtqm6vqk3xu106Iwh+brkuJ46uR9/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10svvRSDrWi/DjVoPv30U7333nsqLy9vUQHPnDkzJhkDAAAAcGjNnDlT1113na6//npJ0qxZs/TOO+/o4Ycf1owZM1os//HHH6t37976yU9+Iknq06ePbrjhBv32t79t0/r+9re/KTc3V+ecc44k6fbbb9ejjz6qIUOGaM6cOW0eCMCs3e+huffee3XCCSfoySef1KJFi7R06dLmz7Jly9qdAQAAACAZHRi2OZYfqemVK+ZPfX19q+tvaGjQ4sWLNWHCBMv8CRMm6MMPP2w1zrhx47Rlyxa9+eabMgxD27dv1/PPP9/cQDmYe++9VykpTXdMfPTRR3rooYf029/+Vrm5ufrpT3/a1qKzaHcPzZ/+9Cc98cQTuvrqqzu0QgAAAACHjv1Z9rvuukvTpk1rsdzOnTsVDAaVn59vmZ+fn6+ysrJW0x43bpyeeeYZTZ48WXV1dQoEAjr//PP14IMPtilvmzdvVr9+/SRJL7/8sr73ve/phz/8oU488USddtppbUrDrt09NE6nUyeeeGKHVgYAAACgyYFnaGL5kZoaDRUVFc2fqVOnHiQf9uf9jIjvoFy1apV+8pOf6Ne//rUWL16st99+WyUlJbrxxhvbtM3p6enNAwi8++67Ov300yVJfr9f+/btixY1onb30Pz0pz/Vn//8Z82aNatDKwQAAABw6IZtzszMVGZm5kGXz83NlcvlatEbU15e3qLX5oAZM2boxBNP1G233SZJGj58uNLS0nTyySfrnnvuUffu3aOu84wzztD111+vUaNGac2aNc23qq1cuVK9e/c+aJ5b0+4Gzc9//nOdc8456tu3r4YMGdLifTMvvvhihzICAAAA4PDxer0aPXq05s6dq+985zvN8+fOnasLLrig1Ti1tbVyu61NCJeraRTMtoza9+c//1m//OUvtXnzZr3wwgvNr4ZZvHixLr300g5tR7sbND/+8Y81b948jR8/Xjk5ORG7owAAAABE5lDLV3V80/Taa8qUKbriiis0ZswYjR07Vo8++qg2bdrUfAvZ1KlTtXXrVv3973+XJJ133nn6wQ9+oIcfflhnnnmmSktLdeutt+q4445TYWFhxPU8+uijOv/881VQUKCHHnqoRfj06dM7kPsm7W7Q/P3vf9cLL7zQ5pEMAAAAAHROkydP1q5du3T33XertLRUw4YN05tvvtk8fHJpaak2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9tlnN88bPny4iouL9atf/UqTJk1qd/rtbtCkpqZq9uzZ+t3vfqd169bJMAz169dPaWlp7V75wRx77LF66aWXNHXqVN19993q06ePZs2ape9///sxXxcAAABwOB3oWYllep3dihUr1KdPnxbz+/Tpo1WrVnUozQ6/WDMtLa1DD+2017nnnqtzzz33kK8HAAAAwKE1ePBg3XPPPXr88cfl9/slNb125Z577tHgwYM7lGa7GzTjx4+P+jDPf//73w5lBAAAAEgmyTLKmdkjjzyi8847T8XFxRoxYoQk6fPPP5fD4dDrr7/eoTTb3aAZOXKkZbqxsVHLli3TF198oauuuqpDmQAAAACSTTLecnbccceppKRETz/9tL766isZhqHJkyfrsssu6/AjLO1u0Pzxj39sdf60adNUXV3doUwAAAAASA6pqan64Q9/GLP0YvZC0csvv1xPPPFErJIDAAAAjmgOR+w/ieD//u//dNJJJ6mwsFAbN26U1NRp8sorr3QovZg1aD766KPmB3sAAAAAwO7hhx/WlClTNHHiRO3Zs6f5RZpdu3bVrFmzOpRmu285s7880zAMlZaWatGiRfrVr37VoUwAAAAAycbpcMgZw26VWKZ1qDz44IN67LHHNGnSJN13333N88eMGaOf//znHUqz3Q2azMxMywgKTqdTAwcO1N13360JEyZ0KBMAAAAAjnwlJSUaNWpUi/k+n081NTUdSrPdDZqnnnqqQysCAAAAEOZUDJ//iHFah0qfPn20bNky9erVyzL/rbfe0pAhQzqUZrsbNEcddZQ+++wz5eTkWObv3btXxxxzjNavX9+hjAAAAADJJNYP8ifAHWe67bbbdPPNN6uurk6GYejTTz/VnDlzNGPGDP31r3/tUJrtbtBs2LCh+eEds/r6em3durVDmQAAAABw5LvmmmsUCAR0++23q7a2VpdddpmKior0pz/9SZdcckmH0mxzg+bVV19t/v7OO+8oKyureToYDOo///mPevfu3aFMAAAAAMnGqRgPCqAE6KKR9IMf/EA/+MEPtHPnToVCIeXl5X2j9NrcoJk0aZIkyeFw6KqrrrKEeTwe9e7dW3/4wx++UWYAAAAAHNkCgYDee+89rVu3Tpdddpkkadu2bcrMzFR6enq702tzgyYUCklqepDns88+U25ubrtXBgAAAKBJMj5Ds3HjRp11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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "from matplotlib import pyplot as plt\n", + "import matplotlib.dates as dt\n", + "\n", + "ax = plt.figure(figsize=(10, 6)).add_axes([0.14, 0.14, 0.8, 0.74])\n", + "# Plot flow speed\n", + "t = dolfyn.time.dt642date(ds_avg[\"time\"])\n", + "plt.pcolormesh(t, ds_avg[\"range\"], ds_avg[\"U_mag\"], cmap=\"Blues\", shading=\"nearest\")\n", + "# Plot the water surface\n", + "ax.plot(t, ds_avg[\"depth\"])\n", + "\n", + "# Set up time on x-axis\n", + "ax.set_xlabel(\"Time\")\n", + "ax.xaxis.set_major_formatter(dt.DateFormatter(\"%H:%M\"))\n", + "\n", + "ax.set_ylabel(\"Altitude [m]\")\n", + "ax.set_ylim([0, 12])\n", + "plt.colorbar(label=\"Speed [m/s]\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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CiBJEmw2G3755RfMmjULN998s8cFISIiIiJqS4QX/vmaTZs24Y477nAan5ycjIKCAo/jNjnJefrpp5GWlobk5GSUl5eje/fuGDp0KIYMGYLHH3/c44IQEREREbUlvCfH/pyc0tJSp/F79+5FbGysx3GbnOT4+/vjgw8+wL59+/DJJ5/g/fffxx9//IH33nsPZrPZ44K4cuzYMdx4442Ijo5GSEgI+vbti6ysLN3XQ0RERER0Pgk03Jejy2D0Bnng6quvxj//+U/U1dUBACRJwtGjR/Hwww/j2muv9Tiuxw8D7dixIzp27Ojxit1x+vRpXHzxxRgxYgT+97//IS4uDgcPHkRkZKRX10tERERERN7373//G1deeSXi4uJQVVWFYcOGoaCgAIMHD8bTTz/tcVy3kpyZM2e6HXD+/PkeF0btueeeQ2pqKpYsWeIY1759e93iExEREREZRffe1XSMdb5ERETg559/xk8//YQtW7bAZrOhf//+GDVqVLPiupXkbN26VfE+KysLVqsVXbp0AQDs27cPZrMZAwYMaFZh1L788kuMGTMGf/7zn7FmzRokJyfjzjvvxO233+5ymZqaGtTU1DjeN3aNHxERERGR0ez30eh3kZkvXq521mWXXYbLLrtMt3huJTmrVq1yvJ4/fz7Cw8PxzjvvoF27dgDsl5XdcsstuPTSS3UrGAAcOnQIr7zyCmbOnIlHH30Uv/32G+69914EBga67Mlt3rx5mDt3rq7lICIiIiLSmwRAgn7NL77SkPPSSy+5Pe+9997r0TokIUSTkr7k5GSsWLECPXr0UIzfuXMnRo8ejby8PI8K0piAgABccMEFWL9+vWPcvffei02bNmHDhg2NLtNYS05qaip2bt6O8LDwRpawKd5J8r4YJOWuIoRNMacr6inC1TthU01pmKbe4SWpoVMHm6hzuW6nFF4WxiT5K2eVxVQvplUWd3ursGlMU9eR8r16SdlUVZ0pP6OmfLXlW6y1nEaFkpfJ67ophymt5Tyd5mo+79A60qiOSsp3su+HVVJ+U82yJU/vXaGYlv32N47X6zcrv2Nby4sdr4tV1RKEesfrClO9YlqECHC89lcdNYJNDX9fqxVWxbRQU8NxqsamnObup2JVzak8Sqhr0HVU+bz1qmOPWXK9HwjFa9fx1b++JllMm2qifH3e+DY05STLpvh9cG8+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1WsUGt94xf6pWrXG7qMZU4t8HU7HSMn1vuQpeTnV31PlMUS5Rvl+rlXX6u+D/J1Z4zIk9afs7jFLvT45k6T+bBtYm3DcdZe6XuTHIvV5iPz8TH3MCjxzvmTylXtT2vDlagCQkpKCJ554Ak888QRWrVqFt956C3feeSfuueceXHfddbj11lsxaNAgj2K3mSSHiIiIiKglkSTJ+Y/JzYznq0aMGIERI0agrKwMH374IR599FG8+eabqK+v9ygekxwiIiIiIiO08ZYctUOHDuHtt9/G22+/jZKSEowaNcrjWExyiIiIiIiMwCQHVVVV+O9//4slS5Zg7dq1SEtLw1//+lfccsstSE1N9TgukxwiIiIiIiNIJuf7sJsbz0esX78eS5YswSeffILa2lpMnDgR33//fbNab+SY5BARERERGcFsgmTWMzHxnSTnkksuQZ8+ffD000/jL3/5C9q1a6drfCY5RERERERGaMOXq23evBn9+/f3WnwmOUREREREhtA5ydGtw3Tv82aCAzDJISIiIiIyRhtuyfE2JjlERERERAaQTBIkk47PydExlq9jkkNEREREZAS25HgNkxwiIiIiIiOYTPZBz3gEgEkOEREREZExJOjbV4CPNOT069cPkputTlu2bPFoHT6V5MybNw+PPvoo7rvvPixcuNDo4hARERERec4k2Qc94/mAiRMnen0dPpPkbNq0Ca+99hp69+5tdFGIiIiIiJqvjd6TM3v2bK+vwycu3CsvL8df/vIXvP7667o/DZWIiIiIyBASGhIdXQajN6jl8Ikk56677sJVV12FUaNGnXPempoalJaWKgYiIiIiopZGkiTdB19jtVrx73//GxdeeCESEhIQFRWlGDzV4pOcpUuXYsuWLZg3b55b88+bNw8Wi8UxpKamermEREREREQeOHtPjp6Dj5k7dy7mz5+PyZMno6SkBDNnzsSkSZNgMpkwZ84cj+O26CQnJycH9913H95//30EBQW5tcwjjzyCkpISx5CTk+PlUhIREREReYBJDj744AO8/vrrmDVrFvz8/HD99dfjjTfewD/+8Q9s3LjR47gtuuOBrKwsFBYWYsCAAY5xVqsVa9euxcsvv4yamhqYzWbFMoGBgQgMDHSKJWxWCJsVACCZZMtIQjmjrJlP8vDCRvVyQv5eMUmZY0qSWfZaOU0eQ1ItJzSKKd88m6hXTbW5XlAxzayaJi+LcDlNPUWIhjHq1lSheK1cUrbYOe6nEy7fyddtj6MunSvqFbq3nPNcQvZKOdUme6s+Nmltg7xo6piKGK538UaWk31+TnXmOqb8rbrGlMu5julMvi9p1bvr+lQXxqbYmVzvZ0356suXU5fSpFFnyvUrV2iTRdLaA52+Y7IxNqfP3fVG+QX7y9ZdrZjmLzsW+Qv1cUm2Po1yqqdZZVOt6s9P9t6s2nqrUyU2zukYInttEu7Xdb1wfYzU+guhPKZJ47M1S+rfigbqbZV/flrHSJt6r9CoMrNs9er1ubt9ZvUxy82yqHdH+frVMV3FV6/D+dgq+xyc6lr+ubteofN3TGOa4iut3gcb1qGuF0nxm+qa+jOS7z9Oda1RTnm9uP4FUB0vofyuav2+O6/f/bK5oq4Xs3Tuv9HbfOWyrTba8YBcQUEBevXqBQAICwtDSUkJAGDcuHF44oknPI7bopOckSNHYseOHYpxt9xyC7p27YqHHnrIKcEhIiIiIvIdOic5PtjzQEpKCvLz85GWloZOnTphxYoV6N+/PzZt2tRow4W7WnSSEx4ejp49eyrGhYaGIjo62mk8EREREZFPMUHfm0da9I0ojbvmmmvw448/YtCgQbjvvvtw/fXX480338TRo0fx97//3eO4LTrJISIiIiJqtXi5Gp599lnH6z/96U9ITU3FL7/8gk6dOmHChAkex/W5JGf16tVGF4GIiIiIqPmY5GDt2rUYMmQI/PzsacmgQYMwaNAg1NfXY+3atRg6dKhHcX2wUYuIiIiIqBWQvDD4mBEjRuDUqVNO40tKSjBixAiP4/pcSw4RERERUatgNtkHvdh8r/1CCNFoD6BFRUUIDQ31OC6THCIiIiIiI+jd+uJDLTmTJk0CYO8if9q0aYqe1KxWK7Zv344hQ4Z4HJ9JDhERERGREdrwPTkWiwWAvSUnPDwcwcHBjmkBAQG46KKLcPvtt3scn0kOEREREZER2nBLzpIlSwAA7du3x6xZs5p1aVpjmOQQERERERlAkqRG70dpTjxfM3v2bK/E9b27k4iIiIiIWgOTpP/gY44fP46bbroJSUlJ8PPzg9lsVgyeYksOEREREZER2vDlamdNmzYNR48exRNPPIHExETdWqOY5BARERERGUHv1hcfbMn5+eefsW7dOvTt21fXuExyiIiIiIiM0IZ7VzsrNTUVQgjd4/KeHCIiIiIiI0iwn43rNfhejoOFCxfi4YcfxuHDh3WNy5YcIiIiIiIjsCUHU6ZMQWVlJTp27IiQkBD4+/srpp86dcqjuExyiIiIiIiMwI4HsHDhQq/EbTtJjmSyD42Nl7+VGqpEiDrVzK6vF5TkcZyyaEk2ySx7rS6P5OI1YJOt2ywpu9OTNMolnyJJVuU0YWt8Rqj7WZfUE2Vv3O/aT76Kplx6KWRLmoR6mntrFKo5JSG5nKaYT6Mskmqqcprr5VyXsrF6EY3OBwAmN7dBa4XqbdCqM61VKPYz1TRJyOdz/3OQfzvUq5avw6aaqiiLakGrfJ9XXa0rj6NeTrlu15+788fXMK+6nPJ1qI8ENuF6X7JJNtl8ymlWofhwleuTrd8vKEIxLSg1tmGaVK6Y5icrndlp2+Xbpzy+KOtaWVD59qnrpV62nPpYp55XWRbX3013l3P6jmnEEBpnEorvtMb+qV6hWRZSq160WKGcz/k73vj61cvJt0/r6KJ1Hb16inwd8uOX07xOhx73Plvn46D8N871913run2hOhgovmKqqpVvn6TaPpMsjtNnKclfNuEMVePYKn9vU39GHp4EmzV+46xax0EX8wGAWfP3yDN+Zz4Ym6+0aLAlB1OnTvVKXN6TQ0RERERkBD3vxzk7NNHatWsxfvx4JCUlQZIkfP7554rpQgjMmTMHSUlJCA4OxvDhw7Fr1y7FPDU1NbjnnnsQExOD0NBQTJgwAbm5uW6XwWq14rPPPsNTTz2Fp59+GsuXL4fVaj33ghqY5BARERERGaEFPAy0oqICffr0wcsvv9zo9Oeffx7z58/Hyy+/jE2bNiEhIQGXX345ysrKHPPMmDEDy5cvx9KlS/Hzzz+jvLwc48aNcytROXDgALp164abb74Zy5Ytw6effoobb7wRPXr0wMGDB5u8PWe1ncvViIiIiIhaEi/dk1NaWqoYHRgYiMDAwEYXGTt2LMaOHdvoNCEEFi5ciMceewyTJk0CALzzzjuIj4/Hhx9+iDvuuAMlJSV488038d5772HUqFEAgPfffx+pqan44YcfMGbMGM0i33vvvejYsSM2btyIqKgoAEBRURFuvPFG3Hvvvfjmm2/c3nw5tuQQERERERlAkiTdB8D+7BmLxeIY5s2b51H5srOzUVBQgNGjRzvGBQYGYtiwYVi/fj0AICsrC3V1dYp5kpKS0LNnT8c8WtasWYPnn3/ekeAAQHR0NJ599lmsWbPGo3IDbMkhIiIiIjKGl1pycnJyEBHR0MmMq1accykoKAAAxMfHK8bHx8fjyJEjjnkCAgLQrl07p3nOLq8lMDBQcenbWeXl5QgICPCo3ABbcoiIiIiIjCF5YQAQERGhGDxNchzFVPXaJoRwGqfmzjwAMG7cOPy///f/8Ouvv0IIASEENm7ciOnTp2PChAkel5lJDhERERGRESQ0dCOty6Bv8RISEgDAqUWmsLDQ0bqTkJCA2tpanD592uU8Wl566SV07NgRgwcPRlBQEIKCgnDxxRejU6dOzXqGDpMcIiIiIiIjmCX9Bx1lZGQgISEBK1eudIyrra3FmjVrMGTIEADAgAED4O/vr5gnPz8fO3fudMyjJTIyEl988QX27duHTz/9FP/973+xd+9eLF++HJGRkR6XnffkEBEREREZwUv35DRFeXk5Dhw44HifnZ2Nbdu2ISoqCmlpaZgxYwaeeeYZZGZmIjMzE8888wxCQkJwww03AAAsFgtuu+023H///YiOjkZUVBRmzZqFXr16OXpb07J27Vp07doVnTp1QqdOnRzj6+rqsGHDBgwdOrTpGwUmOURERERExtH5ErOm2rx5M0aMGOF4P3PmTADA1KlT8fbbb+PBBx9EVVUV7rzzTpw+fRqDBg3CihUrEB4e7lhmwYIF8PPzw+TJk1FVVYWRI0fi7bffhtlsPuf6hw8fjvj4eCxbtgyDBw92jD916hRGjBjh8UNBmeQQERERERlA3u2zXvGaavjw4RBCaMacM2cO5syZ43KeoKAgLFq0CIsWLWry+gHguuuuw8iRI7F48WJMmzbNMV6rXOfCJIeIiIiIyAgt4HI1o0mShEceeQSXXnoppk6diu3bt+OFF15wTPMUOx4gIiIiIjKCl7qQ9iVnW2smTZqEtWvX4tNPP8XYsWNRXFzcrLhMcoiIiIiIjKBr99FnBh/Wr18//PbbbyguLsbIkSObFYtJDhERERGRASSz/oOvmTp1KoKDgx3vExISsGbNGowcORJpaWkex+U9OURERERERuA9OViyZInTuMDAQLzzzjvNisskh4iIiIjICHpfYuYjl6tt374dPXv2hMlkwvbt2zXn7d27t0frYJJDRERERGSENtqS07dvXxQUFCAuLg59+/aFJEmK7qLPvpckic/JORfJZIZkcr5QUTIpb0uSJJN8omKaEDb5jOpIsleqW51k80qyiyWFak8UitfKfsFtsvcmpz3Y9R4t3x51T+PCVt/ofAAghCymSRlfsX0aXyatbXCa181+0IVqfW4vp3ovycZoRVBtOmzyL6BqSfk79TSb6ourWO4cfdO7mk/Ip6mXc1Eup/ga29AU8u0zqbZPXoc21TZofQ7yz1qrjjTLrPr8rIo4NsU0rW3Q+mzdXb/ztsteq9ZnlR1rzKrvpk0Wpl4ot0G+nPo4ZJZk2+cfpJjmH5sgmy9bMU1eF0GS8iejSjQcQ9T1YNP4bOtldW9VTZVP81dtgzymU31Krvd6rfoUGp97vXwbnL5/cEm5v7iepj5Gyo+76npRzysnydZiVZVT/v1z+o7JxqiXs8mWU2+D1ndFGd/1cmb1sdxFudTT1DcSq78DCoptdz2f5vpUH7Tid0y43j/VWy+Po/4tlNe91o3S6uX8ZPuy+vNT7LvqT0I0+tKJejl/jfXJj6eS07lNw7z1Gt9b9frk09TnPVrnRGcX85EGjbbakIPs7GzExsY6XntDm0lyiIiIiIhalDbakpOeng4AqKurw5w5c/DEE0+gQ4cOuq6DvasRERERERmhjXch7e/vj+XLl3slNpMcIiIiIiIDSCb9B19zzTXX4PPPP9c9Li9XIyIiIiIyQhu9XE2uU6dOePLJJ7F+/XoMGDAAoaGhiun33nuvR3GZ5BARERERGUCSJKfOZ5obz9e88cYbiIyMRFZWFrKyshTTJElikkNERERE5HN8Ly/RFXtXIyIiIiJqRfS+j8YX78mRO9tdvx4tUj5eFUREREREPkrywuCD3n33XfTq1QvBwcEIDg5G79698d577zUrJltyiIiIiIgMIJkkSOonjzcznq+ZP38+nnjiCdx99924+OKLIYTAL7/8gunTp+PkyZP4+9//7lFcJjlEREREREZg72pYtGgRXnnlFdx8882OcVdffTV69OiBOXPmMMkhIiIiIvIlej+/0wc7V0N+fj6GDBniNH7IkCHIz8/3OC7vySEiIiIiMgLvyUGnTp3wySefOI3/+OOPkZmZ6XFctuQQERERERmALTnA3LlzMWXKFKxduxYXX3wxJEnCzz//jB9//LHR5MddTHKIiIiIiIzALAfXXnstfv31VyxYsACff/45hBDo3r07fvvtN/Tr18/juExyiIiIiIgMwBzHbsCAAXj//fd1jckkh4iIiIjIAG35YaClpaVuzRcREeFRfCY5REREREQGaMstOZGRkZA0CiyEgCRJsFqtHsVvM0mOyS8AJr8A+xshGy/5K+YT8m4pJLNimvxjkFTToLlcwwptsvls8oIAsMHWeOEBCNmsVkm4nM+k6lZDuT3K9F6SvRfC5nIaVOVUfoPUO2fDe6HaHiHbCPUWaE1TRBfKqfJ36pKo61dZSnk5Xc8nhDKqVkxX8QHAKqtfSag/o4aY6uUgXK9PXhb1bFoHOfm86vm0pmmxyRa0qbbPJLmua63PQV73WrWuFVOrnE2Z5t6nrr0NVlV8s6xeJNV3WlkW18cFdZmtNtl+pnogXICsXiRzgLIsoQ1/JTOr/gooP6b4qf9EKBp9CQColx/3VNtXL/s+qI9n8nqqU227fDn1d9EkND53RUHdO84C2scGed07fd9l5VYfk5XlUk4zy95aVeWUz+t01JUvp/5dkX83VdPMsg5Wrer9TP47CdfHQXW9Sxq/cUJxzNI4sXH6HZO9Vi0m317n71/D9mk9H1E9Sfntc70P1Dvtn/J9QrUOydbofPaJ8v1aq16cdlCXZfGTfbbq44T8+6h1vKwTyhNLP1l9qo9nEjTOGeTr1tonXC7V2HKup/lc92Jt+Dk5q1atcrwWQuDKK6/EG2+8geTkZF3it5kkh4iIiIioJZEkSbM1w5N4vmLYsGGK92azGRdddBE6dOigS3wmOURERERERtD5cjVfasnxNiY5RERERERGYWLiFUxyiIiIiIgM0JY7HmiMnpfbMckhIiIiIjKAyWQf9IznKyZNmqR4X11djenTpyM0NFQxftmyZR7FZ5JDRERERGSENtyUY7FYFO9vvPFGXeMzySEiIiIiMkAbznGwZMkSr8ZnkkNEREREZIC2nOR4G5McIiIiIiIDMMnxHiY5REREREQGYJLjPUxyiIiIiIgMIJnsg57xyI5JDhERERGRASRJ0vXZMHrG8nUtOt+bN28eBg4ciPDwcMTFxWHixInYu3ev0cUiIiIiImq2s5er6TmQXYtOctasWYO77roLGzduxMqVK1FfX4/Ro0ejoqLC6KIRERERETULkxzvadGXq3333XeK90uWLEFcXByysrIwdOhQg0pFRERERNR87HjAe1p0kqNWUlICAIiKinI5T01NDWpqahzvS0tLvV4uIiIiIqKmYpLjPS36cjU5IQRmzpyJSy65BD179nQ537x582CxWBxDamrqeSwlEREREZF7eLma9/hMknP33Xdj+/bt+OijjzTne+SRR1BSUuIYcnJyzlMJiYiIiIjcZ5IkmEw6DsxyHHzicrV77rkHX375JdauXYuUlBTNeQMDAxEYGOg03mTyh8kUAMDeKuQgmRXzWdEwzU/d2bhixzGpJjW8t6nWLVsbrLA2zCeU81mFesnGY6gWg7xUQmPn9pOUH7eQGsrivJTk4nXjczdWNvX22WT1blNthVBvlJuELI6kKpdNVp/qspgkuDdNVZ9W9cwumFRVZHVzA9XbICecPnnXzBr7gXwTtMrpbgxnyolm2UqEqh7kXV2qpwnZd0pr29WfiXx9NuF6nxCqulauX/n91trPXM13ZmaHepvq+22SbZ9qmmKbnP4UJdsGp2OIrJyq44li61THNv+IWMfrQNWvgvy7qt4n5Nur3nabJPu+q6pMPq9NtX1Wa0O561R1XS/bdvXRUn4kV5dFcVxSTTPJ1mFzitr4fOqYkipmvey9STVNvv+olxOy/dXqtJzr74Ak5Nug3nb5cVetYUy9VnyN+lT+giqnan0OWr9j6m2QU3+nrfLvg/PcLpdztW71+tWfu3I512VxOk7Ivo9W1Sch/9y19jPn75jstepgUIP6RmMAgEljfXLqfaJWWBt9befveKX121GvOi4pzzQ0jsmqmMqzMdXnIJT/t3S8XM17WnSSI4TAPffcg+XLl2P16tXIyMgwukhERERERLphXuIdLTrJueuuu/Dhhx/iiy++QHh4OAoKCgAAFosFwcHBBpeOiIiIiMhzbMnxnhZ9T84rr7yCkpISDB8+HImJiY7h448/NrpoRERERETNwo4HvKdFt+Sor9EnIiIiImotTJK+nQWw44EGLTrJISIiIiJqrXi5mve06MvViIiIiIhaK5NJ/6Ep5syZA0mSFENCQoJjuhACc+bMQVJSEoKDgzF8+HDs2rVL51rwDiY5REREREQGaAn35PTo0QP5+fmOYceOHY5pzz//PObPn4+XX34ZmzZtQkJCAi6//HKUlZXpWAvewcvViIiIiIgMcLb1RM94TeXn56dovTlLCIGFCxfisccew6RJkwAA77zzDuLj4/Hhhx/ijjvuaHZ5vYktOUREREREBvBWS05paaliqKmpcVmG/fv3IykpCRkZGbjuuutw6NAhAEB2djYKCgowevRox7yBgYEYNmwY1q9f79V60QOTHCIiIiIiA5gk/QcASE1NhcVicQzz5s1rdP2DBg3Cu+++i++//x6vv/46CgoKMGTIEBQVFTmeTxkfH69YJj4+3jGtJePlakREREREBvBW72o5OTmIiIhwjA8MDGx0/rFjxzpe9+rVC4MHD0bHjh3xzjvv4KKLLjoTU1lAIYSul9h5C1tyiIiIiIgM4K3L1SIiIhSDqyRHLTQ0FL169cL+/fsd9+moW20KCwudWndaIiY5REREREQGMEuS7kNz1NTUYM+ePUhMTERGRgYSEhKwcuVKx/Ta2lqsWbMGQ4YMae6mex0vVyMiIiIiMoLOl6uhibFmzZqF8ePHIy0tDYWFhXjqqadQWlqKqVOnQpIkzJgxA8888wwyMzORmZmJZ555BiEhIbjhhht0LLR3MMkhIiIiIjKAt+7JcVdubi6uv/56nDx5ErGxsbjooouwceNGpKenAwAefPBBVFVV4c4778Tp06cxaNAgrFixAuHh4foV2kuY5BARERERGcAkSTDpmOU0NdbSpUs1p0uShDlz5mDOnDnNKJUxmOQQERERERnA6Jac1qzNJDn1kFB/5kJFs9TQ34IVQjGfVdgcr82SWRWlYc8Rqik22RihmmoTDe/rZPHrbTbFfPLlJI2LKoWkjC/vxs+ksZyfpPy4TaaG90JYXS6n/sYoy6acJq8Hm1PdyqYJ5bbbZLOq609OuJ7kPK9GnDqby0mOPuYB589B/Zm50lh3i82dprUO9Xz1Gkc5+bxmk+vt8zO53y+JTeNzsQmtI67WB+p6n5RvXr1q5UL2mak/P/n3W/3XLnkVmiTX3031TZ1a+658Xqtqn4fsrepjUM5rU30OsrdW1bbL68LP6eOT7Wcm5bEgKCrd8TpY1QGP/PildUOrTXVcsslnFcpjqfwYJtlU+6C8YlS7R73k+jgrZPuZepfTOraaZNtnVR9b5fuS6jsmX4dJVU55HJtqffI46rJIcF0Wk8b3SGs5LfUa265FXm71cd5dzsc2xQ7jcppJ/fuqse1CNHwJJI1yah2h1OcIJsV5gOp3TGM/kx+X6lXLKfYzp7LJ1+f63EL9OdgU264k3wat35w6p3I2qBb1yvXJXgcK9blTAytc/4aqz1/k50vq3xizxnlPwJmDpK0pJwwGkqBzkqNfKJ/XZpIcIiIiIqKWRI8e0dTxyI5JDhERERGRAUySc2t+c+ORHZMcIiIiIiID8J4c72GSQ0RERERkAHuSo19mwiSnAZMcIiIiIiID8HI172GSQ0RERERkAF6u5j1McoiIiIiIDGD0w0BbMyY5REREREQGMEmAmZereQWTHCIiIiIiA0iSpHPHA8xyzmKSQ0RERERkAHY84D1McoiIiIiIDMCWHO9hkkNEREREZADTmUHPeGTHJIeIiIiIyABsyfEeJjlERERERAbgPTnewySHiIiIiMgAZpMEs46ZiZ6xfB2THCIiIiIiA0hnBj3jkR2THCIiIiIiA5gkCSYd76PRM5avY5JDRERERGQASbIPesYjuzaT5LTvlIqIiAiji0FE1KLd9/ty5XuDykFE1BylpaX4yGIxuhjnJEHflhyJF6w5tJkkh4iIiIioJeE9Od7DJIeIiIiIyAC8J8d7mOQQERERERmAXUh7D5McIiIiIiIDSGf+6RmP7JjkEBEREREZwCTZBz3jkR2THCIiIiIiA0iSBEnP3tV4T44DkxwiIiIiIgOYzgx6xiM7JjlERERERAZgS473MMkhIiIiIjKAWZJg1jEx0TOWr2OSQ0RERERkBJ1bcsAkx4FJDhERERGRAdi7mvcwySEiIiIiMgCfk+M9THKIiIiIiAwgSfpeYcar1RowySEiIiIiMgBbcryHSQ4RERERkQF4T473MMkhIiIiIjKASZJgkvR7hKeJ16s5MMkhIiIiIjIA78nxHiY5REREREQG4D053sMkh4iIiIjIANKZQc94ZMckh4iIiIjIAJIkQdLxGjM9Y/k6JjlERERERAZgS473MMkhIiIiIjIAW3K8h0kOEREREZEBTJBg0rH9Rc9Yvo5JDhERERGRQZiWeAeTHCIiIiIiA/A5Od7DJIeIiIiIyBDsesBbmOQQERERERmAKY73MMkhIiIiIjKAdOafnvHIjkkOEREREZEB2JLjPUxyiIiIiIgMwJYc7zEZXQB3LF68GBkZGQgKCsKAAQOwbt06o4tEREREREQtVItPcj7++GPMmDEDjz32GLZu3YpLL70UY8eOxdGjR40uGhERERGRxyQvDGTX4pOc+fPn47bbbsNf//pXdOvWDQsXLkRqaipeeeUVo4tGREREREQtUIu+J6e2thZZWVl4+OGHFeNHjx6N9evXN7pMTU0NampqHO9LSkoAAKWlpd4rKBERERG1GGfP+4QQBpdEW0V5ua6tLxXl5TpG820tOsk5efIkrFYr4uPjFePj4+NRUFDQ6DLz5s3D3LlzncanpqZ6pYxERERE1DKVlZXBYrEYXQwnAQEBSEhIwKBhg3SPnZCQgICAAN3j+poWneScJUnKHFcI4TTurEceeQQzZ850vLfZbDh16hSio6NdLtMWlZaWIjU1FTk5OYiIiDC6OD6P9akv1qe+WJ/6Yn3qi/WpL9annRACZWVlSEpKMroojQoKCkJ2djZqa2t1jx0QEICgoCDd4/qaFp3kxMTEwGw2O7XaFBYWOrXunBUYGIjAwEDFuMjISG8V0edFRES06YOg3lif+mJ96ov1qS/Wp75Yn/pifaJFtuDIBQUFMRnxohbd8UBAQAAGDBiAlStXKsavXLkSQ4YMMahURERERETUkrXolhwAmDlzJm666SZccMEFGDx4MF577TUcPXoU06dPN7poRERERETUArX4JGfKlCkoKirCP//5T+Tn56Nnz5749ttvkZ6ebnTRfFpgYCBmz57tdGkfeYb1qS/Wp75Yn/pifeqL9akv1ieRnSRaet96RERERERETdCi78khIiIiIiJqKiY5RERERETUqjDJISIiIiKiVoVJDhERERERtSpMcnzU4sWLkZGRgaCgIAwYMADr1q0DANTV1eGhhx5Cr169EBoaiqSkJNx8883Iy8s7Z8wdO3Zg2LBhCA4ORnJyMv75z39C3S/FmjVrMGDAAAQFBaFDhw549dVXvbJ955ur+lS74447IEkSFi5ceM6YrE/X9blnzx5MmDABFosF4eHhuOiii3D06FHNmKzPxuuzvLwcd999N1JSUhAcHIxu3brhlVdeOWfMtlifa9euxfjx45GUlARJkvD5558rpgshMGfOHCQlJSE4OBjDhw/Hrl27zhm3LdYloF2f/C1qunPtn3L8LSJygyCfs3TpUuHv7y9ef/11sXv3bnHfffeJ0NBQceTIEVFcXCxGjRolPv74Y/HHH3+IDRs2iEGDBokBAwZoxiwpKRHx8fHiuuuuEzt27BCfffaZCA8PF//+978d8xw6dEiEhISI++67T+zevVu8/vrrwt/fX3z66afe3mSv0qpPueXLl4s+ffqI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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ax = plt.figure(figsize=(10, 6)).add_axes([0.14, 0.14, 0.8, 0.74])\n", + "# Plot flow direction\n", + "plt.pcolormesh(t, ds_avg[\"range\"], ds_avg[\"U_dir\"], cmap=\"twilight\", shading=\"nearest\")\n", + "# Plot the water surface\n", + "ax.plot(t, ds_avg[\"depth\"])\n", + "\n", + "# set up time on x-axis\n", + "ax.set_xlabel(\"Time\")\n", + "ax.xaxis.set_major_formatter(dt.DateFormatter(\"%H:%M\"))\n", + "\n", + "ax.set_ylabel(\"Altitude [m]\")\n", + "ax.set_ylim([0, 12])\n", + "plt.colorbar(label=\"Horizontal Vel Dir [deg CW from true N]\");" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving and Loading DOLfYN datasets\n", + "Datasets can be saved and reloaded using the `save` and `load` functions. Xarray is saved natively in netCDF format, hence the \".nc\" extension.\n", + "\n", + "Note: DOLfYN datasets cannot be saved using xarray's native `ds.to_netcdf`; however, DOLfYN datasets can be opened using `xarray.open_dataset`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# Uncomment these lines to save and load to your current working directory\n", + "# dolfyn.save(ds, 'your_data.nc')\n", + "# ds_saved = dolfyn.load('your_data.nc')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. Turbulence Statistics\n", + "\n", + "The next section of this jupyter notebook will run through the turbulence analysis of the data presented here. There was no intention of measuring turbulence in the deployment that collected this data, so results depicted here are not the highest quality. The quality of turbulence measurements from an ADCP depend heavily on the quality of the deployment setup and data collection, particularly instrument frequency, samping frequency and depth bin size.\n", + "\n", + "Read more on proper ADCP setup for turbulence measurements in: Thomson, Jim, et al. \"Measurements of turbulence at two tidal energy sites in Puget Sound, WA.\" IEEE Journal of Oceanic Engineering 37.3 (2012): 363-374.\n", + "\n", + "Most functions related to turbulence statistics in MHKiT-DOLfYN have the papers they originate from referenced in their docstrings.\n", + "\n", + "### 7.1 Turbulence Intensity\n", + "For most users, turbulence intensity (TI), the ratio of the ensemble standard deviation to ensemble flow speed given as a percent, is all most will need. In MHKiT, this is simply calculated as `.velds.I`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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nackSXjnnXdw5ZVX1joPOzdERETUaLKysvDggw+idevWl00rhMDTTz9d45vOa8LODRERkQFa8mmphx9+uNZ3S61bt67O5bNzQ0REZICW2rk5deoUOqoPUayFY8eOoXPnznVaBjs3RERE1GjUVz3UVnR0dJ2X0VRvkyciImrSJOWCYl8+zVVpaSkOHDjgdX6O3BARERnAJMkfX/I3Vz/++CPGjBkDu91++cQe+PXITVVVFR5//HHExsYiJCQE3bt3x8qVK+FwOIwOjYiIyCeSSfL5Q5759cjNmjVr8Pzzz+PVV1/F1VdfjaNHj+Kee+5BREQE5s+fb3R4RERE5IV27dpdcr63IzYqv+7cHDlyBBMnTsSNN94IAOjWrRt27dqFo0ePGhwZERGRb1ryizOtVivuu+8+9OvXz+P8n3/+GStWrPC6fL/u3Fx77bV4/vnncfz4cfTs2RNfffUVDh06hNTUVKNDIyIi8klL7twMGDAA0dHRmD59usf5X331VfPt3Dz66KMoLCxEr169YDabYbfb8dRTT+H222+vMY/VatU9ybCoqKgxQiUiIqJauvHGG1FQUFDj/Hbt2mHatGlel+/XnZu0tDT89a9/xWuvvYarr74aWVlZWLBgATp37lxjb2/16tU+9faIiIgag6+3czflW8Efe+yxS86Pjo6u89vDXfl15+bhhx/G4sWLcdtttwEA+vXrh59//hmrV6+usXOTkpKCRYsWab+LiooQHR0NKTAIEMpdVmazM4O1XP9taSV/C7c7smwVzr+VBiXUaRVl+jxBwdXLcNj13yoh5K/yUrnogCDnPJOyeexV8nelTZkuxy/U6a4N3H05WhrlxrgqZVSrdRtnCHkn9WkcVfq8gUp97JWoRl22ltetfoEW59+VVn0e5bfUtW/1comao5IL8rf7vqseK9z3ecC5T6nHrSoP+yGgHRd0XMvxlMb1t7bvSkpoynHOpOzbyrHK43Nx1XmS8Lwcl+OCdtyC0KdRyw1rK3+7HqfdLy51/5+6tnwPNwAr61YKly9gFVXK8kOV9xq5HttDwwCp8f632JJPSzU0v+7clJWVwWTSN1az2XzJW8EtFgssFkuN84mIiMj/HThwAP3790dERESd8/r1c25uvvlmPPXUU/jXv/6F06dP4+2338b69esxefJko0MjIiLyCZ9QfGnXX389unfv3vxenLl582YsXboUc+bMQX5+Pjp37oxZs2bhiSeeMDo0IiIin/C01KWdOnUKp06dwt69e+uc1687N2FhYUhNTeWt30RERC1MTEwMYmJicP3119c5r193boiIiJorkyTB5MPwiy95/cnPP/+MvLw8SJKEyMjIOr813BO/vuaGiIiouVJPS/nyaco2bNiA6OhodO/eHQkJCRg+fDi6d++O6Ohon8/YcOSGiIjIABJ8fM6Np9vym4gnn3wSa9euxWOPPYbx48cjMjISQgjk5+dj7969WL58OUpKSvD44497VT47N0RERNSotm3bhldffRWTJk3STe/cuTMGDBiAnj174v7772fnhoiIqCmRTJ6fO1jr/O7PQWxCzp8/j6uuuqrG+T179sTFixe9Lp/X3BARERnB12fcNOGLboYOHYqnnnoKVVVV1eZVVVVh1apVGDp0qNflc+SGiIiIGtXmzZuRmJiITp064brrrkNkZCQkSUJeXh4OHDgAi8WC9PR0r8vnyA0REZEBjLpbasuWLYiNjUVwcDDi4+Nx8ODBGtMeOnQII0eORPv27RESEoJevXphw4YNujQ7duzwOLJUUVFRQ6nyuyKPHz+Op556CuHh4Th16hR++uknhIeH46mnnsL333+Pq6++2rsKgiM3REREhpA7KL68FbzuedLS0rBgwQJs2bIFI0eOxAsvvIAJEybg2LFj6Nq1a7X0oaGhuP/++3HNNdcgNDQUhw4dwqxZsxAaGop7771XSxceHo4ffvhBlzc4OPiSsYSFheG+++7DfffdV/eKXAZHboiIiFqI9evXY8aMGZg5cyZ69+6N1NRUREdHY+vWrR7TDxw4ELfffjuuvvpqdOvWDXfddRfGjx9fbbRHkiRERUXpPjUpKiqqU8zFxcV1Sg+wc0NERGSI+jotVVRUpPtYrVaPy7PZbMjIyEBiYqJuemJiIg4fPlyrmDMzM3H48GFcd911uuklJSWIiYlBly5dcNNNNyEzM7PGMtq2bYv8/PxaLQ8ArrzySvz000+1Tg/wtBQREZEh6uv1C9HR0brpy5Ytw/Lly6ulP3fuHOx2OyIjI3XTIyMjkZeXd8lldenSBWfPnkVVVRWWL1+OmTNnavN69eqFHTt2oF+/figqKsLGjRsxcuRIfPXVV4iLi6tWlhACL730Elq3bl2relZWVtYqnasW1bkRZSUAAMkc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W1u2bEFsbCyCg4MRHx+PgwcP1pj20KFDGDlyJNq3b4+QkBD06tULGzZsqJburbfeQp8+fWCxWNCnTx+8/fbbtYplyJAhOHHiBLZu3Yr//e9/WLt2ra5jAwB9+vTBbbfdVqc6cuSGiIjIAEa8WyotLQ0LFizAli1bMHLkSLzwwguYMGECjh07hq5du1ZLHxoaivvvvx/XXHMNQkNDcejQIcyaNQuhoaG49957AQBHjhxBUlISnnzySUyePBlvv/02pk6dikOHDmHYsGGXjOenn35CTEzMJdOEhoZi+/btdaonR26IiIiMoF7j48unjtavX48ZM2Zg5syZ6N27N1JTUxEdHY2tW7d6TD9w4EDcfvvtuPrqq9GtWzfcddddGD9+vG60JzU1FePGjUNKSgp69eqFlJQUjB07FqmpqZeNZ8yYMTh//ny16QUFBejevXud66di54aIiKgFsNlsyMjIQGJiom56YmIiDh8+XKsyMjMzcfjwYVx33XXatCNHjlQrc/z48bUq8/Tp07Db7dWmW61WnDlzplYxecLTUkREREaop7ulioqKdJMtFgssFku15OfOnYPdbkdkZKRuemRkJPLy8i65qC5duuDs2bOoqqrC8uXLMXPmTG1eXl5enct85513tL/37t2LiAjnXWt2ux0fffQRunXrdsmYLoWdGyIiIgNIJv0TQ7zJDwDR0dG66cuWLcPy5ctrzuf+CBQhLnv9zsGDB1FSUoLPPvsMixcvxm9+8xvcfvvtXpc5adIkLd/06dN18wIDA9GtWzesW7fukjFdCjs3RERERqinkZucnByEh4drkz2N2gBAhw4dYDabq42o5OfnVxt5cRcbGwsA6NevH3799VcsX75c69xERUXVuUyH8gyp2NhYfPHFF+jQocMll19XvOaGiIioCQsPD9d9aurcBAUFIT4+Hunp6brp6enpGDFiRK2XJ4TQvf8pISGhWpn79u2rVZmnTp2q944NwJEbIiIiQ6jviPIlf10tWrQIycnJGDx4MBISErBt2zZkZ2dj9uzZAICUlBScOXMGO3fuBAA899xz6Nq1q/bsmUOHDmHt2rWYN2+eVub8+fMxevRorFmzBhMnTsTu3bvx4Ycf4tChQx5j2LRpE+69914EBwdj06ZNl4z3gQceqHMdgSbQuTlz5gweffRRvP/++ygvL0fPnj3x8ssvIz4+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Momrr75anD59urHCr4b1YX0aE+vD+hA1N82ic7NixQqRmJioDcsWFBSI1q1baw+xunjxokhKShIdO3YUa9euFRUVFVreyspKsXv3btG+fXsRFxcn9u7da0gdXLE+rE9jYn1YH6LmJsDou7V8IYRASUkJDh8+jOjoaG36hQsXMGrUKHTo0AEA0Lp1a9x6663YsGEDrrjiCl0ZNpsNu3fvxsKFC7FkyZJGjd8d68P6NCbWh/Uhaq6a3LulDh06hK5du6Jr167atDlz5uDAgQO4+eabERwcjDVr1qBr1644f/48Ro8ejTlz5mDs2LEQQkCSJC2f+ttut8NsNhtRHdaH9WlUrA/rQ9QiNOIokU8++ugjERsbK2JiYsQVV1whkpOTxRdffCGEECI/P188//zz4v777xeRkZHir3/9qygsLBQfffSRSEpKEuPHj6/xDgOjsD6sT2NifVgfopakSXRucnJyREJCgliyZIn4+eefxbvvvisGDBggxo4dK3744Qct3VNPPSUmTZqke5bDk08+KeLj40VOTo4RoXvE+rA+jYn1YX2IWpom8fqF//73v8jMzMT06dPRtWtX3HTTTVizZg0cDgeeeOIJLd2hQ4dwzTXX6IZmS0pK0LZtW1x55ZVGhO4R68P6NCbWh/UhammaROfmwoUL6NWrFxwOhzbtd7/7HaZMmYLPP/8ce/bsAQAkJCQgNTUVmzdvRmZmJpYsWYJXX30VycnJkCQJwk8uL2J9WJ/GxPqwPkQtjoGjRrX2zTffCIvFIv75z3/qpn///fdi4sSJYvr06dq0W2+9VfTs2VP06tVLxMfHa0/l9CesD+vTmFgf1oeopWkyd0v9/ve/R1lZGd577z20bt1amz5//nwcP34cb7zxBsLCwlBRUYHi4mL88ssv6N+/v4ERXxrrw/o0JtaH9SFqSZrEaSkAWL16NT799FP89a9/hdVq1aZ37NgRx44dQ0hICADAYrGgY8eOfr/jsz6sT2NifVgfopakyTzEr3///nj00UexcuVKmM1m3H777XA4HPjPf/6DO++8EwEBclVcL7bzZ6yPf2N9/BvrQ0SX0mROS6nmzp2Lt956C127dkV+fj5atWqFN954A3379jU6NK+wPv6N9fFvrA8RedLkOjdWqxXHjh1DVlYWgoKCcOeddxodkk9YH//G+vg31oeIPGlynRsiIiKiS2kyFxQTERER1QY7N0RERNSssHNDREREzQo7N0RERNSssHNDREREzQo7N0RERNSssHNDREREzQo7N0RERNSssHND1Mzs378fkiShoKDA6FCIiAzBJxQTNXHXX389BgwYgNTUVACAzWbDhQsXEBkZyRctElGL1GTeCk5EtRMUFISoqCijwyAiMgxPSxE1YXfffTc++eQTbNy4EZIkQZIk7NixQ3daaseOHWjTpg3ee+89XHXVVWjVqhWmTJmC0tJSvPrqq+jWrRvatm2LefPmwW63a2XbbDY88sgjuPLKKxEaGophw4Zh//79xlSUiKgOOHJD1IRt3LgRx48fR9++fbFy5UoAwHfffVctXVlZGTZt2oTXX38dxcXFuOWWW3DLLbegTZs22LNnD3766SfceuutuPbaa5GUlAQAuOeee3D69Gm8/vrr6Ny5M95++23ccMMN+OabbxAXF9eo9SQiqgt2boiasIiICAQFBaFVq1baqajvv/++WrrKykps3boVPXr0AABMmTIFf/nLX/Drr7+idevW6NOnD8aMGYOPP/4YSUlJOHnyJHbt2oX//e9/6Ny5MwDgoYcewgcffIDt27dj1apVjVdJIqI6YueGqAVo1aqV1rEBgMjISHTr1g2tW7fWTcvPzwcAfPnllxBCoGfPnrpyrFYr2rdv3zhBExF5iZ0bohYgMDBQ91uSJI/THA4HAMDhcMBsNiMjIwNms1mXzrVDRETkj9i5IWrigoKCdBcC14eBAwfCbrcjPz8fo0aNqteyiYgaGu+WImriunXrhs8//xynT5/GuXPntNEXX/Ts2RN33nknpk2bhn/84x84deoUvvjiC6xZswZ79uyph6iJiBoOOzdETdxDDz0Es9mMPn36oGPHjsjOzq6Xcrdv345p06bhwQcfxFVXXYU//OEP+PzzzxEdHV0v5RMRNRQ+oZiIiIiaFY7cEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K+zcEBERUbPCzg0RERE1K/8fHjIq1Mp2PlcAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Turbulence Intensity\n", + "ds_avg[\"TI\"] = ds_avg.velds.I\n", + "ds_avg[\"TI\"].plot(cmap=\"Reds\", ylim=(0, 11))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7.2 Power Spectral Densities (Auto-Spectra)\n", + "\n", + "Other turbulence parameters include the TKE power- and cross-spectral densities (i.e the power spectra), turbulent kinetic energy (TKE, i.e. the variances of velocity vector components), Reynolds stress vector (i.e. the co-variances of velocity vector components), TKE dissipation rate, and TKE production rate. These quantities are primarily used to inform and verify hydrodynamic and coastal models, which take some or all of these quantities as input.\n", + "\n", + "The TKE production rate is the rate at which kinetic energy (KE) transitions from a useful state (able to do \"work\" in the physics sense) to turbulent; TKE is the actual amount of turbulent KE in the water; and TKE dissipation rate is the rate at which turbulent KE is lost to non-motion forms of energy (heat, sound, etc) due to viscosity. The power spectra are used to depict and quantify this energy in the frequency domain, and creating them are the first step in turbulence analysis.\n", + "\n", + "We'll start by looking at the power spectra, specifically the auto-spectra from the vertical beam (\"auto\" meaning the variance of a single vector direction, e.g. $\\overline{u'^2}$, vs \"cross\", meaning the covariance of two directions, e.g. $\\overline{u'w'}$). This can be done using the `power_spectral_density` function from the `ADPBinner` we created (\"avg_tool\"). We'll create spectra at the middle water column, at a depth of 5 m, and use a number of FFT's equal to 1/3 the bin size." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "rng = 5 # m\n", + "vel_up = ds[\"vel_b5\"].sel(range_b5=rng, method=\"nearest\") # vertical velocity\n", + "U = ds_avg[\"U_mag\"].sel(\n", + " range=5, method=\"nearest\"\n", + ") # flow speed, for plotting in the next block\n", + "\n", + "ds_avg[\"auto_spectra_5m\"] = avg_tool.power_spectral_density(\n", + " vel_up, freq_units=\"Hz\", n_fft=ds_avg.n_bin // 3\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the auto-spectra, we're primarly looking for three components: the energy-producing region, the isotropic turbulence region (so-called \"red noise\"), and the instrument noise floor (termed \"white noise\"). \n", + "\n", + "The block below organizes and plots the power spectra by the corresponding ensemble speed, averaging them by 0.1 m/s velocity bins. Note that if an ensemble is missing data that wasn't filled in, a power spectrum will not be calculated for that ensemble timestamp." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Text(0.5, 0, 'Frequency [Hz]'),\n", + " Text(0, 0.5, 'PSD [m2 s-2 Hz-1]'),\n", + " (0.01, 1),\n", + " (0.0005, 0.1)]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib as mpl\n", + "\n", + "plt.rcParams.update({\"font.size\": 18, \"font.family\": \"Times New Roman\"})\n", + "\n", + "\n", + "def plot_spectra_by_color(auto_spectra, U_mag, ax, fig, cbar_max=4.0):\n", + " U = U_mag.values\n", + " U_max = U_mag.max().values\n", + "\n", + " # Average spectra into 0.1 m/s velocity bins\n", + " speed_bins = np.arange(0.5, U_max, 0.1)\n", + " time = [t for t in auto_spectra.dims if \"time\" in t][0]\n", + " S_group = auto_spectra.assign_coords({time: U}).rename({time: \"speed\"})\n", + " group = S_group.groupby_bins(\"speed\", speed_bins)\n", + " count = group.count().values\n", + " S = group.mean()\n", + "\n", + " # define the colormap\n", + " cmap = plt.cm.turbo\n", + " # define the bins and normalize\n", + " bounds = np.arange(0.5, cbar_max, 0.1)\n", + " norm = mpl.colors.BoundaryNorm(bounds, cmap.N)\n", + " colors = cmap(norm(speed_bins))\n", + "\n", + " # plot\n", + " for i in range(len(speed_bins) - 1):\n", + " ax.loglog(auto_spectra[\"freq\"], S[i], c=colors[i])\n", + " ax.grid()\n", + "\n", + " # create a second axes for the colorbar\n", + " cax = fig.add_axes([0.8, 0.07, 0.03, 0.88])\n", + " # cax, _ = mpl.colorbar.make_axes(fig.gca())\n", + " sm = mpl.colorbar.ColorbarBase(\n", + " cax,\n", + " cmap=cmap,\n", + " norm=norm,\n", + " spacing=\"proportional\",\n", + " ticks=bounds,\n", + " boundaries=bounds,\n", + " format=\"%1.1f\",\n", + " label=\"Velocity [m/s]\",\n", + " )\n", + "\n", + " # Add -5/3 slope line\n", + " m = -5 / 3\n", + " x = np.logspace(-1, 0.5)\n", + " y = 10 ** (-3) * x**m\n", + " ax.loglog(x, y, \"--\", c=\"black\", label=\"$f^{-5/3}$\")\n", + " ax.legend()\n", + "\n", + " return ax, sm\n", + "\n", + "\n", + "# Set up figure\n", + "fig, ax = plt.subplots(1, 1, figsize=(5, 5))\n", + "fig.subplots_adjust(left=0.2, right=0.75, top=0.95, bottom=0.1)\n", + "\n", + "# Plot spectra by color\n", + "plot_spectra_by_color(ds_avg[\"auto_spectra_5m\"], U, ax, fig, cbar_max=2.0)\n", + "# Set axes\n", + "ax.set(\n", + " xlabel=\"Frequency [Hz]\",\n", + " ylabel=\"PSD [m2 s-2 Hz-1]\",\n", + " xlim=(0.01, 1),\n", + " ylim=(0.0005, 0.1),\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the figure above, we can see the energy-producing turbulent structures below a frequency of 0.2 Hz (one tick to the right of \"10^-1\"). The isotropic turbulence cascade, seen by the dashed f^(-5/3) slope (from Kolmogorov's theory of turbulence) begins at around 0.2 Hz and continues until we reach the Nyquist frequency at 0.5 Hz (1/2 the instrument's sampling frequency, 1 Hz). The instrument's noise floor can't be seen here, but will show up as the flattened part of the spectra at the highest frequencies. For this instrument (Nortek Signature1000), the noise floor typically varies around 10^-3, depending on flow speed and range distance.\n", + "\n", + "### 7.3 TKE Dissipation Rate\n", + "\n", + "Because we can see the isotropic turbulence cascade (0.2 - 0.5 Hz) at this depth bin (5 m altitude), we can calculate the TKE dissipation rate at this location from the spectra itself. This can be done using `dissipation_rate_LT83`, whose inputs are the power spectra, the ensemble speed, and the frequency range of the isotropic cascade." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# Frequency range of isotropic turubulence cascade\n", + "f_rng = [0.2, 0.5]\n", + "# Dissipation rate\n", + "ds_avg[\"dissipation_rate_5m\"] = avg_tool.dissipation_rate_LT83(\n", + " ds_avg[\"auto_spectra_5m\"], U, freq_range=f_rng\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have just found the spectra and dissipation rate from a single depth bin at an altitude of 5 m from the seafloor, but typically we want the spectra and dissipation rates from the entire measurement profile. If we want to look at the spectra and dissipation rates from all depth bins, we can set up a \"for\" loop on the range coordinate and merge them together:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "\n", + "spec = [None] * len(ds.range)\n", + "e = [None] * len(ds.range)\n", + "\n", + "for r in range(len(ds[\"range\"])):\n", + " # Calc spectra from each depth bin using the 5th beam\n", + " spec[r] = avg_tool.power_spectral_density(\n", + " ds[\"vel_b5\"].isel(range_b5=r), freq_units=\"Hz\"\n", + " )\n", + " # Calc dissipation rate from each spectra\n", + " e[r] = avg_tool.dissipation_rate_LT83(\n", + " spec[r], ds_avg.velds.U_mag.isel(range=r), freq_range=f_rng\n", + " ) # Hz\n", + "\n", + "ds_avg[\"auto_spectra\"] = xr.concat(spec, dim=\"range\")\n", + "ds_avg[\"dissipation_rate\"] = xr.concat(e, dim=\"range\")\n", + "\n", + "del spec, e # save memory" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have a profile timeseries of dissipation rate, we need apply some quality control (QC). Since we can't look at each individual spectrum to ensure we can see the isotropic turbulence cascade, we want to QC the output from `dissipation_rate_LT83` to make sure what was calculated actually falls on a f^(-5/3) slope. We can do this using the function `check_turbulence_cascade_slope`, which uses linear regression on the log-transformed LT83 equation (ref. to Lumley and Terray, 1983, see docstring) to calculate the spectral slope for the given frequency range. \n", + "\n", + "In our case, we're calculating the slope of each spectrum between 0.2 and 0.5 Hz. We'll use a cutoff of 20% for the error, but this can be lowered if there still appear to be erroneous estimations from visual inspection of the spectra." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# Quality control dissipation rate estimation\n", + "slope = avg_tool.check_turbulence_cascade_slope(\n", + " ds_avg[\"auto_spectra\"], freq_range=f_rng\n", + ")\n", + "\n", + "# Check that percent difference from -5/3 is not greater than 20%\n", + "mask = abs((slope[0].values - (-5 / 3)) / (-5.3)) <= 0.20\n", + "\n", + "# Keep good data\n", + "ds_avg[\"dissipation_rate\"] = ds_avg[\"dissipation_rate\"].where(mask)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we plot the dissipation rate below in a colormap, we can see that the profile map has a lot of missing data. One of the reasons is that the 1 Hz sampling rate doesn't provide enough information needed to make dissipation rate estimations, and the other part is that turbulence measurements push the boundaries of what ADCPs are capable of.\n", + "\n", + "Also, 5x10^-4 $m^2/s^3$ sounds reasonable for a dissipation rate estimate for the 1.25 m/s current speeds measured here. They can be a magnitude or two greater for faster flow speeds and depend heavily on bathymetry and regional hydrodynamics." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ds_avg[\"dissipation_rate\"].plot(cmap=\"turbo\", ylim=(0, 11))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7.4 Turbulent Kinetic Energy (TKE) Components\n", + "\n", + "The next parameters we'll find here are the vertical TKE component and the total TKE magnitude. Since we're using the vertical beam on the ADCP, we'll directly measure the vertical TKE component from the along-beam velocity using the `turbulent_kinetic_energy` function. This function is capable of calculating TKE for any along-beam velocity.\n", + "\n", + "We can also use the so-called \"beam-variance\" equations to estimate the Reynolds stress tensor components (i.e. $\\overline{u'^2}$, $\\overline{v'^2}$, $\\overline{w'^2}$, $\\overline{u'v'}$, $\\overline{u'w'^2}$, $\\overline{v'w'^2}$), which define the stresses acting on an element of water. These equations are built into the functions `stress_tensor_5beam` and `stress_tensor4beam`. Since we're using a 5-beam ADCP, we can calculate the total TKE as well using `total_turbulent_kinetic_energy`, which is a wrapper around the 5-beam variance function.\n", + "\n", + "#### Quick ADCP lesson before we dive in:\n", + "\n", + "There are a couple caveats to calculating Reynolds stress tensor components:\n", + " 1. Because this instrument only has 5 beams, we can only find 5 of the 6 components (6 unkowns, 5 knowns)\n", + " 2. Because the ADCP's instrument (XYZ) axes weren't aligned with the flow during deployment, we don't know what direction these components are aligned to (i.e. the 'u' direction is not necessarily the streamwise direction)\n", + " 3. It is possible to rotate the tensor, but we'd need to know all 6 components to do so properly.\n", + "\n", + "That being said, even if we don't know which direction the 3 TKE components ($\\overline{u'^2}$, $\\overline{v'^2}$, $\\overline{w'^2}$) are oriented, we can still combine them and get the total TKE magnitude." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 7.5 ADCP Noise\n", + "\n", + "The first thing we want to do is calculate the Doppler noise floor from the spectrum we calculated above. (We are making the assumption that the noise floor of the vertical beam is the same as the noise floor of the other 4 beams). This gives us a timeseries of the noise floor, which varies by instrument and with flow speed, at that depth bin.\n", + "\n", + "We can do this using the `doppler_noise_level` function. The two inputs for this function are the power spectra and \"pct_fN\", the percent of the Nyquist frequency that the noise floor exists. Because in this particularly dataset we can't see the noise floor, we'll just use 90% or pct_fN=0.9 as an example. If the noise floor began at 0.4 Hz and ran til our maximum frequency of 0.5 Hz, we'd use pct_fN = 0.4 Hz / 0.5 Hz = 0.8.\n", + "\n", + "Because ADCP noise is a function of range as well as flow speed and instrument frequency, we'll use a for loop to measure the noise from each spectra:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Setting up \"for\" loop\n", + "n = [None] * len(ds.range)\n", + "\n", + "for r in range(len(ds.range)):\n", + " # Calculate doppler noise from spectra from each depth bin\n", + " n[r] = avg_tool.doppler_noise_level(ds_avg[\"auto_spectra\"][r], pct_fN=0.9)\n", + "\n", + "ds_avg[\"noise\"] = xr.concat(n, dim=\"range\")\n", + "\n", + "del n # save memory" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we know the Doppler noise level, we can use that as input for the TKE functions. We'll first calculate the vertical TKE component, using the function `turbulent_kinetic_energy`, inputting our raw vertical beam data and the noise floors we calculated above for each ensemble." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Vertical TKE component (w'w' bar)\n", + "ds_avg[\"wpwp_bar\"] = avg_tool.turbulent_kinetic_energy(\n", + " ds[\"vel_b5\"], noise=ds_avg[\"noise\"]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we can calculate the TKE magnitude using the function `total_turbulent_kinetic_energy`. This method is a wrapper around the `stress_tensor_5beam` function, which calculates the individual Reynolds stress tensor components and takes the same inputs. As an fyi, this function will drop at least one warning every time it's run, primarily the coordinate system warning. This function also requires the input raw data to be in beam coordinates, so we'll create a copy of the raw data and rotate it to 'beam'. If you do not, this function will do so automatically and rotate the original." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\mcve343\\mhkit-python\\mhkit\\dolfyn\\adp\\turbulence.py:383: UserWarning: The beam-variance algorithms assume the instrument's (XYZ) coordinate system is aligned with the principal flow directions.\n", + " warnings.warn(\" The beam-variance algorithms assume the instrument's \"\n" + ] + } + ], + "source": [ + "ds_beam = dolfyn.rotate2(ds, \"beam\", inplace=False)\n", + "ds_avg[\"TKE\"] = avg_tool.total_turbulent_kinetic_energy(\n", + " ds_beam, noise=ds_avg[\"noise\"], orientation=\"up\", beam_angle=25\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And plotting TKE:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Remove estimations below 0\n", + "ds_avg[\"TKE\"] = ds_avg[\"TKE\"].where(ds_avg[\"TKE\"] > 0)\n", + "\n", + "ds_avg[\"TKE\"].plot(cmap=\"Reds\", ylim=(0, 11))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TKE esimations are generally more complete than those of dissipation rates because they are found directly from the along-beam velocity measurements. Missing TKE estimations exist whenever the noise calculated by the function `doppler_noise_level` is greater than the calculated TKE, as TKE can't be less than zero. Noise levels are affected by the instrument's processor and working frequency, water waves and other sources of \"interference\", instrument motion, current speed, intricacies in the spectra calculation, the ability to see the noise floor in the spectra, etc.\n", + "\n", + "You may also note that high TI doesn't always correlate with high TKE. TI is the ratio of flow speed standard devation to the mean, which is naturally lower when flow speeds are higher. When flow speeds are higher, they also have greater kinetic energy and thereby greater TKE.\n", + "\n", + "There is one other important thing to note on TKE measurements by ADCPs: the minimum turbulence length scale that the ADCP is capable of measuring increases with range from the instrument. This means the instrument is only capable of measuring the TKE of larger and larger turbulent structures as the beams travel farther and farther from the instrument head. One of the benefits of calculating w'w' from the vertical beam is that it isn't limited by this beam spread issue." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7.6 TKE Production\n", + "\n", + "Though it can't be found from this deployment, we'll go over how to estimate TKE Production. There isn't a specific function in MHKiT-DOLfYN for production, but all the necessary variables are. \n", + "\n", + "If we had aligned the ADCP instrument axes to the flow direction (so \"X\" would align with the main flow), we could use the following equation to estimate production:\n", + "\n", + "$P = -(\\overline{u'w'}\\frac{du}{dz} + \\overline{v'w'}\\frac{dv}{dz} + \\overline{w'w'}\\frac{dw}{dz})$\n", + "\n", + "To start, we need the functions `reynolds_stress_4beam` or `stress_tensor_5beam` to get the stress tensor components $\\overline{u'w'}$ and $\\overline{v'w'}$. We also need the vertical TKE component, $\\overline{w'w'}$. \n", + "\n", + "Both of these functions will give comparable results, but it should be noted that `stress_tensor_4beam` assumes the instrument is oriented with 0 degrees pitch and roll, and will throw a warning if they are greater than 5 degrees. The `stress_tensor_5beam` gives more leeway to instrument tilt, but shouldn't be used if pitch and roll angles are greater than 10 degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\mcve343\\mhkit-python\\mhkit\\dolfyn\\adp\\turbulence.py:383: UserWarning: The beam-variance algorithms assume the instrument's (XYZ) coordinate system is aligned with the principal flow directions.\n", + " warnings.warn(\" The beam-variance algorithms assume the instrument's \"\n", + "c:\\users\\mcve343\\mhkit-python\\mhkit\\dolfyn\\adp\\turbulence.py:391: UserWarning: 100.0 % of measurements have a tilt greater than 5 degrees.\n", + " warnings.warn(f\" {pct_above_thresh} % of measurements have a tilt \"\n" + ] + } + ], + "source": [ + "# Beam-variance equation for 4-beam ADCPs\n", + "stress_vec = avg_tool.reynolds_stress_4beam(\n", + " ds_beam, noise=ds_avg[\"noise\"], orientation=\"up\", beam_angle=25\n", + ")\n", + "upwp_ = stress_vec[1]\n", + "vpwp_ = stress_vec[2]\n", + "wpwp_ = ds_avg[\"wpwp_bar\"] # Found from the vertical along-beam velocity (vel_b5) above\n", + "\n", + "# OR #\n", + "\n", + "# Beam-variance equation for 5-beam ADCPs\n", + "tke_vec, stress_vec = avg_tool.stress_tensor_5beam(\n", + " ds_beam, noise=ds_avg[\"noise\"], orientation=\"up\", beam_angle=25\n", + ")\n", + "upwp_ = stress_vec[1]\n", + "vpwp_ = stress_vec[2]\n", + "wpwp_ = tke_vec[2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The shear components can be found from the aptly named functions `dudz`, `dvdz`, and `dwdz` in ADPBinner. These functions, which are useful alone in their own right, estimate the shear in the velocity vector between respective depth bins. There is always correlation between velocity measurements in adjacent depth bins, based on ADCP operation principles, which is why \"estimation\" is also used here for shear.\n", + "\n", + "The shear functions operate on the raw velocity vector in the principal reference frame and need to be ensemble-averaged here. This can be done by nesting the `d*dz` function within the ADPBinner's `mean` function. With the ensemble shear known, we can put all the components together to get a production estimation." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "# Find and ensemble-average shear\n", + "dudz = avg_tool.mean(avg_tool.dudz(ds_streamwise[\"vel\"]).values)\n", + "dvdz = avg_tool.mean(avg_tool.dvdz(ds_streamwise[\"vel\"]).values)\n", + "dwdz = avg_tool.mean(avg_tool.dwdz(ds_streamwise[\"vel\"]).values)\n", + "\n", + "# Calculate Production\n", + "P = -(upwp_ * dudz + vpwp_ * dvdz + wpwp_ * dwdz)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7.7 TKE Balance \n", + "\n", + "We can plot TKE Production and compare it to our dissipation rate calculations to get an understanding of the TKE balance. In a well mixed coastal environment, we expect production and dissipation to be approximately equal. Our production estimates aren't accurate because our stress components aren't aligned with the flow, so if we plot them, we see drastic differences (1x10^-3 $m^2/s^3$ is quite large) profile here." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "# Find and ensemble-average shear\n", - "dudz = avg_tool.mean(avg_tool.dudz(ds_streamwise['vel']).values)\n", - "dvdz = avg_tool.mean(avg_tool.dvdz(ds_streamwise['vel']).values)\n", - "dwdz = avg_tool.mean(avg_tool.dwdz(ds_streamwise['vel']).values)\n", - "\n", - "# Calculate Production\n", - "P = -(upwp_*dudz + vpwp_*dvdz + wpwp_*dwdz)" + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'TKE Balance')" ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 7.7 TKE Balance \n", - "\n", - "We can plot TKE Production and compare it to our dissipation rate calculations to get an understanding of the TKE balance. In a well mixed coastal environment, we expect production and dissipation to be approximately equal. Our production estimates aren't accurate because our stress components aren't aligned with the flow, so if we plot them, we see drastic differences (1x10^-3 $m^2/s^3$ is quite large) profile here." + "data": { + "image/png": "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oYffvXs3/fr1o3HjxnzwwQf6WL3x48fTs2dPjh8/zs2bNzl27Bj/+Mc/WLBgQa77LYQoAZQQpUx8fLwCFKAef/zxQsWbMmWK2rZtm6pUqZJq1KiROnfuXKHLM3fuXD3duXPnOgxz+PBh1bhxYzVlypRC5/P444/r+SQkJOTYPmXKFH1748aNlcViUUopdfLkSbVx40ZlMBgUoGJjY1Xv3r3VmTNn1JNPPql8fX3VpEmT9HQGDBigALVmzRqneRiNRrVq1aoc2ydMmKAANXHixBzbXn31Vbvjn91vv/2mb4uPj88Rd//+/U63JyQkqJCQENWmTRt9n20GDx6sx1u7dq3dttq1azssi1JKpaamqhMnTujHzFGY8+fPq4oVK6o6deqo1NRUu20pKSmqYcOGClAREREqOTlZX6+UUm+++aZerv79+6vnn39eXb58WSml1NGjR1WlSpUUoBo1apQjXyFEySItWkI48NNPP9GpUycuXbpUpOn+3//9H1WrVrVbgoODueuuu9i/f3+R5XP27FmUUgBcvXqVCRMm8MorrwDajQBfffUVRqP29Q8NDaVdu3ZUqlQJgC1btvDf//6X6tWr85///IebN28ydepUAL777jsWLlxIo0aN6NGjR458J06cSFhYGFarlZEjR5Kenq5v27NnD2+99Rbly5e365qzeeqpp5wOhg8ICMh1fwMDA51uGzt2LFeuXGHKlCn6Ptu0bdtWf33+/Plc88jO39+fWrVqERIS4jTM//3f/5GYmMiTTz6Z427KgIAAZsyYAWitpi+//LK+HiAqKkoP27VrV9566y09r4iICPr16wdoXYypqan5LrcQ4s6TipYQDtSpU0ef7+rAgQO0a9eOkydPupzuK6+8wp49e+yWnTt38tlnn+kVnaLw/PPPU7t2bSpWrEjFihV54403iIyMZNKkSezZs4e6devmiGMbv/XEE09QtmxZfX32uyZnzpwJaN2Ojvj4+DBkyBBAq+ytWLFC3/bWW29hsVjo3Lmzw2kcgoODqV69esF3NhenTp1i1apVeHt7283cbzN8+HCWLFnC3Llz9cpLQTibjuL8+fN8+eWXgPNj1bVrV8LDwwFtPJzZbNa3ZR9L56jcti5spRRJSUkFLrcQ4s6RCUuFcCA8PJw333yTrl27cuDAAY4ePUq7du1Yt26dw0pKfjmasLRq1apERkZisViKpDIHsHDhQurUqYPZbOb69euULVsWHx+fXOPYWntsE7ze7saNG3z//feA8zm7wL5isGHDBvr160dmZqY+nURuNxPc3uLkKtus7pUqVXK4/waDgT59+hQ6fWctcP/73//IzMwEcj9WMTExHDt2jOvXr7N7925atWqVa7o2wcHB+uvsrYZCiJJHWrSEcKJatWps3LhRfzTPyZMnad++vT5gvKi1adOmyNP08fGhQoUKeVay8iMhIQGLxQLkXiGqX7++/to2uP3w4cOkpKQABZvA1VVnzpwBtMlH76Tsz6os6LESQpQuUtESIhchISGsW7eOTp06AdrcUzExMezevbvI88prmoDiZqsogTblhTPZZ+u3TSFx9epVfd2d7OqyPdMxMTGR5OTkO5avK8dKCFG6SEVLiDwEBgayZs0aevbsCWg/nB07dmTr1q1uzdfW9VRShIaG6q9/++03p+Fsg/ABIiMjAW2yVJvCDPov7MOmbd12SinWrVuXa1hnD48ujMIcK1e6pIUQJZdUtITIB19fX5YvX67P55SUlES3bt2Ij493S35nz55l5MiRbkm7sGrUqKHPLL9lyxanLUTZ79Ts1asXoI3Lsj3+Jz4+Ps8HR9u6KG2yd31mHzTuiK0VC9DHPAH6XX6O/PHHH6xcuTLXdAuic+fO+mtHE7Ha2I5Vq1at3PI0ACFE8ZOKlih1sv/QZn9dkHi3/9CDNkh83rx5PPnkk4DWPfTAAw/w9ddf55pu9laL/HrhhRd46KGHChSnsPudWzq3e+qppwCtsjN79myHYXbt2gVoM6zbxiD5+vryt7/9DdAGbz/zzDMO49qOVfauN9C62GytWo5mnl+zZo3+Ovt0Bw0bNqR58+aA1mL13nvv5YibkpLC4MGDGThwoN16200B2cuSnp5u93naXt/+Gbdu3Zro6GgAVqxY4XT8le1Y2c4pm4J8foU5v4QQd45UtESpc+HCBYevCxLPWYuLwWDgP//5Dw888AAAaWlpPProo7z++utOfxxv3rypv3ZUgbvdJ598wtdff+1wnqrcXLx4UX9dkP22sZXz9OnTTsOMGjWK1q1bA/Dqq686vEvyww8/xN/fn48++shu/csvv6xPh/D5558zZMgQffxSUlISTz75pJ73Dz/8wK5du9izZw+gTaNgu1vxnXfeYefOnSilOHToEAMHDrTr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", + "text/plain": [ + "
" ] + }, + "metadata": {}, + "output_type": "display_data" }, { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'TKE Balance')" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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oYffvXs3/fr1o3HjxnzwwQf6WL3x48fTs2dPjh8/zs2bNzl27Bj/+Mc/WLBgQa77LYQoAZQQpUx8fLwCFKAef/zxQsWbMmWK2rZtm6pUqZJq1KiROnfuXKHLM3fuXD3duXPnOgxz+PBh1bhxYzVlypRC5/P444/r+SQkJOTYPmXKFH1748aNlcViUUopdfLkSbVx40ZlMBgUoGJjY1Xv3r3VmTNn1JNPPql8fX3VpEmT9HQGDBigALVmzRqneRiNRrVq1aoc2ydMmKAANXHixBzbXn31Vbvjn91vv/2mb4uPj88Rd//+/U63JyQkqJCQENWmTRt9n20GDx6sx1u7dq3dttq1azssi1JKpaamqhMnTujHzFGY8+fPq4oVK6o6deqo1NRUu20pKSmqYcOGClAREREqOTlZX6+UUm+++aZerv79+6vnn39eXb58WSml1NGjR1WlSpUUoBo1apQjXyFEySItWkI48NNPP9GpUycuXbpUpOn+3//9H1WrVrVbgoODueuuu9i/f3+R5XP27FmUUgBcvXqVCRMm8MorrwDajQBfffUVRqP29Q8NDaVdu3ZUqlQJgC1btvDf//6X6tWr85///IebN28ydepUAL777jsWLlxIo0aN6NGjR458J06cSFhYGFarlZEjR5Kenq5v27NnD2+99Rbly5e365qzeeqpp5wOhg8ICMh1fwMDA51uGzt2LFeuXGHKlCn6Ptu0bdtWf33+/Plc88jO39+fWrVqERIS4jTM//3f/5GYmMiTTz6Z427KgIAAZsyYAWitpi+//LK+HiAqKkoP27VrV9566y09r4iICPr16wdoXYypqan5LrcQ4s6TipYQDtSpU0ef7+rAgQO0a9eOkydPupzuK6+8wp49e+yWnTt38tlnn+kVnaLw/PPPU7t2bSpWrEjFihV54403iIyMZNKkSezZs4e6devmiGMbv/XEE09QtmxZfX32uyZnzpwJaN2Ojvj4+DBkyBBAq+ytWLFC3/bWW29hsVjo3Lmzw2kcgoODqV69esF3NhenTp1i1apVeHt7283cbzN8+HCWLFnC3Llz9cpLQTibjuL8+fN8+eWXgPNj1bVrV8LDwwFtPJzZbNa3ZR9L56jcti5spRRJSUkFLrcQ4s6RCUuFcCA8PJw333yTrl27cuDAAY4ePUq7du1Yt26dw0pKfjmasLRq1apERkZisViKpDIHsHDhQurUqYPZbOb69euULVsWHx+fXOPYWntsE7ze7saNG3z//feA8zm7wL5isGHDBvr160dmZqY+nURuNxPc3uLkKtus7pUqVXK4/waDgT59+hQ6fWctcP/73//IzMwEcj9WMTExHDt2jOvXr7N7925atWqVa7o2wcHB+uvsrYZCiJJHWrSEcKJatWps3LhRfzTPyZMnad++vT5gvKi1adOmyNP08fGhQoUKeVay8iMhIQGLxQLkXiGqX7++/to2uP3w4cOkpKQABZvA1VVnzpwBtMlH76Tsz6os6LESQpQuUtESIhchISGsW7eOTp06AdrcUzExMezevbvI88prmoDiZqsogTblhTPZZ+u3TSFx9epVfd2d7OqyPdMxMTGR5OTkO5avK8dKCFG6SEVLiDwEBgayZs0aevbsCWg/nB07dmTr1q1uzdfW9VRShIaG6q9/++03p+Fsg/ABIiMjAW2yVJvCDPov7MOmbd12SinWrVuXa1hnD48ujMIcK1e6pIUQJZdUtITIB19fX5YvX67P55SUlES3bt2Ij493S35nz55l5MiRbkm7sGrUqKHPLL9lyxanLUTZ79Ts1asXoI3Lsj3+Jz4+Ps8HR9u6KG2yd31mHzTuiK0VC9DHPAH6XX6O/PHHH6xcuTLXdAuic+fO+mtHE7Ha2I5Vq1at3PI0ACFE8ZOKlih1sv/QZn9dkHi3/9CDNkh83rx5PPnkk4DWPfTAAw/w9ddf55pu9laL/HrhhRd46KGHChSnsPudWzq3e+qppwCtsjN79myHYXbt2gVoM6zbxiD5+vryt7/9DdAGbz/zzDMO49qOVfauN9C62GytWo5mnl+zZo3+Ovt0Bw0bNqR58+aA1mL13nvv5YibkpLC4MGDGThwoN16200B2cuSnp5u93naXt/+Gbdu3Zro6GgAVqxY4XT8le1Y2c4pm4J8foU5v4QQd45UtESpc+HCBYevCxLPWYuLwWDgP//5Dw888AAAaWlpPProo7z++utOfxxv3rypv3ZUgbvdJ598wtdff+1wnqrcXLx4UX9dkP22sZXz9OnTTsOMGjWK1q1bA/Dqq686vEvyww8/xN/fn48++shu/csvv6xPh/D5558zZMgQffxSUlISTz75pJ73Dz/8wK5du9izZw+gTaNgu1vxnXfeYefOnSilOHToEAMHDrTr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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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4ejoKEaPHi02btyoznd3dxfPPfec0Ol0QqvViosXL4qQkBB1+RdffCHS0tLUfJ9++ml1mSRJokaNGsLb21ts2LBBDBgwwKC8TZs2idzcXHH48GHh4eEhAAgXFxfx888/i8zMTHW/HTx4UHh6egoAwtHRUWzbtk1kZ2erZV65ckWEhYUZ7StlHx85csSo/Vqt1uCtDEWnwYMHq28yICIyhQEaUb6kpCSzf1CVacmSJUbp7ty5U2K6devWqevfvHmzxPUBiLVr14r//Oc/BkFJWaZt27aVqt27d+8WL7/8snjggQeKzc/BwUF4enqK0NBQ0aNHDzFv3jwRFxdnNt8VK1aIRo0aCVdXV9G6dWuxefNmIYQQmZmZol27dsLX11e8/vrrIjc3VwghRFRUlNmylSAtKSlJjBkzRgQEBAgfHx8xePBgERMTI4QQ4tdffxX+/v4iMjJSbN++XQghxODBg03m5+/vL4QQon79+iaXF32VVEpKipg+fboIDw8Xzs7OIjg4WLzwwgvi1q1bxW7b7777TnTp0kV4e3sLNzc30bp1a7F06VIGZ0RUIkmIctzcQkRERESVhvegEREREVkZBmhEREREVoYBGhEREZGVYYBGREREZZabm4v58+ejUaNGCA8PR+fOnbF///4y53P37l1MmDABYWFhCA0NxeDBg3Hjxo1i02zevBlt27ZFWFgYmjdvjuXLl5dYTnZ2Nj7//HM0aNAA165dK3H98pRRoar7KQUiIiKyLdnZ2eKJJ54QjRs3FtevXxdCCLFx40bh5OQkNm7cWOp8rl69KurWrSsGDhwoMjMzhVarFVOmTBEBAQHiwoULJtPMmDFDeHp6ir179wohhDh//rwICAgQL730ksn1MzIyxMKFCw2G8FGe/janrGVUBgZoREREVCavvPKKACB+//13g/lDhw4V7u7u4urVqyXmodVqRevWrUVAQIBIT083mB8SEiKaN2+uDsOj2LJliwAgFixYYDB/6dKlAoDYsGGDUTmpqakiNjZWXL58WWg0mhIDtPKUURk4zEYp6PV63L59G15eXpAkqbqrQ0REVkwIgbS0NNSpUwcaTeXdSZSdna2+/swSzs7OcHV1LfX6165dQ0REBB544AH1tW6Kn3/+GX369MHgwYOxfv36YvP55ptvMGLECLzwwgv47LPPDJZNmzYNH3zwAb744gtMnDgRgPy3ODIyEpcvX8bdu3dRq1Ytdf309HT4+voiMDAQ169fV1+9VlTt2rURGxuLmJgYg/cHKyqijApTJWGgjSvtwKKcOHHixImTMt28ebPS/i5lZWUJdzhUSD0DAwNFVlZWqcueP3++ACDGjRtntCwhIUEAEM7OziI+Pr7YfHr16iUAiG+++cZo2ffffy8A+e0qiiNHjggAomHDhibzU94A8+OPP5ots169egIw34NWEWVUlIKX55FZXl5eAICbN2/C29u7mmtDRETWLDU1FSEhIerfjsqQm5uLTOgwEnXhbMHzfrnQY83dW8jNzS11L9r27dsBAGFhYUbL/Pz8ULduXdy6dQsHDx7EM888YzKPzMxM9R28pvJp1qwZAODEiRNITk6Gr69vseUqaU6fPo3o6Gg8/fTTJtcp6SpYRZRRURiglYKyQ729vRmgERFRqVTFLTFukgOcpfIHaA5CAoQcVBbm4uICFxcXk2lOnDgBAAgODja53NfXF7du3cLJkyfNBmjnz59Hdna22Xx8fX0BAEIInD59Go899lipygWAkydPmlxeGlVRRmlxmA0iIqL7XEhICHx8fNQpKirK5HrZ2dlIT08HUBCsFOXj4wMAiI+PN1teXFyc+rupfJQ8CuejpLGk3JJURRmlxR40IiIiG6WRAAcLOuo0ACCMb+Ex13uWkJCg/u7u7m46z/wHI5QesvLkU/jhCiUfJY0l5ZakKsooLQZoRERENspBkuBgwaVUB5TtFh5nZ2f1d2FmEAjlyVI/P79y51P46VQlHyWNJeWWpCrKKC1e4iQiIqJS8fPzU4OYjIwMk+skJycDAGrWrGk2n8DAQPV3U/koeRTOR0ljSbklqYoySosBGhERkY1ykCyfylSegwMaN24MALh9+7bJde7duwcAeOihh8zm07RpU/UhClP5KHk4OzvjwQcfBAA0b97c4nJLUhVllBYDNCIiIhulXOK0ZCqrnj17AoDRILWAfPN8SkoKPDw80KlTJ7N51KhRAw8//LDZfC5fvgwAeOyxx+Dh4VFiuYXT9O7du7RNMVIVZZQWAzQiIiIqtbFjx0Kj0Zh8Mfrhw4cBAP379zf7oIFi/PjxAFBsPsOGDVPndevWDaGhoTh//rzBU6CAfOnx/PnzCA0NRfv27cvWoEKqoozSYoBGRERko6r6EicAREREYPz48Thz5ozReGCrV6+Gm5sbZs+erc6Ljo5Gu3bt8OmnnxqsO2LECDRr1gwbN240eCoyNzcX69evR9OmTTF8+HB1vqOjI6KioqDX67F27VqDvL755hvo9Xq89957xb6CSavVAgB0Op3J5RVRRkVhgEZERGSjquMSJwAsXLgQrVu3xsSJE5GYmAghBJYsWYKffvoJa9asMRiJ/6OPPsLRo0cxa9YsgzycnJzw7bffQqvVYurUqdBqtcjMzMSYMWOg1+uxefNmODk5GaQZPHgwJkyYgHnz5uH06dMAgAMHDmDWrFl49dVXMXToULN1jomJQWxsLADgyJEjZtezpIyKxGE2iIiIqEw8PDwQHR2Nt99+G23atIFGo0HTpk1x7Ngx9UZ7xdChQ7F//36MHDnSKJ+mTZvi8OHDmD59OiIiIuDk5IQePXrg1KlTBi8qL+yLL75A06ZNMWTIEOTk5KB27dpYs2YN+vbta7a+9evXx+3bt9UetOHDh+ONN97Ajh07TN7wX54yKpokzA32QarU1FT4+PggJSWFr3oiIqJiVcXfDKWMGS6hcLXgVU/ZQo+onBj+fbNC7EEjIiKyURU1UC1ZHwZoRERENqq8N/qr6SuuKlTB+JAAERERkZVhDxoREZGNknvQLLnESdaKARoREZGN4iVO+8VLnERERERWhj1oRERENopPcdovBmhEREQ2SmPhJU5eRrNe3DdEREREVoY9aERERDaKlzjtFwM0IiIiG8WnOO0XL3ESERERWRmbDdC2b9+ODh064Ouvvy52vePHj+PJJ59EaGgoGjZsiGnTpiErK6tqKklERFSJlB40SyayTjYXoG3cuBHt2rXDU089hcOHDxe77k8//YQOHTqga9euiImJwZ9//omDBw+ia9euyMjIqKIaExERVQ7lHjRLJrJONhegtWnTBvv370dERESx6928eRPPP/88unTpgqlTpwIAfHx8sGLFChw5cgRvvPFGVVSXiIio0jjAwh606m4AmWVzAVpYWBhcXFzQsmXLYtebM2cO0tLSMHr0aIP5jRo1Qtu2bfHll1/i/PnzlVlVIiIionKxuQBN4erqanZZXl4eNm3aBADo0KGD0fL27dtDCIHly5dXWv2IiIgqm8bCy5saXuK0WjY7zIZUzEF14MABpKamwsXFBXXr1jVa3qxZMwBAdHR0pdWPiIioslk8zAbjM6tlswFa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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Remove estimations below 0\n", - "P = P.where(P>0)\n", - "P.plot(cmap='turbo', ylim=(0,11))\n", - "plt.title('TKE Production') # remove bogus title\n", - "\n", - "\n", - "\n", - "# Plot difference between production and dissipation\n", - "plt.figure()\n", - "(P - ds_avg['dissipation_rate'].values).plot(ylim=(0,11))\n", - "plt.title('TKE Balance')" + "data": { + "image/png": "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4ejoKEaPHi02btyoznd3dxfPPfec0Ol0QqvViosXL4qQkBB1+RdffCHS0tLUfJ9++ml1mSRJokaNGsLb21ts2LBBDBgwwKC8TZs2idzcXHH48GHh4eEhAAgXFxfx888/i8zMTHW/HTx4UHh6egoAwtHRUWzbtk1kZ2erZV65ckWEhYUZ7StlHx85csSo/Vqt1uCtDEWnwYMHq28yICIyhQEaUb6kpCSzf1CVacmSJUbp7ty5U2K6devWqevfvHmzxPUBiLVr14r//Oc/BkFJWaZt27aVqt27d+8WL7/8snjggQeKzc/BwUF4enqK0NBQ0aNHDzFv3jwRFxdnNt8VK1aIRo0aCVdXV9G6dWuxefNmIYQQmZmZol27dsLX11e8/vrrIjc3VwghRFRUlNmylSAtKSlJjBkzRgQEBAgfHx8xePBgERMTI4QQ4tdffxX+/v4iMjJSbN++XQghxODBg03m5+/vL4QQon79+iaXF32VVEpKipg+fboIDw8Xzs7OIjg4WLzwwgvi1q1bxW7b7777TnTp0kV4e3sLNzc30bp1a7F06VIGZ0RUIkmIctzcQkRERESVhvegEREREVkZBmhEREREVoYBGhEREZGVYYBGREREZZabm4v58+ejUaNGCA8PR+fOnbF///4y53P37l1MmDABYWFhCA0NxeDBg3Hjxo1i02zevBlt27ZFWFgYmjdvjuXLl5dYTnZ2Nj7//HM0aNAA165dK3H98pRRoar7KQUiIiKyLdnZ2eKJJ54QjRs3FtevXxdCCLFx40bh5OQkNm7cWOp8rl69KurWrSsGDhwoMjMzhVarFVOmTBEBAQHiwoULJtPMmDFDeHp6ir179wohhDh//rwICAgQL730ksn1MzIyxMKFCw2G8FGe/janrGVUBgZoREREVCavvPKKACB+//13g/lDhw4V7u7u4urVqyXmodVqRevWrUVAQIBIT083mB8SEiKaN2+uDsOj2LJliwAgFixYYDB/6dKlAoDYsGGDUTmpqakiNjZWXL58WWg0mhIDtPKUURk4zEYp6PV63L59G15eXpAkqbqrQ0REVkwIgbS0NNSpUwcaTeXdSZSdna2+/swSzs7OcHV1LfX6165dQ0REBB544AH1tW6Kn3/+GX369MHgwYOxfv36YvP55ptvMGLECLzwwgv47LPPDJZNmzYNH3zwAb744gtMnDgRgPy3ODIyEpcvX8bdu3dRq1Ytdf309HT4+voiMDAQ169fV1+9VlTt2rURGxuLmJgYg/cHKyqijApTJWGgjSvtwKKcOHHixImTMt28ebPS/i5lZWUJdzhUSD0DAwNFVlZWqcueP3++ACDGjRtntCwhIUEAEM7OziI+Pr7YfHr16iUAiG+++cZo2ffffy8A+e0qiiNHjggAomHDhibzU94A8+OPP5ots169egIw34NWEWVUlIKX55FZXl5eAICbN2/C29u7mmtDRETWLDU1FSEhIerfjsqQm5uLTOgwEnXhbMHzfrnQY83dW8jNzS11L9r27dsBAGFhYUbL/Pz8ULduXdy6dQsHDx7EM888YzKPzMxM9R28pvJp1qwZAODEiRNITk6Gr69vseUqaU6fPo3o6Gg8/fTTJtcp6SpYRZRRURiglYKyQ729vRmgERFRqVTFLTFukgOcpfIHaA5CAoQcVBbm4uICFxcXk2lOnDgBAAgODja53NfXF7du3cLJkyfNBmjnz59Hdna22Xx8fX0BAEIInD59Go899lipygWAkydPmlxeGlVRRmlxmA0iIqL7XEhICHx8fNQpKirK5HrZ2dlIT08HUBCsFOXj4wMAiI+PN1teXFyc+rupfJQ8CuejpLGk3JJURRmlxR40IiIiG6WRAAcLOuo0ACCMb+Ex13uWkJCg/u7u7m46z/wHI5QesvLkU/jhCiUfJY0l5ZakKsooLQZoRERENspBkuBgwaVUB5TtFh5nZ2f1d2FmEAjlyVI/P79y51P46VQlHyWNJeWWpCrKKC1e4iQiIqJS8fPzU4OYjIwMk+skJycDAGrWrGk2n8DAQPV3U/koeRTOR0ljSbklqYoySosBGhERkY1ykCyfylSegwMaN24MALh9+7bJde7duwcAeOihh8zm07RpU/UhClP5KHk4OzvjwQcfBAA0b97c4nJLUhVllBYDNCIiIhulXOK0ZCqrnj17AoDRILWAfPN8SkoKPDw80KlTJ7N51KhRAw8//LDZfC5fvgwAeOyxx+Dh4VFiuYXT9O7du7RNMVIVZZQWAzQiIiIqtbFjx0Kj0Zh8Mfrhw4cBAP379zf7oIFi/PjxAFBsPsOGDVPndevWDaGhoTh//rzBU6CAfOnx/PnzCA0NRfv27cvWoEKqoozSYoBGRERko6r6EicAREREYPz48Thz5ozReGCrV6+Gm5sbZs+erc6Ljo5Gu3bt8OmnnxqsO2LECDRr1gwbN240eCoyNzcX69evR9OmTTF8+HB1vqOjI6KioqDX67F27VqDvL755hvo9Xq89957xb6CSavVAgB0Op3J5RVRRkVhgEZERGSjquMSJwAsXLgQrVu3xsSJE5GYmAghBJYsWYKffvoJa9asMRiJ/6OPPsLRo0cxa9YsgzycnJzw7bffQqvVYurUqdBqtcjMzMSYMWOg1+uxefNmODk5GaQZPHgwJkyYgHnz5uH06dMAgAMHDmDWrFl49dVXMXToULN1jomJQWxsLADgyJEjZtezpIyKxGE2iIiIqEw8PDwQHR2Nt99+G23atIFGo0HTpk1x7Ngx9UZ7xdChQ7F//36MHDnSKJ+mTZvi8OHDmD59OiIiIuDk5IQePXrg1KlTBi8qL+yLL75A06ZNMWTIEOTk5KB27dpYs2YN+vbta7a+9evXx+3bt9UetOHDh+ONN97Ajh07TN7wX54yKpokzA32QarU1FT4+PggJSWFr3oiIqJiVcXfDKWMGS6hcLXgVU/ZQo+onBj+fbNC7EEjIiKyURU1UC1ZHwZoRERENqq8N/qr6SuuKlTB+JAAERERkZVhDxoREZGNknvQLLnESdaKARoREZGN4iVO+8VLnERERERWhj1oRERENopPcdovBmhEREQ2SmPhJU5eRrNe3DdEREREVoY9aERERDaKlzjtFwM0IiIiG8WnOO0XL3ESERERWRmbDdC2b9+ODh064Ouvvy52vePHj+PJJ59EaGgoGjZsiGnTpiErK6tqKklERFSJlB40SyayTjYXoG3cuBHt2rXDU089hcOHDxe77k8//YQOHTqga9euiImJwZ9//omDBw+ia9euyMjIqKIaExERVQ7lHjRLJrJONhegtWnTBvv370dERESx6928eRPPP/88unTpgqlTpwIAfHx8sGLFChw5cgRvvPFGVVSXiIio0jjAwh606m4AmWVzAVpYWBhcXFzQsmXLYtebM2cO0tLSMHr0aIP5jRo1Qtu2bfHll1/i/PnzlVlVIiIionKxuQBN4erqanZZXl4eNm3aBADo0KGD0fL27dtDCIHly5dXWv2IiIgqm8bCy5saXuK0WjY7zIZUzEF14MABpKamwsXFBXXr1jVa3qxZMwBAdHR0pdWPiIioslk8zAbjM6tlswFa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", + "text/plain": [ + "
" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "interpreter": { - "hash": "5cfd453a1a1cce2f32ea80f99ff7da863344217116d39185ac62b248c2577445" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" + }, + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "# Remove estimations below 0\n", + "P = P.where(P > 0)\n", + "P.plot(cmap=\"turbo\", ylim=(0, 11))\n", + "plt.title(\"TKE Production\") # remove bogus title\n", + "\n", + "\n", + "# Plot difference between production and dissipation\n", + "plt.figure()\n", + "(P - ds_avg[\"dissipation_rate\"].values).plot(ylim=(0, 11))\n", + "plt.title(\"TKE Balance\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "5cfd453a1a1cce2f32ea80f99ff7da863344217116d39185ac62b248c2577445" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/examples/adv_example.ipynb b/examples/adv_example.ipynb index 3773578c4..1fe898ede 100644 --- a/examples/adv_example.ipynb +++ b/examples/adv_example.ipynb @@ -1,915 +1,922 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Reading ADV Data with MHKiT\n", - "\n", - "This example presents a simplified workflow for analyzing Acoustic Doppler Velocimetry (ADV) data using MHKiT. MHKiT incorporates the DOLfYN codebase as a module to handle ADV and Acoustic Doppler Current Profiler (ADCP) data.\n", - "\n", - "A standard ADV data analysis workflow can be segmented into the following steps:\n", - "\n", - "1. **Raw Data Review**: Evaluate the original data by verifying timestamps and assessing the quality of velocity data, specifically looking for any data spikes.\n", - "\n", - "2. **Data Cleaning**: Identify and eliminate any spurious data points. If needed, bad data points can be replaced with interpolated values.\n", - "\n", - "3. **Data Rotation**: Transform the data into the principal flow coordinates, which are the streamwise, cross-stream, and vertical directions.\n", - "\n", - "4. **Data Averaging**: Aggregate the data into bins or ensembles, each of which spans a predefined time length, typically between 5 and 10 minutes.\n", - "\n", - "5. **Statistical Analysis**: Compute turbulence statistics such as turbulence intensity, Turbulent Kinetic Energy (TKE), and Reynolds stresses for the observed flow field.\n", - "\n", - "Start your analysis by importing the necessary tools:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "from mhkit import dolfyn\n", - "from mhkit.dolfyn.adv import api" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Read Raw Instrument Data" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "DOLfYN currently only carries support for the Nortek Vector ADV. The example loaded here is a short clip of data from a test deployment to show DOLfYN's capabilities.\n", - "\n", - "Start by reading in the raw datafile downloaded from the instrument. The `dolfyn.read` function reads the raw file and dumps the information into an xarray Dataset, which contains three groups of variables:\n", - "\n", - "1. Velocity, amplitude, and correlation of the Doppler velocimetry\n", - "2. Measurements of the instrument's bearing and environment\n", - "3. Orientation matrices DOLfYN uses for rotating through coordinate frames." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading file data/dolfyn/vector_data01.VEC ...\n" - ] - } - ], - "source": [ - "ds = dolfyn.read('data/dolfyn/vector_data01.VEC')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are two ways to see what's in a Dataset. The first is to simply type the dataset's name to see the standard xarray output. To access a particular variable in a dataset, use dict-style (`ds['vel']`) or attribute-style syntax (`ds.vel`). See the [xarray docs](http://xarray.pydata.org/en/stable/getting-started-guide/quick-overview.html) for more details on how to use the xarray format." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-              "Dimensions:              (x1: 3, x2: 3, time: 122912, dir: 3, beam: 3,\n",
-              "                          earth: 3, inst: 3)\n",
-              "Coordinates:\n",
-              "  * x1                   (x1) int32 1 2 3\n",
-              "  * x2                   (x2) int32 1 2 3\n",
-              "  * time                 (time) datetime64[ns] 2012-06-12T12:00:02.968749046 ...\n",
-              "  * dir                  (dir) <U1 'X' 'Y' 'Z'\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  (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",
-              "    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",
-              "    inst_make:                   Nortek\n",
-              "    inst_model:                  Vector\n",
-              "    inst_type:                   ADV\n",
-              "    rotate_vars:                 ['vel']\n",
-              "    n_beams:                     3\n",
-              "    profile_mode:                continuous\n",
-              "    ...                          ...\n",
-              "    recorder_size_bytes:         4074766336\n",
-              "    vel_range:                   normal\n",
-              "    firmware_version:            3.34\n",
-              "    fs:                          32.0\n",
-              "    coord_sys:                   inst\n",
-              "    has_imu:                     0
" - ], - "text/plain": [ - "\n", - "Dimensions: (x1: 3, x2: 3, time: 122912, dir: 3, beam: 3,\n", - " earth: 3, inst: 3)\n", - "Coordinates:\n", - " * x1 (x1) int32 1 2 3\n", - " * x2 (x2) int32 1 2 3\n", - " * time (time) datetime64[ns] 2012-06-12T12:00:02.968749046 ...\n", - " * dir (dir) : Nortek Vector\n", - " . 1.07 hours (started: Jun 12, 2012 12:00)\n", - " . inst-frame\n", - " . (122912 pings @ 32.0Hz)\n", - " Variables:\n", - " - time ('time',)\n", - " - vel ('dir', 'time')\n", - " - orientmat ('earth', 'inst', 'time')\n", - " - heading ('time',)\n", - " - pitch ('time',)\n", - " - roll ('time',)\n", - " - temp ('time',)\n", - " - pressure ('time',)\n", - " - amp ('beam', 'time')\n", - " - corr ('beam', 'time')\n", - " ... and others (see `.variables`)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ds_dolfyn = ds.velds\n", - "ds_dolfyn" - ] - }, + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Reading ADV Data with MHKiT\n", + "\n", + "This example presents a simplified workflow for analyzing Acoustic Doppler Velocimetry (ADV) data using MHKiT. MHKiT incorporates the DOLfYN codebase as a module to handle ADV and Acoustic Doppler Current Profiler (ADCP) data.\n", + "\n", + "A standard ADV data analysis workflow can be segmented into the following steps:\n", + "\n", + "1. **Raw Data Review**: Evaluate the original data by verifying timestamps and assessing the quality of velocity data, specifically looking for any data spikes.\n", + "\n", + "2. **Data Cleaning**: Identify and eliminate any spurious data points. If needed, bad data points can be replaced with interpolated values.\n", + "\n", + "3. **Data Rotation**: Transform the data into the principal flow coordinates, which are the streamwise, cross-stream, and vertical directions.\n", + "\n", + "4. **Data Averaging**: Aggregate the data into bins or ensembles, each of which spans a predefined time length, typically between 5 and 10 minutes.\n", + "\n", + "5. **Statistical Analysis**: Compute turbulence statistics such as turbulence intensity, Turbulent Kinetic Energy (TKE), and Reynolds stresses for the observed flow field.\n", + "\n", + "Start your analysis by importing the necessary tools:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Quality Control" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from mhkit import dolfyn\n", + "from mhkit.dolfyn.adv import api" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read Raw Instrument Data" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DOLfYN currently only carries support for the Nortek Vector ADV. The example loaded here is a short clip of data from a test deployment to show DOLfYN's capabilities.\n", + "\n", + "Start by reading in the raw datafile downloaded from the instrument. The `dolfyn.read` function reads the raw file and dumps the information into an xarray Dataset, which contains three groups of variables:\n", + "\n", + "1. Velocity, amplitude, and correlation of the Doppler velocimetry\n", + "2. Measurements of the instrument's bearing and environment\n", + "3. Orientation matrices DOLfYN uses for rotating through coordinate frames." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "ADV velocity data tends to have spikes due to Doppler noise, and the common way to \"despike\" the data is by using the phase-space algorithm by Goring and Nikora (2002). DOLfYN integrates this function using a 2-step approach: create a logical mask where True corresponds to a spike detection, and then utilize an interpolation function to replace the spikes." - ] - }, + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading file data/dolfyn/vector_data01.VEC ...\n" + ] + } + ], + "source": [ + "ds = dolfyn.read(\"data/dolfyn/vector_data01.VEC\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are two ways to see what's in a Dataset. The first is to simply type the dataset's name to see the standard xarray output. To access a particular variable in a dataset, use dict-style (`ds['vel']`) or attribute-style syntax (`ds.vel`). See the [xarray docs](http://xarray.pydata.org/en/stable/getting-started-guide/quick-overview.html) for more details on how to use the xarray format." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Percent of data containing spikes: 0.73%\n" - ] - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:              (x1: 3, x2: 3, time: 122912, dir: 3, beam: 3,\n",
+       "                          earth: 3, inst: 3)\n",
+       "Coordinates:\n",
+       "  * x1                   (x1) int32 1 2 3\n",
+       "  * x2                   (x2) int32 1 2 3\n",
+       "  * time                 (time) datetime64[ns] 2012-06-12T12:00:02.968749046 ...\n",
+       "  * dir                  (dir) <U1 'X' 'Y' 'Z'\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  (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",
+       "    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",
+       "    inst_make:                   Nortek\n",
+       "    inst_model:                  Vector\n",
+       "    inst_type:                   ADV\n",
+       "    rotate_vars:                 ['vel']\n",
+       "    n_beams:                     3\n",
+       "    profile_mode:                continuous\n",
+       "    ...                          ...\n",
+       "    recorder_size_bytes:         4074766336\n",
+       "    vel_range:                   normal\n",
+       "    firmware_version:            3.34\n",
+       "    fs:                          32.0\n",
+       "    coord_sys:                   inst\n",
+       "    has_imu:                     0
" ], - "source": [ - "# Clean the file using the Goring+Nikora method:\n", - "mask = api.clean.GN2002(ds.vel, npt=5000)\n", - "# Replace bad datapoints via cubic spline interpolation\n", - "ds['vel'] = api.clean.clean_fill(ds['vel'], mask, npt=12, method='cubic', maxgap=None)\n", - "\n", - "print('Percent of data containing spikes: {0:.2f}%'.format(100*mask.mean()))\n", - "\n", - "# If interpolation isn't desired:\n", - "ds_nan = ds.copy(deep=True)\n", - "ds_nan.coords['mask'] = (('dir','time'), ~mask)\n", - "ds_nan['vel'] = ds_nan['vel'].where(ds_nan['mask'])" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Coordinate Rotations" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that the data has been cleaned, the next step is to rotate the velocity data into true East, North, Up (ENU) coordinates.\n", - "\n", - "ADVs use an internal compass or magnetometer to determine magnetic ENU directions. The `set_declination` function takes the user supplied magnetic declination (which can be looked up online for specific coordinates) and adjusts the orientation matrix saved within the dataset.\n", - "\n", - "Instruments save vector data in the coordinate system specified in the deployment configuration file. To make the data useful, it must be rotated through coordinate systems (\"beam\"<->\"inst\"<->\"earth\"<->\"principal\"), done through the `rotate2` function. If the \"earth\" (ENU) coordinate system is specified, DOLfYN will automatically rotate the dataset through the necessary coordinate systems to get there. The `inplace` set as true will alter the input dataset \"in place\", a.k.a. it not create a new dataset." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# First set the magnetic declination\n", - "dolfyn.set_declination(ds, declin=10, inplace=True) # declination points 10 degrees East\n", - "\n", - "# Rotate that data from the instrument to earth frame (ENU):\n", - "dolfyn.rotate2(ds, 'earth', inplace=True)" + "text/plain": [ + "\n", + "Dimensions: (x1: 3, x2: 3, time: 122912, dir: 3, beam: 3,\n", + " earth: 3, inst: 3)\n", + "Coordinates:\n", + " * x1 (x1) int32 1 2 3\n", + " * x2 (x2) int32 1 2 3\n", + " * time (time) datetime64[ns] 2012-06-12T12:00:02.968749046 ...\n", + " * dir (dir) : Nortek Vector\n", + " . 1.07 hours (started: Jun 12, 2012 12:00)\n", + " . inst-frame\n", + " . (122912 pings @ 32.0Hz)\n", + " Variables:\n", + " - time ('time',)\n", + " - vel ('dir', 'time')\n", + " - orientmat ('earth', 'inst', 'time')\n", + " - heading ('time',)\n", + " - pitch ('time',)\n", + " - roll ('time',)\n", + " - temp ('time',)\n", + " - pressure ('time',)\n", + " - amp ('beam', 'time')\n", + " - corr ('beam', 'time')\n", + " ... and others (see `.variables`)" ] - }, + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_dolfyn = ds.velds\n", + "ds_dolfyn" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Quality Control" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ADV velocity data tends to have spikes due to Doppler noise, and the common way to \"despike\" the data is by using the phase-space algorithm by Goring and Nikora (2002). DOLfYN integrates this function using a 2-step approach: create a logical mask where True corresponds to a spike detection, and then utilize an interpolation function to replace the spikes." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": false + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Streamwise Direction')" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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Rx99FBkZGRg5cqTdTIstXbp0wTPPPIMNGzbg8OHDAIBJkyZBoVDgwoULVmVJdxUWFmLhwoUICAjAkiVLXDrHTTfdhJdffhkxMTFo37693eMmT56MV155BStXrsQLL7xg9zhHPx8hISEYPHgwvv76a7z22msICgoCoL+z7r///S9at26NLl26OP8FETVTDJSIfNikSZPQunVrTJ06Fd26dYNOp8ORI0fw+uuvIzQ0FIsXLzYe26tXL3z++edYv349OnTogMDAwHrn94SGhuI///kP5s6di8LCQsyaNQvx8fG4du0a/vjjD1y7dg0rV64EoP+lvWbNGnTr1g29e/fGoUOH8Oqrr6J169Ye/5rj4+PRs2dPbN68GWPGjDHOExo/fjwKCwtRWFiIN954o95zHD16FA888ABuvfVWdO7cGUqlEr/++iuOHj2KJ554AoD+lvkXXngBTz/9NC5evIgbbrgBUVFRyM3NxYEDBxASEoLnn3++wfWeO3cO+/btg06nMw6c/PDDD1FaWopPPvnEatyBox566CFs2LABI0eOxJIlS9C7d2/odDpkZmZi8+bNeOSRRzB48GCMGDECc+bMwUsvvYTc3FzcdNNNUKlUSEtLQ3BwMP76178CcO7z8corr2DChAkYM2YMli5dCqVSiXfeeQfHjx/HunXrbGbAiHwVAyUiH/bMM8/g22+/xfLly5GTkwO1Wo2kpCSMHz8eTz75pLFJGgCef/555OTk4J577kFZWRnatWvX4FYZs2fPRtu2bbFs2TLcd999KCsrQ3x8PPr27Yt58+YZj/v3v/+NgIAAvPLKKygvL8d1112Hr7/+2lgW8zRpWKNpH1Lbtm3RuXNnnDt3rt7+JABITExEx44d8c477+Dy5csQBAEdOnTA66+/bgwcAP3IhNTUVPz73//GunXroFarkZiYiIEDB2LhwoUOrVUab6BQKBAREYEuXbpg/vz5uPfee90q6YWEhGDXrl345z//iffeew/p6ekICgpC27ZtMX78eOMcJEA/z+i6667Dhx9+iDVr1iAoKAipqalmoxec+XyMGjUKv/76K/7+979j3rx50Ol06NOnD/73v/9ZNeoT+TpO5iYiIiKyg+MBiIiIiOxgoERERERkBwMlIiIiIjsYKBERERHZwUCJiIiIyA4GSkRERER2cI6SG3Q6HbKzsxEWFsYBa0RE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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "\n", - "plt.figure()\n", - "plt.loglog(ds_binned['freq'], ds_binned['auto_spectra'].sel(S='Sxx').mean(dim='time'))\n", - "plt.xlabel('Frequency [Hz]')\n", - "plt.ylabel('Energy Density $\\mathrm{[m^2/s^s/Hz]}$')\n", - "plt.title('Streamwise Direction')" - ] - }, + "name": "stdout", + "output_type": "stream", + "text": [ + "Percent of data containing spikes: 0.73%\n" + ] + } + ], + "source": [ + "# Clean the file using the Goring+Nikora method:\n", + "mask = api.clean.GN2002(ds.vel, npt=5000)\n", + "# Replace bad datapoints via cubic spline interpolation\n", + "ds[\"vel\"] = api.clean.clean_fill(ds[\"vel\"], mask, npt=12, method=\"cubic\", maxgap=None)\n", + "\n", + "print(\"Percent of data containing spikes: {0:.2f}%\".format(100 * mask.mean()))\n", + "\n", + "# If interpolation isn't desired:\n", + "ds_nan = ds.copy(deep=True)\n", + "ds_nan.coords[\"mask\"] = ((\"dir\", \"time\"), ~mask)\n", + "ds_nan[\"vel\"] = ds_nan[\"vel\"].where(ds_nan[\"mask\"])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Coordinate Rotations" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the data has been cleaned, the next step is to rotate the velocity data into true East, North, Up (ENU) coordinates.\n", + "\n", + "ADVs use an internal compass or magnetometer to determine magnetic ENU directions. The `set_declination` function takes the user supplied magnetic declination (which can be looked up online for specific coordinates) and adjusts the orientation matrix saved within the dataset.\n", + "\n", + "Instruments save vector data in the coordinate system specified in the deployment configuration file. To make the data useful, it must be rotated through coordinate systems (\"beam\"<->\"inst\"<->\"earth\"<->\"principal\"), done through the `rotate2` function. If the \"earth\" (ENU) coordinate system is specified, DOLfYN will automatically rotate the dataset through the necessary coordinate systems to get there. The `inplace` set as true will alter the input dataset \"in place\", a.k.a. it not create a new dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# First set the magnetic declination\n", + "dolfyn.set_declination(\n", + " ds, declin=10, inplace=True\n", + ") # declination points 10 degrees East\n", + "\n", + "# Rotate that data from the instrument to earth frame (ENU):\n", + "dolfyn.rotate2(ds, \"earth\", inplace=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once in the true ENU frame of reference, we can calculate the principal flow direction for the velocity data and rotate it into the principal frame of reference (streamwise, cross-stream, vertical). Principal flow directions are aligned with and orthogonal to the flow streamlines at the measurement location. \n", + "\n", + "First, the principal flow direction must be calculated through `calc_principal_heading`. As a standard for DOLfYN functions, those that begin with \"calc_*\" require the velocity data for input. This function is different from others in DOLfYN in that it requires place the output in an attribute called \"principal_heading\", as shown below.\n", + "\n", + "Again we use `rotate2` to change coordinate systems." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "ds.attrs[\"principal_heading\"] = dolfyn.calc_principal_heading(ds[\"vel\"])\n", + "dolfyn.rotate2(ds, \"principal\", inplace=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Averaging Data\n", + "The next step in ADV analysis is to average the velocity data into time bins (ensembles) and calculate turbulence statistics. These averaged values are then used to calculate turbulence statistics. There are two distinct methods for performing this operation, both of which utilize the same variable inputs and produce identical datasets.\n", + "\n", + "1. **Object-Oriented Approach** (standard): Define an 'averaging object', create a dataset binned in time, and calculate basic turbulence statistics. This is accomplished by initiating an object from the ADVBinner class and then feeding that object with our dataset.\n", + "\n", + "2. **Functional Approach** (simple): The same operations can be performed using the functional counterpart of ADVBinner, turbulence_statistics.\n", + "\n", + "Function inputs shown here are the dataset itself: \n", + " - `n_bin`: the number of elements in each bin; \n", + " - `fs`: the ADV's sampling frequency in Hz; \n", + " - `n_fft`: optional, the number of elements per FFT for spectral analysis; \n", + " - `freq_units`: optional, either in Hz or rad/s, of the calculated spectral frequency vector.\n", + "\n", + "All of the variables in the returned dataset have been bin-averaged, where each average is computed using the number of elements specified in `n_bins`. Additional variables in this dataset include the turbulent kinetic energy (TKE) vector (\"ds_binned.tke_vec\"), the Reynold's stresses (\"ds_binned.stress\"), and the power spectral densities (\"ds_binned.psd\"), calculated for each bin." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Option 1 (standard)\n", + "binner = api.ADVBinner(n_bin=ds.fs * 600, fs=ds.fs, n_fft=1024)\n", + "ds_binned = binner.bin_average(ds)\n", + "\n", + "# Option 2 (simple)\n", + "# ds_binned = api.calc_turbulence(ds, n_bin=ds.fs*600, fs=ds.fs, n_fft=1024, freq_units=\"Hz\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The benefit to using `ADVBinner` is that one has access to all of the velocity and turbulence analysis functions that DOLfYN contains. If basic analysis will suffice, the `turbulence_statistics` function is the most convienent. Either option can still utilize DOLfYN's shortcuts.\n", + "\n", + "See the [DOLfYN API](https://dolfyn.readthedocs.io/en/latest/apidoc/dolfyn.binners.html) for the full list of functions and shortcuts. A few examples are shown below.\n", + "\n", + "Some things to know:\n", + "- All functions operate bin-by-bin.\n", + "- Some functions will fail if there are NaN's in the data stream (Notably the PSD functions)\n", + "- \"Shorcuts\", as referred to in DOLfYN, are functions accessible by the xarray accessor `velds`, as shown below. The list of \"shorcuts\" available through `velds` are listed [here](https://dolfyn.readthedocs.io/en/latest/apidoc/dolfyn.shortcuts.html). Some shorcut variables require the raw dataset, some an averaged dataset.\n", + "\n", + "For instance, \n", + "- `bin_variance` calculates the binned-variance of each variable in the raw dataset, the complementary to `bin_average`. Variables returned by this function contain a \"_var\" suffix to their name.\n", + "- `cross_spectral_density` calculates the cross spectral power density between each direction of the supplied DataArray. Note that inputs specified in creating the `ADVBinner` object can be overridden or additionally specified for a particular function call.\n", + "- `velds.I` is the shortcut for turbulence intensity. This particular shortcut requires a dataset created by `bin_average`, because it requires bin-averaged data to calculate.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Calculate the variance of each variable in the dataset and add to the averaged dataset\n", + "ds_binned = binner.bin_variance(ds, out_ds=ds_binned)\n", + "\n", + "# Calculate the power spectral density\n", + "ds_binned[\"auto_spectra\"] = binner.power_spectral_density(ds[\"vel\"], freq_units=\"Hz\")\n", + "# Calculate dissipation rate from isotropic turbulence cascade\n", + "ds_binned[\"dissipation\"] = binner.dissipation_rate_LT83(\n", + " ds_binned[\"auto_spectra\"], ds_binned.velds.U_mag, freq_range=[0.5, 1]\n", + ")\n", + "\n", + "# Calculate the cross power spectral density\n", + "ds_binned[\"cross_spectra\"] = binner.cross_spectral_density(\n", + " ds[\"vel\"], freq_units=\"Hz\", n_fft_coh=512\n", + ")\n", + "\n", + "# Calculated the turbulence intensity (requires a binned dataset)\n", + "ds_binned[\"TI\"] = ds_binned.velds.I" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting can be performed using matplotlib. As an example, the mean spectrum in the streamwise direction is plotted here. This spectrum shows the mean energy density in the flow at a particular flow frequency." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Saving and Loading DOLfYN datasets\n", - "Datasets can be saved and reloaded using the `save` and `load` functions. Xarray is saved natively in netCDF format, hence the \".nc\" extension.\n", - "\n", - "Note: DOLfYN datasets cannot be saved using xarray's native `ds.to_netcdf`; however, DOLfYN datasets can be opened using `xarray.open_dataset`." + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Streamwise Direction')" ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" }, { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# Uncomment these lines to save and load to your current working directory\n", - "#dolfyn.save(ds, 'your_data.nc')\n", - "#ds_saved = dolfyn.load('your_data.nc')" + "data": { + "image/png": "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Rx99FBkZGRg5cqTdTIstXbp0wTPPPIMNGzbg8OHDAIBJkyZBoVDgwoULVmVJdxUWFmLhwoUICAjAkiVLXDrHTTfdhJdffhkxMTFo37693eMmT56MV155BStXrsQLL7xg9zhHPx8hISEYPHgwvv76a7z22msICgoCoL+z7r///S9at26NLl26OP8FETVTDJSIfNikSZPQunVrTJ06Fd26dYNOp8ORI0fw+uuvIzQ0FIsXLzYe26tXL3z++edYv349OnTogMDAwHrn94SGhuI///kP5s6di8LCQsyaNQvx8fG4du0a/vjjD1y7dg0rV64EoP+lvWbNGnTr1g29e/fGoUOH8Oqrr6J169Ye/5rj4+PRs2dPbN68GWPGjDHOExo/fjwKCwtRWFiIN954o95zHD16FA888ABuvfVWdO7cGUqlEr/++iuOHj2KJ554AoD+lvkXXngBTz/9NC5evIgbbrgBUVFRyM3NxYEDBxASEoLnn3++wfWeO3cO+/btg06nMw6c/PDDD1FaWopPPvnEatyBox566CFs2LABI0eOxJIlS9C7d2/odDpkZmZi8+bNeOSRRzB48GCMGDECc+bMwUsvvYTc3FzcdNNNUKlUSEtLQ3BwMP76178CcO7z8corr2DChAkYM2YMli5dCqVSiXfeeQfHjx/HunXrbGbAiHwVAyUiH/bMM8/g22+/xfLly5GTkwO1Wo2kpCSMHz8eTz75pLFJGgCef/555OTk4J577kFZWRnatWvX4FYZs2fPRtu2bbFs2TLcd999KCsrQ3x8PPr27Yt58+YZj/v3v/+NgIAAvPLKKygvL8d1112Hr7/+2lgW8zRpWKNpH1Lbtm3RuXNnnDt3rt7+JABITExEx44d8c477+Dy5csQBAEdOnTA66+/bgwcAP3IhNTUVPz73//GunXroFarkZiYiIEDB2LhwoUOrVUab6BQKBAREYEuXbpg/vz5uPfee90q6YWEhGDXrl345z//iffeew/p6ekICgpC27ZtMX78eOMcJEA/z+i6667Dhx9+iDVr1iAoKAipqalmoxec+XyMGjUKv/76K/7+979j3rx50Ol06NOnD/73v/9ZNeoT+TpO5iYiIiKyg+MBiIiIiOxgoERERERkBwMlIiIiIjsYKBERERHZwUCJiIiIyA4GSkRERER2cI6SG3Q6HbKzsxEWFsYBa0RE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", + "text/plain": [ + "
" ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.9.12 ('base')", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - }, - "vscode": { - "interpreter": { - "hash": "357206ab7e4935423e95e994af80e27e7e6c0672abcebb9d86ab743298213348" - } - } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "\n", + "plt.figure()\n", + "plt.loglog(ds_binned[\"freq\"], ds_binned[\"auto_spectra\"].sel(S=\"Sxx\").mean(dim=\"time\"))\n", + "plt.xlabel(\"Frequency [Hz]\")\n", + "plt.ylabel(\"Energy Density $\\mathrm{[m^2/s^s/Hz]}$\")\n", + "plt.title(\"Streamwise Direction\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving and Loading DOLfYN datasets\n", + "Datasets can be saved and reloaded using the `save` and `load` functions. Xarray is saved natively in netCDF format, hence the \".nc\" extension.\n", + "\n", + "Note: DOLfYN datasets cannot be saved using xarray's native `ds.to_netcdf`; however, DOLfYN datasets can be opened using `xarray.open_dataset`." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Uncomment these lines to save and load to your current working directory\n", + "# dolfyn.save(ds, 'your_data.nc')\n", + "# ds_saved = dolfyn.load('your_data.nc')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.12 ('base')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" }, - "nbformat": 4, - "nbformat_minor": 4 + "vscode": { + "interpreter": { + "hash": "357206ab7e4935423e95e994af80e27e7e6c0672abcebb9d86ab743298213348" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/examples/cdip_example.ipynb b/examples/cdip_example.ipynb index 7b17b5162..df2cee51c 100644 --- a/examples/cdip_example.ipynb +++ b/examples/cdip_example.ipynb @@ -51,16 +51,21 @@ "source": [ "from mhkit.wave.io import cdip\n", "import matplotlib.pyplot as plt\n", - "station_number = '100'\n", - "start_date = '2020-04-01'\n", - "end_date= '2020-04-30'\n", - "parameters =['waveHs', 'waveTp', 'waveMeanDirection']\n", "\n", - "data = cdip.request_parse_workflow(station_number=station_number, parameters=parameters, \n", - " start_date=start_date, end_date=end_date)\n", + "station_number = \"100\"\n", + "start_date = \"2020-04-01\"\n", + "end_date = \"2020-04-30\"\n", + "parameters = [\"waveHs\", \"waveTp\", \"waveMeanDirection\"]\n", "\n", - "print('\\n')\n", - "print(f'Returned data: {data.keys()} \\n')\n" + "data = cdip.request_parse_workflow(\n", + " station_number=station_number,\n", + " parameters=parameters,\n", + " start_date=start_date,\n", + " end_date=end_date,\n", + ")\n", + "\n", + "print(\"\\n\")\n", + "print(f\"Returned data: {data.keys()} \\n\")" ] }, { @@ -82,8 +87,8 @@ "metadata": {}, "outputs": [], "source": [ - "station_number='100'\n", - "data_type='historic'\n", + "station_number = \"100\"\n", + "data_type = \"historic\"\n", "nc = cdip.request_netCDF(station_number, data_type)" ] }, @@ -113,7 +118,7 @@ "source": [ "buoy_data = cdip.get_netcdf_variables(nc)\n", "\n", - "print(f'Returned data: {buoy_data.keys()} \\n')" + "print(f\"Returned data: {buoy_data.keys()} \\n\")" ] }, { @@ -405,7 +410,7 @@ } ], "source": [ - "buoy_data['metadata'].keys()" + "buoy_data[\"metadata\"].keys()" ] }, { @@ -447,7 +452,7 @@ } ], "source": [ - "buoy_data['metadata']['meta']\n" + "buoy_data[\"metadata\"][\"meta\"]" ] }, { @@ -481,7 +486,7 @@ } ], "source": [ - "Hs_2011_data = buoy_data[\"data\"][\"wave\"][\"waveHs\"]['2011']\n", + "Hs_2011_data = buoy_data[\"data\"][\"wave\"][\"waveHs\"][\"2011\"]\n", "buoy_name = buoy_data[\"data\"][\"wave\"].name\n", "ax = graphics.plot_boxplot(Hs_2011_data, buoy_title=buoy_name)" ] @@ -514,12 +519,12 @@ } ], "source": [ - "wave_data_May_2011= buoy_data['data']['wave']['2011-05']\n", - "Hs = wave_data_May_2011['waveHs']\n", - "Tp = wave_data_May_2011['waveTp']\n", - "Dp = wave_data_May_2011['waveDp']\n", + "wave_data_May_2011 = buoy_data[\"data\"][\"wave\"][\"2011-05\"]\n", + "Hs = wave_data_May_2011[\"waveHs\"]\n", + "Tp = wave_data_May_2011[\"waveTp\"]\n", + "Dp = wave_data_May_2011[\"waveDp\"]\n", "\n", - "ax = graphics.plot_compendium(Hs, Tp, Dp, buoy_name )" + "ax = graphics.plot_compendium(Hs, Tp, Dp, buoy_name)" ] }, { @@ -555,7 +560,9 @@ } ], "source": [ - "buoy_data = cdip.get_netcdf_variables(nc, start_date='2011-01-01', end_date='2011-12-31', parameters='waveHs')\n", + "buoy_data = cdip.get_netcdf_variables(\n", + " nc, start_date=\"2011-01-01\", end_date=\"2011-12-31\", parameters=\"waveHs\"\n", + ")\n", "buoy_name = buoy_data[\"data\"][\"wave\"].name\n", "ax = graphics.plot_boxplot(buoy_data[\"data\"][\"wave\"][\"waveHs\"], buoy_title=buoy_name)" ] @@ -592,13 +599,15 @@ } ], "source": [ - "buoy_data = cdip.request_parse_workflow(station_number='100', years=2011, parameters=['waveHs', 'waveTp', 'waveDp'])\n", + "buoy_data = cdip.request_parse_workflow(\n", + " station_number=\"100\", years=2011, parameters=[\"waveHs\", \"waveTp\", \"waveDp\"]\n", + ")\n", "\n", - "Hs = buoy_data['data']['wave']['waveHs']\n", - "Tp = buoy_data['data']['wave']['waveTp']\n", - "Dp = buoy_data['data']['wave']['waveDp']\n", + "Hs = buoy_data[\"data\"][\"wave\"][\"waveHs\"]\n", + "Tp = buoy_data[\"data\"][\"wave\"][\"waveTp\"]\n", + "Dp = buoy_data[\"data\"][\"wave\"][\"waveDp\"]\n", "buoy_name = buoy_data[\"data\"][\"wave\"].name\n", - "ax = graphics.plot_compendium(Hs, Tp, Dp, buoy_name )" + "ax = graphics.plot_compendium(Hs, Tp, Dp, buoy_name)" ] }, { diff --git a/examples/directional_waves.ipynb b/examples/directional_waves.ipynb index 4d05a3822..4ee1bc203 100644 --- a/examples/directional_waves.ipynb +++ b/examples/directional_waves.ipynb @@ -182,8 +182,8 @@ } ], "source": [ - "buoy = '42012'\n", - "wave.io.ndbc.available_data('swdir', buoy)" + "buoy = \"42012\"\n", + "wave.io.ndbc.available_data(\"swdir\", buoy)" ] }, { @@ -1084,7 +1084,7 @@ } ], "source": [ - "date = np.datetime64('2021-02-21T12:40:00')\n", + "date = np.datetime64(\"2021-02-21T12:40:00\")\n", "data = data_all.sel(date=date)\n", "directions = np.arange(0, 360, 2.0)\n", "spectrum = wave.io.ndbc.create_directional_spectrum(data, directions)\n", @@ -1195,7 +1195,9 @@ } ], "source": [ - "wave.graphics.plot_directional_spectrum(spectrum, color_level_min=0.3, fill=False, nlevels=4)" + "wave.graphics.plot_directional_spectrum(\n", + " spectrum, color_level_min=0.3, fill=False, nlevels=4\n", + ")" ] }, { @@ -1233,7 +1235,7 @@ } ], "source": [ - "data['swden'].plot()" + "data[\"swden\"].plot()" ] }, { @@ -1303,9 +1305,9 @@ } ], "source": [ - "rho = 1025 # kg/m^3\n", - "g = 9.81 # m/s^2\n", - "wave.graphics.plot_directional_spectrum(spectrum*rho*g, name=\"Energy\", units=\"J\")" + "rho = 1025 # kg/m^3\n", + "g = 9.81 # m/s^2\n", + "wave.graphics.plot_directional_spectrum(spectrum * rho * g, name=\"Energy\", units=\"J\")" ] }, { diff --git a/examples/environmental_contours_example.ipynb b/examples/environmental_contours_example.ipynb index 82a9ef6cd..5109e2164 100644 --- a/examples/environmental_contours_example.ipynb +++ b/examples/environmental_contours_example.ipynb @@ -132,9 +132,9 @@ ], "source": [ "# Specify the parameter as spectral wave density and the buoy number to be 46022\n", - "parameter = 'swden'\n", - "buoy_number = '46022' \n", - "ndbc_available_data= ndbc.available_data(parameter, buoy_number)\n", + "parameter = \"swden\"\n", + "buoy_number = \"46022\"\n", + "ndbc_available_data = ndbc.available_data(parameter, buoy_number)\n", "ndbc_available_data.head()" ] }, @@ -251,7 +251,7 @@ "outputs": [], "source": [ "# Get dictionary of parameter data by year\n", - "filenames= years_of_interest['filename']\n", + "filenames = years_of_interest[\"filename\"]\n", "ndbc_requested_data = ndbc.request_data(parameter, filenames)" ] }, @@ -497,15 +497,15 @@ } ], "source": [ - "# Lastly we will convert a DateTime Index \n", - "ndbc_data={}\n", + "# Lastly we will convert a DateTime Index\n", + "ndbc_data = {}\n", "# Create a Datetime Index and remove NOAA date columns for each year\n", "for year in ndbc_requested_data:\n", " year_data = ndbc_requested_data[year]\n", " ndbc_data[year] = ndbc.to_datetime_index(parameter, year_data)\n", "\n", "# Display DataFrame of 46022 data from 1996\n", - "ndbc_data['1996'].head()" + "ndbc_data[\"1996\"].head()" ] }, { @@ -638,8 +638,8 @@ ], "source": [ "# Intialize empty lists to store the results from each year\n", - "Hm0_list=[]\n", - "Te_list=[]\n", + "Hm0_list = []\n", + "Te_list = []\n", "\n", "# Iterate over each year and save the result in the initalized dictionary\n", "for year in ndbc_data:\n", @@ -648,9 +648,9 @@ " Te_list.append(resource.energy_period(year_data.T))\n", "\n", "# Concatenate list of Series into a single DataFrame\n", - "Te = pd.concat(Te_list ,axis=0)\n", - "Hm0 = pd.concat(Hm0_list ,axis=0)\n", - "Hm0_Te = pd.concat([Hm0,Te],axis=1)\n", + "Te = pd.concat(Te_list, axis=0)\n", + "Hm0 = pd.concat(Hm0_list, axis=0)\n", + "Hm0_Te = pd.concat([Hm0, Te], axis=1)\n", "\n", "# Drop any NaNs created from the calculation of Hm0 or Te\n", "Hm0_Te.dropna(inplace=True)\n", @@ -680,22 +680,22 @@ "outputs": [], "source": [ "# Return period (years) of interest\n", - "period = 100 \n", + "period = 100\n", "\n", "# Remove Hm0 Outliers\n", "Hm0_Te_clean = Hm0_Te[Hm0_Te.Hm0 < 20]\n", "\n", "# Get only the values from the DataFrame\n", - "Hm0 = Hm0_Te_clean.Hm0.values \n", - "Te = Hm0_Te_clean.Te.values \n", + "Hm0 = Hm0_Te_clean.Hm0.values\n", + "Te = Hm0_Te_clean.Te.values\n", "\n", - "# Delta time of sea-states \n", - "dt = (Hm0_Te_clean.index[2]-Hm0_Te_clean.index[1]).seconds \n", + "# Delta time of sea-states\n", + "dt = (Hm0_Te_clean.index[2] - Hm0_Te_clean.index[1]).seconds\n", "\n", "# Get the contour values\n", - "copula = contours.environmental_contours(Hm0, Te, dt, period, 'PCA', return_PCA=True)\n", - "Hm0_contour=copula['PCA_x1']\n", - "Te_contour=copula['PCA_x2']" + "copula = contours.environmental_contours(Hm0, Te, dt, period, \"PCA\", return_PCA=True)\n", + "Hm0_contour = copula[\"PCA_x1\"]\n", + "Te_contour = copula[\"PCA_x2\"]" ] }, { @@ -725,15 +725,19 @@ } ], "source": [ - "fig,ax=plt.subplots(figsize=(8,4))\n", - "#%matplotlib inline\n", - "ax=graphics.plot_environmental_contour(Te, Hm0, \n", - " Te_contour, Hm0_contour, \n", - " data_label='NDBC 46022', \n", - " contour_label='100 Year Contour',\n", - " x_label = 'Energy Period, $Te$ [s]',\n", - " y_label = 'Sig. wave height, $Hm0$ [m]', \n", - " ax=ax)" + "fig, ax = plt.subplots(figsize=(8, 4))\n", + "# %matplotlib inline\n", + "ax = graphics.plot_environmental_contour(\n", + " Te,\n", + " Hm0,\n", + " Te_contour,\n", + " Hm0_contour,\n", + " data_label=\"NDBC 46022\",\n", + " contour_label=\"100 Year Contour\",\n", + " x_label=\"Energy Period, $Te$ [s]\",\n", + " y_label=\"Sig. wave height, $Hm0$ [m]\",\n", + " ax=ax,\n", + ")" ] }, { @@ -764,24 +768,30 @@ } ], "source": [ - "copulas = contours.environmental_contours(Hm0, Te, dt, period, method=['gaussian', 'nonparametric_gaussian'])\n", + "copulas = contours.environmental_contours(\n", + " Hm0, Te, dt, period, method=[\"gaussian\", \"nonparametric_gaussian\"]\n", + ")\n", "\n", - "fig, ax = plt.subplots(figsize=(9,4))\n", + "fig, ax = plt.subplots(figsize=(9, 4))\n", "\n", - "Tes=[Te_contour]\n", - "Hm0s=[Hm0_contour]\n", - "methods=['gaussian', 'nonparametric_gaussian']\n", - "for method in methods: \n", - " Hm0s.append(copulas[f'{method}_x1'])\n", - " Tes.append(copulas[f'{method}_x2'])\n", + "Tes = [Te_contour]\n", + "Hm0s = [Hm0_contour]\n", + "methods = [\"gaussian\", \"nonparametric_gaussian\"]\n", + "for method in methods:\n", + " Hm0s.append(copulas[f\"{method}_x1\"])\n", + " Tes.append(copulas[f\"{method}_x2\"])\n", "\n", - "ax = graphics.plot_environmental_contour(Te, Hm0, \n", - " Tes, Hm0s,\n", - " data_label='NDBC 46050', \n", - " contour_label=['PCA','Gaussian', 'Nonparametric Gaussian'],\n", - " x_label = 'Energy Period, $Te$ [s]',\n", - " y_label = 'Sig. wave height, $Hm0$ [m]', \n", - " ax=ax)" + "ax = graphics.plot_environmental_contour(\n", + " Te,\n", + " Hm0,\n", + " Tes,\n", + " Hm0s,\n", + " data_label=\"NDBC 46050\",\n", + " contour_label=[\"PCA\", \"Gaussian\", \"Nonparametric Gaussian\"],\n", + " x_label=\"Energy Period, $Te$ [s]\",\n", + " y_label=\"Sig. wave height, $Hm0$ [m]\",\n", + " ax=ax,\n", + ")" ] }, { @@ -914,19 +924,19 @@ ], "source": [ "# Intialize empty lists to store the results from each year\n", - "Hm0_list=[]\n", - "Tp_list=[]\n", + "Hm0_list = []\n", + "Tp_list = []\n", "\n", "# Iterate over each year and save the result in the initalized dictionary\n", "for year in ndbc_data:\n", - " year_data = ndbc_data[year] \n", + " year_data = ndbc_data[year]\n", " Hm0_list.append(resource.significant_wave_height(year_data.T))\n", " Tp_list.append(resource.peak_period(year_data.T))\n", "\n", "# Concatenate list of Series into a single DataFrame\n", - "Tp = pd.concat(Tp_list ,axis=0)\n", - "Hm0 = pd.concat(Hm0_list ,axis=0)\n", - "Hm0_Tp = pd.concat([Hm0,Tp],axis=1)\n", + "Tp = pd.concat(Tp_list, axis=0)\n", + "Hm0 = pd.concat(Hm0_list, axis=0)\n", + "Hm0_Tp = pd.concat([Hm0, Tp], axis=1)\n", "\n", "# Drop any NaNs created from the calculation of Hm0 or Te\n", "Hm0_Tp.dropna(inplace=True)\n", @@ -938,8 +948,8 @@ "Hm0_Tp_clean = Hm0_Tp[Hm0_Tp.Tp < 30]\n", "\n", "# Get only the values from the DataFrame\n", - "Hm0 = Hm0_Tp_clean.Hm0.values \n", - "Tp = Hm0_Tp_clean.Tp.values \n", + "Hm0 = Hm0_Tp_clean.Hm0.values\n", + "Tp = Hm0_Tp_clean.Tp.values\n", "\n", "\n", "Hm0_Tp" @@ -1054,8 +1064,8 @@ "gmm = GaussianMixture(n_components=8).fit(X)\n", "\n", "# Save centers and weights\n", - "results = pd.DataFrame(gmm.means_, columns=['Tp','Hm0'])\n", - "results['weights'] = gmm.weights_\n", + "results = pd.DataFrame(gmm.means_, columns=[\"Tp\", \"Hm0\"])\n", + "results[\"weights\"] = gmm.weights_\n", "results" ] }, @@ -1098,9 +1108,9 @@ "# Plot the Sections of Data\n", "labels = gmm.predict(X)\n", "plt.scatter(Tp, Hm0, c=labels, s=40)\n", - "plt.plot(results.Tp, results.Hm0, 'm+')\n", - "plt.xlabel('Peak Period, $Tp$ [s]')\n", - "plt.ylabel('Sig. wave height, $Hm0$ [m]')" + "plt.plot(results.Tp, results.Hm0, \"m+\")\n", + "plt.xlabel(\"Peak Period, $Tp$ [s]\")\n", + "plt.ylabel(\"Sig. wave height, $Hm0$ [m]\")" ] } ], diff --git a/examples/extreme_response_MLER_example.ipynb b/examples/extreme_response_MLER_example.ipynb index d4737efe8..36c2bf11e 100644 --- a/examples/extreme_response_MLER_example.ipynb +++ b/examples/extreme_response_MLER_example.ipynb @@ -62,9 +62,9 @@ } ], "source": [ - "wave_freq = np.linspace( 0.,1,500)\n", - "mfile = pd.read_csv('data/loads/mler.csv')\n", - "RAO = mfile['RAO'].astype(complex)\n", + "wave_freq = np.linspace(0.0, 1, 500)\n", + "mfile = pd.read_csv(\"data/loads/mler.csv\")\n", + "RAO = mfile[\"RAO\"].astype(complex)\n", "RAO[0:10]" ] }, @@ -114,10 +114,10 @@ } ], "source": [ - "Hs = 9.0 # significant wave height\n", - "Tp = 15.1 # time period of waves\n", - "pm = resource.pierson_moskowitz_spectrum(wave_freq,Tp,Hs)\n", - "pm.plot(xlabel='frequency [Hz]',ylabel='response [m^2/Hz]')" + "Hs = 9.0 # significant wave height\n", + "Tp = 15.1 # time period of waves\n", + "pm = resource.pierson_moskowitz_spectrum(wave_freq, Tp, Hs)\n", + "pm.plot(xlabel=\"frequency [Hz]\", ylabel=\"response [m^2/Hz]\")" ] }, { @@ -168,10 +168,14 @@ } ], "source": [ - "mler_data = extreme.mler_coefficients(RAO,pm,1)\n", + "mler_data = extreme.mler_coefficients(RAO, pm, 1)\n", "\n", - "mler_data.plot(y='WaveSpectrum', ylabel='Conditioned wave spectrum [m^2-s]', xlabel='Frequency [Hz]')\n", - "mler_data.plot(y='Phase', ylabel='[rad]', xlabel='Frequency [Hz]')" + "mler_data.plot(\n", + " y=\"WaveSpectrum\",\n", + " ylabel=\"Conditioned wave spectrum [m^2-s]\",\n", + " xlabel=\"Frequency [Hz]\",\n", + ")\n", + "mler_data.plot(y=\"Phase\", ylabel=\"[rad]\", xlabel=\"Frequency [Hz]\")" ] }, { @@ -202,14 +206,14 @@ "source": [ "# generate parameters dict\n", "params = (\n", - " ('startTime',-150.0),\n", - " ('endTime',150.0),\n", - " ('dT',1.0),\n", - " ('T0',0.0),\n", - " ('startX',-300.0),\n", - " ('endX',300.0),\n", - " ('dX',1.0),\n", - " ('X0',0.0)\n", + " (\"startTime\", -150.0),\n", + " (\"endTime\", 150.0),\n", + " (\"dT\", 1.0),\n", + " (\"T0\", 0.0),\n", + " (\"startX\", -300.0),\n", + " (\"endX\", 300.0),\n", + " (\"dX\", 1.0),\n", + " (\"X0\", 0.0),\n", ")\n", "parameters = dict(params)\n", "\n", @@ -217,11 +221,13 @@ "sim = extreme.mler_simulation(parameters=parameters)\n", "\n", "# generate wave number k\n", - "k = resource.wave_number(wave_freq,70)\n", + "k = resource.wave_number(wave_freq, 70)\n", "k = k.fillna(0)\n", "\n", - "peakHeightDesired = Hs/2 * 1.9\n", - "mler_norm = extreme.mler_wave_amp_normalize(peakHeightDesired, mler_data, sim, k.k.values)" + "peakHeightDesired = Hs / 2 * 1.9\n", + "mler_norm = extreme.mler_wave_amp_normalize(\n", + " peakHeightDesired, mler_data, sim, k.k.values\n", + ")" ] }, { @@ -260,8 +266,8 @@ } ], "source": [ - "mler_ts = extreme.mler_export_time_series(RAO.values,mler_norm,sim,k.k.values)\n", - "mler_ts.plot(xlabel='Time (s)',ylabel='[m] / [*]',xlim=[-100,100],grid=True)" + "mler_ts = extreme.mler_export_time_series(RAO.values, mler_norm, sim, k.k.values)\n", + "mler_ts.plot(xlabel=\"Time (s)\", ylabel=\"[m] / [*]\", xlim=[-100, 100], grid=True)" ] }, { diff --git a/examples/extreme_response_contour_example.ipynb b/examples/extreme_response_contour_example.ipynb index 9fe687e0d..7695ebbd9 100644 --- a/examples/extreme_response_contour_example.ipynb +++ b/examples/extreme_response_contour_example.ipynb @@ -49,13 +49,13 @@ "metadata": {}, "outputs": [], "source": [ - "parameter = 'swden'\n", - "buoy_number = '46022'\n", + "parameter = \"swden\"\n", + "buoy_number = \"46022\"\n", "ndbc_available_data = ndbc.available_data(parameter, buoy_number)\n", "\n", "years_of_interest = ndbc_available_data[ndbc_available_data.year < 2013]\n", "\n", - "filenames = years_of_interest['filename']\n", + "filenames = years_of_interest[\"filename\"]\n", "ndbc_requested_data = ndbc.request_data(parameter, filenames)\n", "\n", "ndbc_data = {}\n", @@ -87,7 +87,7 @@ "Hm0 = Hm0_Te_clean.Hm0.values\n", "Te = Hm0_Te_clean.Te.values\n", "\n", - "dt = (Hm0_Te_clean.index[2]-Hm0_Te_clean.index[1]).seconds" + "dt = (Hm0_Te_clean.index[2] - Hm0_Te_clean.index[1]).seconds" ] }, { @@ -109,11 +109,11 @@ "source": [ "# 100 year contour\n", "period = 100.0\n", - "copula = contours.environmental_contours(Hm0, Te, dt, period, 'PCA')\n", - "hs_contour = copula['PCA_x1']\n", - "te_contour = copula['PCA_x2']\n", + "copula = contours.environmental_contours(Hm0, Te, dt, period, \"PCA\")\n", + "hs_contour = copula[\"PCA_x1\"]\n", + "te_contour = copula[\"PCA_x2\"]\n", "\n", - "# 5 samples \n", + "# 5 samples\n", "te_samples = np.linspace(15, 22, 5)\n", "hs_samples = contours.samples_contour(te_samples, te_contour, hs_contour);" ] @@ -157,11 +157,17 @@ "# plot\n", "fig, ax = plt.subplots(figsize=(8, 4))\n", "ax = graphics.plot_environmental_contour(\n", - " Te, Hm0, te_contour, hs_contour,\n", - " data_label='bouy data', contour_label='100-year contour',\n", - " x_label='Energy Period, $Te$ [s]',\n", - " y_label='Sig. wave height, $Hm0$ [m]', ax=ax)\n", - "ax.plot(te_samples, hs_samples, 'ro', label='samples')\n", + " Te,\n", + " Hm0,\n", + " te_contour,\n", + " hs_contour,\n", + " data_label=\"bouy data\",\n", + " contour_label=\"100-year contour\",\n", + " x_label=\"Energy Period, $Te$ [s]\",\n", + " y_label=\"Sig. wave height, $Hm0$ [m]\",\n", + " ax=ax,\n", + ")\n", + "ax.plot(te_samples, hs_samples, \"ro\", label=\"samples\")\n", "plt.legend()" ] }, @@ -205,29 +211,31 @@ "source": [ "# create the short-term extreme distribution for each sample sea state\n", "t_st = 3.0 * 60.0 * 60.0\n", - "gamma = 3.3 \n", + "gamma = 3.3\n", "t_sim = 1.0 * 60.0 * 60.0\n", "\n", "ste_all = []\n", "i = 0\n", "n = len(hs_samples)\n", "for hs, te in zip(hs_samples, te_samples):\n", - " tp = te / (0.8255 + 0.03852*gamma - 0.005537*gamma**2 + 0.0003154*gamma**3)\n", + " tp = te / (\n", + " 0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3\n", + " )\n", " i += 1\n", " print(f\"Sea state {i}/{n}. (Hs, Te) = ({hs} m, {te} s). Tp = {tp} s\")\n", " # time & frequency arrays\n", - " df = 1.0/t_sim\n", - " T_min = tp/10.0 # s\n", - " f_max = 1.0/T_min\n", - " Nf = int(f_max/df) + 1\n", - " time = np.linspace(0, t_sim, 2*Nf+1)\n", + " df = 1.0 / t_sim\n", + " T_min = tp / 10.0 # s\n", + " f_max = 1.0 / T_min\n", + " Nf = int(f_max / df) + 1\n", + " time = np.linspace(0, t_sim, 2 * Nf + 1)\n", " f = np.linspace(0.0, f_max, Nf)\n", " # spectrum\n", " S = resource.jonswap_spectrum(f, tp, hs, gamma)\n", " # 1-hour elevation time-series\n", " data = resource.surface_elevation(S, time).values.squeeze()\n", " # 3-hour extreme distribution\n", - " ste = extreme.short_term_extreme(time, data, t_st, 'peaks_weibull_tail_fit')\n", + " ste = extreme.short_term_extreme(time, data, t_st, \"peaks_weibull_tail_fit\")\n", " ste_all.append(ste)" ] }, @@ -271,7 +279,7 @@ "\n", "hs_design = hs_samples[max_ind]\n", "te_design = te_samples[max_ind]\n", - "print(f\"Design sea state (Hs, Te): ({hs_design} m, {te_design} s)\")\n" + "print(f\"Design sea state (Hs, Te): ({hs_design} m, {te_design} s)\")" ] }, { diff --git a/examples/extreme_response_full_sea_state_example.ipynb b/examples/extreme_response_full_sea_state_example.ipynb index 258a3fcb2..fab9b1535 100644 --- a/examples/extreme_response_full_sea_state_example.ipynb +++ b/examples/extreme_response_full_sea_state_example.ipynb @@ -52,13 +52,13 @@ "metadata": {}, "outputs": [], "source": [ - "parameter = 'swden'\n", - "buoy_number = '46022'\n", + "parameter = \"swden\"\n", + "buoy_number = \"46022\"\n", "ndbc_available_data = ndbc.available_data(parameter, buoy_number)\n", "\n", "years_of_interest = ndbc_available_data[ndbc_available_data.year < 2013]\n", "\n", - "filenames = years_of_interest['filename']\n", + "filenames = years_of_interest[\"filename\"]\n", "ndbc_requested_data = ndbc.request_data(parameter, filenames)\n", "\n", "ndbc_data = {}\n", @@ -90,7 +90,7 @@ "Hm0 = Hm0_Te_clean.Hm0.values\n", "Te = Hm0_Te_clean.Te.values\n", "\n", - "dt = (Hm0_Te_clean.index[2]-Hm0_Te_clean.index[1]).seconds" + "dt = (Hm0_Te_clean.index[2] - Hm0_Te_clean.index[1]).seconds" ] }, { @@ -122,7 +122,8 @@ "\n", "# Create samples\n", "sample_hs, sample_te, sample_weights = contours.samples_full_seastate(\n", - " Hm0, Te, npoints, levels, dt)" + " Hm0, Te, npoints, levels, dt\n", + ")" ] }, { @@ -160,9 +161,10 @@ "\n", "for period in levels:\n", " copula = contours.environmental_contours(\n", - " Hm0, Te, dt, period, 'PCA', return_PCA=True)\n", - " Hm0_contours.append(copula['PCA_x1'])\n", - " Te_contours.append(copula['PCA_x2'])\n", + " Hm0, Te, dt, period, \"PCA\", return_PCA=True\n", + " )\n", + " Hm0_contours.append(copula[\"PCA_x1\"])\n", + " Te_contours.append(copula[\"PCA_x2\"])\n", "\n", "# plot\n", "fig, ax = plt.subplots(figsize=(8, 4))\n", @@ -170,10 +172,16 @@ "labels = [f\"{period}-year Contour\" for period in levels]\n", "\n", "ax = graphics.plot_environmental_contour(\n", - " sample_te, sample_hs, Te_contours, Hm0_contours,\n", - " data_label='Samples', contour_label=labels,\n", - " x_label='Energy Period, $Te$ [s]',\n", - " y_label='Sig. wave height, $Hm0$ [m]', ax=ax)\n" + " sample_te,\n", + " sample_hs,\n", + " Te_contours,\n", + " Hm0_contours,\n", + " data_label=\"Samples\",\n", + " contour_label=labels,\n", + " x_label=\"Energy Period, $Te$ [s]\",\n", + " y_label=\"Sig. wave height, $Hm0$ [m]\",\n", + " ax=ax,\n", + ")" ] }, { @@ -423,29 +431,31 @@ "source": [ "# create the short-term extreme distribution for each sample sea state\n", "t_st = 3.0 * 60.0 * 60.0\n", - "gamma = 3.3 \n", + "gamma = 3.3\n", "t_sim = 1.0 * 60.0 * 60.0\n", "\n", "ste_all = []\n", "i = 0\n", "n = len(sample_hs)\n", "for hs, te in zip(sample_hs, sample_te):\n", - " tp = te / (0.8255 + 0.03852*gamma - 0.005537*gamma**2 + 0.0003154*gamma**3)\n", + " tp = te / (\n", + " 0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3\n", + " )\n", " i += 1\n", " print(f\"Sea state {i}/{n}. (Hs, Te) = ({hs} m, {te} s). Tp = {tp} s\")\n", " # time & frequency arrays\n", - " df = 1.0/t_sim\n", - " T_min = tp/10.0 # s\n", - " f_max = 1.0/T_min\n", - " Nf = int(f_max/df) + 1\n", - " time = np.linspace(0, t_sim, 2*Nf+1)\n", + " df = 1.0 / t_sim\n", + " T_min = tp / 10.0 # s\n", + " f_max = 1.0 / T_min\n", + " Nf = int(f_max / df) + 1\n", + " time = np.linspace(0, t_sim, 2 * Nf + 1)\n", " f = np.linspace(0.0, f_max, Nf)\n", " # spectrum\n", " S = resource.jonswap_spectrum(f, tp, hs, gamma)\n", " # 1-hour elevation time-series\n", " data = resource.surface_elevation(S, time).values.squeeze()\n", " # 3-hour extreme distribution\n", - " ste = extreme.short_term_extreme(time, data, t_st, 'peaks_weibull_tail_fit')\n", + " ste = extreme.short_term_extreme(time, data, t_st, \"peaks_weibull_tail_fit\")\n", " ste_all.append(ste)" ] }, @@ -494,7 +504,7 @@ } ], "source": [ - "t_st_hr = t_st/(60.0*60.0)\n", + "t_st_hr = t_st / (60.0 * 60.0)\n", "t_return_yr = 100.0\n", "x_t = extreme.return_year_value(lte.ppf, t_return_yr, t_st_hr)\n", "\n", @@ -547,11 +557,11 @@ "# format plot\n", "plt.grid(True, which=\"major\", linestyle=\":\")\n", "ax.tick_params(axis=\"both\", which=\"major\", direction=\"in\")\n", - "ax.xaxis.set_ticks_position('both')\n", - "ax.yaxis.set_ticks_position('both') \n", + "ax.xaxis.set_ticks_position(\"both\")\n", + "ax.yaxis.set_ticks_position(\"both\")\n", "plt.minorticks_off()\n", "ax.set_xticks([0, 5, 10, 15, 20])\n", - "ax.set_yticks(1.0*10.0**(-1*np.arange(11)))\n", + "ax.set_yticks(1.0 * 10.0 ** (-1 * np.arange(11)))\n", "ax.set_xlabel(\"elevation [m]\")\n", "ax.set_ylabel(\"survival function (1-cdf)\")\n", "ax.set_xlim([0, x[-1]])\n", @@ -560,8 +570,8 @@ "\n", "# 100-year return level\n", "s_t = lte.sf(x_t)\n", - "ax.plot([0, x[-1]], [s_t, s_t], '--', color=\"0.5\", linewidth=1)\n", - "ax.plot([x_t, x_t], ylim, '--', color=\"0.5\", linewidth=1)\n" + "ax.plot([0, x[-1]], [s_t, s_t], \"--\", color=\"0.5\", linewidth=1)\n", + "ax.plot([x_t, x_t], ylim, \"--\", color=\"0.5\", linewidth=1)" ] } ], diff --git a/examples/loads_example.ipynb b/examples/loads_example.ipynb index 978b13e8f..50335034b 100644 --- a/examples/loads_example.ipynb +++ b/examples/loads_example.ipynb @@ -16,11 +16,11 @@ "metadata": {}, "outputs": [], "source": [ - "import pandas as pd \n", - "import numpy as np \n", + "import pandas as pd\n", + "import numpy as np\n", "from mhkit import utils\n", - "from mhkit import loads \n", - "import matplotlib.pyplot as plt " + "from mhkit import loads\n", + "import matplotlib.pyplot as plt" ] }, { @@ -238,7 +238,7 @@ } ], "source": [ - "loads_data_file = './data/loads/data_loads_example.csv'\n", + "loads_data_file = \"./data/loads/data_loads_example.csv\"\n", "\n", "# Import csv data file\n", "raw_loads_data = pd.read_csv(loads_data_file)\n", @@ -488,16 +488,16 @@ ], "source": [ "# Use the datetime conversion from the utils module\n", - "datetime = utils.excel_to_datetime(raw_loads_data['Timestamp'])\n", + "datetime = utils.excel_to_datetime(raw_loads_data[\"Timestamp\"])\n", "\n", "# Replace the 'Timestamp' column with our newly formatted datetime\n", - "raw_loads_data['Timestamp'] = datetime \n", + "raw_loads_data[\"Timestamp\"] = datetime\n", "\n", "# Set this as our index for our DataFrame\n", - "loads_data = raw_loads_data.set_index('Timestamp')\n", + "loads_data = raw_loads_data.set_index(\"Timestamp\")\n", "\n", "# Remove the 'time' column since it will not be used\n", - "loads_data.drop(columns='Time',inplace=True)\n", + "loads_data.drop(columns=\"Time\", inplace=True)\n", "loads_data.head()" ] }, @@ -532,12 +532,14 @@ ], "source": [ "# Calculate the damage equivalent load for blade 1 root momement and tower base moment\n", - "DEL_tower = loads.general.damage_equivalent_load(loads_data['TB_ForeAft'],4,\n", - " bin_num=100,data_length=600)\n", - "DEL_blade = loads.general.damage_equivalent_load(loads_data['BL1_FlapMom'],10,\n", - " bin_num=100,data_length=600)\n", - "print('DEL TB_ForeAft: '+ str(DEL_tower))\n", - "print('DEL BL1_FlapMom: '+ str(DEL_blade))" + "DEL_tower = loads.general.damage_equivalent_load(\n", + " loads_data[\"TB_ForeAft\"], 4, bin_num=100, data_length=600\n", + ")\n", + "DEL_blade = loads.general.damage_equivalent_load(\n", + " loads_data[\"BL1_FlapMom\"], 10, bin_num=100, data_length=600\n", + ")\n", + "print(\"DEL TB_ForeAft: \" + str(DEL_tower))\n", + "print(\"DEL BL1_FlapMom: \" + str(DEL_blade))" ] }, { @@ -647,7 +649,7 @@ ], "source": [ "# Calculate the means, maxs, mins, and stdevs for all data signals in the loads data file\n", - "means,maxs,mins,stdevs = utils.get_statistics(loads_data,50,period=600)\n", + "means, maxs, mins, stdevs = utils.get_statistics(loads_data, 50, period=600)\n", "\n", "# Display the results, indexed by the first timestamp of the corresponding statistical window\n", "means" @@ -874,10 +876,10 @@ ], "source": [ "# Load DataFrames containing load statistics\n", - "means = pd.read_csv('./data/loads/data_loads_means.csv')\n", - "maxs = pd.read_csv('./data/loads/data_loads_maxs.csv')\n", - "mins = pd.read_csv('./data/loads/data_loads_mins.csv')\n", - "std = pd.read_csv('./data/loads/data_loads_std.csv')\n", + "means = pd.read_csv(\"./data/loads/data_loads_means.csv\")\n", + "maxs = pd.read_csv(\"./data/loads/data_loads_maxs.csv\")\n", + "mins = pd.read_csv(\"./data/loads/data_loads_mins.csv\")\n", + "std = pd.read_csv(\"./data/loads/data_loads_std.csv\")\n", "\n", "means.head()" ] @@ -932,23 +934,27 @@ } ], "source": [ - "loads.graphics.plot_statistics(means['uWind_80m'],\n", - " means['BL1_FlapMom'],\n", - " maxs['BL1_FlapMom'],\n", - " mins['BL1_FlapMom'],\n", - " y_stdev=std['BL1_FlapMom'],\n", - " xlabel='Wind Speed [m/s]',\n", - " ylabel='Blade Flap Moment [kNm]',\n", - " title = 'Blade Flap Moment Load Statistics')\n", + "loads.graphics.plot_statistics(\n", + " means[\"uWind_80m\"],\n", + " means[\"BL1_FlapMom\"],\n", + " maxs[\"BL1_FlapMom\"],\n", + " mins[\"BL1_FlapMom\"],\n", + " y_stdev=std[\"BL1_FlapMom\"],\n", + " xlabel=\"Wind Speed [m/s]\",\n", + " ylabel=\"Blade Flap Moment [kNm]\",\n", + " title=\"Blade Flap Moment Load Statistics\",\n", + ")\n", "\n", - "loads.graphics.plot_statistics(means['uWind_80m'],\n", - " means['TB_ForeAft'],\n", - " maxs['TB_ForeAft'],\n", - " mins['TB_ForeAft'],\n", - " y_stdev=std['TB_ForeAft'],\n", - " xlabel='Wind Speed [m/s]',\n", - " ylabel='Tower Base Moment [kNm]',\n", - " title = 'Tower Base Moment Load Statistics')" + "loads.graphics.plot_statistics(\n", + " means[\"uWind_80m\"],\n", + " means[\"TB_ForeAft\"],\n", + " maxs[\"TB_ForeAft\"],\n", + " mins[\"TB_ForeAft\"],\n", + " y_stdev=std[\"TB_ForeAft\"],\n", + " xlabel=\"Wind Speed [m/s]\",\n", + " ylabel=\"Tower Base Moment [kNm]\",\n", + " title=\"Tower Base Moment Load Statistics\",\n", + ")" ] }, { @@ -1587,13 +1593,13 @@ ], "source": [ "# Create array containing wind speeds to use as bin edges\n", - "bin_edges = np.arange(3,26,1)\n", - "bin_against = means['uWind_80m']\n", + "bin_edges = np.arange(3, 26, 1)\n", + "bin_against = means[\"uWind_80m\"]\n", "\n", - "# Apply function for means, maxs, and mins \n", - "[bin_means, bin_means_std] = loads.general.bin_statistics(means,bin_against,bin_edges)\n", - "[bin_maxs, bin_maxs_std] = loads.general.bin_statistics(maxs,bin_against,bin_edges)\n", - "[bin_mins, bin_mins_std] = loads.general.bin_statistics(mins,bin_against,bin_edges)\n", + "# Apply function for means, maxs, and mins\n", + "[bin_means, bin_means_std] = loads.general.bin_statistics(means, bin_against, bin_edges)\n", + "[bin_maxs, bin_maxs_std] = loads.general.bin_statistics(maxs, bin_against, bin_edges)\n", + "[bin_mins, bin_mins_std] = loads.general.bin_statistics(mins, bin_against, bin_edges)\n", "\n", "bin_means" ] @@ -1637,8 +1643,8 @@ ], "source": [ "# Specify center of each wind speed bin, and signal name for analysis\n", - "bin_centers = np.arange(3.5,25.5,step=1) \n", - "signal_name = 'TB_ForeAft' \n", + "bin_centers = np.arange(3.5, 25.5, step=1)\n", + "signal_name = \"TB_ForeAft\"\n", "\n", "# Specify inputs to be used in plotting\n", "bin_mean = bin_means[signal_name]\n", @@ -1649,11 +1655,18 @@ "bin_min_std = bin_mins_std[signal_name]\n", "\n", "# Plot binned statistics\n", - "loads.graphics.plot_bin_statistics(bin_centers,bin_mean,bin_max,bin_min,\n", - " bin_mean_std,bin_max_std,bin_min_std,\n", - " xlabel='Wind Speed [m/s]',\n", - " ylabel=signal_name,\n", - " title='Binned Statistics')\n" + "loads.graphics.plot_bin_statistics(\n", + " bin_centers,\n", + " bin_mean,\n", + " bin_max,\n", + " bin_min,\n", + " bin_mean_std,\n", + " bin_max_std,\n", + " bin_min_std,\n", + " xlabel=\"Wind Speed [m/s]\",\n", + " ylabel=signal_name,\n", + " title=\"Binned Statistics\",\n", + ")" ] } ], diff --git a/examples/metocean_example.ipynb b/examples/metocean_example.ipynb index cc94569d7..c8675ac75 100644 --- a/examples/metocean_example.ipynb +++ b/examples/metocean_example.ipynb @@ -262,8 +262,8 @@ ], "source": [ "# Specify the parameter as continuous wind speeds and the buoy number to be 46022\n", - "ndbc_dict = {'parameter':'cwind','buoy_number':'46022'} \n", - "available_data = ndbc.available_data(ndbc_dict['parameter'], ndbc_dict['buoy_number'])\n", + "ndbc_dict = {\"parameter\": \"cwind\", \"buoy_number\": \"46022\"}\n", + "available_data = ndbc.available_data(ndbc_dict[\"parameter\"], ndbc_dict[\"buoy_number\"])\n", "available_data" ] }, @@ -333,7 +333,7 @@ "source": [ "# Slice the available data to only include 2018 and more recent\n", "years_of_interest = available_data[available_data.year == 2018]\n", - "years_of_interest\n" + "years_of_interest" ] }, { @@ -376,8 +376,8 @@ ], "source": [ "# Get dictionary of parameter data by year\n", - "ndbc_dict['filenames'] = years_of_interest['filename']\n", - "requested_data = ndbc.request_data(ndbc_dict['parameter'], ndbc_dict['filenames'])\n", + "ndbc_dict[\"filenames\"] = years_of_interest[\"filename\"]\n", + "requested_data = ndbc.request_data(ndbc_dict[\"parameter\"], ndbc_dict[\"filenames\"])\n", "requested_data" ] }, @@ -554,13 +554,15 @@ ], "source": [ "# Convert the header dates to a Datetime Index and remove NOAA date columns for each year\n", - "ndbc_dict['2018'] = ndbc.to_datetime_index(ndbc_dict['parameter'], requested_data['2018'])\n", + "ndbc_dict[\"2018\"] = ndbc.to_datetime_index(\n", + " ndbc_dict[\"parameter\"], requested_data[\"2018\"]\n", + ")\n", "\n", "# Replace 99, 999, 9999 with NaN\n", - "ndbc_dict['2018'] = ndbc_dict['2018'].replace({99.0:np.NaN, 999:np.NaN, 9999:np.NaN})\n", + "ndbc_dict[\"2018\"] = ndbc_dict[\"2018\"].replace({99.0: np.NaN, 999: np.NaN, 9999: np.NaN})\n", "\n", "# Display DataFrame of 46022 data from 2018\n", - "ndbc_dict['2018']" + "ndbc_dict[\"2018\"]" ] }, { @@ -648,7 +650,9 @@ ], "source": [ "# Input parameters for site of interest\n", - "temperatures = wind_toolkit.elevation_to_string('temperature',[2, 20, 40, 60, 80, 100, 120, 140, 160])\n", + "temperatures = wind_toolkit.elevation_to_string(\n", + " \"temperature\", [2, 20, 40, 60, 80, 100, 120, 140, 160]\n", + ")\n", "temperatures" ] }, @@ -658,11 +662,13 @@ "metadata": {}, "outputs": [], "source": [ - "wtk_inputs = {'time_interval':'1-hour',\n", - " 'wind_parameters':['windspeed_10m','winddirection_10m'],\n", - " 'temp_parameters':temperatures,\n", - " 'year':[2018],\n", - " 'lat_lon':(40.748, -124.527)}" + "wtk_inputs = {\n", + " \"time_interval\": \"1-hour\",\n", + " \"wind_parameters\": [\"windspeed_10m\", \"winddirection_10m\"],\n", + " \"temp_parameters\": temperatures,\n", + " \"year\": [2018],\n", + " \"lat_lon\": (40.748, -124.527),\n", + "}" ] }, { @@ -692,7 +698,7 @@ } ], "source": [ - "requested_region = wind_toolkit.region_selection(wtk_inputs['lat_lon'])\n", + "requested_region = wind_toolkit.region_selection(wtk_inputs[\"lat_lon\"])\n", "requested_region" ] }, @@ -725,7 +731,7 @@ } ], "source": [ - "wind_toolkit.plot_region(requested_region,lat_lon=wtk_inputs['lat_lon'])" + "wind_toolkit.plot_region(requested_region, lat_lon=wtk_inputs[\"lat_lon\"])" ] }, { @@ -859,8 +865,11 @@ ], "source": [ "wtk_wind, wtk_metadata = wind_toolkit.request_wtk_point_data(\n", - " wtk_inputs['time_interval'],wtk_inputs['wind_parameters'],\n", - " wtk_inputs['lat_lon'],wtk_inputs['year'])\n", + " wtk_inputs[\"time_interval\"],\n", + " wtk_inputs[\"wind_parameters\"],\n", + " wtk_inputs[\"lat_lon\"],\n", + " wtk_inputs[\"year\"],\n", + ")\n", "wtk_wind" ] }, @@ -908,21 +917,31 @@ ], "source": [ "# Get WIND Toolkit and NDBC wind data for 2018-01-11\n", - "ndbc_hourly_data = ndbc_dict['2018']['2018-01-11'].resample('h').nearest()\n", - "wtk_hourly_wind = wtk_wind['2018-01-11']\n", + "ndbc_hourly_data = ndbc_dict[\"2018\"][\"2018-01-11\"].resample(\"h\").nearest()\n", + "wtk_hourly_wind = wtk_wind[\"2018-01-11\"]\n", "\n", "# Plot the timeseries\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", - "ax.set_xlabel('Time, UTC (h)')\n", - "ax.set_ylabel('Speed (m/s)')\n", - "ax.set_title('Hourly mean wind speeds on January 11, 2018')\n", + "ax.set_xlabel(\"Time, UTC (h)\")\n", + "ax.set_ylabel(\"Speed (m/s)\")\n", + "ax.set_title(\"Hourly mean wind speeds on January 11, 2018\")\n", "ax.grid()\n", "ax.set_ylim([5, 14])\n", "ax.set_xlim([0, 24])\n", - "line1 = ax.plot(ndbc_hourly_data.index.hour,ndbc_hourly_data['WSPD'].values,'o',label='NDBC 4m wind speed')\n", - "line2 = ax.plot(wtk_hourly_wind.index.hour,wtk_hourly_wind['windspeed_10m_0'].values,'x',label='WIND Toolkit 10m wind speed')\n", - "ax.legend()\n" + "line1 = ax.plot(\n", + " ndbc_hourly_data.index.hour,\n", + " ndbc_hourly_data[\"WSPD\"].values,\n", + " \"o\",\n", + " label=\"NDBC 4m wind speed\",\n", + ")\n", + "line2 = ax.plot(\n", + " wtk_hourly_wind.index.hour,\n", + " wtk_hourly_wind[\"windspeed_10m_0\"].values,\n", + " \"x\",\n", + " label=\"WIND Toolkit 10m wind speed\",\n", + ")\n", + "ax.legend()" ] }, { @@ -955,12 +974,13 @@ ], "source": [ "# Set the rose bin widths\n", - "width_direction = 10 # in degrees\n", - "width_velocity = 1 # in m/s\n", + "width_direction = 10 # in degrees\n", + "width_velocity = 1 # in m/s\n", "\n", "# Plot the wind rose\n", - "ax = plot_rose(ndbc_hourly_data['WDIR'],ndbc_hourly_data['WSPD'],\n", - " width_direction,width_velocity)\n" + "ax = plot_rose(\n", + " ndbc_hourly_data[\"WDIR\"], ndbc_hourly_data[\"WSPD\"], width_direction, width_velocity\n", + ")" ] }, { @@ -984,8 +1004,12 @@ } ], "source": [ - "ax2 = plot_rose(wtk_hourly_wind['winddirection_10m_0'],wtk_hourly_wind['windspeed_10m_0'],\n", - " width_direction,width_velocity)" + "ax2 = plot_rose(\n", + " wtk_hourly_wind[\"winddirection_10m_0\"],\n", + " wtk_hourly_wind[\"windspeed_10m_0\"],\n", + " width_direction,\n", + " width_velocity,\n", + ")" ] }, { @@ -1026,31 +1050,34 @@ ], "source": [ "wtk_temp, wtk_metadata = wind_toolkit.request_wtk_point_data(\n", - " wtk_inputs['time_interval'],wtk_inputs['temp_parameters'],\n", - " wtk_inputs['lat_lon'],wtk_inputs['year'])\n", + " wtk_inputs[\"time_interval\"],\n", + " wtk_inputs[\"temp_parameters\"],\n", + " wtk_inputs[\"lat_lon\"],\n", + " wtk_inputs[\"year\"],\n", + ")\n", "# wtk_temp = wtk_temp.shift(-7) # optionally UTC to local time\n", "\n", - "# Pick times corresponding to stable and unstable temperature profiles \n", - "stable_temp = wtk_temp.at_time('2018-01-11 03:00:00').values[0]\n", - "unstable_temp = wtk_temp.at_time('2018-01-11 15:00:00').values[0]\n", + "# Pick times corresponding to stable and unstable temperature profiles\n", + "stable_temp = wtk_temp.at_time(\"2018-01-11 03:00:00\").values[0]\n", + "unstable_temp = wtk_temp.at_time(\"2018-01-11 15:00:00\").values[0]\n", "\n", "# Find heights from temperature DataFrame columns\n", "heights = []\n", "for s in wtk_temp.keys():\n", - " s = s.removeprefix('temperature_')\n", - " s = s.removesuffix('m_0')\n", + " s = s.removeprefix(\"temperature_\")\n", + " s = s.removesuffix(\"m_0\")\n", " heights.append(float(s))\n", "heights = np.array(heights)\n", "\n", "# Plot the profiles\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", - "ax.set_xlabel('Temperature (C)')\n", - "ax.set_ylabel('Height (m)')\n", - "ax.set_title('Temperature profiles from January 11, 2018')\n", + "ax.set_xlabel(\"Temperature (C)\")\n", + "ax.set_ylabel(\"Height (m)\")\n", + "ax.set_title(\"Temperature profiles from January 11, 2018\")\n", "ax.grid()\n", - "line1 = ax.plot(stable_temp,heights,'o-',label='time=03:00:00 UTC')\n", - "line2 = ax.plot(unstable_temp,heights,'x-',label='time=15:00:00 UTC')\n", + "line1 = ax.plot(stable_temp, heights, \"o-\", label=\"time=03:00:00 UTC\")\n", + "line2 = ax.plot(unstable_temp, heights, \"x-\", label=\"time=15:00:00 UTC\")\n", "ax.legend()" ] } diff --git a/examples/mooring_example.ipynb b/examples/mooring_example.ipynb index 1f0dd5e33..6340c190b 100644 --- a/examples/mooring_example.ipynb +++ b/examples/mooring_example.ipynb @@ -473,8 +473,8 @@ } ], "source": [ - "fpath = '.\\data\\mooring\\line1_test.out'\n", - "inputfile = '.\\data\\mooring\\TestInput.MD.dat'\n", + "fpath = \".\\data\\mooring\\line1_test.out\"\n", + "inputfile = \".\\data\\mooring\\TestInput.MD.dat\"\n", "\n", "ds = mooring.io.read_moordyn(fpath, input_file=inputfile)\n", "ds" @@ -917,7 +917,11 @@ } ], "source": [ - "print('The average lay length of the mooring line is: ' + str(laylength.mean().values.round()) + ' meters')" + "print(\n", + " \"The average lay length of the mooring line is: \"\n", + " + str(laylength.mean().values.round())\n", + " + \" meters\"\n", + ")" ] }, { @@ -273117,9 +273121,18 @@ "%matplotlib agg\n", "from IPython.display import HTML\n", "\n", - "dsani = ds.sel(Time=slice(0,10))\n", + "dsani = ds.sel(Time=slice(0, 10))\n", "\n", - "ani = mooring.graphics.animate(dsani, dimension='3d', interval=10, repeat=True, xlabel='X-axis',ylabel='Y-axis',zlabel='Depth [m]', title='Mooring Line Example')\n", + "ani = mooring.graphics.animate(\n", + " dsani,\n", + " dimension=\"3d\",\n", + " interval=10,\n", + " repeat=True,\n", + " xlabel=\"X-axis\",\n", + " ylabel=\"Y-axis\",\n", + " zlabel=\"Depth [m]\",\n", + " title=\"Mooring Line Example\",\n", + ")\n", "HTML(ani.to_jshtml())" ] }, @@ -391699,8 +391712,16 @@ ], "source": [ "%matplotlib agg\n", - "ani2d = mooring.graphics.animate(dsani, dimension='2d', xaxis='x',yaxis='z', repeat=True, \n", - " xlabel='X-axis',ylabel='Depth [m]', title='Mooring Line Example')\n", + "ani2d = mooring.graphics.animate(\n", + " dsani,\n", + " dimension=\"2d\",\n", + " xaxis=\"x\",\n", + " yaxis=\"z\",\n", + " repeat=True,\n", + " xlabel=\"X-axis\",\n", + " ylabel=\"Depth [m]\",\n", + " title=\"Mooring Line Example\",\n", + ")\n", "\n", "HTML(ani2d.to_jshtml())" ] diff --git a/examples/power_example.ipynb b/examples/power_example.ipynb index 3362958b8..c5f0955cc 100644 --- a/examples/power_example.ipynb +++ b/examples/power_example.ipynb @@ -149,9 +149,11 @@ ], "source": [ "# Read in time-series data of voltage (V) and current (I)\n", - "power_data = pd.read_csv('data/power/2020224_181521_PowRaw.csv',skip_blank_lines=True,index_col='Time_UTC') \n", - "# Convert the time index to type \"datetime\" \n", - "power_data.index=pd.to_datetime(power_data.index)\n", + "power_data = pd.read_csv(\n", + " \"data/power/2020224_181521_PowRaw.csv\", skip_blank_lines=True, index_col=\"Time_UTC\"\n", + ")\n", + "# Convert the time index to type \"datetime\"\n", + "power_data.index = pd.to_datetime(power_data.index)\n", "# Display the data\n", "power_data.head()" ] @@ -187,16 +189,18 @@ ], "source": [ "# First seperate the voltage and current time-series into seperate dataFrames\n", - "voltage = power_data[['MODAQ_Va_V', 'MODAQ_Vb_V', 'MODAQ_Vc_V']]\n", - "current = power_data[['MODAQ_Ia_I','MODAQ_Ib_I','MODAQ_Ic_I']]\n", + "voltage = power_data[[\"MODAQ_Va_V\", \"MODAQ_Vb_V\", \"MODAQ_Vc_V\"]]\n", + "current = power_data[[\"MODAQ_Ia_I\", \"MODAQ_Ib_I\", \"MODAQ_Ic_I\"]]\n", "\n", "# Set the power factor for the system\n", - "power_factor = 0.96 \n", + "power_factor = 0.96\n", "\n", "# Compute the instantaneous AC power in watts\n", - "ac_power = power.characteristics.ac_power_three_phase(voltage, current, power_factor) \n", + "ac_power = power.characteristics.ac_power_three_phase(voltage, current, power_factor)\n", "# Display the result\n", - "ac_power.Power.plot(figsize=(15,5),title='AC Power').set(xlabel='Time',ylabel='Power [W]');" + "ac_power.Power.plot(figsize=(15, 5), title=\"AC Power\").set(\n", + " xlabel=\"Time\", ylabel=\"Power [W]\"\n", + ");" ] }, { @@ -302,12 +306,12 @@ ], "source": [ "# Compute the instantaneous frequency\n", - "inst_freq = power.characteristics.instantaneous_frequency(voltage) \n", + "inst_freq = power.characteristics.instantaneous_frequency(voltage)\n", "\n", "# Display the result\n", - "inst_freq.plot(figsize=(15,5), ylim=(0,100),\n", - " title='Instantaneous Frequency').set(xlabel='Time [s]',\n", - " ylabel='Frequency [Hz]');\n", + "inst_freq.plot(figsize=(15, 5), ylim=(0, 100), title=\"Instantaneous Frequency\").set(\n", + " xlabel=\"Time [s]\", ylabel=\"Frequency [Hz]\"\n", + ")\n", "inst_freq.head()" ] }, @@ -341,10 +345,10 @@ ], "source": [ "# Set the nominal sampling frequency\n", - "sample_freq = 50000 #[Hz]\n", + "sample_freq = 50000 # [Hz]\n", "\n", "# Set the frequency of the grid the device would be conected to\n", - "grid_freq = 60 #[Hz] \n", + "grid_freq = 60 # [Hz]\n", "\n", "# Set the rated current of the device\n", "rated_current = 18.8 # [Amps]\n", @@ -353,9 +357,9 @@ "harmonics = power.quality.harmonics(current, sample_freq, grid_freq)\n", "\n", "# Plot the results\n", - "harmonics.plot(figsize=(15,5),xlim=(0,900),\n", - " title='Current Harmonics').set(ylabel='Harmonic Amplitude',\n", - " xlabel='Frequency [Hz]');" + "harmonics.plot(figsize=(15, 5), xlim=(0, 900), title=\"Current Harmonics\").set(\n", + " ylabel=\"Harmonic Amplitude\", xlabel=\"Frequency [Hz]\"\n", + ");" ] }, { @@ -448,7 +452,7 @@ ], "source": [ "# Calcualte Harmonic Subgroups\n", - "h_s = power.quality.harmonic_subgroups(harmonics,grid_freq) \n", + "h_s = power.quality.harmonic_subgroups(harmonics, grid_freq)\n", "# Display the results\n", "h_s.head()" ] @@ -515,8 +519,8 @@ } ], "source": [ - "#Finally we can compute the total harmonic current distortion as a percentage \n", - "THCD=power.quality.total_harmonic_current_distortion(h_s,rated_current) \n", + "# Finally we can compute the total harmonic current distortion as a percentage\n", + "THCD = power.quality.total_harmonic_current_distortion(h_s, rated_current)\n", "THCD" ] } diff --git a/examples/qc_example.ipynb b/examples/qc_example.ipynb index d0afc5370..d1b25ad52 100644 --- a/examples/qc_example.ipynb +++ b/examples/qc_example.ipynb @@ -71,13 +71,13 @@ ], "source": [ "# Load data from the csv file into a DataFrame\n", - "data = pd.read_csv('data/qc/wave_elevation_data.csv', index_col='Time') \n", + "data = pd.read_csv(\"data/qc/wave_elevation_data.csv\", index_col=\"Time\")\n", "\n", "# Plot the data\n", - "data.plot(figsize=(15,5), ylim=(-60,60)) \n", + "data.plot(figsize=(15, 5), ylim=(-60, 60))\n", "\n", "# Print the first 5 rows of data\n", - "print(data.head()) " + "print(data.head())" ] }, { @@ -110,7 +110,7 @@ ], "source": [ "# Convert the index to datetime\n", - "data.index = utils.index_to_datetime(data.index, origin='2019-05-20') \n", + "data.index = utils.index_to_datetime(data.index, origin=\"2019-05-20\")\n", "\n", "# Print the first 5 rows of data\n", "print(data.head())" @@ -151,10 +151,10 @@ "outputs": [], "source": [ "# Define expected frequency of the data, in seconds\n", - "frequency = 0.002 \n", + "frequency = 0.002\n", "\n", "# Run the timestamp quality control test\n", - "results = qc.check_timestamp(data, frequency) " + "results = qc.check_timestamp(data, frequency)" ] }, { @@ -196,10 +196,10 @@ ], "source": [ "# Plot cleaned data\n", - "results['cleaned_data'].plot(figsize=(15,5), ylim=(-60,60)) \n", + "results[\"cleaned_data\"].plot(figsize=(15, 5), ylim=(-60, 60))\n", "\n", "# Print the first 5 rows of the cleaned data\n", - "print(results['cleaned_data'].head()) " + "print(results[\"cleaned_data\"].head())" ] }, { @@ -222,7 +222,7 @@ ], "source": [ "# Print the first 5 rows of the mask\n", - "print(results['mask'].head()) " + "print(results[\"mask\"].head())" ] }, { @@ -253,7 +253,7 @@ "source": [ "# Print the test results summary\n", "# The summary is transposed (using .T) so that it is easier to read.\n", - "print(results['test_results'].T) " + "print(results[\"test_results\"].T)" ] }, { @@ -300,16 +300,16 @@ ], "source": [ "# Define corrupt values\n", - "corrupt_values = [-999] \n", + "corrupt_values = [-999]\n", "\n", "# Run the corrupt data quality control test\n", - "results = qc.check_corrupt(results['cleaned_data'], corrupt_values) \n", + "results = qc.check_corrupt(results[\"cleaned_data\"], corrupt_values)\n", "\n", "# Plot cleaned data\n", - "results['cleaned_data'].plot(figsize=(15,5), ylim=(-60,60)) \n", + "results[\"cleaned_data\"].plot(figsize=(15, 5), ylim=(-60, 60))\n", "\n", "# Print test results summary\n", - "print(results['test_results'].T)" + "print(results[\"test_results\"].T)" ] }, { @@ -359,16 +359,16 @@ ], "source": [ "# Define expected lower and upper bound ([lower bound, upper bound])\n", - "expected_bounds = [-50, 50] \n", + "expected_bounds = [-50, 50]\n", "\n", "# Run expected range quality control test\n", - "results = qc.check_range(results['cleaned_data'], expected_bounds) \n", + "results = qc.check_range(results[\"cleaned_data\"], expected_bounds)\n", "\n", "# Plot cleaned data\n", - "results['cleaned_data'].plot(figsize=(15,5), ylim=(-60,60)) \n", + "results[\"cleaned_data\"].plot(figsize=(15, 5), ylim=(-60, 60))\n", "\n", "# Print test results summary\n", - "print(results['test_results'].T) " + "print(results[\"test_results\"].T)" ] }, { @@ -411,19 +411,19 @@ ], "source": [ "# Define expected lower bound (no upper bound is specified in this example)\n", - "expected_bound = [0.001, None] \n", + "expected_bound = [0.001, None]\n", "\n", "# Define the moving window, in seconds\n", - "window = 0.02 \n", + "window = 0.02\n", "\n", "# Run the delta quality control test\n", - "results = qc.check_delta(results['cleaned_data'], expected_bound, window) \n", + "results = qc.check_delta(results[\"cleaned_data\"], expected_bound, window)\n", "\n", "# Plot cleaned data\n", - "results['cleaned_data'].plot(figsize=(15,5), ylim=(-60,60))\n", + "results[\"cleaned_data\"].plot(figsize=(15, 5), ylim=(-60, 60))\n", "\n", "# Print test results summary\n", - "print(results['test_results'].T) " + "print(results[\"test_results\"].T)" ] }, { @@ -442,7 +442,7 @@ "outputs": [], "source": [ "# Extract final cleaned data for MHKiT analysis\n", - "cleaned_data = results['cleaned_data'] " + "cleaned_data = results[\"cleaned_data\"]" ] } ], diff --git a/examples/river_example.ipynb b/examples/river_example.ipynb index c03959924..aadc547fc 100644 --- a/examples/river_example.ipynb +++ b/examples/river_example.ipynb @@ -73,11 +73,13 @@ ], "source": [ "# Use the requests method to obtain 10 years of daily discharge data\n", - "data = river.io.usgs.request_usgs_data(station=\"15515500\",\n", - " parameter='00060',\n", - " start_date='2009-08-01',\n", - " end_date='2019-08-01',\n", - " data_type='Daily')\n", + "data = river.io.usgs.request_usgs_data(\n", + " station=\"15515500\",\n", + " parameter=\"00060\",\n", + " start_date=\"2009-08-01\",\n", + " end_date=\"2019-08-01\",\n", + " data_type=\"Daily\",\n", + ")\n", "\n", "# Print data\n", "print(data)" @@ -113,12 +115,12 @@ "column_name = data.columns[0]\n", "\n", "# Rename to a shorter key name e.g. 'Q'\n", - "data = data.rename(columns={column_name: 'Q'})\n", + "data = data.rename(columns={column_name: \"Q\"})\n", "\n", "# Convert to discharge data from ft3/s to m3/s\n", - "data.Q = data.Q / (3.28084)**3\n", + "data.Q = data.Q / (3.28084) ** 3\n", "\n", - "# Plot the daily discharge \n", + "# Plot the daily discharge\n", "ax = river.graphics.plot_discharge_timeseries(data.Q)" ] }, @@ -155,7 +157,7 @@ ], "source": [ "# Calculate exceedence probability\n", - "data['F'] = river.resource.exceedance_probability(data.Q)\n", + "data[\"F\"] = river.resource.exceedance_probability(data.Q)\n", "\n", "# Plot the flow duration curve (FDC)\n", "ax = river.graphics.plot_flow_duration_curve(data.Q, data.F)" @@ -199,7 +201,7 @@ ], "source": [ "# Load discharge to velocity curve at turbine location\n", - "DV_curve = pd.read_csv('data/river/tanana_DV_curve.csv')\n", + "DV_curve = pd.read_csv(\"data/river/tanana_DV_curve.csv\")\n", "\n", "# Create a polynomial fit of order 2 from the discharge to velocity curve.\n", "# Return the polynomial fit and and R squared value\n", @@ -241,10 +243,10 @@ ], "source": [ "# Use polynomial fit from DV curve to calculate velocity ('V') from discharge at turbine location\n", - "data['V'] = river.resource.discharge_to_velocity(data.Q, p)\n", + "data[\"V\"] = river.resource.discharge_to_velocity(data.Q, p)\n", "\n", - "# Plot the velocity duration curve (VDC) \n", - "ax = river.graphics.plot_velocity_duration_curve(data.V, data.F )" + "# Plot the velocity duration curve (VDC)\n", + "ax = river.graphics.plot_velocity_duration_curve(data.V, data.F)" ] }, { @@ -282,7 +284,7 @@ ], "source": [ "# Calculate the power produced from turbine velocity to power curve\n", - "VP_curve = pd.read_csv('data/river/tanana_VP_curve.csv')\n", + "VP_curve = pd.read_csv(\"data/river/tanana_VP_curve.csv\")\n", "\n", "# Calculate the polynomial fit for the VP curve\n", "p2, r_squared_2 = river.resource.polynomial_fit(VP_curve.V, VP_curve.P, 2)\n", @@ -321,10 +323,12 @@ ], "source": [ "# Calculate power from velocity at the turbine location\n", - "data['P'] = river.resource.velocity_to_power(data.V, \n", - " polynomial_coefficients=p2,\n", - " cut_in=VP_curve.V.min(), \n", - " cut_out=VP_curve.V.max())\n", + "data[\"P\"] = river.resource.velocity_to_power(\n", + " data.V,\n", + " polynomial_coefficients=p2,\n", + " cut_in=VP_curve.V.min(),\n", + " cut_out=VP_curve.V.max(),\n", + ")\n", "# Plot the power duration curve\n", "ax = river.graphics.plot_power_duration_curve(data.P, data.F)" ] @@ -356,7 +360,7 @@ ], "source": [ "# Calculate the Annual Energy produced\n", - "s = 365. * 24 * 3600 # Seconds in a year\n", + "s = 365.0 * 24 * 3600 # Seconds in a year\n", "AEP = river.resource.energy_produced(data.P, s)\n", "\n", "print(f\"Annual Energy Produced: {AEP/3600000:.2f} kWh\")" diff --git a/examples/short_term_extremes_example.ipynb b/examples/short_term_extremes_example.ipynb index 05cf9f8dc..193252ffe 100644 --- a/examples/short_term_extremes_example.ipynb +++ b/examples/short_term_extremes_example.ipynb @@ -39,7 +39,7 @@ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", - "from mhkit.loads import extreme \n", + "from mhkit.loads import extreme\n", "from mhkit.wave.resource import jonswap_spectrum, surface_elevation" ] }, @@ -57,7 +57,7 @@ "outputs": [], "source": [ "# short-term period in seconds\n", - "t_st = 3.0 * 60.0 * 60.0 " + "t_st = 3.0 * 60.0 * 60.0" ] }, { @@ -86,19 +86,18 @@ "T_min = 1 # s\n", "Tp = 8 # s\n", "Hs = 1.5 # m\n", - "df = 1/t_st\n", - "f_max = 1/T_min\n", - "Nf = int(f_max/df) + 1\n", + "df = 1 / t_st\n", + "f_max = 1 / T_min\n", + "Nf = int(f_max / df) + 1\n", "f = np.linspace(0.0, f_max, Nf)\n", "S = jonswap_spectrum(f, Tp, Hs)\n", "\n", "# time in seconds\n", - "time = np.linspace(0, t_st, 2*Nf+1)\n", + "time = np.linspace(0, t_st, 2 * Nf + 1)\n", "\n", "# 10 distinct time-series\n", "N = 10\n", - "qoi_timeseries = [surface_elevation(\n", - " S, time).values.squeeze() for i in range(N)]" + "qoi_timeseries = [surface_elevation(S, time).values.squeeze() for i in range(N)]" ] }, { @@ -145,15 +144,15 @@ "timeseries = qoi_timeseries[i]\n", "plt.plot(time, timeseries)\n", "plt.title(\"Full 3 hours\")\n", - "plt.xlabel('time [s]')\n", - "plt.ylabel('elevation [m]')\n", + "plt.xlabel(\"time [s]\")\n", + "plt.ylabel(\"elevation [m]\")\n", "\n", "plt.figure()\n", "timeseries = qoi_timeseries[i]\n", "plt.plot(time[time <= 120], timeseries[time <= 120])\n", "plt.title(\"First 2 minutes\")\n", - "plt.xlabel('time [s]')\n", - "plt.ylabel('elevation [m]');" + "plt.xlabel(\"time [s]\")\n", + "plt.ylabel(\"elevation [m]\");" ] }, { @@ -225,11 +224,16 @@ "i = 0 # select: 0-9\n", "\n", "plt.figure()\n", - "line, = plt.plot(time, qoi_timeseries[i], alpha=0.5, label='time-series')\n", - "plt.plot(time[np.argmax(qoi_timeseries[i])], block_maxima[i],\n", - " 'o', color=line.get_color(), label='maximum')\n", - "plt.xlabel('time [s]')\n", - "plt.ylabel('elevation [m]')\n", + "(line,) = plt.plot(time, qoi_timeseries[i], alpha=0.5, label=\"time-series\")\n", + "plt.plot(\n", + " time[np.argmax(qoi_timeseries[i])],\n", + " block_maxima[i],\n", + " \"o\",\n", + " color=line.get_color(),\n", + " label=\"maximum\",\n", + ")\n", + "plt.xlabel(\"time [s]\")\n", + "plt.ylabel(\"elevation [m]\")\n", "plt.legend();" ] }, @@ -260,11 +264,11 @@ ], "source": [ "plt.figure()\n", - "plt.plot(block_maxima, 'o')\n", + "plt.plot(block_maxima, \"o\")\n", "plt.title(\"Block maxima\")\n", - "plt.xlabel('time series')\n", - "plt.ylabel('maximum elevation [m]')\n", - "plt.ylim([0, np.max(block_maxima*1.1)]);" + "plt.xlabel(\"time series\")\n", + "plt.ylabel(\"maximum elevation [m]\")\n", + "plt.ylim([0, np.max(block_maxima * 1.1)]);" ] }, { @@ -328,22 +332,26 @@ ], "source": [ "# print distribution statistics\n", - "print(f'GEV:\\n Expected value: {ste_gev.expect()} m\\n 95% interval: ({ste_gev.ppf(0.025)} m, {ste_gev.ppf(0.975)} m)')\n", - "print(f'Gumbel:\\n Expected value: {ste_gum.expect()} m\\n 95% interval: ({ste_gum.ppf(0.025)} m, {ste_gum.ppf(0.975)} m)')\n", + "print(\n", + " f\"GEV:\\n Expected value: {ste_gev.expect()} m\\n 95% interval: ({ste_gev.ppf(0.025)} m, {ste_gev.ppf(0.975)} m)\"\n", + ")\n", + "print(\n", + " f\"Gumbel:\\n Expected value: {ste_gum.expect()} m\\n 95% interval: ({ste_gum.ppf(0.025)} m, {ste_gum.ppf(0.975)} m)\"\n", + ")\n", "\n", "# plot CDF and PDF\n", "x = np.linspace(0, 3, 1000)\n", - "fig, axs = plt.subplots(1,2)\n", + "fig, axs = plt.subplots(1, 2)\n", "axs[0].plot(x, ste_gev.pdf(x))\n", "axs[0].plot(x, ste_gum.pdf(x))\n", - "axs[0].plot(block_maxima, np.zeros(N), 'k.')\n", - "axs[1].plot(x, ste_gev.cdf(x), label='GEV')\n", - "axs[1].plot(x, ste_gum.cdf(x), label='Gumbel')\n", - "axs[0].set_ylabel('PDF')\n", - "axs[1].set_ylabel('CDF')\n", + "axs[0].plot(block_maxima, np.zeros(N), \"k.\")\n", + "axs[1].plot(x, ste_gev.cdf(x), label=\"GEV\")\n", + "axs[1].plot(x, ste_gum.cdf(x), label=\"Gumbel\")\n", + "axs[0].set_ylabel(\"PDF\")\n", + "axs[1].set_ylabel(\"CDF\")\n", "axs[1].legend()\n", - "axs[0].set_xlabel('elevation [m]')\n", - "axs[1].set_xlabel('elevation [m]');" + "axs[0].set_xlabel(\"elevation [m]\")\n", + "axs[1].set_xlabel(\"elevation [m]\");" ] }, { @@ -366,7 +374,7 @@ "outputs": [], "source": [ "t_end = 1.0 * 60.0 * 60.0\n", - "timeseries_1hr = qoi_timeseries[0][time" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ax = tidal.graphics.plot_current_timeseries(data.d, data.s, flood)" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "from mhkit import tidal" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading Data from NOAA-Currents\n", + " \n", + "This example uses 1 year of data from the NOAA-Currents sites. A map of available currents stations is available at https://tidesandcurrents.noaa.gov/map/. The tidal io module includes two functions to import data: `request_noaa_data` which pulls data from the website, and `read_noaa_json` which loads a JSON file. The request function can save the JSON file for later use. \n", + "\n", + "For simplicity, this example loads data from a JSON file into a pandas DataFrame. This data contains 1 year of 6 minute averaged data from the Southampton Shoal Channel LB 6 (Station Number: s08010) in San Francisco Bay. The data includes 6 minute averaged direction [degrees] and speed [cm/s] indexed by time. The DataFrame key names returned by NOAA are 'd' for direction and 's' for speed. Since MHKIT uses SI units, speed is converted to m/s. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The plot above shows missing data for most of early and mid-2017. The IEC standard recommends a minimum of 1 year of 10 minute averaged data (See IEC 201 for full description). For the demonstration, this dataset is sufficient. To look at a specific month we can slice the dataset before passing to the plotting function." - ] - }, + "name": "stdout", + "output_type": "stream", + "text": [ + " s d b\n", + "2016-11-08 12:04:00 0.673 358 4\n", + "2016-11-08 12:34:00 0.689 360 4\n", + "2016-11-08 12:46:00 0.738 356 4\n", + "2016-11-08 12:58:00 0.744 359 4\n", + "2016-11-08 13:10:00 0.648 358 4\n", + "... ... ... ..\n", + "2018-04-01 22:02:00 0.089 296 4\n", + "2018-04-01 22:14:00 0.102 356 4\n", + "2018-04-01 22:26:00 0.011 3 4\n", + "2018-04-01 22:38:00 0.060 193 4\n", + "2018-04-01 23:20:00 0.439 165 4\n", + "\n", + "[18890 rows x 3 columns]\n" + ] + } + ], + "source": [ + "# Load tidal data, South Hampton Shoal LB 6\n", + "data, metadata = tidal.io.noaa.read_noaa_json(\"data/tidal/s08010.json\")\n", + "\n", + "# Convert discharge data from cm/s to m/s\n", + "data.s = data.s / 100\n", + "\n", + "# Print data\n", + "print(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data can also be obtained using the function `request_noaa_data` in the tidal IO module. \n", + "To use this function, we need a station number, parameter type, start date, and end date.\n", + "The station number can be found on the NOAA tides and currents website linked above. \n", + "The IEC standard recommends 1 year of 10-minute direction and velocity data. The request function allows users to easily pull any timeframe of data although NOAA limits any one pull to 30 days.\n", + "\n", + "The following code, which has been commented out for this demonstration, can be used to pull data from the NOAA website. This function can be used to save data to a JSON for later use." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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FStWRPph2bJlAIDVq1djcHAQ999/P6666ipceumlfd93IcJxW9xxe88992Dz5s049thj8ZznPKfrekcffTQuuuiivu+/kOC4Le643blzJ04//XTceuutOOqoo3Duuedi7969+NKXvoTHH38cV155JV7/+tf3ff+FAsfs3I3ZLVu24JZbbsHixYux//7747bbbsNLXvIS/Nd//Zf156+//no8+9nPxkknnYQDDzwQy5cvx7Zt2/C1r30N999/P8466yx885vfRK1W67sNCwWO2+KO22uuuQY333yz9b3//M//xF133YX3vve9eMtb3tJ3GxYKHLdzM26zXI9nsng4bos7bnkmi4fjtrjjdi7PZEUcB/o9qtUq/uAP/gAHHXQQtm7dii984QvYvn07XvWqV6Uy7M/MzODcc8/FD3/4Q5x44ok455xzcP/99+Pqq6/G4OAgvvOd7+Ckk06K/E7a/V0vSmUL9Ulp+Pa3v+1fc801fqPRiLz+8MMP+xs2bPAB+FdffXXw+q5du/yVK1f6g4OD/k9/+tPg9ampKf/kk0/2Afif/vSnI9e6//77/e9973v+rl27fN/3/TPPPNMH4N9xxx2p2/tXf/VXPgD/TW96U6rf+8UvfuHfdNNN/szMjO/7vg/AX79+fezPp+2XfjjvvPN8AP4HPvCByOtvetObfAD+a1/72sjrMzMz/le/+lX/oYce8n3f9y+77DIfgH/VVVeluu9ChOPWThHG7d133+0D8F/+8penus++AMetnSKM2ze84Q0+AP/CCy/06/V68Ppjjz3mb9q0yR8YGPBvv/32VG1YCHDM2sljzH7nO9/xf/e73/mtVsu/7rrrfAD+S17yktifn5mZ8ZvNZtfrs7OzQR9+5jOfSdWGhQLHrZ0ijNs4duzY4Y+MjPiDg4P+448/nvr3FwIct3akx22W6/FMFg/HrZ0ijFueyeLhuLVThHE7l2eyoo6DI444wgfgX3/99V3tWrVqlQ/Av+eee/r+O//+7//eB+BfdNFFkbPDNddc4wPwjzzyyK4zhdT+TlEmWygdGguEd7/73T4A/0//9E+D1z760Y/GLozf/va3fQD+6aefnnjdrJN5vV7316xZ4wPwf/vb36b6XZNek3kStn7pxe9//3sfgL958+auyWL37t3+okWL/JGREX/Pnj2x1+DmuT84bu3M1bjl5jkbHLd25mrcqk3rrbfe2nW9f/7nf/YB+G9+85sz/Q0LFY5ZO1nGrInrweGKK67wAfjvfve7M7dhocJxa2e+x+0HPvABH4D/whe+MPP9FzIct3Ykxm2W6/FM1h8ct3bmatzyTJYNjls7czVui3Imm89xMDw87I+Pj1vfe9aznuUD8H/2s5/19Xe0Wi1/48aNPgD/rrvu6nr/9NNP9wH43/72t2Ov4XouKZstlDU0FgiDg4MAgIGBgeC16667DgDw9Kc/vevnzzjjDIyOjuJHP/oRZmZmxNvzxS9+EY888gjOOOMMHH744eLX7xdbv/RC9dt5552HSiX6iIyNjeHUU0/F1NQUbrzxRrmG7qNw3NqZ63H70EMP4cMf/jD+/u//Hh/+8Ifxy1/+0qH1Cx+OWztzNW4feeQRAMCBBx7YdT312re+9a10jV/gcMzayTJmJWk2m4HG8DHHHDMvbSgyHLd25nvcXnXVVQCA17zmNfNy/6LDcWtHetzO93Ow0OC4tTPX45ZnsnRw3NqZq3FblDPZfI6Do48+Grt378Z3v/vdyOuPPvoobrzxRqxbtw5HHnlkX9e68847cd999+Gwww7D5s2bu94///zzAYR/Wx6UzRZKh8YCoNFo4JOf/CSA6AN7++23AwAOOeSQrt+p1WrYvHkzGo0G7rrrLvE2feQjHwEAvPa1rxW/dr/E9UsvkvpNf/13v/udYwv3bThu7czHuP3mN7+JP/qjP8Lb3vY2/NEf/RGOPfZYnH322bjvvvvSNn/Bw3FrZy7H7cqVKwEAd999d9fPq/5V1yUcs3FkHbMubN26Fe985ztx2WWX4U/+5E9w+OGH49prr8Uf/uEf4pnPfOactKEscNzamY9xq/OjH/0Iv/rVr3DooYfi7LPPnvP7Fx2OWzvS43a+n4OFBsetnfkYtzyT9Q/HrZ25HLdFOJPN9zi48sorsWTJEpx33nl4wQtegLe+9a249NJLceSRR2Lp0qW45pprMDIy0te1imCHLEIb0kCHxgLgr/7qr3Drrbfi/PPPx9Oe9rTg9V27dgEAlixZYv099frOnTtF23PPPffgW9/6FlasWIHnPe95otdOQ1y/9GK++m1fg+PWzlyO29HRUbzjHe/Az3/+c+zYsQM7duzAd7/7XZx99tm4/vrrg8JeJITj1s5cjltl+H3nO9+JZrMZvL5t2za8//3vB9AuqDY1NZXqb1iocMzayTpmXdi6dSve9a534fLLL8e//du/4c4778Rf/uVfpioWuK/AcWtnPsatjjLWvPrVr57ze5cBjls70uN2vp+DhQbHrZ25HLc8k6WH49bOXI7bIpzJ5nscnHLKKfjRj36EQw89FFdffTXe85734GMf+xjq9Tpe/vKX4wlPeELf1yqCHbIIbUhDbb4bQNy44oor8I//+I847LDD8B//8R+pftf3fQCA53mibbrqqqvQarXw8pe/HENDQ13vv/Od7+x67ZJLLsGmTZvE2pDUL/fccw8+8YlP9NUuG3n1274Ex62duR63q1atwuWXXx75uTPOOAPXXnstTjvtNNx444346Ec/ije84Q3p/pAFCsetnbket5dffjmuvfZaXH311fjtb3+Lc889F5OTk/jiF7+IsbExjI6OYnJyEtVqNfPftFDgmLWT55hN4vDDD4fv+2g2m3jwwQfxhS98AX/zN3+D733ve/jKV76C5cuXO99jIcBxa2e+xq1i165d+OxnP4vBwUFccsklYtddKHDc2pEety79TLrhuLUz1+OWZ7J0cNzametxO99nsiKMg2984xt40YtehCc+8Yn45Cc/icMPPxyPPPII/uVf/gVve9vb8JWvfAXf/e53Uau1Te8u40CizQvOFpp7lQ6SG6qQ5BFHHOE//PDDXe+feOKJiUVojjrqKB+A/5vf/Cb2HmkLItXrdX/t2rU+AP+2226z/gyArn/XXXdd7DWRsiBSr35RhXLMf4q3vOUtPgD/fe97n/X6f/qnf+oD8D/4wQ/GtoEF6OLhuLVThHGrc9VVV/kA/AsvvLDvv2Ehw3FrZ77G7WOPPea//vWv9zdv3uwPDAz4q1at8l/5ylf6d999t+95nr9kyZK+/4aFCsesHdcxG/fzWYvvfeYzn/EhWLix7HDc2inCuP2Xf/kXH2AxcBsct3akx22v69ngmSwejls7RRi3OjyTReG4tTNf43a+zmRFGAfbtm3zly5d6q9fv97fu3dv1/vPec5zfAD+xz/+8eC1pHHw5S9/2QfgP/OZz7Te7+qrr/YB+C94wQti29xrf7fQbKF0aJSU9773vT4A/+ijj/YfffRR68+85CUv8QH4n/rUp7req9fr/ujoqF+r1fzp6enY+6SdzD//+c/7APwzzzyzr5/vhzSTeT/90gu1aXjNa15j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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Slice December of 2017 out of the full dataset\n", - "dec17_data = data.loc['2017-12-01':'2017-12-31']\n", - "\n", - "# Plot December of 2017 as current timeseries\n", - "ax = tidal.graphics.plot_current_timeseries(dec17_data.d, dec17_data.s, flood)" - ] - }, + "name": "stdout", + "output_type": "stream", + "text": [ + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20161101&end_date=20161201&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20161201&end_date=20161231&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20161231&end_date=20170130&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170130&end_date=20170301&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170301&end_date=20170331&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170331&end_date=20170430&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170430&end_date=20170530&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170530&end_date=20170629&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170629&end_date=20170729&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170729&end_date=20170828&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170828&end_date=20170927&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20170927&end_date=20171027&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20171027&end_date=20171126&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20171126&end_date=20171226&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20171226&end_date=20180125&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20180125&end_date=20180224&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20180224&end_date=20180326&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n", + "Data request URL: https://tidesandcurrents.noaa.gov/api/datagetter?begin_date=20180326&end_date=20180401&station=s08010&product=currents&units=metric&time_zone=gmt&application=web_services&format=xml\n" + ] + } + ], + "source": [ + "# data, metadata = tidal.io.noaa.request_noaa_data(station='s08010', parameter='currents',\n", + "# start_date='20161101', end_date='20180401',\n", + "# proxy=None, write_json='data/s08010.json')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Principal Flow Directions\n", + "As an initial check on the data, a velocity plot can be created to identify data gaps. To consider the velocity in one of the principal flow directions we apply the `principal_flow_directions` function. This function returns 2 directions (in degrees) corresponding to the flood and ebb directions of the tidal site. Principal flow directions are calculated based on the highest frequency directions. These directions are often close to 180 degrees apart but are not required to be.\n", + "\n", + "The `plot_current_timeseries` function plots velocity in either direction using the speed timeseries. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Specify histogram bin width for directions to calculate the principal flow directions\n", + "width_direction = 1 # in degrees\n", + "\n", + "# Compute two principal flow directions\n", + "direction1, direction2 = tidal.resource.principal_flow_directions(\n", + " data.d, width_direction\n", + ")\n", + "\n", + "# Set flood and ebb directions based on site knowledge\n", + "flood = direction1 # Flow into\n", + "ebb = direction2 # Flow out" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The time series of current data can be plotted using the `plot_current_timeseries` function, which can include either the flood or ebb directions." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Joint Probability Distribution\n", - "\n", - "Direction and velocity can be viewed as a joint probability distribution on a polar plot. This plot helps visually show the flood and ebb directions and the frequency of particular directional velocities. " + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABjUAAAMWCAYAAAC5gwQ2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5wdVd0/8M+WbHqHUJKQANKrEKlSBdToozx2RVAUFbEhj+WnKEVBUOnSewepoYWQTkJ6732zm+xutvd297bfHze7O3d35k47M+fMzOftyxebW2a+d8qZmfM9JS+dTqdBRERERERERERERESkuHzZARAREREREREREREREVnBpAYREREREREREREREQUCkxpERERERERERERERBQITGoQEREREREREREREVEgMKlBRERERERERERERESBwKQGEREREREREREREREFApMaREREREREREREREQUCExqEBERERERERERERFRIBTKDiDqUqkUKioqMHz4cOTl5ckOh4iIiIiIiIiIiIjId+l0Gi0tLTj00EORn2/cH4NJDckqKiowceJE2WEQEREREREREREREUm3d+9eTJgwwfB9JjUkGz58OIDMjhoxYoTkaOyJx+OYOXMmLrvsMgwYMEB2OBRRPA7JTzzeSDYeg6QCHoekEh6PJBuPQVIBj0PyE4838lJzczMmTpzYU2duhEkNybqHnBoxYkQgkxpDhgzBiBEjWIiRNDwOyU883kg2HoOkAh6HpBIejyQbj0FSAY9D8hOPN/KD2TQNnCiciIiIiIiIiIiIiIgCgUkNIiIiIiIiIiIiIiIKBCY1iIiIiIiIiIiIiIgoEJjUICIiIiIiIiIiIiKiQGBSg4iIiIiIiIiIiIiIAoFJDSIiIiIiIiIiIiIiCgQmNYiIiIiIiIiIiIiIKBCY1CAiIiIiIiIiIiIiokBgUoOIiIiIiIiIiIiIiAKBSQ0iIiIiIiIiIiIiIgoEJjWIiIiIiIiIiIiIiCgQmNQgIiIiIiIiIiIiIqJAYFKDiIiIiIiIiIiIiIgCgUkNIiIiIiIiIiIiIiIKBCY1iIiIiIiIiIiIiIgoEJjUICIiIiIiIiIiIiKiQGBSg4iIiIiIiIiIiIiIAoFJDSIiIiIiIiIiIiIiCgQmNYiIiIiIiIiIiIiIKBCY1CAiIiIiIiIiIiIiokBgUoOIiIiIiIiIiIiIiAKBSQ0iIiIiIiIiIiIiIgoEJjWIiIiIiIiIiIiIiCgQmNQgIiIiIiIiIiIiIqJAYFKDiIiIiIiIiIiIiIgCgUkNIiIiIiIiIiIiIiIKBCY1iIiIiIiIiIiIiIgoEJjUICIiIiIiIiIiIiKiQGBSg4iIiIiIiIiIiCJtxsZK7KxukR0GEVlQKDsAIiIiIiIiIiIiIlkW76zFtS+uAgCU3PklydEQkRn21CAiIiIiIiIiIqLI2lDeJDsEIrKBSQ0iIiIiIiIiIiIiIgoEJjWIiIiIiIiIiIiIiCgQmNQgIiIiIiIiIiIiIqJAYFKDiIiIiIiIiIiIiIgCgUkNIiIiIiIiIiIiiqy8PNkREJEdTGoQEREREREREREREVEgMKlBRERERERERERERESBwKQGEREREREREREREREFApMaREREREREREREREQUCExqEBERERERERERERFRIDCpQUREREREREREREREgcCkBhERERERERERERERBQKTGkREREREREREREREFAhMahAREREREREREVFk5SFPdghEZAOTGkREREREREREREREFAhMahARERERERERERERUSAwqUFERERERERERERERIHApAYREREREREREREREQUCkxpERERERERERERERBQITGoQEREREREREREREVEgMKlBRERERERERERERESBwKQGEREREREREREREREFApMaREREREREREREFFl5ebIjICI7mNQgIiIiIiIiIiIiIqJAYFKDiIiIiIiIiIiIiIgCgUkNIiIiIiIiIiIiIiIKBCY1iIiIiIiIiIiIiIgoEJjUICIiIiIiIiIiIiKiQGBSg4iIiIiIiIiIiIiIAoFJDSIiIiIiIiIiIiIiCgQmNYiIiIiIiIiIiIiIKBCY1CAiIiIiIiIiIiIiokBgUoOIiIiIiIiIiIiIiAKBSQ0iIiIiIiIiIiIiIgoEJjWIiIiIiIiIiIiIiCgQmNQgIiIiIiIiIiIiIqJAYFKDiIiIiIiIiIiIiIgCgUkNIiIiIiIiIiIiIiIKBCY1iIiIiIiIiIiIAi6ZSqOsoV12GEREnmNSg4iIiIiIiIiIKOCufWkNPvvPeZi1uUp2KEREnmJSg4iIiIiIiIiIKODmb68FANz8zkbJkQRPXl6e7BCIyAYmNYiIiIiIiIiISFlPfbIb5945F3vrObSSFRVNnbJDICLyFJMaRERERERERESkrL+/vxnljR2448MtskMJpM54Eul0WnYYRETCMKlBRERERERERERK6ehK4r8r9qC6pbfXQSLJinm7qls6cexfZ+Cqp5fLDiWQVpTU444Pt6AznpQdChFpFMoOgIiIiIiIiIiISOsf07fghaWlmDhmcM9rTGnY9+7aCgDAwh21kiMJpm8+ugQAMHxgIX558VGSoyGibuypQURERERERERESpm9pQoAsLe+Q3IkwcYJsMUorm2THQIRaTCpQURERERERERESoklUrJDCIV85jSIKISY1CAiIiIiIiIiIqXUt3XJDiEUmNOwhhOpEwULkxpEREREREREREQUWe+uq5AdAhHZwKQGERERERERERFRCOVz/ClL1pc1yQ6BiGxgUoOIiIiIiIiIiCiEmNKwb19TB254bS02ljPRQaSqQtkBEBERERERERERmeG0Bw7kMa1h129eXYvlu+vx1upy2aEQkQH21CAiIiIiIiIiIgohpjTs21nd2v9FJtSIlMKkBhERERERERERUUCVN3YY9mJhRw37uMmI1Mfhp4iIiIiIiIiIiALohSUl+Os7m3DuQfrtlvNYRS8GNyORUthTg4iIiIiIiIiIKID+NWMbAGBRlUFSg5XxYnD4KSKlMKlBREREREREREQUQsxp2MdEEJH6mNQgIiIiIiIiIiIKIpMKeFbQZ3TGk5i1uQqtsYSFT3OjEamOSQ0iIiIiIiIiIgoAjgHUj8km4ZwaGbd/sAU/eX4lfvbCStmhEJEATGoQERERERERERGFEHtqZPx35V4AwKKddaaf5TYjUh+TGkREREREREREREFkOvwUa+gBIN/GZuAWI1IfkxpEREREREREREQhxAr6jHwmd4hChUkNIiIiIiIiIiKiEGJdfgY3A1G4MKlBREREREREREQUQkxqZNjpqcFtRqQ+JjWIiIiIiIiIiIgCyKz+PY99FADYS1RwmxGpj0kNIiIiIiIiIiKiEGKvgwyjCdPrWmOobOr0OZrw2V7Vgg/W75MdBkVIoewAiIiIiIiIiIiIiLxilNw5/bbZ/gYSIHvq2rG0uA7/e9p43PLuJizfXY/3fvVZFOh89rJ7FwAARg85E+d86gB/A6VIYlKDiIiIiIiIiMhH766rwNEHDcOxB4+QHUqgpNOyIwiOBdtrsLKkHkeO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WREREREREVG61FeWJCIiIiJdGVD6AgCQ40k8b8WsYEddRQF+/a1xSV/vW5xrUkuIiIiIiIjIabhSg4iIiMgkRq9QeOCM8ehbnIvfnzNR98/Ws+0XzxmIE8f3w+/OmRgLwJTkeXXcAhERERERETkVV2oQEREROcSCoVVYMLTK6mYoyvd58KPjRwEAnrhwKn76whpcs3iIxa0iIiIiIiIiO2BQg4iIiIgsM7xvER46a4LVzSAiIiIiIiKbYPopIiIiIpNYXcCbiIiIiIiIyO4Y1CAicijJqArERGRblQG/1U0gIiIiIiIiygjTTxEROVQ4bHRJYiKym2sPG4Jdh9pw0vhqzb/LSwoRERERERGJgEENIiIioixRmp+DB84Yb3UziIiIiIiIiNLG9FNEREQkvNuPGgYA+PnJo61tCBERERERERFZiis1iIiISHinT6nBCeOr4fe6rW6KrpjSiYiIiIiIiEgbrtQgInIoFgonp3FaQIOIiIiIiIiItGNQg4iIiMgijD0SERERERERacOgBhERERERERERERER2QKDGkREDhVmsn4iIiIiIiIiInIYBjWIiIiITGLvWjcMlBIREREREZH1GNQgInIoew+eEmWH48b2s7oJRERERERERLbisboBRERERNlCnhbur+dPwYSaEgtbQ0RERERERGQ/XKlBREREZIHR1cW2WlE1fWA5AKAi4LO4JURERERERJTNuFKDiIiIiBTdfvRwDOtThCUje1vdFCIiIiIiIspiDGoQERERWSBss8LbAb8X355ZZ3UziIiIiIiIKMsxqEFE5FBj+xdjSK8ABpTlWd0UIupkp3RTRERERERERCJiUIOIyKE8bheeuWwGB1GJiIiIiIiIiMgxWCiciMjBGNAgIiIiIiIiIiInYVCDiIiIiIiIiIiIiIhsgUENIiIiIpP0KfYDACQJ8LrYDSMiIiIiIiLSijU1iIiIiEzi87jx6a2L4JYkuFxMD0dERERERESkFYMaRERERCYq8LH7RURERERERJQu5j0gIiIiIiIiIiIiIiJbYFCDiIiIiIiIiIiIiIhsgUENIiIiIiIiIiIiIiKyBQY1iIiIiIiIiIiIiIjIFhjUICIiIiIiIiIiIiIiW2BQg4iIiIiIiIiIiIiIbIFBDSIiIiIiIiIiIiIisgUGNYiIiIiIiIiIiIiIyBYY1CAiIiIi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", + "text/plain": [ + "
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ax = tidal.graphics.plot_current_timeseries(data.d, data.s, flood)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The plot above shows missing data for most of early and mid-2017. The IEC standard recommends a minimum of 1 year of 10 minute averaged data (See IEC 201 for full description). For the demonstration, this dataset is sufficient. To look at a specific month we can slice the dataset before passing to the plotting function." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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cITYUNVjelxWQXT4eNhsNpo0acKgQYPo06cPLpeL+fPns2zZMnJzc8/avLWNZs2a0aVLF1auXEl2dvZJx5+vYtiibdu2qKrqjWbVBpo0acK9997LnXfeidPpPPkOQaoMHVEtj9PlnXfeISEhgYkTJzJ69Gj++c9/MnToUF5//fUKLen27dtHampqpS2YXnvtNVq0aMFTTz3FoEGDuP/++7nyyiu58MILUVWVDz74oEbe/A9GiKuQRx99lPfff5+srCwaNmx40vFvvvkm99xzD7t27WLEiBHcd9999O/fn++//56+ffvy9ddf/6Hxp8OWLVt4/PHHj9vW5kzmvuWWW5g+fTrXXnstvXv35p577uGDDz444zUG8eF0Ornzzju57777Ktjqn69IKVm9ejXx8fE0adKkupdzRpyqKHY6nSxZsgRd1+nXr1+t6n/5Rzi8L4/nb5/CP8a+we8/rA7Y5na7SekUwy0v9KfbsCY4tCi6d+pFnch6DLyoC//+/h72Z+eimyox91Ahy+ZtweX0UHS0FPArnxWgKIKufZobIVspCS13IhW/WuBjRKSugPDoxhjV2CgFRmqx+bVloCUF6H77q/gEgdtpC1iH93/p+15Ty7Br4Rxj6YVHGgYtUhpBZ93vT7gANOHEI3V0cwKX1LxBbV/NsN8dACGQIX5fW2ZhUqLofge29tN9Cz94oIDx919k1mb7XqwupZEqfYya7zG4jTfd3aLPyPZ0Hdias40Qgri4OLp168aIESOIjo5m2bJlLF68mEOHDh3XzTmIj6SkJHr16sWGDRu89YSVcb6LYTDSxbt3786+ffvYt29fdS+nynjkkUcQQvDaa69V91KC1ECslnQTJkwgPT2dV199lZ07dzJx4kTS0tJO2lfdIiEhgfT0dO655x6ys7N54403mDdvHhdffDGLFi3iyiuvPMuv5MwIFtRUIR9++CEtW7akSZMmvPDCC/zzn/884fiePXuycOFCBgwYEPD8okWLGDZsGHfccQeXXXaZN230dMefKpqmMX78eDp16kSrVq347LPP/vBay8rKmD59Oj/99JM3myApKYkpU6Zw6623ntb6glTk1VdfRQjBww8/XN1LqTK2b99OaWkpPXr0OK9NcE5WU1xeXs7SpUuJjIykW7du1XLBmHuwgDf/+V/27z7CsLE9uOrOETXinD9+43vs2XkY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Set the joint probability bin widths\n", - "width_direction = 1 # in degrees\n", - "width_velocity = 0.1 # in m/s\n", - "\n", - "# Plot the joint probability distribution\n", - "ax = tidal.graphics.plot_joint_probability_distribution(data.d, data.s, \\\n", - " width_direction, width_velocity, metadata=metadata, flood=flood, ebb=ebb)" + "data": { + "image/png": "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FStWRPph2bJlAIDVq1djcHAQ999/P6666ipceumlfd93IcJxW9xxe88992Dz5s049thj8ZznPKfrekcffTQuuuiivu+/kOC4Le643blzJ04//XTceuutOOqoo3Duuedi7969+NKXvoTHH38cV155JV7/+tf3ff+FAsfs3I3ZLVu24JZbbsHixYux//7747bbbsNLXvIS/Nd//Zf156+//no8+9nPxkknnYQDDzwQy5cvx7Zt2/C1r30N999/P8466yx885vfRK1W67sNCwWO2+KO22uuuQY333yz9b3//M//xF133YX3vve9eMtb3tJ3GxYKHLdzM26zXI9nsng4bos7bnkmi4fjtrjjdi7PZEUcB/o9qtUq/uAP/gAHHXQQtm7dii984QvYvn07XvWqV6Uy7M/MzODcc8/FD3/4Q5x44ok455xzcP/99+Pqq6/G4OAgvvOd7+Ckk06K/E7a/V0vSmUL9Ulp+Pa3v+1fc801fqPRiLz+8MMP+xs2bPAB+FdffXXw+q5du/yVK1f6g4OD/k9/+tPg9ampKf/kk0/2Afif/vSnI9e6//77/e9973v+rl27fN/3/TPPPNMH4N9xxx2p2/tXf/VXPgD/TW96U6rf+8UvfuHfdNNN/szMjO/7vg/AX79+fezPp+2XfjjvvPN8AP4HPvCByOtvetObfAD+a1/72sjrMzMz/le/+lX/oYce8n3f9y+77DIfgH/VVVeluu9ChOPWThHG7d133+0D8F/+8penus++AMetnSKM2ze84Q0+AP/CCy/06/V68Ppjjz3mb9q0yR8YGPBvv/32VG1YCHDM2sljzH7nO9/xf/e73/mtVsu/7rrrfAD+S17yktifn5mZ8ZvNZtfrs7OzQR9+5jOfSdWGhQLHrZ0ijNs4duzY4Y+MjPiDg4P+448/nvr3FwIct3akx22W6/FMFg/HrZ0ijFueyeLhuLVThHE7l2eyoo6DI444wgfgX3/99V3tWrVqlQ/Av+eee/r+O//+7//eB+BfdNFFkbPDNddc4wPwjzzyyK4zhdT+TlEmWygdGguEd7/73T4A/0//9E+D1z760Y/GLozf/va3fQD+6aefnnjdrJN5vV7316xZ4wPwf/vb36b6XZNek3kStn7pxe9//3sfgL958+auyWL37t3+okWL/JGREX/Pnj2x1+DmuT84bu3M1bjl5jkbHLd25mrcqk3rrbfe2nW9f/7nf/YB+G9+85sz/Q0LFY5ZO1nGrInrweGKK67wAfjvfve7M7dhocJxa2e+x+0HPvABH4D/whe+MPP9FzIct3Ykxm2W6/FM1h8ct3bmatzyTJYNjls7czVui3Imm89xMDw87I+Pj1vfe9aznuUD8H/2s5/19Xe0Wi1/48aNPgD/rrvu6nr/9NNP9wH43/72t2Ov4XouKZstlDU0FgiDg4MAgIGBgeC16667DgDw9Kc/vevnzzjjDIyOjuJHP/oRZmZmxNvzxS9+EY888gjOOOMMHH744eLX7xdbv/RC9dt5552HSiX6iIyNjeHUU0/F1NQUbrzxRrmG7qNw3NqZ63H70EMP4cMf/jD+/u//Hh/+8Ifxy1/+0qH1Cx+OWztzNW4feeQRAMCBBx7YdT312re+9a10jV/gcMzayTJmJWk2m4HG8DHHHDMvbSgyHLd25nvcXnXVVQCA17zmNfNy/6LDcWtHetzO93Ow0OC4tTPX45ZnsnRw3NqZq3FblDPZfI6Do48+Grt378Z3v/vdyOuPPvoobrzxRqxbtw5HHnlkX9e68847cd999+Gwww7D5s2bu94///zzAYR/Wx6UzRZKh8YCoNFo4JOf/CSA6AN7++23AwAOOeSQrt+p1WrYvHkzGo0G7rrrLvE2feQjHwEAvPa1rxW/dr/E9UsvkvpNf/13v/udYwv3bThu7czHuP3mN7+JP/qjP8Lb3vY2/NEf/RGOPfZYnH322bjvvvvSNn/Bw3FrZy7H7cqVKwEAd999d9fPq/5V1yUcs3FkHbMubN26Fe985ztx2WWX4U/+5E9w+OGH49prr8Uf/uEf4pnPfOactKEscNzamY9xq/OjH/0Iv/rVr3DooYfi7LPPnvP7Fx2OWzvS43a+n4OFBsetnfkYtzyT9Q/HrZ25HLdFOJPN9zi48sorsWTJEpx33nl4wQtegLe+9a249NJLceSRR2Lp0qW45pprMDIy0te1imCHLEIb0kCHxgLgr/7qr3Drrbfi/PPPx9Oe9rTg9V27dgEAlixZYv099frOnTtF23PPPffgW9/6FlasWIHnPe95otdOQ1y/9GK++m1fg+PWzlyO29HRUbzjHe/Az3/+c+zYsQM7duzAd7/7XZx99tm4/vrrg8JeJITj1s5cjltl+H3nO9+JZrMZvL5t2za8//3vB9AuqDY1NZXqb1iocMzayTpmXdi6dSve9a534fLLL8e//du/4c4778Rf/uVfpioWuK/AcWtnPsatjjLWvPrVr57ze5cBjls70uN2vp+DhQbHrZ25HLc8k6WH49bOXI7bIpzJ5nscnHLKKfjRj36EQw89FFdffTXe85734GMf+xjq9Tpe/vKX4wlPeELf1yqCHbIIbUhDbb4bQNy44oor8I//+I847LDD8B//8R+pftf3fQCA53mibbrqqqvQarXw8pe/HENDQ13vv/Od7+x67ZJLLsGmTZvE2pDUL/fccw8+8YlP9NUuG3n1274Ex62duR63q1atwuWXXx75uTPOOAPXXnstTjvtNNx444346Ec/ije84Q3p/pAFCsetnbket5dffjmuvfZaXH311fjtb3+Lc889F5OTk/jiF7+IsbExjI6OYnJyEtVqNfPftFDgmLWT55hN4vDDD4fv+2g2m3jwwQfxhS98AX/zN3+D733ve/jKV76C5cuXO99jIcBxa2e+xq1i165d+OxnP4vBwUFccsklYtddKHDc2pEety79TLrhuLUz1+OWZ7J0cNzametxO99nsiKMg2984xt40YtehCc+8Yn45Cc/icMPPxyPPPII/uVf/gVve9vb8JWvfAXf/e53Uau1Te8u40CizQvOFpp7lQ6SG6qQ5BFHHOE//PDDXe+feOKJiUVojjrqKB+A/5vf/Cb2HmkLItXrdX/t2rU+AP+2226z/gyArn/XXXdd7DWRsiBSr35RhXLMf4q3vOUtPgD/fe97n/X6f/qnf+oD8D/4wQ/GtoEF6OLhuLVThHGrc9VVV/kA/AsvvLDvv2Ehw3FrZ77G7WOPPea//vWv9zdv3uwPDAz4q1at8l/5ylf6d999t+95nr9kyZK+/4aFCsesHdcxG/fzWYvvfeYzn/EhWLix7HDc2inCuP2Xf/kXH2AxcBsct3akx22v69ngmSwejls7RRi3OjyTReG4tTNf43a+zmRFGAfbtm3zly5d6q9fv97fu3dv1/vPec5zfAD+xz/+8eC1pHHw5S9/2QfgP/OZz7Te7+qrr/YB+C94wQti29xrf7fQbKF0aJSU9773vT4A/+ijj/YfffRR68+85CUv8QH4n/rUp7req9fr/ujoqF+r1fzp6enY+6SdzD//+c/7APwzzzyzr5/vhzSTeT/90gu1aXjNa15jff+8887zAfjf+ta3Yq/BzbMdjls7RRm3Ol/84hd9AP7Tnva0TO1ZSHDc2iniuP3Od77jA/Cf8pSnZGrPQoFj1o7EmDVxdWjs3LnTB+AfddRRIu0pMxy3dooybo899tieBph9EY5bO9LjNuv1eCazw3FrpyjjVodnshCOWztFHLd5nsmKMg6+9KUvJTobr7zySh/oP2jpjjvu8AH4hx56qPX9v//7v/cB+G9/+9tjr+F6LimbLZQ1NErIP/zDP+Av/uIvsGXLFlx33XVYtWqV9efOOeccAMDXv/71rve+973vYXJyEqeccoo1JS4rSlv3Na95jdg1+6XffumFKnJ47bXXotVqRd7bs2cPfvjDH2JkZARPfvKTndu8L8Fxa6eo4/bGG28EABx44IGZ2rNQ4Li1U9Rxe9VVVwEAXvKSl2Rqz0KAY9aO1JiV5sEHHwSAIBV9X4Xj1k5Rxu2NN96IW265BYceeijOOuuseWlDEeG4tSM9bovyHCwUOG7tFHXc8kzWhuPWTlHHbV5nsiKNg9nZWQDA448/bn1fvd7vPQ466CBs3LgRv/vd76yF1r/2ta8BCP+2PCidLTR3lwkR5fLLL/cB+CeccIK/bdu2xJ/dtWuXv3LlSn9wcND/6U9/Grw+NTXln3zyyT4A/9Of/nTiNdJ4p++55x6/Uqn4K1asSPR0pgV9eKfT9Es/KM/jBz7wgcjrb3rTm3wA/mtf+9rE32c0UBSOWzvzPW5//OMf+zMzM13Xuf766/3h4WEfgP/DH/7QuV1lhePWznyP22az6e/Zs6frOiqiZMuWLf7s7Kxzu8oIx6wd6TGr008k1I9//GNrKvqePXv8pzzlKT4A/6//+q9F21UmOG7tzPe41XnlK1+ZKEGwL8Jxa0d63Lpej2eyKBy3duZ73PJMlgzHrZ35HrdzfSYr2jh48MEH/Vqt5lcqFf8b3/hG5L377rvP32+//XwA/le+8pU+/8IwC+Oiiy7ym81m8Po111zjA/CPPPLIyOsmrhkavl8uW6jn+52qHqTwfPKTn8Qll1yCarWK173uddbK85s2bYoU6rvmmmtw0UUXYXh4GC984QuxfPlyfOlLX8Ltt9+Oiy66CJ/97Ge7Crrov//1r38djz76KC688EKMjY0BAC699FKcdtppXfd+xzvegb/7u7/Dm9/8ZvzjP/5j5r/ztttuw3ve857I3z06OornP//5wWvve9/7sHLlyuD9tP3SizvvvBOnnHIKHnvsMTz72c/GEUccgRtvvBHXXXcdDj30UNxwww1YsWJF5Hfe85734LbbbgMA3Hzzzbjllltwyimn4JBDDgEAnHbaabj00kv7bsNCgeO2uOP2rLPOwq9//WucddZZ2H///QEAv/rVr/Dtb38bAPC3f/u3ePvb356qHxYKHLfFHbcTExNYvXo1zjvvPBx00EEAgO9///v4yU9+goMOOgjf+ta3RAvslQWO2bkbs9dccw2uueYaAMAjjzyCb3zjGzjwwANx+umnAwBWrlyJ973vfcHPP+c5z8H111+PM888Exs3bsTo6Cjuv/9+fO1rX8POnTtxyimn4Bvf+AYWL16cpisWBBy3xR23it27d2PdunWo1+t48MEHgzbuy3Dczs24zXo9nsnscNwWd9zyTBYPx21xx+1cnsmKOg4uv/xyXHbZZahUKnjmM58ZFAX//Oc/j4mJCTz3uc/F5z//+b7/zpmZGZxzzjm44YYbcOKJJ+Lcc8/Ffffdh6uvvhqDg4P4zne+g5NOOinyO1n3d3GUyhaau8uEiKE8XUn/bLp9P/jBD/zzzz/fX7p0qT88POwfffTR/vvf/36/0WhY79PrHnpRG0Wj0fDXrVvnA/GFkPolrlCN/u/uu+927pde3Hffff4ll1zir1mzxh8YGPA3btzov/71r4/1BisPbty/l7/85dk6pORw3BZ33H70ox/1n/GMZ/gHHHCAv2jRIn9wcNDfsGGD/4IXvMD/3ve+59Ab5YfjtrjjdnZ21n/lK1/pH3roof7o6Kg/OjrqP+EJT/Df9a53WaOE9hU4ZuduzPa65gEHHBD5+S9/+cv+i1/8Yv+QQw7xx8fH/Vqt5u+3337+ueee63/4wx/26/W6U5+UGY7b4o5bxQc/+EEfYDFwHY7buRm3Wa/HM5kdjtvijlueyeLhuC3uuJ3LM1mRx8E111zjP/3pT/dXrlzpV6tVf2xszD/55JP9D37wg7H3SWJyctL/m7/5G//ggw/2BwcH/ZUrV/oXXXSR/+tf/zpT38Tt75Ioiy2UGRqEEEIIIYQQQgghhBBCCCk8LApOCCGEEEIIIYQQQgghhJDCQ4cGIYQQQgghhBBCCCGEEEIKDx0ahBBCCCGEEEIIIYQQQggpPHRoEEIIIYQQQgghhBBCCCGk8NChQQghhBBCCCGEEEIIIYSQwkOHBiGEEEIIIYQQQgghhBBCCg8dGoQQQgghhBBCCCGEEEIIKTx0aBBCCCGEEEIIIYQQQgghpPDQoUEIIYQQQgghhBBCCCGEkMJDhwYhhBBCCCFkwfGJT3wCnufhE5/4xHw3hRBCCCGEECJEbb4bQAghhBBCCCFJeJ6X6uc//vGP59QSQgghhBBCyHxChwYhhBBCCCGk0Fx22WVdr11xxRXYtWsX3vCGN2Dp0qWR97Zs2YLNmzfjyU9+MtauXTtHrSSEEEIIIYTkjef7vj/fjSCEEEIIIYSQNGzatAn33nsv7r77bmzatGm+m0MIIYQQQgiZA1hDgxBCCCGEELLgiKuhsWnTJmzatAkTExN405vehA0bNmBkZARbtmzBNddcAwCo1+u4/PLLccghh2B4eBgHHXQQ/vVf/zX2Xt/4xjdwwQUXYOXKlRgaGsJBBx2Ev/iLv8DOnTvz+wMJIYQQQgjZB6HkFCGEEEIIIWSfol6v46lPfSq2b9+OZz/72ZidncWnP/1pPO95z8O1116LK6+8EjfddBPOP/98DA0N4XOf+xz+7M/+DCtXrsTFF18cudbll1+Oyy67DCtWrMAznvEMrFq1Cr/85S/xvve9D1/96ldxww03YMmSJfP0lxJCCCGEELKwoEODEEIIIYQQsk/x0EMP4fjjj8f111+PoaEhAMDLXvYynHHGGXje856HQw45BLfeemtQm+Mtb3kLDj30ULznPe+JODSuu+46XHbZZTj11FPxla98JeK4+MQnPoFXvOIVuOyyy3DFFVfM5Z9HCCGEEELIgoWSU4QQQgghhJB9jiuvvDJwZgDA6aefjs2bN2PXrl34v//3/0YKjW/atAmnnXYafvWrX6HZbAavf+ADHwAAfOQjH+nKwrjkkkuwZcsWfOpTn8r3DyGEEEIIIWQfghkahBBCCCGEkH2KpUuX4sADD+x6fd26dbj77rtxwgknWN9rNpt45JFHsH79egDAj370IwwMDOCzn/2s9T6zs7N4/PHHsW3bNqxYsUL2jyCEEEIIIWQfhA4NQgghhBBCyD5FXE2LWq0W+756r16vB69t27YNjUYD73rXuxLvNzExQYcGIYQQQgghAtChQQghhBBCCCEZWLJkCVqtFrZv3z7fTSGEEEIIIWSfgDU0CCGEEEIIISQDT37yk7Fjxw78+te/nu+mEEIIIYQQsk9AhwYhhBBCCCGEZOBNb3oTAODVr341Hnrooa739+7dix//+Mdz3SxCCCGEEEIWLJScIoQQQgghhJAMnHvuuXjPe96Dt771rTjkkENwwQUXYPPmzZiYmMC9996L7373uzjttNPw9a9/fb6bSgghhBBCyIKADg1CCCGEEEIIycj/+T//B6eeeio+8IEP4Ac/+AG++MUvYsmSJVi/fj1e85rX4MUvfvF8N5EQQgghhJAFg+f7vj/fjSCEEEIIIYQQQgghhBBCCEmCNTQIIYQQQgghhBBCCCGEEFJ46NAghBBCCCGEEEIIIYQQQkjhoUODEEIIIYQQQgghhBBCCCGFhw4NQgghhBBCCCGEEEIIIYQUHjo0CCGEEEIIIYQQQgghhBBSeOjQIIQQQgghhBBCCCGEEEJI4aFDgxBCCCGEEEIIIYQQQgghhYcODUIIIYQQQgghhBBCCCGEFB46NAghhBBCCCGEEEIIIYQQUnjo0CCEEEIIIYQQQgghhBBCSOGhQ4MQQgghhBBCCCGEEEIIIYWHDg1CCCGEEEIIIYQQQgghhBQeOjQIIYQQQgghhBBCCCGEEFJ4/n9EeL436oNHngAAAABJRU5ErkJggg==", + "text/plain": [ + "
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Slice December of 2017 out of the full dataset\n", + "dec17_data = data.loc[\"2017-12-01\":\"2017-12-31\"]\n", + "\n", + "# Plot December of 2017 as current timeseries\n", + "ax = tidal.graphics.plot_current_timeseries(dec17_data.d, dec17_data.s, flood)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joint Probability Distribution\n", + "\n", + "Direction and velocity can be viewed as a joint probability distribution on a polar plot. This plot helps visually show the flood and ebb directions and the frequency of particular directional velocities. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Rose plot\n", - "\n", - "A rose plot shows the same information as the joint probability distribution but the probability is now the r-axis, and the velocity is the contour value. As compared to a joint probability distribution plot, a rose plot can be more readable when using larger bins sizes." + "data": { + "image/png": "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cITYUNVjelxWQXT4eNhsNpo0acKgQYPo06cPLpeL+fPns2zZMnJzc8/avLWNZs2a0aVLF1auXEl2dvZJx5+vYtiibdu2qKrqjWbVBpo0acK9997LnXfeidPpPPkOQaoMHVEtj9PlnXfeISEhgYkTJzJ69Gj++c9/MnToUF5//fUKLen27dtHampqpS2YXnvtNVq0aMFTTz3FoEGDuP/++7nyyiu58MILUVWVDz74oEbe/A9GiKuQRx99lPfff5+srCwaNmx40vFvvvkm99xzD7t27WLEiBHcd9999O/fn++//56+ffvy9ddf/6Hxp8OWLVt4/PHHj9vW5kzmvuWWW5g+fTrXXnstvXv35p577uGDDz444zUG8eF0Ornzzju57777Ktjqn69IKVm9ejXx8fE0adKkupdzRpyqKHY6nSxZsgRd1+nXr1+t6n/5Rzi8L4/nb5/CP8a+we8/rA7Y5na7SekUwy0v9KfbsCY4tCi6d+pFnch6DLyoC//+/h72Z+eimyox91Ahy+ZtweX0UHS0FPArnxWgKIKufZobIVspCS13IhW/WuBjRKSugPDoxhjV2CgFRmqx+bVloCUF6H77q/gEgdtpC1iH93/p+15Ty7Br4Rxj6YVHGgYtUhpBZ93vT7gANOHEI3V0cwKX1LxBbV/NsN8dACGQIX5fW2ZhUqLofge29tN9Cz94oIDx919k1mb7XqwupZEqfYya7zG4jTfd3aLPyPZ0Hdias40Qgri4OLp168aIESOIjo5m2bJlLF68mEOHDh3XzTmIj6SkJHr16sWGDRu89YSVcb6LYTDSxbt3786+ffvYt29fdS+nynjkkUcQQvDaa69V91KC1ECslnQTJkwgPT2dV199lZ07dzJx4kTS0tJO2lfdIiEhgfT0dO655x6ys7N54403mDdvHhdffDGLFi3iyiuvPMuv5MwIFtRUIR9++CEtW7akSZMmvPDCC/zzn/884fiePXuycOFCBgwYEPD8okWLGDZsGHfccQeXXXaZN230dMefKpqmMX78eDp16kSrVq347LPP/vBay8rKmD59Oj/99JM3myApKYkpU6Zw6623ntb6glTk1VdfRQjBww8/XN1LqTK2b99OaWkpPXr0OK9NcE5WU1xeXs7SpUuJjIykW7du1XLBmHuwgDf/+V/27z7CsLE9uOrOETXinD9+43vs2XkY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", + "text/plain": [ + "
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Set the joint probability bin widths\n", + "width_direction = 1 # in degrees\n", + "width_velocity = 0.1 # in m/s\n", + "\n", + "# Plot the joint probability distribution\n", + "ax = tidal.graphics.plot_joint_probability_distribution(\n", + " data.d,\n", + " data.s,\n", + " width_direction,\n", + " width_velocity,\n", + " metadata=metadata,\n", + " flood=flood,\n", + " ebb=ebb,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Rose plot\n", + "\n", + "A rose plot shows the same information as the joint probability distribution but the probability is now the r-axis, and the velocity is the contour value. As compared to a joint probability distribution plot, a rose plot can be more readable when using larger bins sizes." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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vCdPnsyHH36Im5sbL7/8MnZ2dmzdupXp06ezfft2du3ahaWlZa7za7VaevTowY0bN3j66acxNzfn999/Z+rUqWRmZjJnzpyH/o0Mr5sbN26QlpaGvb39Q48xSEpKon379lhaWjJgwAA0Gg2//vorI0aMwMzMzHjDxeCll15i3bp1eHl5MWLECFQqFRs3bmTMmDHs27cvz42eKVOmYGZmRuvWrfH09CQpKYmQkBAmTpzIkSNH+Pnnnwsd679FR0cTEhKCtbU177333kP3v//1d//17N+/n6effhpHR0e2bt3KokWLuHXrFqtWrSqRa3nvvff43//+R58+fejRowe7d+/m22+/5fz58+zduzfP/kV9TaxYsYLXX38da2tr+vbtS/Xq1blw4QLffvstW7Zs4fDhw3h5eT30+Sltf/31F3fu3MHHx8f4mn2YNWvWAPfeh65cucLWrVtJSkrCy8uLp556isqVK5dmyEIIUb4pQgghiuzEiROKhYWFolKplJdffln55ZdflMuXLz/wmPnz5yuA0rt3b0Wr1RrL4+LilBo1aiiAsn//fmP57t27FUCZNWtWvvV5e3sr3t7eucpWrFihAMqKFSvyPWbWrFkKoDg4OCgnT57Mte3FF19UAGXt2rW5ymNiYhSdTpenrq+++koBlAULFuQbg1qtVvbu3Wssz8nJUbp166YASqVKlZQff/wx13Gvv/66Aii///57rvLAwEAFUGrXrq3cuXPHWJ6Zmam0adNGAZTVq1fnOgZQAgMD830ODhw4oACKt7e3Eh8fbyzXarVKr169FECZN29ermO8vb0VQHn66aeVjIwMY3l8fLxSqVIlxdHRUcnOzs73fPfT6/VK69atFUBp3Lix8tlnnylHjhxRNBrNA48DFEB57bXXcv0toqKiFLVardSrVy/X/j/99JMCKC1atFDS0tKM5WlpaUpAQIAC5Hn+L168mOe8OTk5yssvv6wASlhYWK5tQ4cOVQAlOjr6ode9atUqBVDat2//0H3/zfD3DwgIUBITE3Ndi5+fn2JmZqbcuHGjRK7Fy8tLuXLlirFcq9UqHTt2VADl8OHDuY4p6mvi3LlzioWFhVK7du088YaEhChmZmZKv3798r32wjLsv3v37ofua7jmfv36KbNmzVJmzZqlTJ06VXnxxRcVOzs7xdvbWzl48GChz+3o6KhYW1srixcvVszNzY2vWUCxs7NTvvvuu0LXJYQQjxtJuoUQopjWr1+vVK1aNdeXy8qVKyvPPvus8ueff+bZ38/PT1GpVMq5c+fybPvmm28UQBk+fLixrDST7hkzZuTZFhoaqgDKO++8U/BF30ev1yuOjo5Kly5d8o1h8ODBeY4xJF8dO3bMs23v3r0KoMyePTtXuSGR+HdirSj//xx17tw5V/mDku7XXntNAZTly5fn2Xb27FnFzMxM8fX1zVVuSLDyS+aGDBmiAEpkZGS+5/u3q1evKkFBQbleNxYWFkrr1q2Vjz76SElNTc1zDKDY2toqKSkpebZ16tRJAXJt69q1qwIoO3fuzLP/jh07FCDP360gERERCqDMmTMnV3lRku4PPvhAAZRBgwYV6pz3M/z9d+3alWfbzJkzFUDZsmVLoep62LV8++23eY75/vvvFUBZunRprvKiviYmTJigAPm+NyiKogQHBytmZmZKcnKysawsku78HjY2NsqkSZNy3eR6EI1GY7zRplKplClTpihXr15VEhMTle+//16xt7dXVCqVEhISUuhrEUKIx4l0LxdCiGIaMGAA/fr1Y/fu3Rw4cIDjx49z4MABNmzYwIYNG3j11Vf59ttvUalUpKamcunSJapXr06dOnXy1GUY//3XX3+VSewtWrTIU1ajRg3g3iRw99NqtXz99desXbuW06dPk5ycnGtM8PXr1/M9R/PmzfOUVatW7aHb8htXDhAYGJinrGPHjpibm3P8+PF8j8mPYd8uXbrk2Va3bl2qV69OdHQ0SUlJubrlOzk54efnl+eYgp63gtSoUYOQkBDOnDnDzp07iYiI4MiRI4SHhxMeHs6yZcsIDQ3NNV4foE6dOvl24zecPykpybj9+PHjmJmZ5fucdenSBbVanee1lpiYyEcffcTWrVu5fPlynmXLCvo7F4byz/jmRxnTW5TXbHGvpSjngKK9JsLCwoB7czUcOXIkzzG3bt1Cr9dz4cKFfP9/lJYVK1YYh2Hk5OQQGxvLqlWrmD17Nps3byYiIuKhwyAM4+RzcnJ4/vnnWbBggXHb8OHDSUtLY/z48XzwwQcEBQWV2rUIIUR5JUm3EEI8AgsLC3r06EGPHj2Ae186f/vtN1599VW+//57+vbtS79+/UhOTgbAw8Mj33qqVq0KYNyvtOU3+ZthYqt/TzQ1aNAgNm7cSM2aNenXrx8eHh7GMbdLlizJdyKrh53jQdsKWsvX3d09T5lhXeFbt27le0x+CvO3uHr1KsnJybmS7vxivj/uok425u/vj7+/v/H3s2fP8uqrrxIWFsbEiRPZuHFjrv2Lcv7k5GTj2vH57e/q6prrOUtKSqJly5ZER0fTqlUrhgwZgouLC+bm5iQlJfHpp58W+HcujIfdUCmMwr5mH+VaivL/oqD9CzomMTERgI8++ijfYwzS0tIeuL00qdVqvL29mTlzJufPn+enn35i6dKlTJ069YHH2draYmlpSXZ2Nv369cuzvX///owfPz7fmw1CCPEkkKRbCCFKkFqtZuDAgURGRjJv3jxCQkLo16+f8ct5XFxcvsfdvHkTyP0l3jCZmE6ny/eY5OTkAr/0l5SIiAg2btxI165d2bZtW64kTq/X8+GHH5bq+e8XHx+fZ5KpnJwcEhMTcXR0LHQ99/8t8mulzO9vURbq1avHDz/8QK1atQgJCXmkuipVqsSdO3fQarV5Em+dTkdCQkKu5+zbb78lOjqaWbNm5ZnlPSwsjE8//fSR4unQoQNw7/VU2q/b0r6W4jJcc3JycpFer6bSunVrfvrpp0InynXr1iUyMjLfmfednZ0ByMzMLMkQhRCiwpAlw4QQohQYuvkautU6ODjg5+fH9evXuXDhQp79d+/eDUBAQICxzPBF9dq1a3n2v3jxYr7LGKnVaqDora4FuXjxIgD9+vXLk7wdOXKkTL9E5zd79P79+9HpdDRr1ixXuZmZWYHPgWHfPXv25Nl28eJFYmNj8fX1LXDZrtL079dNcTVr1gy9Xs++ffvybNu3bx85OTm5XmuGv/Nzzz2XZ//8nvei8vX1pVu3bmg0moe29AKP1Kpe2tdSXG3atAHuvWYrAkPX+PyWl8uPYQm8qKioPNtOnToFkGfIhBBCPCkk6RZCiGJYs2YNO3fuzPcLaVxcHMuXLwegU6dOxvJXX30VRVGYNGlSroQwISGBuXPnGvcxqFevHo6OjmzatClXV+DMzEzGjx+fb1yGZXnyS9SLw/Al+d8J6q1btxgzZkyJnKOw5s6dm2uMrEajMXZ7/fdyWZUrVy7wOTA8x/PmzeP27dvG8pycHN599130ej2vvfZaSYcP3Fs667PPPst3GIGiKMyfPx/I/bopDsM1Tp06lYyMDGN5RkYGU6ZMAch1jYa/s+Hmj8Hx48dzjc99FEuXLsXR0ZEFCxawePHifHtwXL16lRdeeME4/rk4yuJaimPs2LFYWFgwceLEfJcazM7OLjcJ+d27d1mxYgWQe6m9Bxk5ciTm5uYsWbIk15rjGo2G6dOnA/DCCy+UeKxCCFERSPdyIYQohvDwcD799FM8PDzo0KEDvr6+wL2k6s8//yQzM5N+/foxYMAA4zHvvvsu27ZtY9OmTTRp0oRevXoZ1+m+desW7733nrEbLtwbL/72228ze/ZsmjVrRv/+/dHpdOzcuZNq1aoZx8ner23bttja2rJkyRISExON46DHjRtXrC69LVu2pH379mzYsIF27drRoUMH4uPj2bZtG3Xr1s03htJSv359GjRokGud7kuXLvHMM88wePDgXPt27dqVtWvX0q9fP5o1a4a5uTmdOnWiU6dOtGvXjvfee48PP/yQhg0bMmDAAOzs7Ni2bRunTp2iQ4cOTJo0qVSuITk5mbfeeotJkybRvn17GjZsiIODA7du3SI0NJTLly9TpUoVFi9e/Ejneemll9i0aRO//PILDRo0IDg4GJVKxe+//050dDQDBw7k5ZdfNu4/ZMgQPvroIyZOnMiePXuoXbs2Fy5c4I8//uDZZ59l3bp1j3rp1KtXj//9738899xzvPvuu3z66ad07dqVatWqkZ6ezt9//83BgwdRqVRMnjy52Ocpi2spjnr16vH999/z6quv0qBBA5566inq1KmDVqvl6tWr7N+/Hzc3N86ePfvI51q4cCErV67Md9v48eNz9XL4/fffiYmJAf5/IrUtW7aQmJhIy5YtGTVqVKHOWa9ePT744APeeecdGjduTHBwMLa2tvzvf//j/PnztG7d+pH+rkIIUaGZdO50IYSooK5evap8/vnnSnBwsFKnTh3FwcFBsbCwUDw8PJSnn35a+eGHH5ScnJw8x2VmZirz589XGjRooFhbWyv29vZK+/btlZ9//jnf8+j1euWDDz5QatasqVhYWCg1atRQJk2apKSnp+e7ZJiiKMq2bduUNm3aKHZ2dsYlgAzLOhmWDMtvSaHo6GgFUIYOHZqrPDExURk9erTi7e2tWFlZKTVr1lSmTp1aYAwPWrbsQcugFXR+wzJIGo1GmT59uuLj46NYWloqvr6+yuzZs/Nd4zo+Pl558cUXlSpVqihmZmb5nnPNmjVK+/btFXt7e8XKykqpX7++Mm/ePCUzMzNPfQU914ry4Of03zQajbJx40Zl9OjRSrNmzZQqVaoo5ubmiqOjoxIQEKBMmzZNuXXrVp7jeMASaAUt3ZWTk6N88cUXSvPmzRUbGxvFxsZGCQgIUD7//PN8X5tRUVFKnz59FDc3N8XW1lYJCAhQli9fXuDfpShLht0vNTVV+fjjj5XOnTsrbm5uua5/ypQpeda7f9CyWQW91kryWgp6zRb3NXHy5Ell6NChipeXl2Jpaak4OzsrDRo0UN544408S2oVd8mwBz02btyY65r//XBwcFBatmypfPjhh/n+X3iYP/74Q+nSpYvi6OioWFlZKf7+/sp///vfXGuZCyHEk0alKI84cEwIIYQoRZ07d2bv3r2PPM5ZCCGEEMIUZEy3EEIIIYQQQghRSiTpFkIIIYQQQgghSokk3UIIIYQQQgghRCmRMd1CCCGEEEIIIUQpkZZuIYQQQgghhBCilEjSLYQQQgghhBBClBJJuoUQQgghhBBCiFIiSbcQQgghhBBCCFFKJOkWQgghhBBCCCFKiSTdQgghhBBCCCFEKZGkWwghhBBCCCGEKCWSdAshhBBCCCGEEKVEkm4hhBBCCCGEEKKUSNIthBBCCCGEEEKUEkm6hRBCCCGEEEKIUiJJtxBCCCGEEEIIUUok6RZCCCGEEEIIIUqJJN1CCCGEEEIIIUQpkaRbCCGEqKBUKhUqlQpvb280Gk2++/j4+KBSqdDpdGUcnRBCCCFAkm4hhBCiwrt69SpLliwxdRhCCCGEyIdKURTF1EEIIYQQouhUKhXOzs7GluxLly7h6uqaax8fHx+uXLmCVqvF3NzcRJEKIYQQTy5p6RZCCCEqMFtbW/7zn/+QkpLCnDlzTB2OEEIIIf5Fkm4hhBCighszZgx+fn58/fXXnD9/3tThCCGEEOI+knQLIYQQFZyFhQULFy5Eq9UyZcoUU4cjhBBCiPtI0i2EEEI8BgYMGEDbtm3ZuHEjBw4cMHU4QgghhPiHJN1CCCHEY2Lx4sUAvPPOO8g8qUIIIUT5IEm3EEII8Zho27YtAwYM4MiRI/zyyy+mDkcIIYQQSNIthBBCPFYWLlyIhYUFU6dOJTs729ThCCGEEE88SbqFEEKIx4ifnx9vvvkm0dHRLF261NThCCGEEE88SbqFEEKIRzB79mxUKhV79uwp9DGdO3dGpVKVWkwzZ87EycmJ+fPnk5aWVmrnEUIIIcTDSdIthBBC3EelUj30ceLECVOH+UAuLi5MmzaNu3fvkpiYaOpwhBBCiCeauakDEEIIIcqjWbNmFbjNw8OjDCMpnvHjx7Ns2TJiYmJMHYoQQgjxRJOkWwghhMjH7NmzTR3CQz1oWTArKyuio6PLMBohhBBC5Ee6lwshhBAlZNWqVTRr1gwbGxuqVKnCq6++SlxcXIH7Z2VlMWPGDHx9fbGyssLPz485c+bIrONCCCHEY0SSbiGEEKIEfPLJJ4waNYomTZowYcIE6taty4oVK2jXrh23b9/O95iBAwfy/fff06dPH8aOHYtKpWL27Nk899xzD2zFFkIIIUTFId3LhRBCiHwU1L3c2tqaKVOm5Cnftm0b4eHhNGvWzFg2ceJElixZwpQpU/juu+/yHHPmzBmioqJwdnYGYP78+XTp0oU//viDH3/8kcGDB5fMxQghhBDCZFSK3EoXQgghjB62lFelSpVISkoy/j579mzmzJnDq6++miexTk5Oxtvbm6ysLJKSkrCysgLuLRm2d+9eVq9enSex3rNnD126dKFz587s3r27ZC5KCCGEECYj3cuFEEKIfCiKku/j/oT7foGBgXnKKlWqRNOmTdFoNJw5c6ZQx3Ts2BFzc3OOHz/+yNcghBBCCNOTpFsIIYQoAe7u7vmWG5YXS05OLtQxarWaypUrk5KSUrIBCiGEEMIkJOkWQgghSkB8fHy+5YbZyytVqlSoY3JyckhMTMTR0bFkAxRCCCGESUjSLYQQQpSAvXv35ilLTk7mxIkTWFtb4+/vX6hj9u/fj06nyzUhmxBCCCEqLkm6hRBCiBLwww8/5BmHPXv2bJKTk3nxxReNk6jdb+7cudy9e9f4u0ajYerUqQAMHz68dAMWQgghRJmQJcOEEEKIfBS0ZBhAcHAwTZs2zVXWq1cv2rdvz8CBA6latSoHDhzgwIED+Pj4sHDhwnzrqV+/Pg0aNGDAgAFYWFiwadMmLl26xDPPPCPLhQkhhBCPCUm6hRBCiHzMmTOnwG0+Pj55ku4JEybQv39/PvnkE9atW4e9vT3Dhg3j/fffp0qVKvnWs27dOubOnctPP/3EjRs38PT0ZPbs2UyZMuWhS5cJIYQQomKQdbqFEEIIIYQQQohSIi3dQgghRBlLT08nMTGR1NRUUlNTSUtLy/Wv4eeUlBTjv4afU1NTyczMRK/XGx85OTkoioJerzfOll61alVUKhVmZmbGh1qtRq1WY29vj4ODg/Hh6Oho/Pn+bYafDf86Ojri6uqKubl8fRBCCCEKS1q6hRBCiBKgKAqpqancuHGDmzdvGh/Xr1/nxo0bxvK4uDjS0tJQqVTY2trmetjZ2eX62c7Ozpj0Ojo6Gv+1s7MzJtAqlcr4s5mZGadOnSIpKYk2bdpgZmZGTk4OOp3OmKBnZ2cbE/n7E3zDIyMjw/hIT0/P9XtWVhZmZma4urri4eFB1apV8fT0pFq1alSrVo2qVasaHx4eHlhaWpr6zyKEEEKYnCTdQgghRCEoikJ8fDznz5/n/PnznDt3jujoaGMyHR8fT2ZmJtbW1ri6uuLi4oKjoyNeXl5UrVqVatWqUb16dby8vPD29qZKlSqo1eoSj1Or1bJ161Z69eqFhYVFidat0Wi4du0aV65c4erVq1y/ft147bdu3SIhIYGEhATu3LmDXq/HxcXFmJxXr16d2rVrU6dOHerUqUPt2rWxtbUt0fiEEEKI8kiSbiGEEOI+ycnJXLhwwZhcnz17lnPnznHx4kXS0tLw8PDA29sbHx8fvL298fT0NCbTPj4+uLi4YGZmRkpKCvv37+eZZ54p0/hLM+kurOzsbK5du2Z8xMbGEhsbS3R0tDFhT0tLo1q1atSuXZt69epRt25dY0Lu4+NjstiFEEKIkiaDsoQQQjyR4uPjOXbsGKdOneLcuXOcPXuWCxcucPv2bZycnIwt0rVq1SIoKIgGDRrQqFEjHB0dC1W/lZUVOp0OnU73xI2BtrS0xM/PDz8/v3y36/V6rl27RmRkJKdPn+bcuXNs2bKFK1eucO3aNRRFwdvbm7p161K3bl3q1atHs2bNaNSoEdbW1mV8NUIIIcSjebK+BQghhHgixcXFcezYMY4dO8bRo0c5duwYN2/exMvLizp16uDn58eAAQOoX78+jRs3pmrVqo98TktLS1QqFVlZWU9c0v0wZmZmeHt74+3tTe/evXNt0+l0nDt3jlOnTnH69GkuXLjAwYMHOXv2LBkZGfj7+9OyZUtatGhBQEAATZo0kURcCCFEuSbfAoQQQjxWbt68mSfBjo+Px9vbG39/f5o2bcqIESPo0KEDlStXLrU4VCoV1tbWaDQa7OzsSu08jxtzc3MaNGhAgwYNcpXr9XrOnDnDwYMHOXr0KKtXr2bq1KmkpaVRr149YyLevHlzmjRpgo2NjYmuoPRNnjyZiIgIzp8/T0JCAjY2Nnh7exMcHMzYsWPzfV0fOnSIefPmcfjwYTQaDbVq1eLVV19l3LhxRZ5boCh1xcXFMXHiREJCQlCpVHTt2pWPP/4YDw+PPPXOmDGDpUuXcvr0aTw9PYv2pAghRDkmY7qFEEJUWBkZGRw6dIgDBw4YE+xbt27h7e1N/fr1adq0Ka1bt6ZDhw64uLiUeXx79+6lVq1aZZpAlIcx3WVFr9dz/vx5498/MjKSM2fOkJqaSt26dWnZsiWtW7cmMDAQf39/VCqVqUMuEZaWlgQEBFC/fn2qVKlCeno6hw8fJiIigmrVqhEWFoaXl5dx/02bNvHcc89hbW3NoEGDcHFxYcuWLZw7d44BAwawfv36Qp+7KHXp9Xpat25NVFQUgwcPRlEUVq9eTePGjTl8+DBmZmbGff/++29atmzJ559/zhtvvFEyT5QQQpQTknQLIYSoMAxJ9u7duwkNDeXYsWNUrlyZgIAAAgICaNOmDe3bt8fJycnUoQIQHh6Om5sbNWvWLLNzPklJd370ej0XLlwwJuLHjx/n5MmT2NvbExgYSFBQEJ07d67QSbhGo8m3S/306dN5//33GTVqFF9++SUAKSkp+Pn5kZKSwsGDB2nRooWxjqCgIMLCwlizZg0vvPDCQ89b1LrCw8Np06YNK1euZOjQoQB89913jBgxgvDwcFq1agXcG1LQunVrHB0dCQ0NrbB/FyGEKIjZw3cRQgghTCMjI4OQkBBmzJhBu3btcHJy4pVXXuHkyZM8++yzHD9+nOvXr/Pnn38yd+5cnnnmmXKTcAPG7uWi7JiZmVG3bl1ee+01vvrqK8LDw7l79y6rVq2iRo0arF69mubNm1OlShWef/55vvzyS86cOUNFaoMoaAz7wIEDAbh06ZKxbP369SQkJPDiiy8ak2RDHfPmzQNg2bJlhTpvUeu6cuUKgDG5Bmjbtm2ubQCLFi3izJkzLF++XBJuIcRjScZ0CyGEKDcyMjIICwsztmRHRETg4uJCy5Yt6d+/P9988w3169fP1S21PLOysiIjI8PUYTzxrK2t6dWrF7169QLuvc52797Nzp07WblyJRMnTsTBwYHOnTsbW8Lr1atX4RLALVu2ANC4cWNj2e7duwF46qmn8uzfqVMnbG1tCQsLIysrCysrqwfWX9S6vL29AYiIiMDf3x+Ao0ePAhi3nTt3jjlz5jB37lxq1apVpOsVoqRptVpycnJMHYYo59RqdZF7kkn3ciGEECZ17tw5Nm/ezKZNmzhy5AjOzs60bNmSTp060atXrwqVZP9bTEwMN2/eNLbulYUnvXt5cdyfhB86dIiTJ0/i4OBA9+7dCQ4OpmfPnlSqVMnUYeaxaNEi0tLSSE5OJiIiggMHDtCsWTN27txpnEytZcuWREREEBERQfPmzfPU0bBhQ6Kiojh9+rQxMS5IUevS6/W0bNmSs2fPMmTIEOOY7oYNG3L48GFUKhWdOnVCo9Fw+PDhIk/oJkRJSUlJISEhgaysLFOHIioIKysrXF1dC72MqLR0CyGEKFM6nY6DBw+yefNmfv/9d2JjY2nZsiVPPfUUX375JQ0aNKiwSfa/WVlZSffyCsDW1pZnnnmGZ555BriXhO/atYstW7Ywbdo0XnnlFTp27EhwcDB9+vTBx8fHtAH/Y9GiRcTHxxt/f/rpp1m5cmWu2cuTk5MBCrxpYChPSkp66PmKWpeZmRlbtmxh4sSJ/Prrr6hUKvr168cnn3yCmZkZS5cuJTw8nIiICFJSUhg3bhybNm1Cq9XSo0cPvvzyS5nFXJS6lJQUrl+/jr29Pa6urlhYWFS4Xi6i7CiKglarJTk5mevXrwMUKvGWpFsIIUSpS0lJYfv27WzatIk///wTMzMzOnXqxPTp03n22WfL1TjskmRtbS0tJxWQra0tffv2pW/fvgBERkaybt06fvjhB95++23q1KlDcHAw/fr1o0WLFia7SRQXFwdAfHw8hw4dYsqUKTRt2pQ//viDgICAQtVh6PBYEklGfnVVq1aNdevW5dn3ypUrTJs2jSlTptC4cWOCg4PZs2cPX3zxBY6OjowdO5Znn33W2CIuRGlJSEjA3t6e6tWry2tNFIqNjQ0ODg7ExsaSkJAgSbcQQgjTiYmJYcuWLWzatIl9+/bh5eVFly5dWLduHV27dsXc/PH/CDIk3Xq9/rFpvX8SNWrUiEaNGjFv3jxu377NL7/8wh9//MFnn32Gra0tffr0oV+/fnTt2hVbW9syj8/d3Z3+/fvTvHlzateuzZAhQzh16hTw/63Phlbqf0tJScm134OUZF1vvPEGXl5ezJgxgwsXLrBp0ybmzp3LkCFDAEhNTWXIkCHs3r2boKCgh9YnRHFotVqysrJwdXWVhFsUiUqlolKlSly/fh2tVvvQ4VzyDUAIIUSJOXnyJDNmzKBhw4bUrl2bH374gTZt2nDs2DEuXrzI8uXL6dmz5xORcAPGiamktfvx4ebmxpgxY9i2bRsJCQl89dVXZGdnM3r0aFxcXOjduzffffcdd+/eLfPYvLy8qF+/PlFRUSQkJABQt25dAM6fP59nf51OR3R0NObm5oVa1q6k6lqxYgW7du3iu+++w9LSkjNnzgDkap03jBmPiop6aFxCFJdh0jSZ/0IUh+F1U5jJ9yTpFkII8UiuXr3KwoULqV+/Pq1bt+bo0aOMHj2aGzducOTIEebNm0ejRo1MHaZJmJmZYWlpKUn3Y8rKyor+/fuzevVqrl69yr59+/D39+eTTz7B3d2d4OBgfvvttzId13/jxg0A46Rkhlbi7du359l33759ZGRk0K5du4fOXF5Sdd28eZO3336bcePG0aZNG+D/u6Xf//9E5kIQZUlauUVxFOV1I0m3EEKIIrt79y7Lly+nU6dO+Pn5sWXLFkaNGsXNmzf53//+x5gxY3BzczN1mOWCTKb2ZDAzM6NVq1Z89NFHnDp1iiNHjlC9enUmTJiAu7s7I0aMYM+ePej1+kc6z9mzZ41jue+n1+uZPn06t27dol27djg7OwMwYMAAXF1dWbt2LREREcb9NRoNM2bMAGD06NG56kpOTubs2bPcvHkzV3lx6vq3MWPG4OTkxPz5841lDRo0AP5/ybP7fzZsE0KIiuzJ6N8nhBDikWk0GrZu3crq1avZunUrtWvX5rnnnuOHH34wrrkr8pLJ1J5MTZs25fPPP+ezzz5j586drFq1iv79+2NnZ8dLL73E4MGDi9UDZPv27UyaNMl4w6ty5crEx8ezd+9eLl++jIeHB8uXLzfu7+joyPLlyxkwYACdO3fmhRdewMXFhc2bN3Pu3DkGDBjAoEGDcp1j48aNDB8+nKFDh7Jy5cpHqut+v/zyCxs3bmTHjh3Y2dkZy2vVqkX//v1ZsWIFaWlpODo6snLlSlq1akWXLl2K/BwJIUR5Iy3dQgghCqTX69mzZw8jRozA3d2dt956C09PT8LDw4mKiuK///2vJNwPIS3dTzYzMzN69uzJzz//TFxcHB988AGRkZG0atWKBg0a8OGHH3Lt2rVC19etWzfeeOMNEhMT2bBhAx999BG//fYbLi4uzJo1i6ioKOrXr5/rmODgYPbu3UunTp347bffWLp0KRYWFnz88cesXbu2SF0ki1tXYmIi48aNY/jw4XTv3j3P9u+//54hQ4awY8cO1qxZQ+/evdmwYYN0+xWPDR8fH5YsWVJu6ytKvSqVit9//73Ez31/DCqVCpVKVajlDEuS4bwlvaqKSjEMpBFCCCH+cfr0aVatWsVPP/1Eeno6Tz31FMOGDaN79+4yC3cRRUVFodPpaNKkSZmcT6vVsnXrVnr16iWTA5Vjd+7cYfXq1fzyyy8cPXqUdu3aMWTIEAYOHIiDg4OpwxPiiaDRaIiOjsbX1xdra+t89+nTpw+ZmZns2rUrz7awsDDatWvHsWPHHrpMn4+PDxMmTGDChAklETq3b9/Gzs7OuGKCSqVi48aNBAcHP1K9hYkzLi4OZ2fnQs0FUdwYXnvtNV5//XXc3d1L5OaboXfOqFGjHrhfXFwc69atY9asWQ9N+Avz+jGQb05CCCGAe5MY/fzzz3To0IFmzZrx999/s3DhQuLi4lizZg09e/aUhLsYpHu5yI+LiwsTJkzg0KFDXLhwgY4dO/LRRx9RtWpVRo4cyfHjx00dohACeO211wgNDeXKlSt5tn3//fc0bdr0oQl3aXBzczPJEoUAHh4epZZwGzg4OODh4VEiCfedO3c4dOgQffr0eei+Hh4ehVr2sKjk25MQQjzhLly4wLvvvku1atWYOnUqgYGBxMTEsH37dl555ZVS/2B93FlbW0v3cvFAPj4+zJs3j7Nnz7J582YSEhJo164dLVu2ZMWKFWRkZJg6RCGeWL1796ZKlSq55jcAyMjIYN26dbz22msAHDp0iE6dOmFjY0ONGjUYP3486enpBdZ79epV+vXrh729PY6OjgwcOJD4+Phc+2zevJkWLVpgbW2Nq6srzz77rHHb/d3AfXx8AOjfvz8qlQofHx9iYmIwMzPLNekhwNKlS/H29uZBnZ1TU1N56aWXsLe3p1q1aixdujTX9vu7l8fExKBSqdiwYQNdunTB1taWJk2aEBYWZtz/ypUr9OnTB2dnZ+zs7GjQoAFbt24t8Pz5WblyJU5OTvzxxx/UrVsXW1tbBgwYQHp6OqtWrcLHxwdnZ2fGjRuXZwmvP//8kyZNmuDp6cndu3d5+eWXcXNzw8bGhtq1a7NixYoixVIcknQLIcQTSKfTsWHDBrp27UqDBg2IjIzk+++/Jzo6mvnz51O1alVTh/jYkDHdoiiCgoL47bffuHbtGn369OH999+natWqjBs3jrNnz5o6PCGeOObm5gwZMoSVK1fmSlTXr19PdnY2L7/8MpGRkfTs2ZNnn32WkydPsm7dOg4cOMDYsWPzrVNRFIKDg7lz5w579+5l586dXLp0KddEhH/++SfPPvsszzzzDMePHyckJIQWLVrkW9/Ro0cBWLFiBTdv3uTo0aP4+PjQrVu3PAnlihUrGDZs2ANbkD/66CMaN27MX3/9xdSpU5k4cSI7d+584PM0ffp03n33XU6cOEGdOnV48cUX0el0wL1VC7Kysti3bx+RkZF88MEH2NvbP7C+/GRkZPDZZ5+xdu1atm/fzp49e3j22WfZunUrW7du5YcffuCbb77h119/zXXc5s2b6devHwD/+c9/OH36NNu2bePMmTN8+eWXuLq6FjmWIlOEEEI8MeLj45V58+Yp1apVU6pVq6a88847ytWrV00d1mMtNTVV2bx5sxKbdks5dedaqZ8vOztb+f3335Xs7OxSP5cofTk5Ocr27duV3r17K5aWlkpQUJDy+++/KzqdztShCVHhZWZmKqdPn1YyMzMfuN+ZM2cUQAkNDTWWderUSXnxxRcVRVGUwYMHK2+88UauY/bv36+YmZkZ6/b29lY++eQTRVEUZceOHYparc71+RsVFaUAypEjRxRFUZS2bdsqL7/8coEx3V+foigKoGzcuDHXPuvWrVOcnZ0VjUajKIqinDhxQlGpVEp0dPQD633qqadylQ0aNEh5+umn8z1XdHS0Aijffvttnms5c+aMoiiK0qhRI2X27NkFnvNh16YoirJixQoFUC5evGgsGzlypGJra6ukpqYay3r27KmMHDnS+LtGo1EcHByUkydPKoqiKH369FGGDx/+wPOvWLFCqVSp0kPjLOzrR1EURVq6hRDiCXD06FEGDx5MjRo12Lx5M/Pnz+fKlSssWrSIGjVqmDq8Ci1H0ROXcYdjCdFsufI3X5/ez+yjW3lz3y8M2rGC50N+QK/X0+23FTyz5UeycnSmDllUIIbZz7ds2cLFixdp0qQJI0eOxNfXlw8++IDExERThyjEY69evXq0a9eO77//HoBLly6xf/9+Xn31VQCOHTvG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3/zmN5w5c4bFixej0+n47LPPOHv2LKmpqd0afWVmZvLaa6/xzjvv4O19/dF1crmcCRMmYG9vz+HDh4mIiMDPb3BuGA11w63Hz8+PhoYG0tLSBn3qhZBYWFjw5ptv8rvf/Y67775baqomITHImDzS/emnnzJ16lRsbW2xtbVl6tSpPbrPASQlJSGTyVi3bh3Hjx/nxhtvxM7ODgcHBxYuXNij3ftQZN68eQZ9ud122209TCx0zrdLSEigpqaGU6dO9fv8vvLqq6+SmZnJJ598ctUvSUP31mg06HS6bhcPcrm8xyB6CcM5d+4cL774Im+++eaIShtuamoiPT2diRMn4uTkJLScazLYEe+mpib279+PTqdj1qxZkuE2EYOVYt7c1vn5KaWBGsbGjRvJy8ujoaGB9957r0/PmThxIuvWrevxb9GiRX3eV19KpVAoSEpK4p///Cd///vfycjIYNq0aWzbto2vvvqq6/yjR4+Snp7Oe++9xwcffMCHH37Iu+++2/W4no6ODu677z5mzJhh0M1qmUzGmDFjiI2N5cyZM5w6dcrk373DxXDrGT9+PJaWlpw4cYL/9hMeEdxyyy3MnTuX1atXCy1FQmLEYVLTvXr1apYuXcr58+e5//77Wb58OWVlZSxdupTHH3+81+ekp6cTHx+PmZlZV330jh07mDdvHiqVypRyhxT6O699nb1p6Pl6Tp8+zfr163nuuecYP368YSKvsbetrS0333wzd911F4899hiLFy/m9ddf5+677+7XHhL/Y9WqVcydO5dbbrlFaCmDhkajIT09HV9fX3x8fISW0ycGy3hXVlayf/9+3N3diY2NHTFRGyGYMn5wIkM6XafxNldAi6p9UPYUAwkJCQQHBw96ScXXX39NVVUVd911F5MnT+563NLSkhdeeAHonAurp6Skc+Z7TExM12PTpk3rdgzg9ddfJzs7m48++qhfr8nNzY1Zs2Zx6dIlUlNTaW83zXtpuBlu6AwCTJ48mdra2hHXWO3tt9/u6gkjISExeJgsvfzAgQO8+eabhIWFkZKS0jU/cv369UydOpWNGzdy2223ERfXfRzKjz/+yFdffcUdd9zR9di9997L559/zo4dO/pcZ7Vu3TqD9K5atQpHR0eDnmMqzp07x549e/Dw8CAiIsLo5+vp6Ohg6dKlhIWF8fTTTxtd66effspjjz3G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Emg0GtjZ2aFjx47o0qULfH19dcW6U6dOBjOLgIiIqClYuomIiJpIq9WivLwchYWFKCwsREFBge7PO2/FxcWorKyEmZkZHB0d4ejoCLlcDqlUqrtZW1vD2toaMpkMNjY2sLGxga2tLWxtbXUfy+VyyOXy+y4C9zClu7q6Gjdv3kR5eTnKyspQXl6OiooKlJeX49atW6ioqIBSqcStW7dw69Yt3L59G5WVlaisrMSNGzdw48YN3Lx5EwDg4OCgO8Dg6uqK9u3bo127dro/27VrBxcXF5ibm+vl34CIiKi1Y+kmIiJqAUqlskExv3HjRoNiW190KyoqcOvWLd3nKisroVQqUV1drduXubk5RCIRTExMYGJiApFIBLFYrLtPrVYD+PuggEajgVarhVqthlarhUqlgkqlAgCYmJhAKpVCJpPpir9MJoO1tTVsbGx0f955n7Ozs65QKxQKTv8mIiJ6AJZuIiIiA6BSqVBZWakbea4v1BqNBmq1usHH9WX8nzexWAyxWKwr0ZaWllyQjIiISM9YuomIiIiIiIj0pHUstUpERERERETUBrF0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExERGTi1Wo3Vq1cjLCwM9vb2MDU1hUKhQM+ePTFjxgz88ccfQkckIiIyWiKtVqsVOgQRERE1jVqtxvDhwxEXFwe5XI5hw4bBzc0NpaWluHTpEhITExEUFITDhw8LHZWIiMgoSYQOQERERE0XGxuLuLg4+Pv74+DBg7C1tW3w+Zs3b+LUqVMCpSMiIiJOLyciIjJgiYmJAICYmJi7CjcA2NnZITIysqVjERER0f9i6SYiIjJgTk5OAICMjAyBkxAREVFjeE43ERGRATt79iyCgoKgUqkwceJEREdHIzAwEN7e3kJHIyIiInCkm4iIyKD5+/vj559/houLC3766SeMHz8eHTp0gKOjI8aMGYOdO3cKli0mJgYikQjZ2dmCZfintWvXQiQSYe3atUJHISIiI8HSTUREZODGjh2LnJwc7Nq1C++//z6GDx8OtVqNzZs3Y9iwYZg+fTqaa2KbSCS6741lloiIqCGuXk5ERNQGmJqaIioqClFRUQD+vpTY77//jueffx5r1qzByJEjER0d3WyP9+GHHzZ6f0BAQLM9BhERUVvA0k1ERNQGicVijB8/HikpKVi0aBH27dvXrKX7o48+arZ9ERERtWWcXk5ERNSGWVtbA0CzTS9vLhs3bsSAAQNga2sLS0tL9OjRA5988gmqq6sb3f7kyZMYPXo0FAoFzM3N4enpiZdeegkFBQWNbn/p0iWMGzcOdnZ2kEqlCA4Oxp9//qnPp0RERNQojnQTEREZsNjYWDg6OmLQoEEwMWl4LL2oqAirV68GAISGhgoRr1Fvv/02Fi9eDCcnJ0yaNAlSqRQ7d+7E/PnzERcXh71798LMzEy3/bZt2zBu3DiIRCKMHTsWHh4eOHnyJFatWoVt27bh8OHD6NChg277zMxM9OvXDyUlJXj66acREBCAS5cuYdSoURg6dKgQT5mIiIwYSzcREZEBO3bsGJYvXw4XFxeEhIToLhWWlZWFHTt2oKqqCtHR0Rg7dmyzPm5j08u9vLwQExNz369LTEzE4sWL4enpiePHj0OhUAAAPv30U0RHR2Pnzp1YsmQJ5s+fDwBQKpV4/vnnodFokJCQgODgYN2+Pv30U7z77rt48cUXsWfPHt39M2fORElJCZYtW4ZZs2bp7t+2bRtGjRrV9CdNRETUBLxONxERkQHLzc3FH3/8gb179yI1NRWFhYWorq6Gg4MDevXqhYkTJ2LixIl3jYI3lUgkuufnwsLCcODAAd3fY2Ji8OOPPyIrKwteXl4AgBkzZuC///0vVq9ejRkzZjT4+vT0dHTr1g2enp64cuUKAGDDhg2YPHkyJk2ahA0bNjTYvq6uDj4+PsjJyUF2djY8PT2Rl5cHd3d3eHt7IzMzE2KxuMHXhIeH4+DBg/jhhx8eeICAiIioOXCkm4iIyIC5u7tj5syZmDlzZos+blOP2ScnJwMAIiIi7vpcly5d4ObmhqysLJSVlUEul993e1NTU4SFhWHdunVITk6Gp6enbvuQkJC7Cjfwf6WbiIiopXAhNSIiImox5eXlAAAXF5dGP9+uXbsG2zV1e2dn50a3v9d+iIiI9IWlm4iIiFqMra0tgL8XeWtMYWFhg+2aun1xcXGj299rP0RERPrC0k1EREQtplevXgDQ4NzvepcuXUJeXh68vb0hl8sfuL1KpcLhw4cBAL17926w/eHDh6FWq+/6msb2Q0REpE8s3URERNRinn/+eQDAokWLcP36dd39arUab7zxBjQaDaZPn667f9SoUbC3t0dsbCySkpIa7GvZsmW4cuUKIiMj4eHhAQBwc3PDU089haysLKxcubLB9tu2beP53ERE1OK4kBoRERG1mODgYLz11ltYvHgxevTogbFjx0IqleKvv/7C+fPnERISgjfffFO3vUwmw5o1azBu3DiEhYVh3Lhx8PDwwKlTp7B79264uLjgu+++a/AY33zzDfr164fZs2dj9+7d8Pf3x6VLl7BlyxaMGDEC27dvb+mnTURERowj3URERNSiPv/8c8TGxsLHxwfr1q3D119/DY1Gg0WLFmHPnj0wMzNrsH10dDQSExMxdOhQ7Nq1C1988QUuXryIf/3rXzh16hQ6dOjQYHsfHx8kJSVhzJgxSExMxPLly5Gbm4utW7di9OjRLflUiYiIeJ1uIiIiIiIiIn3hSDcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnvx//LdVHQ0PisIAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Define bin sizes\n", - "width_direction = 10 # in degrees\n", - "width_velocity = 0.25 # in m/s\n", - "\n", - "# Create a rose plot\n", - "ax = tidal.graphics.plot_rose(data.d, data.s, width_direction, \\\n", - " width_velocity, metadata=metadata, flood=flood, ebb=ebb)" + "data": { + "image/png": "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vCdPnsyHH36Im5sbL7/8MnZ2dmzdupXp06ezfft2du3ahaWlZa7za7VaevTowY0bN3j66acxNzfn999/Z+rUqWRmZjJnzpyH/o0Mr5sbN26QlpaGvb39Q48xSEpKon379lhaWjJgwAA0Gg2//vorI0aMwMzMzHjDxeCll15i3bp1eHl5MWLECFQqFRs3bmTMmDHs27cvz42eKVOmYGZmRuvWrfH09CQpKYmQkBAmTpzIkSNH+Pnnnwsd679FR0cTEhKCtbU177333kP3v//1d//17N+/n6effhpHR0e2bt3KokWLuHXrFqtWrSqRa3nvvff43//+R58+fejRowe7d+/m22+/5fz58+zduzfP/kV9TaxYsYLXX38da2tr+vbtS/Xq1blw4QLffvstW7Zs4fDhw3h5eT30+Sltf/31F3fu3MHHx8f4mn2YNWvWAPfeh65cucLWrVtJSkrCy8uLp556isqVK5dmyEIIUb4pQgghiuzEiROKhYWFolKplJdffln55ZdflMuXLz/wmPnz5yuA0rt3b0Wr1RrL4+LilBo1aiiAsn//fmP57t27FUCZNWtWvvV5e3sr3t7eucpWrFihAMqKFSvyPWbWrFkKoDg4OCgnT57Mte3FF19UAGXt2rW5ymNiYhSdTpenrq+++koBlAULFuQbg1qtVvbu3Wssz8nJUbp166YASqVKlZQff/wx13Gvv/66Aii///57rvLAwEAFUGrXrq3cuXPHWJ6Zmam0adNGAZTVq1fnOgZQAgMD830ODhw4oACKt7e3Eh8fbyzXarVKr169FECZN29ermO8vb0VQHn66aeVjIwMY3l8fLxSqVIlxdHRUcnOzs73fPfT6/VK69atFUBp3Lix8tlnnylHjhxRNBrNA48DFEB57bXXcv0toqKiFLVardSrVy/X/j/99JMCKC1atFDS0tKM5WlpaUpAQIAC5Hn+L168mOe8OTk5yssvv6wASlhYWK5tQ4cOVQAlOjr6ode9atUqBVDat2//0H3/zfD3DwgIUBITE3Ndi5+fn2JmZqbcuHGjRK7Fy8tLuXLlirFcq9UqHTt2VADl8OHDuY4p6mvi3LlzioWFhVK7du088YaEhChmZmZKv3798r32wjLsv3v37ofua7jmfv36KbNmzVJmzZqlTJ06VXnxxRcVOzs7xdvbWzl48GChz+3o6KhYW1sr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w8bGhtq1a7NixYoixVIcknQLIcQTSKfTsWHDBrp27UqDBg2IjIzk+++/Jzo6mvnz51O1alVTh/jYkDHdoiiCgoL47bffuHbtGn369OH999+natWqjBs3jrNnz5o6PCGeOObm5gwZMoSVK1fmSlTXr19PdnY2L7/8MpGRkfTs2ZNnn32WkydPsm7dOg4cOMDYsWPzrVNRFIKDg7lz5w579+5l586dXLp0KddEhH/++SfPPvsszzzzDMePHyckJIQWLVrkW9/Ro0cBWLFiBTdv3uTo0aP4+PjQrVu3PAnlihUrGDZs2ANbkD/66CMaN27MX3/9xdSpU5k4cSI7d+584PM0ffp03n33XU6cOEGdOnV48cUX0el0wL1VC7Kysti3bx+RkZF88MEH2NvbP7C+/GRkZPDZZ5+xdu1atm/fzp49e3j22WfZunUrW7du5YcffuCbb77h119/zXXc5s2b6devHwD/+c9/OH36NNu2bePMmTN8+eWXuLq6FjmWIlOEEEI8MeLj45V58+Yp1apVU6pVq6a88847ytWrV00d1mMtNTVV2bx5sxKbdks5dedaqZ8vOztb+f3335Xs7OxSP5cofTk5Ocr27duV3r17K5aWlkpQUJDy+++/KzqdztShCVHhZWZmKqdPn1YyMzMfuN+ZM2cUQAkNDTWWderUSXnxxRcVRVGUwYMHK2+88UauY/bv36+YmZkZ6/b29lY++eQTRVEUZceOHYparc71+RsVFaUAypEjRxRFUZS2bdsqL7/8coEx3V+foigKoGzcuDHXPuvWrVOcnZ0VjUajKIqinDhxQlGpVEp0dPQD633qqadylQ0aNEh5+umn8z1XdHS0Aijffvttnms5c+aMoiiK0qhRI2X27NkFnvNh16YoirJixQoFUC5evGgsGzlypGJra6ukpqYay3r27KmMHDnS+LtGo1EcHByUkydPKoqiKH369FGGDx/+wPOvWLFCqVSp0kPjLOzrR1EURVq6hRDiCXD06FEGDx5MjRo12Lx5M/Pnz+fKlSssWrSIGjVqmDq8Ci1H0ROXcYdjCdFsufI3X5/ez+yjW3lz3y8M2rGC50N+QK/X0+23FTyz5UeycnSmDllUIIbZz7ds2cLFixdp0qQJI0eOxNfXlw8++IDExERThyjEY69evXq0a9eO77//HoBLly6xf/9+Xn31VQCOHTvG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3/zmN5w5c4bFixej0+n47LPPOHv2LKmpqd0afWVmZvLaa6/xzjvv4O19/dF1crmcCRMmYG9vz+HDh4mIiMDPb3BuGA11w63Hz8+PhoYG0tLSBn3qhZBYWFjw5ptv8rvf/Y67775baqomITHImDzS/emnnzJ16lRsbW2xtbVl6tSpPbrPASQlJSGTyVi3bh3Hjx/nxhtvxM7ODgcHBxYuXNij3ftQZN68eQZ9ud122209TCx0zrdLSEigpqaGU6dO9fv8vvLqq6+SmZnJJ598ctUvSUP31mg06HS6bhcPcrm8xyB6CcM5d+4cL774Im+++eaIShtuamoiPT2diRMn4uTkJLScazLYEe+mpib279+PTqdj1qxZkuE2EYOVYt7c1vn5KaWBGsbGjRvJy8ujoaGB9957r0/PmThxIuvWrevxb9GiRX3eV19KpVAoSEpK4p///Cd///vfycjIYNq0aWzbto2vvvqq6/yjR4+Snp7Oe++9xwcffMCHH37Iu+++2/W4no6ODu677z5mzJhh0M1qmUzGmDFjiI2N5cyZM5w6dcrk373DxXDrGT9+PJaWlpw4cYL/9hMeEdxyyy3MnTuX1atXCy1FQmLEYVLTvXr1apYuXcr58+e5//77Wb58OWVlZSxdupTHH3+81+ekp6cTHx+PmZlZV330jh07mDdvHiqVypRyhxT6O699nb1p6Pl6Tp8+zfr163nuuecYP368YSKvsbetrS0333wzd911F4899hiLFy/m9ddf5+677+7XHhL/Y9WqVcydO5dbbrlFaCmDhkajIT09HV9fX3x8fISW0ycGy3hXVlayf/9+3N3diY2NHTFRGyGYMn5wIkM6XafxNldAi6p9UPYUAwkJCQQHBw96ScXXX39NVVUVd911F5MnT+563NLSkhdeeAHonAurp6Skc+Z7TExM12PTpk3rdgzg9ddfJzs7m48++qhfr8nNzY1Zs2Zx6dIlUlNTaW83zXtpuBlu6AwCTJ48mdra2hHXWO3tt9/u6gkjISExeJgsvfzAgQO8+eabhIWFkZKS0jU/cv369UydOpWNGzdy2223ERfXfRzKjz/+yFdffcUdd9zR9di9997L559/zo4dO/pcZ7Vu3TqD9K5atQpHR0eDnmMqzp07x549e/Dw8CAiIsLo5+vp6Ohg6dKlhIWF8fTTTxtd66effspjjz3G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Emg0GtjZ2aFjx47o0qULfH19dcW6U6dOBjOLgIiIqClYuomIiJpIq9WivLwchYWFKCwsREFBge7PO2/FxcWorKyEmZkZHB0d4ejoCLlcDqlUqrtZW1vD2toaMpkMNjY2sLGxga2tLWxtbXUfy+VyyOXy+y4C9zClu7q6Gjdv3kR5eTnKyspQXl6OiooKlJeX49atW6ioqIBSqcStW7dw69Yt3L59G5WVlaisrMSNGzdw48YN3Lx5EwDg4OCgO8Dg6uqK9u3bo127dro/27VrBxcXF5ibm+vl34CIiKi1Y+kmIiJqAUqlskExv3HjRoNiW190KyoqcOvWLd3nKisroVQqUV1drduXubk5RCIRTExMYGJiApFIBLFYrLtPrVYD+PuggEajgVarhVqthlarhUqlgkqlAgCYmJhAKpVCJpPpir9MJoO1tTVsbGx0f955n7Ozs65QKxQKTv8mIiJ6AJZuIiIiA6BSqVBZWakbea4v1BqNBmq1usHH9WX8nzexWAyxWKwr0ZaWllyQjIiISM9YuomIiIiIiIj0pHUstUpERERERETUBrF0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExERGTi1Wo3Vq1cjLCwM9vb2MDU1hUKhQM+ePTFjxgz88ccfQkckIiIyWiKtVqsVOgQRERE1jVqtxvDhwxEXFwe5XI5hw4bBzc0NpaWluHTpEhITExEUFITDhw8LHZWIiMgoSYQOQERERE0XGxuLuLg4+Pv74+DBg7C1tW3w+Zs3b+LUqVMCpSMiIiJOLyciIjJgiYmJAICYmJi7CjcA2NnZITIysqVjERER0f9i6SYiIjJgTk5OAICMjAyBkxAREVFjeE43ERGRATt79iyCgoKgUqkwceJEREdHIzAwEN7e3kJHIyIiInCkm4iIyKD5+/vj559/houLC3766SeMHz8eHTp0gKOjI8aMGYOdO3cKli0mJgYikQjZ2dmCZfintWvXQiQSYe3atUJHISIiI8HSTUREZODGjh2LnJwc7Nq1C++//z6GDx8OtVqNzZs3Y9iwYZg+fTqaa2KbSCS6741lloiIqCGuXk5ERNQGmJqaIioqClFRUQD+vpTY77//jueffx5r1qzByJEjER0d3WyP9+GHHzZ6f0BAQLM9BhERUVvA0k1ERNQGicVijB8/HikpKVi0aBH27dvXrKX7o48+arZ9ERERtWWcXk5ERNSGWVtbA0CzTS9vLhs3bsSAAQNga2sLS0tL9OjRA5988gmqq6sb3f7kyZMYPXo0FAoFzM3N4enpiZdeegkFBQWNbn/p0iWMGzcOdnZ2kEqlCA4Oxp9//qnPp0RERNQojnQTEREZsNjYWDg6OmLQoEEwMWl4LL2oqAirV68GAISGhgoRr1Fvv/02Fi9eDCcnJ0yaNAlSqRQ7d+7E/PnzERcXh71798LMzEy3/bZt2zBu3DiIRCKMHTsWHh4eOHnyJFatWoVt27bh8OHD6NChg277zMxM9OvXDyUlJXj66acREBCAS5cuYdSoURg6dKgQT5mIiIwYSzcREZEBO3bsGJYvXw4XFxeEhIToLhWWlZWFHTt2oKqqCtHR0Rg7dmyzPm5j08u9vLwQExNz369LTEzE4sWL4enpiePHj0OhUAAAPv30U0RHR2Pnzp1YsmQJ5s+fDwBQKpV4/vnnodFokJCQgODgYN2+Pv30U7z77rt48cUXsWfPHt39M2fORElJCZYtW4ZZs2bp7t+2bRtGjRrV9CdNRETUBLxONxERkQHLzc3FH3/8gb179yI1NRWFhYWorq6Gg4MDevXqhYkTJ2LixIl3jYI3lUgkuufnwsLCcODAAd3fY2Ji8OOPPyIrKwteXl4AgBkzZuC///0vVq9ejRkzZjT4+vT0dHTr1g2enp64cuUKAGDDhg2YPHkyJk2ahA0bNjTYvq6uDj4+PsjJyUF2djY8PT2Rl5cHd3d3eHt7IzMzE2KxuMHXhIeH4+DBg/jhhx8eeICAiIioOXCkm4iIyIC5u7tj5syZmDlzZos+blOP2ScnJwMAIiIi7vpcly5d4ObmhqysLJSVlUEul993e1NTU4SFhWHdunVITk6Gp6enbvuQkJC7Cjfwf6WbiIiopXAhNSIiImox5eXlAAAXF5dGP9+uXbsG2zV1e2dn50a3v9d+iIiI9IWlm4iIiFqMra0tgL8XeWtMYWFhg+2aun1xcXGj299rP0RERPrC0k1EREQtplevXgDQ4NzvepcuXUJeXh68vb0hl8sfuL1KpcLhw4cBAL17926w/eHDh6FWq+/6msb2Q0REpE8s3URERNRinn/+eQDAokWLcP36dd39arUab7zxBjQaDaZPn667f9SoUbC3t0dsbCySkpIa7GvZsmW4cuUKIiMj4eHhAQBwc3PDU089haysLKxcubLB9tu2beP53ERE1OK4kBoRERG1mODgYLz11ltYvHgxevTogbFjx0IqleKvv/7C+fPnERISgjfffFO3vUwmw5o1azBu3DiEhYVh3Lhx8PDwwKlTp7B79264uLjgu+++a/AY33zzDfr164fZs2dj9+7d8Pf3x6VLl7BlyxaMGDEC27dvb+mnTURERowj3URERNSiPv/8c8TGxsLHxwfr1q3D119/DY1Gg0WLFmHPnj0wMzNrsH10dDQSExMxdOhQ7Nq1C1988QUuXryIf/3rXzh16hQ6dOjQYHsfHx8kJSVhzJgxSExMxPLly5Gbm4utW7di9OjRLflUiYiIeJ1uIiIiIiIiIn3hSDcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnrB0ExEREREREekJSzcRERERERGRnvx//LdVHQ0PisIAAAAASUVORK5CYII=", + "text/plain": [ + "
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define bin sizes\n", + "width_direction = 10 # in degrees\n", + "width_velocity = 0.25 # in m/s\n", + "\n", + "# Create a rose plot\n", + "ax = tidal.graphics.plot_rose(\n", + " data.d,\n", + " data.s,\n", + " width_direction,\n", + " width_velocity,\n", + " metadata=metadata,\n", + " flood=flood,\n", + " ebb=ebb,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Velocity Duration Curve\n", + "\n", + "The velocity duration curve shows the probability of achieving a particular velocity value. After computing the exceedance probability, the rank order of velocity values can be plotted as follows." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Velocity Duration Curve\n", - "\n", - "The velocity duration curve shows the probability of achieving a particular velocity value. After computing the exceedance probability, the rank order of velocity values can be plotted as follows." + "data": { + "image/png": "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Y4qJiSn07IXPP/9cnTp10rx589SzZ089/vjjatu2rSZPnqy2bdsWe+G9OM8++6xuu+027dy5U3feeacefvhhOZ1Ovfjii4qJiVFOTk6h7SdNmqTo6GjNnj1b0dHRevLJJ3XDDTcoISFBH3744UWP1b17dz322GOSpJYtWxY8U2L06NFq1aqVGjVqpB49emjx4sWKi4sr8voVK1Zo69at6tevn0JDQy/p/C7m3CyZuLg4de3aVTabTffee6/Cw8M1c+ZMDR8+XHPmzFH79u2Vnp6uIUOGqEGDBvr555919913F9nfzz//rJycHN18882Flr/++uvq2rWrNmzYoGuuuUZPPPGE+vXrp9zcXM2fP/+KzwMAAAAob3jGBgAAAFCBVa1aVf3799e0adM0ffr0IhfMJ02aJOnM8zjOiYuL0/3336/IyEgtWbKk0O2eFi1apF69eunRRx/V7NmzL3rsFStW6M0331SdOnW0du1aVatWTZI0duxY9evXT3PnztVbb72lF198UdKZmQsPPvig/P39tWzZMjVt2rTQ/g4dOnTR43Xv3l1169bVhAkT1KpVq2KfffHggw9q8eLFmjhxosaNG1do3SeffCJJuv/++y96nEt1rthYv3691qxZo2bNmkmS/vnPf6p27dqaN2+eNmzYoF9//VXt27eXJGVnZ6tevXpaunSpsrKy5OnpWbC/WbNmycfHR7169SpYlpCQoJdfflldu3bVwoULZbfbC2VISkpyybkAAAAA5QkzNgAAAIAK7lxp8dfbUcXHx2v+/PkKDQ3VTTfdVLD8o48+Um5ursaPH1/kGRY9e/ZU37599eOPPyo1NfWix/38888lSS+99FJBqSFJVqtV77zzjsxmsz799NNCx83Ly9M///nPIqWGJIWHh1/iGV9Y//79VbNmTU2dOlXZ2dkFy0+dOqXp06erXr16uvbaa6/4ONL/io2pU6cWlBqS5O/vr4iICOXl5entt98uKDUkycPDQw0aNJDT6VR6enrB8qysLM2bN099+vQpVHbs2LFD+fn5ioqKKlJqSFJISIhLzgUAAAAoT5ixAQAAAFRwPXv2VL169bRs2TLt3LlTUVFRkqTPPvtM+fn5GjZsmKzW//3XYNWqVZKk2NhYrV27tsj+EhMT5XA4tGvXLrVp0+aCx920aZMkqUePHkXWRUVFqVatWtq3b5+S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", + "text/plain": [ + "
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Calculate exceedance probability of data\n", + "data[\"F\"] = tidal.resource.exceedance_probability(data.s)\n", + "\n", + "# Plot the velocity duration curve (VDC)\n", + "ax = tidal.graphics.plot_velocity_duration_curve(data.s, data.F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot by phase direction\n", + "\n", + "MHKiT can produce plots of velocity by probability and exceedance probability for each tidal phase. Using the ebb and flood direction calculated earlier we can simply pass our directions, velocities, ebb, and flood direction to createthe following plots:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Y4qJiSn07IXPP/9cnTp10rx589SzZ089/vjjatu2rSZPnqy2bdsWe+G9OM8++6xuu+027dy5U3feeacefvhhOZ1Ovfjii4qJiVFOTk6h7SdNmqTo6GjNnj1b0dHRevLJJ3XDDTcoISFBH3744UWP1b17dz322GOSpJYtWxY8U2L06NFq1aqVGjVqpB49emjx4sWKi4sr8voVK1Zo69at6tevn0JDQy/p/C7m3CyZuLg4de3aVTabTffee6/Cw8M1c+ZMDR8+XHPmzFH79u2Vnp6uIUOGqEGDBvr555919913F9nfzz//rJycHN18882Flr/++uvq2rWrNmzYoGuuuUZPPPGE+vXrp9zcXM2fP/+KzwMAAAAob3jGBgAAAFCBVa1aVf3799e0adM0ffr0IhfMJ02aJOnM8zjOiYuL0/3336/IyEgtWbKk0O2eFi1apF69eunRRx/V7NmzL3rsFStW6M0331SdOnW0du1aVatWTZI0duxY9evXT3PnztVbb72lF198UdKZmQsPPvig/P39tWzZMjVt2rTQ/g4dOnTR43Xv3l1169bVhAkT1KpVq2KfffHggw9q8eLFmjhxosaNG1do3SeffCJJuv/++y96nEt1rthYv3691qxZo2bNmkmS/vnPf6p27dqaN2+eNmzYoF9//VXt27eXJGVnZ6tevXpaunSpsrKy5OnpWbC/WbNmycfHR7169SpYlpCQoJdfflldu3bVwoULZbfbC2VISkpyybkAAAAA5QkzNgAAAIAK7lxp8dfbUcXHx2v+/PkKDQ3VTTfdVLD8o48+Um5ursaPH1/kGRY9e/ZU37599eOPPyo1NfWix/38888lSS+99FJBqSFJVqtV77zzjsxmsz799NNCx83Ly9M///nPIqWGJIWHh1/iGV9Y//79VbNmTU2dOlXZ2dkFy0+dOqXp06erXr16uvbaa6/4ONL/io2pU6cWlBqS5O/vr4iICOXl5entt98uKDUkycPDQw0aNJDT6VR6enrB8qysLM2bN099+vQpVHbs2LFD+fn5ioqKKlJqSFJISIhLzgUAAAAoT5ixAQAAAFRwPXv2VL169bRs2TLt3LlTUVFRkqTPPvtM+fn5GjZsmKzW//3XYNWqVZKk2NhYrV27tsj+EhMT5XA4tGvXLrVp0+aCx920aZMkqUePHkXWRUVFqVatWtq3b5+S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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Calculate exceedance probability of data\n", - "data['F'] = tidal.resource.exceedance_probability(data.s)\n", - "\n", - "# Plot the velocity duration curve (VDC)\n", - "ax = tidal.graphics.plot_velocity_duration_curve(data.s, data.F)" + "data": { + "text/plain": [ + "" ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot by phase direction\n", - "\n", - "MHKiT can produce plots of velocity by probability and exceedance probability for each tidal phase. Using the ebb and flood direction calculated earlier we can simply pass our directions, velocities, ebb, and flood direction to createthe following plots:" + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/gAAAK4CAYAAADA9FZPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADTT0lEQVR4nOzde3yU5Z3//9d9mMwMiByLYkRAxEi/FIEUaYNQpApdbBF3cSvKt1XQ3a5a1HapuLYCrfVEt7au2N1VpNuyYlu/rdhKS4poOcRF5CA/uohIQTBiMUgAYSYz9+H3R8iYyDEkcCf39X4+Hj68yAyTz8X1nuuea+5r7rHCMAwRERERERERkVbNjroAEREREREREWk6LfBFREREREREYkALfBEREREREZEY0AJfREREREREJAa0wBcRERERERGJAS3wRURERERERGJAC3wRERERERGRGNACX0RERERERCQGtMAXERERERERiQEt8EVERERERERioEUu8J999lm+/vWvM2zYMM4880wsy2LixIkn9VjvvPMOkyZN4pxzziGZTNKzZ0/uuOMO9uzZ08xVi4iIiIiIiETHjbqAI7nvvvt4/fXXOeOMMzj33HN54403TupxtmzZQllZGbt27eKqq67ioosu4tVXX+XHP/4xf/jDH1ixYgWdO3du5upFRERERERETr8WeQb/kUce4c0332Tfvn385Cc/OenHueWWW9i1axePPvoozz33HA8++CBLlizhzjvvZNOmTdxzzz3NWLWIiIiIiIhIdKwwDMOoiziWl19+mcsuu4zrr7+eefPmnfDf27JlCxdccAG9evXirbfewrY/ei9j//79dOvWjSAI2LVrF2ecccapKF1ERERERETktGmRZ/Cbw0svvQTAqFGjGizuAdq1a8fQoUPJZDKsXLkyivJEREREREREmlWL/Ax+c9i0aRMAffr0OeLtffr0oby8nDfffJPPf/7zR7xPTU0NNTU1hT8HQcAHH3xA586dsSyr+YsWERERERERqScMQ/bv388555xz2Mnrj4vtAn/v3r0AtG/f/oi31/28urr6qI/xwAMPMHPmzGavTURERERERKQxduzYwbnnnnvM+8R2gX88dZceONaZ+LvvvptvfOMbhT/v3buX8847j23bttGxY0d83wfAcZwGbc/zsCyr0LZtG9u2j9rO5/M4jlNo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LaFPn9o+zZlTTnFxbZ/mz19Ip05Z0mmP+fMXkk57dOqUZf782j4VF+9nzpzaPvXpU81jj9X2qX//Kh5+uLZPQ4bsZObM2j6NGLGDadNq+zRmzFZuv712nMaP38zNN9eO08SJG5k4sbZPN9+8nvHja/t0++1rGTOmrk+vMmLEjiP06WGy2exh4zRnzhyKi71W2qeG49Sr136eeeYi/uM/XjzCOIXMnz+fMAwPy9677757qE+5Ften5s/eX4HarxGr/3yqu3jzmDEftsI+fTRO3/nOSp555iIuvfTdY4xT7e+vrq5u9fMexG8ub2qfVq5cyZlnnonjOE3uU0lJX66++mo2b95MaWkp119/Pa+//jqlpaXcdNNNvPLKK5SWljJlyhRefPFFSktLmTZtGr/73e8oLS3lu9/9Lr/85S8pLS3lBz/4AT/96U8pLS1l9uzZzJ49m9LSUn7605/ygx/8gNLSUn75y1/y3e9+l9LSUn73u98xbdo0SktLefHFF5kyZQqlpaW88sor3HTTTZSWlvL6669z/fXXU1payubNm7n66qspLS2lsrKS0aNHM2zYMCorKxk2bBijR4+msrKS0tLSI/appKQv//u//9vis3eirLCFXXb7H/7hH3jiiSd44oknuOmmmw67/V/+5V944IEHeOCBBwoLuyP51re+xaxZs7Btm3Xr1vGpT32qcFsmk+HCCy/knXfeoaKi4qjb9Y90Br979+588MEHdOzYscW8U2hZFmvWrKF///6kUilWr17NpZdeyopvZxnQK95n8Fdvcxn6XYeKigouvvjiBu+qrV27lsGDB/Pa9xMM6Nl6+nQy47TmbZdf7bmV8ePHU1paWsje66+/zqc//WlWfT/JoJ6tq0+NHafXt+b49LcDVq1axaBBgxo8n9auXcull17KsnuyDOrVevp0ouPkkWBN8hsMqvkh67fmGfb9FMuXL2fgwIEt4mxCHM+QtLQ+AaxZs4aLL764cCb/WH16/fXXKSsrw/dX4HmlMT+Dv45UaijLly+ntLS0ME7r1q3j0ksvpaZmGUFQ2sr6dPg4QcjXv/46//mf/di/P/WxcVpDOj2MZcuWMWjQoAbZW716NYMHD8a2X6OoqH+L6lPzZ28N2exgXnvtNS6++OLC82nNmjUMHjwY130N2764lfXpo3Fq0ybH1772//HYYxcTBPZRxmkt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PFAXGUgkEowZM6bW+/70pz+xefNmrr/+eoqKirR9vxGqq3WgX79+uK7Lzp07yeVyVZ+YXGnr1q0AdOrUqW4HIOekruY/l8sBnPSDFCtvTyQSdVG2NEJ6PSiV9HowYsz9hT6pTXFxcQiEs2bNqnH7pEmTQiD81re+VXVbLpcLt23bFu7cufOcziONS11l4J//+Z9DILz66qvDgwcP1nvdUnfqKgO1KS0tDYFwzpw5dVqz1K26ysCdd94ZAmFpaWmN21etWhValhW2aNEiPHz4cH0MQc5BXcz/M888EwLhRRddFO7fv7/GfStWrAgtywqTyWT4t7/9rf4GInXi0/4Gul4PFr5zyYBeD0aPFYaffMKGNAq7du2id+/eHDhwgCFDhnDFFVewceNGXnrpJbp168aGDRto06YNAHv27KFz58507NiRPXv2nPV5pHGpiww88cQTjBo1CsdxuOeee2p9f12nTp0YNWpUA41KzkRdrQO1efDBB5k2bRpz5sxh7Nix9TwSOVt1lYEDBw7Qp08fdu7cSb9+/ao+RX/JkiVYlsXChQu54447DIxQTqUu5j8IAgYMGMALL7xAs2bNuP3222nXrh3btm3jt7/9LWEY8uijjzJx4kRDo5RTWbp0KUuXLgXg3XffZeXKlVx66aX07dsXgAsvvJCf/vSngF4PFqq6yIBeD0aU4V8wSC3eeuutcNSoUWG7du3CWCwW/t3f/V04YcKEE37rtnv37hAIO3bseE7nkcbnXDNQeZX2VF833HBDww1IzlhdrQPH0xX880ddZeDgwYPhpEmTwk6dOoWxWCxs3bp1OHjw4PDVV19tgFHI2aqL+c/lcuHPfvaz8Etf+lLYrFmz0HGc8DOf+Uw4aNCgcOXKlQ00Ejkbn/Y8Xn2+9XqwMNVFBvR6MJp0BV9ERERERESkAOhT9EVEREREREQKgBp8ERERERERkQKgBl9ERERERESkAKjBFxERERERESkAavBFRERERERECoAafBEREREREZECoAZfREREREREpACowRcREREREREpAGrwRURERERERAqAGnwREZHz2KhRo7Asiz179jTY9+zUqROdOnVqsO9X3S9/+Ussy6r6uvXWW43UcSZuu+22GjX/8pe/NF2SiIgUKDX4IiIi9WDEiBFYlsXPf/7zT33sTTfdhGVZ/Pa3v22AyupHZePdUM3rkCFDKC0tZeTIkQ3y/QCuvPJKPv/5z5/xfzdixAhKS0sZMmRIPVQlIiJyjBp8ERGRevDNb34TgDlz5pzycbt27eLll1+mffv2fPnLX26I0s7Ziy++yIsvvmi0hqFDh/Lggw82WIO/Y8cO/vrXv3L77bef8X87YsQIHnzwQYYOHVr3hYmIiFSjBl9ERKQe3HjjjXTr1o3Nmzfzpz/96aSPmzt3LmEYMnr0aBzHacAKz16XLl3o0qWL6TIa1JIlSwDOqsEXERFpKGrwRURE6sm4ceOAiia+Np7n8ctf/hLbthkzZkzV7du3b2fUqFF06NCBRCLBRRddxIgRIygrKzuj7//MM8/Qt29fWrRoQSqVonv37vzkJz8hk8nU+vj9+/czYcIELrvsMpLJJK1bt+aaa67hoYceqvG449+Df+ONN1JSUgJASUlJjfeb79mzh6lTp2JZFk8++WSt3/f111/Hsiy+8pWvnNH4avPggw9iWRZr1qxh0aJFXH311TRp0oRLLrmE7373u2SzWQB+//vfc8MNN9CsWTNatWrFXXfdxaFDh0563meffZbOnTvTo0ePqtuWLFnCTTfdRLt27UgkErRr147rr7+e2bNnn/M4REREzoYafBERkXpy9913E4/HWbhwIel0+oT7f/vb3/Luu+9SXFxMx44dAXj++ee56qqrWLhwIb169WLixInccsstPPvss1xzzTWn3A1Q3ZQpUxg2bBhlZWXceeed/K//9b8Iw5Dvf//7FBcXk8vlajz+j3/8I1/4whf4t3/7N9q3b8/EiRMZMWIEF1xwAQ8++OApv9eoUaOq3l9e+d74yq+WLVvy7W9/G9u2+Y//+I9a//tf/OIXAHzrW986rbGdjn/7t39jzJgxFBUV8Y//+I+0adOGn/3sZ3z729/mV7/6Fbfddhtt2rTh29/+Np/73Od46qmnuPPOO2s919tvv82mTZtqXL3/+c9/zle/+lW2b9/O4MGDue+++7jtttvI5XL6ED0RETEnFBERkXrzD//wDyEQPvHEEyfcN3DgwBAIn3322TAMw/DQoUNhy5YtwwsvvDDctm1bjcdu3bo1bNq0adijR48at999990hEO7evbvqtldeeSUEwo4dO4bvvfde1e35fL7qe/7oRz+quj2bzYadOnUKgXDhwoUn1PnWW2/V+HfHjh3Djh071rhtwYIFIRAuWLCg1v8fBg0aFALhX/7ylxq3HzlyJGzatGnYoUOH0PO8Wv/bM/k+paWlIRA2b948/Otf/1p1eyaTCT/3uc+Ftm2HLVu2DNesWVN1XxAEYXFxcQiEmzdvPuGcjz/+eAiE69atq7qtZ8+eYTwer/H/b6X333//rGoXERE5V7qCLyIiUo8qP2zv+G36+/fvZ+XKlbRr165qa/qTTz7JBx98wLRp07j88strPP7KK69k3LhxbNmyhf/zf/7PKb/nggULAPjBD35A27Ztq253XZd//dd/xbZt5s2bV3X7f//3f7Nnzx4GDx7M8OHDTzhfhw4dzmDEtfvOd74DwP/+3/+7xu1PP/00H3/8MePGjavTzyCYOHEiV1xxRdW/E4kE3/jGNwiCgK985SvccMMNVfdZllV19f7Pf/7zCedasmQJbdu2pXfv3jX+G9d1icViJzz+wgsvrLNxiIiInAnXdAEiIiKF7Oabb6ZLly6sW7eOsrIyioqKAJg/fz6+71NSUoLrVjwdv/rqqwBs2bKl1m3xO3bsACreo3/llVee9Htu3rwZqPjze8crKiris5/9LLt37+aDDz6gZcuW/OEPfwCo10/xv/XWW+ncuTNPPfUUM2bMIJVKAfAf//EfuK5b4zMI6sLVV199wm2XXHLJp963f//+GrcfOnSIl19+mZKSEmz72HWRO++8k/vuu48rr7ySYcOG0a9fP/r06cNnPvOZuhyGiIjIGVGDLyIiUo8sy2Ls2LHcf//9zJ07l5kzZxIEAfPnz8eyrBqN7cGDB4FP/9N6H3300Snv//DDDwFo165drfdffPHFvPXWW3z44Ye0bNmSDz74AID27duf7rDOmG3bfOtb32Lq1Kn86le/4u6772bjxo38+c9/5vbbb69qsOtKixYtTrit8hcpp7ovn8/XuP2///u/8TyPr371qzVu/+53v8uFF17Iv//7v/PYY4/xs5/9DMuyuOmmm5g5cyZXXXVVXQ1FRETktGmLvoiISD0rKSkhFovx5JNPks/n+f3vf8/evXurru5Xqmw8//znPxOG4Um/7r777lN+v8rzvPvuu7Xe/84779R4XMuWLYGKD5OrT2PGjCGRSFR92F7l/9blh+vVtSVLltC8eXNuvvnmE+676667+MMf/sDBgwdZvnw5Y8aMYc2aNRQXF/P+++8bqFZERKJODb6IiEg9u+iiixg8eDAHDhxg2bJlVe/Hr3x/fqVrr70WgHXr1p3T9+vZsycAa9asOeG+nTt3sn//fjp37lzV2Fd+35UrV57196x8/7zv+yd9zIUXXsgdd9zBq6++yiuvvMIzzzxD586dKS4uPuvvW5/Ky8tZtWoVgwYNIh6Pn/RxLVu2ZODAgcyZM4dRo0Zx8ODBc55DERGRs6EGX0REpAGMGzcOgJkzZ/Lcc8/xmc98hqFDh9Z4TElJCS1btmTatGm89tprJ5wjCIJam/bjjR49GoAf/ehHNa4k+77P9773PYIgqPHWgK985St06tSJpUuX8qtf/eqE853Olf02bdoAsG/fvlM+rvLD9v7hH/6B8vJyvvnNb2JZ1qee34Tf/e53pNPpGn8er9Lzzz+P53kn3H7gwAEAkslkvdcnIiJyPL0HX0REpAEUFxfTuXNnNm7cCMDdd999wlXhNm3a8F//9V/cfvvtXHvttdxyyy1ceeWV2LbNW2+9xauvvsrBgwfJZDKn/F69e/fmn/7pn3jkkUfo3r07X//612natCm/+93v2Lp1K9dffz2TJ0+uenw8HufXv/41xcXFfOMb3+AXv/gF11xzDel0mm3btrF69epam9nqrrvuOpo0acKjjz7KwYMHueiiiwC45557arzn/brrrqNHjx5s2bKFWCxGSUnJGf3/2JCWLFlCMpms9cMHhw0bRjKZ5Prrr6dTp06EYci6devYtGkTV111Ff379zdQsYiIRJ0afBERkQZQ+YF6P/jBDwAYO3ZsrY+75ZZbeOONN/jpT3/KypUrWbduHfF4nEsuuYSbb76Zr33ta6f1/WbMmEHPnj15/PHHq97736VLF370ox9x3333nfDLhS9+8Yts2bKF6dOn87vf/Y5XXnmFZs2a0bVrV6ZNm/ap369Vq1b85je/Ydq0aSxYsICPP/4YgJEjR57woXYlJSVMnDiR22+/veoXAY1NPp9n+fLl/P3f/z0XXHDBCfdPnz6dlStX8qc//YkVK1aQTCbp2LEjM2bM4B//8R9PuaVfRESkvlhhGIamixAREZHouOuuu3jqqad48cUXa/3wulP55S9/SUlJCQsWLGDUqFH1UyCwatUqBgwYwPz58+tsl0FD1S4iItGl9+CLiIhIg9m7dy/PPPMMn/vc5864ua+upKQEy7K49dZb67C6Y5YsWYLjOHzlK18553PddtttWJbVqN+OICIihUFX8EVERKTePfXUU5SVlfHMM8+wc+dOnn322Vo/vO7TbNmyhaVLl1b9u2vXrowcObIOK617CxcuZMeOHVX/Hjp0KD169DBXkIiIFCw1+CIiIlLvbrzxRtauXUuHDh343ve+xz333GO6JBERkYKjBl9ERERERESkAOg9+CIiIiIiIiIFQA2+iIiIiIiISAFQgy8iIiIiIiJSANTgi4iIiIiIiBQANfgiIiIiIiIiBUANvoiIiIiIiEgBUIMvIiIiIiIiUgDU4IuIiIiIiIgUgP8P0vqeIpnWhe8AAAAASUVORK5CYII=", + "text/plain": [ + "
" ] - }, + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tidal.graphics.tidal_phase_probability(data.d, data.s, flood, ebb)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/gAAAK4CAYAAADA9FZPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADTT0lEQVR4nOzde3yU5Z3//9d9mMwMiByLYkRAxEi/FIEUaYNQpApdbBF3cSvKt1XQ3a5a1HapuLYCrfVEt7au2N1VpNuyYlu/rdhKS4poOcRF5CA/uohIQTBiMUgAYSYz9+H3R8iYyDEkcCf39X4+Hj68yAyTz8X1nuuea+5r7rHCMAwRERERERERkVbNjroAEREREREREWk6LfBFREREREREYkALfBEREREREZEY0AJfREREREREJAa0wBcRERERERGJAS3wRURERERERGJAC3wRERERERGRGNACX0RERERERCQGtMAXERERERERiQEt8EVERERERERioEUu8J999lm+/vWvM2zYMM4880wsy2LixIkn9VjvvPMOkyZN4pxzziGZTNKzZ0/uuOMO9uzZ08xVi4iIiIiIiETHjbqAI7nvvvt4/fXXOeOMMzj33HN54403TupxtmzZQllZGbt27eKqq67ioosu4tVXX+XHP/4xf/jDH1ixYgWdO3du5upFRERERERETr8WeQb/kUce4c0332Tfvn385Cc/OenHueWWW9i1axePPvoozz33HA8++CBLlizhzjvvZNOmTdxzzz3NWLWIiIiIiIhIdKwwDMOoiziWl19+mcsuu4zrr7+eefPmnfDf27JlCxdccAG9evXirbfewrY/ei9j//79dOvWjSAI2LVrF2ecccapKF1ERERERETktGmRZ/Cbw0svvQTAqFGjGizuAdq1a8fQoUPJZDKsXLkyivJEREREREREmlWL/Ax+c9i0aRMAffr0OeLtffr0oby8nDfffJPPf/7zR7xPTU0NNTU1hT8HQcAHH3xA586dsSyr+YsWERERERERqScMQ/bv388555xz2Mnrj4vtAn/v3r0AtG/f/oi31/28urr6qI/xwAMPMHPmzGavTURERERERKQxduzYwbnnnnvM+8R2gX88dZceONaZ+LvvvptvfOMbhT/v3buX8847j23bttGxY0d83wfAcZwGbc/zsCyr0LZtG9u2j9rO5/M4jlNo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LaFPn9o+zZlTTnFxbZ/mz19Ip05Z0mmP+fMXkk57dOqUZf782j4VF+9nzpzaPvXpU81jj9X2qX//Kh5+uLZPQ4bsZObM2j6NGLGDadNq+zRmzFZuv712nMaP38zNN9eO08SJG5k4sbZPN9+8nvHja/t0++1rGTOmrk+vMmLEjiP06WGy2exh4zRnzhyKi71W2qeG49Sr136eeeYi/uM/XjzCOIXMnz+fMAwPy9677757qE+5Ften5s/eX4HarxGr/3yqu3jzmDEftsI+fTRO3/nOSp555iIuvfTdY4xT7e+vrq5u9fMexG8ub2qfVq5cyZlnnonjOE3uU0lJX66++mo2b95MaWkp119/Pa+//jqlpaXcdNNNvPLKK5SWljJlyhRefPFFSktLmTZtGr/73e8oLS3lu9/9Lr/85S8pLS3lBz/4AT/96U8pLS1l9uzZzJ49m9LSUn7605/ygx/8gNLSUn75y1/y3e9+l9LSUn73u98xbdo0SktLefHFF5kyZQqlpaW88sor3HTTTZSWlvL6669z/fXXU1payubNm7n66qspLS2lsrKS0aNHM2zYMCorKxk2bBijR4+msrKS0tLSI/appKQv//u//9vis3eirLCFXXb7H/7hH3jiiSd44oknuOmmmw67/V/+5V944IEHeOCBBwoLuyP51re+xaxZs7Btm3Xr1vGpT32qcFsmk+HCCy/knXfeoaKi4qjb9Y90Br979+588MEHdOzYscW8U2hZFmvWrKF///6kUilWr17NpZdeyopvZxnQK95n8Fdvcxn6XYeKigouvvjiBu+qrV27lsGDB/Pa9xMM6Nl6+nQy47TmbZdf7bmV8ePHU1paWsje66+/zqc//WlWfT/JoJ6tq0+NHafXt+b49LcDVq1axaBBgxo8n9auXcull17KsnuyDOrVevp0ouPkkWBN8hsMqvkh67fmGfb9FMuXL2fgwIEt4mxCHM+QtLQ+AaxZs4aLL764cCb/WH16/fXXKSsrw/dX4HmlMT+Dv45UaijLly+ntLS0ME7r1q3j0ksvpaZmGUFQ2sr6dPg4QcjXv/46//mf/di/P/WxcVpDOj2MZcuWMWjQoAbZW716NYMHD8a2X6OoqH+L6lPzZ28N2exgXnvtNS6++OLC82nNmjUMHjwY130N2764lfXpo3Fq0ybH1772//HYYxcTBPZRxmkt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PFAXGUgkEowZM6bW+/70pz+xefNmrr/+eoqKirR9vxGqq3WgX79+uK7Lzp07yeVyVZ+YXGnr1q0AdOrUqW4HIOekruY/l8sBnPSDFCtvTyQSdVG2NEJ6PSiV9HowYsz9hT6pTXFxcQiEs2bNqnH7pEmTQiD81re+VXVbLpcLt23bFu7cufOcziONS11l4J//+Z9DILz66qvDgwcP1nvdUnfqKgO1KS0tDYFwzpw5dVqz1K26ysCdd94ZAmFpaWmN21etWhValhW2aNEiPHz4cH0MQc5BXcz/M888EwLhRRddFO7fv7/GfStWrAgtywqTyWT4t7/9rf4GInXi0/4Gul4PFr5zyYBeD0aPFYaffMKGNAq7du2id+/eHDhwgCFDhnDFFVewceNGXnrpJbp168aGDRto06YNAHv27KFz58507NiRPXv2nPV5pHGpiww88cQTjBo1CsdxuOeee2p9f12nTp0YNWpUA41KzkRdrQO1efDBB5k2bRpz5sxh7Nix9TwSOVt1lYEDBw7Qp08fdu7cSb9+/ao+RX/JkiVYlsXChQu54447DIxQTqUu5j8IAgYMGMALL7xAs2bNuP3222nXrh3btm3jt7/9LWEY8uijjzJx4kRDo5RTWbp0KUuXLgXg3XffZeXKlVx66aX07dsXgAsvvJCf/vSngF4PFqq6yIBeD0aU4V8wSC3eeuutcNSoUWG7du3CWCwW/t3f/V04YcKEE37rtnv37hAIO3bseE7nkcbnXDNQeZX2VF833HBDww1IzlhdrQPH0xX880ddZeDgwYPhpEmTwk6dOoWxWCxs3bp1OHjw4PDVV19tgFHI2aqL+c/lcuHPfvaz8Etf+lLYrFmz0HGc8DOf+Uw4aNCgcOXKlQ00Ejkbn/Y8Xn2+9XqwMNVFBvR6MJp0BV9ERERERESkAOhT9EVEREREREQKgBp8ERERERERkQKgBl9ERERERESkAKjBFxERERERESkAavBFRERERERECoAafBEREREREZECoAZfREREREREpACowRcREREREREpAGrwRURERERERAqAGnwREZHz2KhRo7Asiz179jTY9+zUqROdOnVqsO9X3S9/+Ussy6r6uvXWW43UcSZuu+22GjX/8pe/NF2SiIgUKDX4IiIi9WDEiBFYlsXPf/7zT33sTTfdhGVZ/Pa3v22AyupHZePdUM3r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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tidal.graphics.tidal_phase_probability(data.d, data.s, flood, ebb) " + "data": { + "text/plain": [ + "" ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" }, { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/4AAAKxCAYAAADq5XfAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xb1f3/8ZeWJXlm70kmJQ2EQIAwEsJsKDuMlM0PKC2ULlpK2QRKW76ldFBa2rBLmYWwCSNRlklIyGj23tOJLXloS78/jEVMluPo3itdv5+PRx4Q6+jq45O3r3WuzjnXkU6n04iIiIiIiIiILTmtLkBEREREREREjKOBv4iIiIiIiIiNaeAvIiIiIiIiYmMa+IuIiIiIiIjYmAb+IiIiIiIiIjamgb+IiIiIiIiIjWngLyIiIiIiImJjGviLiIiIiIiI2Jjb6gLsIpVKsXnzZkpKSnA4HFaXIyIiIiIiIjaXTqeprq6mS5cuOJ37/lxfA/8s2bx5M927d7e6DBEREREREWlhNmzYQLdu3fb5uAb+WVJSUgLUd3hpaanF1Ug2hUIh5syZw9ChQ/VvK4ZQxsQMypmYQTkTMyhnYrR8ylgoFKJ79+6Z8ei+ONLpdNqkmmwtFApRVlZGMBjM+XCIiIiIiIhI/mvqOFSb+4mIiIiIiIjYmAb+IgcQCoX45JNPCIVCVpciNqWMiRmUMzGDciZmUM7EaHbMmAb+Igfg8Xjo0qULHo/H6lLEppQxMYNyJmZQzsQMypkYzY4Z0xr/LNEafxERERERETGT1viLZEkymSQYDJJMJq0uRWxKGRMzKGdiBuVMzKCcidHsmDEN/EUOoLq6msmTJ1NdXW11KWJTypiYQTkTMyhnYgblTIxmx4xpqn+WaKq/fSUSCaqrqykpKcHtdltdjtiQMiZmUM7EDMqZmKEl5ywej9vqU+hclUgkqK2tpaioyPSMuVyug9pboKnjUA38s0QDfxERERERMUIoFKKiooJoNGp1KWICr9dLu3btmjSubOo4tGVdIhNphkgkwtq1a+nVqxc+n8/qcsSGlDExg3ImZlDOxAwtLWehUIhNmzZRXFxMu3bt8Hg8OBwOq8uytVQqRSwWo6CgAKfTvNXx6XSaeDxOMBhk06ZNAFn7UFkDf5EDiMVirFu3ji5durSIXy5iPmVMzKCciRmUMzFDS8tZRUUFxcXFdOvWTQN+kySTSeLxOF6vF5fLZepr+/1+SkpK2LhxIxUVFVkb+Guqf5Zoqr+IiIiIiGRTPB5n5cqVdO3aVWOMFqZhpkffvn33u+Zft/MTERERERHJYw0b+R3MZm9iDw3/5tnazFEDf5EDCIVCTJo0iVAoZHUpYlPKmJhBORMzKGdihpaYM03xN1cymSQUCll6B4Vs/5tr4C9yAB6Ph7Zt2+pKqxhGGRMzKGdiBuVMzKCcidEcDgdut9tWF1y0xj9LtMZfRERERESyKRKJsGbNGnr37t0iNjKUrzX1315r/EWyJJlMUlNTY+lUH7E3ZUzMoJyJGZQzMYNyJk1x//3343A4mDx5cpOfM3LkSBwOB+l0mmQyiZ0+I9ft/EQOoLq6mkAgwIgRI2jVqpXV5YgNKWNiBuVMzKCciRmUs8Z6/eo9q0vYr7W/PScrx2nKtPu5c+dy1FFHHfJrNVxcKi4uxu22x5DZHt+FiIGKioo48cQTKSoqsroUsSllTMygnIkZlDMxg3LWst133337fKxTp05ZeQ2n00lRURFOp30myGvgL3IAHo+Hdu3aWV2G2JgyJmZQzsQMypmYQTlr2e6//37DX8PpdNpq0A9a4y9yQJFIhBUrVhCJRKwuRWxKGRMzKGdiBuVMzKCcycF67rnnGDJkCH6/nw4dOnD99dezdevWfbYPh8P86le/onfv3ni9Xvr06cMDDzxALBYzsersysmB/+uvv86PfvQjTj75ZEpLS3E4HFx55ZX7fc6MGTMYPXo0bdq0obCwkMGDB/P444/vd9OP5557jmHDhlFcXExZWRkjR47k3Xffzfa3I3kuGo2yYsUKotGo1aWITSljYgblTMygnIkZlDM5GH/84x+5+eabOfLII/nJT37CgAEDeOaZZxg+fDg7duzY63Muu+wynnvuOc455xxuvfVWHA4H999/PxdffHHebviXk1P9H3roIebPn09xcTHdunVj6dKl+20/YcIELr74Ynw+H5dddhlt2rThnXfe4ac//SnTp0/ntdde2+M5t99+O3/4wx/o1q0bN954I7FYjJdffplzzz2Xv/zlL9x6661GfXuSZ8rKyhg9erTVZYiNKWNiBuVMzKCciRmUs5ZtX1P9fT4fv/rVr/b4+gcffMDMmTMZMmRI5ms//elPefzxx/nVr37F+PHj93jO0qVLWbx4Ma1btwbg4Ycf5tRTT+Xdd9/lxRdf5KqrrsrON2MiRzoHL1lMmjSJbt260bdvXwKBAKeeeipXXHEFL7744h5tQ6EQffr0IRQKMX36dI455higfgrQqFGjKC8v5z//+Q+XX3555jkzZszgxBNPpE+fPnzxxReZf9C1a9cydOhQamtrWbp0Kb169WpyzU29f6KIiIiIiEhTNOVe7trVv15ZWRlVVVWZv99///088MADXH/99XsM7oPBID179iQajVJVVYXX6wXqb+cXCAR4/vnn9xjcT548mVNPPZWRI0cyadKkrHxP+9OUf3to+jg0J6f6n3rqqfTr169Jt2x47bXXqKioYOzYsZlBP9Rf8XnooYcA+Nvf/tboOU8++SQAd999d2bQD9CrVy9uueUWotEoTz/9dDa+FbGB6upqpkyZQnV1tdWliE0pY2IG5UzMoJyJGZSzli2dTu/1z+6D/t2NGDFij6+VlZVx1FFHEYlEWLJkyR6Pn3TSSVRXVzdaNn7yySfjdruZO3du1r4XM+XkwP9gNFxtOfvss/d47JRTTqGwsJDy8vJGa4D295zvfOc7jdqIuFwuSkpKcLlcVpciNqWMiRmUMzGDciZmUM7kYHTs2HGvX2+49V8wGNzrc76ZL5fLRdu2bQmFQtkv0gR5P/BftmwZAP369dvjMbfbTe/evUkkEqxevRqA2tpaNm3aRHFx8V7v89hwnOXLl+/3daPRKKFQqNEfoFEQQqEQ4XAYgGQySVVVFfF4HKifurF7yKqrq6mrqwMglUo1atswBaVBTU0NtbW1AJmrWw07TMZiMaqqqjKbTtTW1h5U25qamszrVFVVZS6YxONxqqqqSKVSANTV1TW6yhoMBjM7qza0bbhCFg6H9+iXhraJROKAbb/Zh4lE4oB9mM3+TqVS9O/fn8LCwkPqw4a2DX34zbbBYLBZ/X0wfdjQtqEPs9Xfe+vD3dvuntmGtg19eKj5NiKz2ervvfXh3to2bEgai8V0jiD/zhHZyqzR5wiv18uQIUNwOBw6RxxkH1p9jti9ba6fI1KpFEOGDKGwsFDniGb2t95HHPgcEYvFOOKIIygsLLT9OSIUCmXqTaVSjT6BTiaTmfpyWUP9yWSyUf2JRCJTfyqVIpFI7Ldtg2+2PVC/bN68ea9tG3b1LykpydTZ0K6iogKfz9doI79YLMbOnTspLS0lnU7vtf7da2h4nUNpm06nG2Vgf5k9kLwf+DecFMrKyvb6eMPXG04IB9t+Xx555BHKysoyf7p37w7ArFmzMm3mzJnDihUrgPof6kAgkHn9DRs2MH369EzbuXPnZi5ixGIxAoEAO3fuBGDTpk1MnTo103b+/PmZKSmJRIJAIJDZkXLr1q0EAoFMOBYuXMjChQuB+uAEAgG2zv8UgB07dhAIBDLBW7JkCfPnz8+8ztSpU9m0aRMAO3fuJBAIZE6cy5YtazTNZfr06WzYsAGo7+NAIJA5aa1YsYI5c+Zk2paXl7N27Vqg/qQfCAQyAV6zZk2jPpw1a1ajizaBQCBzcly3bh3l5eV77e9oNEogEKCyshKAjRs3Mm3atEzbefPmZTaNjMfjBAIBKioqANiyZQtTpkzJtF2wYAH/+9//MieKQCDA9u3bAdi2bRuBQCDzw7lo0aJMfwP1/f3VSaWioqJRfy9dupR58+Y16u+NGzcCUFlZSSAQyPwgL1++nC+//DLTdsaMGaxfv75Rfzf88ly1ahWzZ8/OtP38888z/V1TU9Oov9euXcvnn3+eaTt79mxWrVoF1P/S2j2z69evZ8aMGZm2X375ZeYC2d76e/fM7t7fDZlt6O+GzDZYuHAhixYtAupPjIFAgG3btgGwfft2AoFA5uS4ePFiFixYkHnulClT2LJlS6P+bngT8c3+njZt2j77e2+ZXbduHVD/CzkQCGTeVKxevXqPzK5Zs6ZRfzf88l+7du1eM9vwhidnzhFfZVbniKafIxYvXgyQ0+eI2tpaIpEIK1eu1DmC/DpHQI69jzjAOSISiZBKpXSO+Eq+nCPy7X3Eli1bSKVStj9HfPHFF5mfx2g02mjQ13Bez3UN9UcikczPNdR/fw39m0wmqampafS9NmQSyPTX7m0bfm4ikUijx2tqahoNhj/77LPMv3k0GqW2tpZgMMi8efPw+XwcdthhQOOLApMnT860bfDJJ5+QSCQYMmQIqVSKmpqaTPtYLNbo36auri7zb5NOp6mpqcn87Mbj8UZtw+Fwo3/H3dsmk0m++OKL/Z4jGvJ9IDm5ud/uGjZR2Nfmfv3792fFihWsWLGCvn377vH48OHDKS8vp7y8nOOPP57NmzfTtWtXunbtmvlh3V08HqegoACv17vfH6RoNNooUKFQiO7du7Nhwwa6deuW+ZrH48Hv95NMJqmurqaoqAiPx0MkEiEajWYuNFRXV+NyuSgsLCSVShEKhTJto9Eo4XCYVq1aAfVhcDgcFBUVkU6nCQaDFBYWUlBQQCwWo66ujrKyMhwORyasmbYrZ1H42uUUXPIUsZ4j9mibTqcpLi4G6i9++P1+vF4v8Xic2tpaSktLcTqd1NXVkUwmM1fIgsEgXq8Xn8+XadswBSscDhOPxzObTYRCIQoKCvD5fCQSCWpqavbb9pt9WFxcjNvt3m8fZrO/N2/ezBdffMGIESMyG2fsr7/31YcNbRv68Jttg8EgPp/voPv7YPqwoW1DH2arv/fWh5FIJNN298w2tG3ow0PNtxGZzVZ/760PY7HYHm0b3vAcffTRdOrUydpzhAX9ne/niGxl1uhzRMNA7Pjjj8fv9+sckUfniJx6H3GAtsFgMPM7E9A5Io/OEfn0PmLTpk18+eWXjBgxAr/fb+tzxM6dO6moqOCwww6joKCAdDqdmYKeTCZxOBwc9usPyGVrHhmNw+HIDJIb6k8kEjidTpxOJ6lUilQqhcvl2mdbj8cDfP2JfkPbVCq113558MEHeeCBB/B4PHz++eccffTRmba33347jz/+ONdeey3jx4/H6XSSTqcZOXIkU6ZMoV+/fkycOJEuXbpQUFBAJBJh5MiRzJw5k+eee46rrrqKZDK5R/1utztTQ0P96XS6WW1jsRirV6+mXbt2tG/ffp+ZjcfjdOjQ4YCb++X9wP/YY49l9uzZzJ49m6FDh+7x+KBBg1i0aBGLFy/m8MMPp7a2luLiYoqLi/e6IUhFRQXt27enQ4cOTb56Anm0q//mufDUSHB54bIXoP9ZVleU8+LxODt37qRt27aZE45INiljYgblTMygnIkZWlLOtKv/1xo2fr/vvvv22eaCCy7gqKOOAr7e1f/8889n4sSJXHrppXTu3Jlp06Yxbdo0evXqxcyZM+nQoUPm+Q27+p933nl88cUXXHzxxRQUFDBhwgRWrVrFOeecwzvvvNOkTegPVbZ39XcbUaSZBgwYwOzZs1m+fPkeA/9EIsGaNWtwu92ZKRxFRUV07dqVTZs2sWXLFjp37tzoOQ1TvPr372/ON2CVZBReuRIufQEG7LnJoXzN4/HsdT8IkWxRxsQMypmYQTkTMyhnLdsDDzywz8d69eqVGfg3+MlPfsKFF17IH//4R1555RWKi4u59tpr+c1vftNo0L+7V199lXHjxvHvf/87M2P8/vvv51e/+pUpg34j5P3Af9SoUfz73//mww8/ZOzYsY0emzJlCnV1dZxyyimZezM2POeFF17gww8/5Lrrrmv0nA8++CDTxvaSMXj1KrjkORg42upqclY0GmXTpk107dq1UY5EskUZEzMoZ2IG5UzMoJw1lq1P1HPdwU5Uv//++7n//vszf7/mmmsO+JzJkycD9ev977nnHh588EGczrzfFg+wweZ+Y8aMoV27drz88suNNiKJRCLcfffdAPzgBz9o9Jybb74ZgIcffjiziQjUb1DyxBNP4PV697ggYFvJGLx6NSx51+pKclY4HGbRokWNNiMRySZlTMygnIkZlDMxg3ImRkulUoTD4by4a0JT5eQa/7feeou33noLqN9d9qOPPuKwww7j5JNPBqBdu3b83//9X6P2Y8aMwefzcfnll9OmTRvefvttli1bxpgxY3j11Vf3mJLx85//nMcee4xu3boxZswYYrEYr7zyCjt37uQvf/kLt95660HVnHdr/L/J6YExT8O3zjO9JBERERER2VNT13mL/bSINf7z5s3jueeea/S11atXZ27H0rNnz0YD/wsuuIBAIMDDDz/MG2+8QSQSoW/fvjz22GPcdttte12H8Yc//IHBgwfz17/+laeeegqn08nRRx/NL37xC7773e8a+w3molQcXr8OLh4PR1xgdTUiIiIiIiKSJTn5iX8+yvtP/Bs43XDxv+CIC00rKdfV1NQwf/58jjzyyMytM0SySRkTMyhnYgblTMzQknKmT/ytkUwmCYfD+P3+zG0CzZbtT/zzfo2/ZFkqAW/cAAvfsLqSnOFwOPB6vXm7g6fkPmVMzKCciRmUMzGDciZmsFu+cnKqv1gslYA3boR0Gr49xupqLFdUVMQxxxxjdRliY8qYmEE5EzMoZ2IG5UyM5nK5KCoqsrqMrNIn/rJ36ST89yZY8KrVlVgunU4Tj8cP+hYiIk2ljIkZlDMxg3ImZlDOxGjpdJpUKmWrjGngL/uWTsKb34f5L1tdiaWCwSDvv/8+wWDQ6lLEppQxMYNyJmZQzsQMypkYLZlMEgqFSCaTVpeSNRr4y/6lU/DWD2Def6yuxDKFhYUcc8wxFBYWWl2K2JQyJmZQzsQMypmYQTkTozmdTgoLC3E67TNc1hp/ObB0Cib8sP6/Q66wuhrTFRQU0LVrV6vLEBtTxsQMypmYQTkTMyhnYjSn00lBQYHVZWSVfS5hiLHSKXj7VvjyBasrMV0sFmP9+vXEYjGrSxGbUsbEDMqZmEE5EzMoZ2K0VCpFNBollUpZXUrWaOAvTZdOwds/gjnPWV2Jqerq6pg7dy51dXVWlyI2pYyJGZQzMYNyJmZQzsRoqVSKcDhsq4G/I22nrQotFAqFKCsrIxgMUlpaanU5+7Z5Ljw18hAP4oDv/hGOuS4bFeW8dDpNOp3G4XDY7n6ekhuUMTGDciZmUM7EDC0pZ5FIhDVr1tC7d298Pp/V5bQYuw+RrcpYU//tmzoO1Sf+0gxpePen8MV4qwsxhcPhwOl02v4Xi1hHGRMzKGdiBuVMzKCcyYFce+21OBwO1q5d26znN1xUymbGnn32WRwOB88++2zWjnkwtLmfNFMa3vt5/fT/YTdaXYyhamtrWbhwIYMGDaKoqMjqcsSGlDExg3ImZlDOxAzK2TfcX2Z1Bft3f3Zuu3igQfgzzzzDtddem5XXSiaThMNh/H4/LpcrK8e0mgb+cgjS8P7tkE7DcTdZXYyIiIiIiNjcfffdt9evH3XUUeYWkmc08JdD98Ev6j/5P/5mqysxRFFREccdd5zVZYiNKWNiBuVMzKCciRmUs5bt/vvvN/w1XC4XxcXFhr+OmbTGX7Ljwzug/G9WV2GIdDpNKpVC+2CKUZQxMYNyJmZQzsQMypkcildeeYWTTz6ZsrIy/H4/gwYN4je/+Q2RSCTTpmEDyXQ6zezZs7nooovo0KEDXq+Xnj178oMf/IDNmzfv9fgrV67kkksuoXXr1hQVFTF8+HDeffdds769fdLAX7Lnozthxl+triLrgsEg77zzDsFgdtYniXyTMiZmUM7EDMqZmEE5k+a64447uPzyy1m2bBlXXHEFt956K+l0mrvuuoszzzyTWCwG1K/xDwaDvPnmmwwfPpz33nuPM844g5/97Gf079+fv//97xxzzDGsXr260fFXrFjB8ccfz+uvv84JJ5zAj3/8Y7p168YFF1zAf//7Xyu+5QxN9ZfsmnhX/bT/E2+zupKsKSwsZMiQIRQWFlpditiUMiZmUM7EDMqZmEE5a9n2NtW/V69eB9zYb/r06fz+97+nZ8+ezJo1iw4dOgDwyCOPcP755/P+++/z6KOPctddd+F0Okkmk9x4442kUimmTJnC8OHDM8d65JFH+PWvf833v/99Pv7448zXb7nlFnbu3Mnjjz/Oj3/848zXJ0yYwAUXXHBI3/eh0sBfsu/je+oH/yf9xOpKsqKgoIAePXpYXYbYmDImZlDOxAzKmZhBOWvZHnjggT2+NmLEiAMO/J955hkA7r777sygH8DtdvPYY4/x4YcfMn78+MzA/4MPPmDXrl1cccUVjQb9ALfffjv/+Mc/+OSTT1i3bh09e/Zk48aNfPzxx/Tu3Ztbb721Ufvzzz+fESNGEAgEmvldHzpN9RdjfHIfTH3M6iqyIhaLsWnTpszUH5FsU8bEDMqZmEE5EzMoZy3b7uvvG/5Mnjz5gM+bO3cuAKeeeuoejw0YMIBu3bqxZs0aqqqqSKVSzJ49e5/tPR4PI0aMaHTchv+edNJJe70F4MiRI5v0/RlFA38xzqcPwJT/s7qKQ1ZXV8fs2bOpq6uzuhSxKWVMzKCciRmUMzGDcibN0bAnRKdOnfb6eOfOnTPtUqkUu3btanL73f/bsWPHvbbf13HMoqn+YqzPxtVP+x/xS6srabaysjJGjx6N260fFzGGMiZmUM7EDMqZmEE5k+YoKysDYOvWrfTp02ePx7ds2ZJp53K5aNeuXab93uzefvf/btu2ba/t93Ucs+gTfzHepIdh8m+trqLZHA4HHo8Hh8NhdSliU8qYmEE5EzMoZ2IG5UyaY8iQIQB7XRawcuVKNm7cSO/evWnVqhUOh4Ojjz56n+0TiQTTpk0DyLRrOP60adNIJpN7PKcpyxGMpIG/mGPyIzDpN1ZX0Sy1tbXMnj2b2tpaq0sRm1LGxAzKmZhBORMzKGfSHNdffz0ADz30EDt27Mh8PZlMcvvtt5NKpfh//+//Zb52xhln0KZNG/7zn//w+eefNzrW448/zurVqzn99NMzG01269aNM844gzVr1vDXvza+xfmECRMs3dgPNNVfzBT4HaTTMOouqys5KOl0mmg0SjqdtroUsSllTMygnIkZlDMxg3ImzTF8+HB++ctf8vvf/55BgwYxZswYioqK+OCDD1i4cCEnnXQSv/jFLzLti4qK+Ne//sVll13GiBEjuOSSS+jRowdz5sxh4sSJdOrUiX/84x+NXuOJJ57ghBNO4Cc/+QkTJ07kyCOPZOXKlbz55puce+65vPPOO2Z/2xka+Iu5pvy+fs3/afdYXUmTFRcXc+KJJ1pdhtiYMiZmUM7EDMqZmEE5k+b63e9+x5AhQ/jrX//K888/Tzwep0+fPjz00EP8/Oc/p6CgAACXy0VxcTEXXngh06dP5ze/+Q0fffQRwWCQTp06cfPNN3PPPffQpUuXRsfv168fn3/+Ob/61a/45JNPmDx5MoMHD+att95ix44dlg78HWldKsuKUChEWVkZwWCQ0tJSq8vZt81z4amRVlcBJ/0MTr/P6ipERERERHJWJBJhzZo19O7dG5/PZ3U5YqKm/ts3dRyqNf5ijWmPwcf3Wl1Fk1RVVfHOO+9QVVVldSliU8qYmEE5EzMoZ2IG5UyMlkgkqKqqIpFIWF1K1mjgL9aZ/ieYeLfVVRyQ3+/niCOOwO/3W12K2JQyJmZQzsQMypmYQTkTozmdTvx+P06nfYbLWuMv1prxl/oN/8562OpK9snr9XLYYYdZXYbYmDImZlDOxAzKmZhBOROjOZ1OvF6v1WVklX0uYUj+Kv8rfHin1VXsUzweZ+vWrcTjcatLEZtSxsQMypmYQTkTMyhnYrRUKkU8HieVSlldStZo4C+54fO/wQd3WF3FXtXW1jJz5kzdK1YMo4yJGZQzMYNyJmZQzsRoqVSK2tpaWw38tat/lmhX/ywZdhOMftTqKhpJpVLEYjEKCgpstc5HcocyJmZQzsQMypmYoSXlTLv6WyOdTpNOp3E4HDgcDktqyPau/lrjL7ll1lOQTsHo/wOLfsi+yel06kQrhlLGxAzKmZhBORMzKGdiNCsH/Eax9yUyyU9f/Ave+1n9pn85oK6ujrlz51JXV2d1KWJTypiYQTkTMyhnYoaWmDNN0jZXMpmkrq6OZDJpWQ3Z/jfXwF9y0+yn4d2f5MTgP5lMUl1dbekPvtibMiZmUM7EDMqZmKEl5czlcgFoI0MLWJ2vhn/zhgwcKq3xzxKt8TfI0VfDuX/OmWn/IiIiIiJmWr16NR6Ph27dutlu+rnsXTqdZuPGjcTj8QPeulJr/MUevny+fs3/uX8Bm2/eIiIiIiLyTe3atWPTpk1s3LiRsrIyPB6PLgDYVDqdJh6PEwwGqampoWvXrlk7tgb+kvvmvlg/5f+8v1oy+A8Gg0yfPp0TTzyRsrIy019f7E8ZEzMoZ2IG5UzM0NJy1vApbkVFBZs2bbK4mpYhlUoRjUbxer2W3DnC6/XStWvXrM4k18Bf8sO8f9d/8n/+30wf/Hu9Xvr164fX6zX1daXlUMbEDMqZmEE5EzO0xJyVlpZSWlpKPB63fO15SxCNRtmyZQudO3c2PWculwuPx5P142qNf5Zojb9JBl8GF/xd0/5FRERERKTFa+o4VKMnyS8LXoE3vw8p8650xuNxKioqtJuqGEYZEzMoZ2IG5UzMoJyJ0eyYMQ38Jf/871X4702mDf5ra2uZPn06tbW1pryetDzKmJhBORMzKGdiBuVMjGbHjGmqf5Zoqr8FjrgILv4XOLNzb8t9SSaThMNh/H5/1u6jKbI7ZUzMoJyJGZQzMYNyJkbLp4zpdn5if4v+W7/h38XjwWVclF0uF8XFxYYdX0QZEzMoZ2IG5UzMoJyJ0eyYMU31l/y2+C14/TpIJgx7iXA4zIIFCwiHw4a9hrRsypiYQTkTMyhnYgblTIxmx4xp4C/5b8nb8Pq1kDRm8414PM7OnTtttbmH5BZlTMygnIkZlDMxg3ImRrNjxrTGP0u0xj8HDPwuXPIsuLJ/30sREREREZFco9v5Scuz9F149WpIxKyuREREREREJGdo4C/2sux9ePWqrA7+Q6EQH330EaFQKGvHFNmdMiZmUM7EDMqZmEE5E6PZMWMa+Iv9LP8QXrkSEtGsHK6goICePXtSUFCQleOJfJMyJmZQzsQMypmYQTkTo9kxY1rjnyVa45+D+p4Bl/8b3F6rKxEREREREck6rfEXWfkx/GcsxCOHdJhEIkFlZSWJhHG3DJSWTRkTMyhnYgblTMygnInR7JgxDfzF3lZ9Ci8f2uC/pqaGKVOmUFNTk8XCRL6mjIkZlDMxg3ImZlDOxGh2zJim+meJpvrnuMNOhbH/AY//oJ+aTCapqamhuLgYl8tlQHHS0iljYgblTMygnIkZlDMxWj5lTFP9RXa3ehK8dBnE6g76qS6Xi7Kyspz/oZf8pYyJGZQzMYNyJmZQzsRodsyYBv7ScqwJwEuXHvTgPxwOs3jxYsLhsEGFSUunjIkZlDMxg3ImZlDOxGh2zJgG/tKyrJ0K/74EYrVNfko8Hmfz5s3E43EDC5OWTBkTMyhnYgblTMygnInR7JgxrfHPEq3xzzM9T4QrXoOCIqsrERERERERaRat8RfZn3XT4cUxELXPTp0iIiIiIiJ7o4G/tFzrZ8CLF0O0er/NQqEQn3zyCaFQyKTCpKVRxsQMypmYQTkTMyhnYjQ7ZkwDf2nZNnxeP/iP7PuH2uPx0LlzZzwej4mFSUuijIkZlDMxg3ImZlDOxGh2zJjW+GeJ1vjnuW7HwpX/BV8O/9uJiIiIiIjsRmv8RQ7Gxi/ghQshEtzjoWQySSgUIplMWlCYtATKmJhBORMzKGdiBuVMjGbHjGngL9Jg02x4/gIIVzX6cnV1NZMmTaK6ev97AYg0lzImZlDOxAzKmZhBOROj2TFjmuqfJZrqbyNdhsBVb4G/FQCJRIJQKERpaSlut9vS0sSelDExg3ImZlDOxAzKmRgtnzKmqf4izbV5Ljx/PoQrAXC73bRp0ybnf+glfyljYgblTMygnIkZlDMxmh0zpoG/yN5smQfPnQd1u4hEIixbtoxIJGJ1VWJTypiYQTkTMyhnYgblTIxmx4xp4C+yL1sXwPPnEQ3uYM2aNUSjUasrEpuKRqPKmBhOORMzKGdiBuVMjGbHjGmNf5Zojb+NdTgCrnoTSjpaXYmIiIiIiEiG1viLZMv2RfD0mbBrtdWViIiIiIiIHDQN/EUOoNrbhckdrqf6hath6/+sLkdsqLq6msmTJ9vqljGSe5QzMYNyJmZQzsRodsyYBv4iB+BKRWlduxJXzWZ45hxYO93qksRmXC4XrVu3xuVyWV2K2JhyJmZQzsQMypkYzY4Z0xr/LNEa/xbE7YMxz8DA0VZXIiIiIiIiLZjW+ItkSdLhpq6gHUnHV/fxTETglSth7r+tLUxsI5lMUldXRzKZtLoUsTHlTMygnIkZlDMxmh0zpoG/yAFU+7ry8RGPUe3r+vUX00mYcAtM/7N1hYltVFdX8/HHH9tqHZnkHuVMzKCciRmUMzGaHTOmqf5Zoqn+9hV3+qgs6kPr2lV4UpE9G5z4YzjjQfMLE9uIx+NUVlbSunVrPB6P1eWITSlnYgblTMygnInR8iljTR2Huk2sSSQveVIROlQv2neD6X+Cup1w7p/BaZ8NQMQ8Ho+HDh06WF2G2JxyJmZQzsQMypkYzY4Z01R/kQOIuEtZ2f5sIu79zOSY+yK8ejXE9zIjQOQAIpEIK1euJBJRfsQ4ypmYQTkTMyhnYjQ7ZkwDf5EDiHpasazzhUQ9rfbfcOm78OLFEAmZUpfYRzQaZdmyZUSjUatLERtTzsQMypmYQTkTo9kxY1rjnyVa4y8ZnQbDlf+F4vZWVyIiIiIiIjam2/mJWGXrAnj6TKhca3UlIiIiIiIiGviLHEi1txNT+91NtbdT05+0azWMPwu27WdTQJGvVFdXM3XqVFvdMkZyj3ImZlDOxAzKmRjNjhnTwF/kAFzpBEXRbbjSiYN7Ys1WeGY0rP/cmMLENlwuF0VFRbhcuiuEGEc5EzMoZ2IG5UyMZseMaY1/lmiNv+yT2w+XPg/9z7S6EhERERERsRGt8RfJkhQuou4SUjTzil8iDC+PhfmvZLcwsY1UKkU0GiWVSllditiYciZmUM7EDMqZGM2OGdPAX+QAQv5ufPjtJwj5uzX/IKkEvPl9KP9b9goT2wiFQnz44YeEQroVpBhHORMzKGdiBuVMjGbHjGngL3IARbEdDFv1R4piOw7xSGn46E749MGs1CX2UVRUxLBhwygqKrK6FLEx5UzMoJyJGZQzMZodM6Y1/lmiNf5yUIZeC+f8EZy69iYiIiIiIs2jNf4iWRJ1l7C27alE3SXZO+icZ+G1ayARzd4xJW9Fo1HWrl1LNKo8iHGUMzGDciZmUM7EaHbMmAb+IgcQ9rRhQferCXvaZPfAS96Gf18C0ZrsHlfyTjgcZsGCBYTDYatLERtTzsQMypmYQTkTo9kxY5rqnyWa6i/N1mUIXPE6FLWzuhIREREREckjmuovki82z4Wnz4aqDVZXIiIiIiIiNqSBv8gB1Hg7MqPPL6jxdjTuRXaugPFnwvalxr2G5KyamhpmzJhBTY2WfYhxlDMxg3ImZlDOxGh2zJgG/iIH4Ein8CTDONIpY1+oejM8czZs+MLY15Gc43A48Hg8OBwOq0sRG1POxAzKmZhBOROj2TFjWuOfJVrjL1njKYLLnoe+p1tdiYiIiIiI5DCt8RfJkjQOEs4C0ph0xS9eCy9dDv973ZzXE8ul02kSiQS6DitGUs7EDMqZmEE5E6PZMWMa+IscQNDfg/eO/BdBfw/zXjQVhzdugJlPmfeaYplgMMh7771HMBi0uhSxMeVMzKCciRmUMzGaHTOmgb/IARTGKhi69m8UxipMfuU0fPALmPQbk19XzFZYWMjQoUMpLCy0uhSxMeVMzKCciRmUMzGaHTOmNf5ZojX+Yqhjb4DvPApOXasTEREREZF6WuMvkiUxVxEbWg8n5iqyrogv/gVv/D9IxKyrQQwTi8XYsGEDsZj+fcU4ypmYQTkTMyhnYjQ7ZkwDf5EDqCtox5e9bqauoJ21hSz6L7x0KcRqra1Dsq6uro4vv/ySuro6q0sRG1POxAzKmZhBOROj2TFjmuqfJZrqb19pHKQcLpzpJA5y4Mel61C44nUobGN1JZIl6XSaVCqF0+m01f1iJbcoZ2IG5UzMoJyJ0fIpY5rqL5IlDtK40oncGPQDbJoDT58NwY1WVyJZ4nA4cLlcOf+LRfKbciZmUM7EDMqZGM2OGbPVwP/tt9/m9NNPp1u3bvj9fg477DAuueQSysvL99p+xowZjB49mjZt2lBYWMjgwYN5/PHHSSaTJlcuuay2oD2zet9GbUF7q0v5WsUyGH8W7FhudSWSBbW1tcyaNYvaWi3jEOMoZ2IG5UzMoJyJ0eyYMdsM/G+//XbOP/985s2bx9lnn82Pf/xjjj76aCZMmMCJJ57I888/36j9hAkTOOWUU5gyZQoXXnght9xyC7FYjJ/+9KdcfvnlFn0Xkovqp/q7SZNjV/xCG+GZs+tnAEhea5hOppVXYiTlTMygnIkZlDMxmh0zZos1/lu3bqVr1660b9+eBQsW0KFDh8xjkyZNYtSoUfTq1Ys1a9YA9esg+vTpQygUYvr06RxzzDEARCIRRo0aRXl5Of/5z38O6gKA1viLZQqK4bIXoc+pVlciIiIiIiImalFr/NetW0cqleK4445rNOgHOPXUUykpKaGioiLztddee42KigrGjh2bGfQD+Hw+HnroIQD+9re/mVO8yKGK1dTv9r/oTasrERERERGRHGSLgX+/fv3wer3MnDmT7du3N3ps0qRJVFdXc8YZZzT6GsDZZ5+9x7FOOeUUCgsLKS8vJxqNGlu45IUqf08mDHmeKn9Pq0vZt2QMXr8evhhvdSXSDFVVVUyYMIGqqiqrSxEbU87EDMqZmEE5E6PZMWO2GPi3adOGRx99lB07dvCtb32LG2+8kTvvvJNLLrmEs88+mzPPPJO///3vmfbLli0D6i8YfJPb7aZ3794kEglWr169z9eMRqOEQqFGf4DMfxv+PxwOA5BMJqmqqiIejwP1ywqCwWCmbXV1deY+kalUqlHbaDTaKHQ1NTWZjSbS6TRVVVXEYjEAYrEYVVVVmfUotbW1jdvWxoi5iuvbugqp8vfMrF2vLWhHjbdj5nWq/D2JuksAiDv9VPl7ksIFQJ2nLdXeTpm2QX93Iu7Sr9r6qPL3JOnwABD2tCHk6/J1v/i6EXGXAZBwFnyjbWtCvq67te1K2NO6vg8dHqr8PUk4vfV96C4j6Ov+dR96u1DnaftVWzdV/p7Enb6v2pYS9PfYrW0n6gra1fc3rvq2rsL6/naXNBrkp3By+KZX8cd2ksZBlb8nMVfRV31Y9I0+bE9NwdezTqr8PYl+o79TX/3Y1ff37n3YY7f+ru/DlGP3/u78dVtf99360Fvfh7jgvZ8RnvTYPnOYSCSoqqoikUjU93c4fMDMNrQ92Mzu3nb3zDa0bcjsoea7pqbm6/6uqspcsIvH41RVVZFKper7sK6O6urqr/swGCQSiTRq27Cx5/7aNvRhQ9uD7cO9tfX7/QwePJhYLGb9OcKC/t5bH2arv/fVh1aek/fVhw1tG/rwm22DwWCz+ruhDwsKCjjqqKNwOBw6RxxkH1p9jti9ba6fI1KpFEcddRR+v1/niGb2t1XniKb0Ya6cI2KxGIMGDcLv9+sckWfniHx5H+H3+zniiCMyff/NPszFc8SB2GLgD/CjH/2IN998k1Qqxb/+9S9++9vf8vrrr9OjRw+uueaaRksAGv5RysrK9nqshq/v/g/yTY888ghlZWWZP9271w9AZ82alWkzZ84cVqxYAdSHLBAIZF57w4YNTJ8+PdN27ty5mQsSsViMQCDAzp07Adi0aRNTp07NtJ0/fz5LliwB6sMcCATYsWMHUL/fQSAQyIRj4cKFLFy4EKgPUmDxVraWHQXAjpIjCAwclxlIL+lyCfO7X5t5nan972VTq2EA7CzuT2DgOGLu+kHssk7nM7fnTZm20/veyYY2J9X3b2EvAgPHZQbsKzqMZk6vH2balve5nbXtRgFQ7etKYOC4zAB4TbvTmXXYTzJtZ/W+jdXtzwKg1tuBwMBxhL4a7K9rO4Lyvr/4ur973cyKjucAEPW0IjBwHJVFfQDY2Ho40/rdlWk7r8cNLO10IQBxdyGBgeOoKBoAwJayY5gy4P5M26VdxhAs7IU3WUPS6SEwcBzbS78NwLbSIwkMHJcZoC/qOpaF3a7MPDcwcBxbWw0FoKL4W/X97fLXH7fzxczrft3X/d3vHja2Ph6AyqJ+BAaOI/rVxZTlnc7ly57fz7Sd0fcO1rc9ub6//T0JDBxHXUH9RY9VK1cwe9J78FUGPv/8c9auXQvUn1gCgUDmhLF27Vo+//zzzHFnz57NqlWrgPoT7u6ZXb9+PTNmzMi0/fLLL1m+vP6uAtFolEAgQGVlZX1/b9zYKLPz5s1j6dKlwNeZbVh+05DZBgsXLmTRokVA/YkyEAiwbds2ALZv304gEMicvBcvXsyCBQsyz50yZQpbtmyp7++KCgKBQOYku3TpUubNm5dpO23aNDZurL8lYmVlJYFAIHPiXLFiBXPmfL1pYnl5OevWrQPqf0EEAoHMCXr16tWNfu5nzZqV2U+kob8bfnGtXbu20V1GGs4RXq+X9u3bU15ebv05IhBg69atAOzYsYNAIJD5pbdkyRLmz5+feZ2pU6eyadMmAHbu3EkgEMj8olq2bBlz587NtJ0+fTobNmwA6s/BgUAg84t2b/3dkNnq6upGmV2zZs0e/d1wkba2tpZAIJD5hb5u3bq99jfsPbPTpk3LtN09s/F4vFFmt2zZwpQpUzJtFyxYwOLFi4H6NwKBQCAz+2zbtm0EAoHMG5lFixZl+hto1N8NmW3o729mdurUqfvM7PLly/nyyy8zbWfMmMH69esb9XcymaRnz55s2LCB2bNnZ9rqHJH75wjIofcRBzhHLFmyhJ49e+L1enWO+Eq+nCMaBimrVq3K+XNEeXk5fr8fr9erc0SenSPy5X2E1+slmUw2+lnI1XNEQ74PxBab+0H9QPzuu+/mxz/+MbfeeiudOnVi6dKl3HnnnUycOJFf/OIX/P73vwegf//+rFixghUrVtC3b989jjV8+HDKy8spLy/n+OOP3+vrRaPRRldXQqEQ3bt3Z8OGDXTr1i3zNY/Hg9/vJ5lMUl1dTVFRER6Ph0gkQjQazVxkqK6uxuVyUVhYSCqVIhQKZdpGo1HC4TCtWrUC6k8CDoeDoqIi0uk0wWCQwsJCCgoKiMVi1NXVUVZWhsPhyJxUMm1XzqLw5YsoSNYQcxVSV9CesvB6HKSpLWhH2uGiOFofnip/T/zxXXgT1cSdfmq9HSgNb8RJkjpPW5JODyXR+h/soL873ngQXyJE3Omj1tuRkshmXOk4YU8b4i4fpZHN9f3i60ZBohpfIkjCWUCNt/NubVsTdxVSGtn0VduueJJ1+OOVJB0eqn1dKI5uxZ2KEnGXEXWXUhapPwlUe7vgSkUpjO8k6XBT7etKUXQbnlSEiLuUqKcVZeH1X7XthCudoDBWQQoXIX83imI78CTriLpLCHva0Cpcf4Ku9PeisvAwulV9jicZJujvQWGsgoJkLTFXEXUF7Xbrw/akcVAc2/51H8Z24t2tv0vDG3CS+qq/3RRn+rAHvnjlV/1d34elkY040w39XUBJtP6XUdDXHW8i9FUfeqnxdvpGH/op7XciXPAkodpwJoeJRIKamhqKi4txu92Ew2Hi8XhmI5C9Zbah7cFmNhKJZNruntmGtg2ZPdR8p9NpiovrL0hVVVVl3gjE43Fqa2spLS3F6XRSV1dHMpmkpKR+VkUwGMTr9eLz+TJtS0pKcLlc+23b0IcNbQ+2D2Ox2B5tXS4X27dvx+v10qpVK2vPERb09976sKCgICv9va8+tPKcvK8+bGjb0IffbBsMBvH5fAfd3w196PV6qayspKioCIfDsdc+1DkiN88ROfU+4gBtY7EY4XCYdu3aUVdXp3NEHp0jmtKHuXKO2LlzJ+FwmE6dOpFOp3WOyKNzRL68j0ilUmzevJni4mLatWuX0+eIeDxOhw4dDri5ny0G/p999hmnnXYaF154If/9738bPVZXV0f//v3ZsmULy5cvp0+fPhx77LHMnj2b2bNnM3To0D2ON2jQIBYtWsTixYs5/PDDm1SDdvW3r6qvPlEfsfSezMWAvNH3DLj0eSgotLoS2Y+qqioCgQAjRozI/BIQyTblTMygnIkZlDMxWj5lrEXt6v/ee+8B9Tv4f1NhYSHDhg0jlUplposMGFA/pbthetHuEokEa9aswe12c9hhhxlYteSL0vAGvrPgB5SGN1hdysFb+TG8cAGEK62uRPajtLSU73znO7l90VDynnImZlDOxAzKmRjNjhmzxcC/YS1Iw9qTb2r4utdbv5Z91Kj69eUffvjhHm2nTJlCXV0dw4cPz7SXls1JioJkLU5SVpfSPBtmwjOjIbTF6kpkH5xOJwUFBTidtjglS45SzsQMypmYQTkTo9kxY7b4Tk4+uX6Ts6eeeiqzQUSDDz74gOnTp+Pz+Rg+fDgAY8aMoV27drz88suNNmyIRCLcfffdAPzgBz8wqXrJdbUF7ZjT8/vUfnUXgLy0fTGMPxN2rrK6EtmL2tpa5syZk1knJ2IE5UzMoJyJGZQzMZodM+a2uoBsGDNmDKeffjqffPIJhx9+OBdeeCGdOnViyZIlvPvuu6TTaX7729/Stm39ruelpaX885//ZMyYMYwcOZLLL7+cNm3a8Pbbb7Ns2TLGjBnDZZddZvF3Jbki7XAT9rQh7cjzH5fg+vrB/5VvQJejrK5GdtOwMZENtlyRHKaciRmUMzGDciZGs2PGbLG5H9TfJuGJJ57g5ZdfZvHixdTV1dGmTRuGDRvGbbfdxplnnrnHc6ZPn87DDz9MeXk5kUiEvn37cv3113PbbbfhcrkO6vW1uZ/kjYISGPsS9D7F6kpEREREROQQNHUcapuBv9U08Je84vLCmPFw+LlWVyIiIiIiIs3Uonb1FzFS0N+Ddwf/k6C/h9WlZE8yCq9eA3Oes7oSof7etO+++y7BYNDqUsTGlDMxg3ImZlDOxGh2zJgG/iIH4ItXcviWV/HFbXZLvHQS3rkNpj5mdSUtns/n4/DDD8fn81lditiYciZmUM7EDMqZGM2OGdNU/yzRVH/JayfcCmc+BA6H1ZWIiIiIiEgTaaq/SJbEnT62l3ybuNM+V/z2UP5XeOsHkExYXUmLFI/H2b59O/F43OpSxMaUMzGDciZmUM7EaHbMmAb+IgdQ6+1Ied9fUOvtaHUpxpr/H3jlCoiHra6kxamtraW8vNxW94qV3KOciRmUMzGDciZGs2PGNNU/SzTV375SDhdRdyneRAhnOml1OcbrcQKMfRn8rayupMVIpVJEo1G8Xi9Op67HijGUMzGDciZmUM7EaPmUMU31F8kSZzqJP17ZMgb9AOvL4dlzoHqb1ZW0GE6nE7/fn/O/WCS/KWdiBuVMzKCcidHsmDH7fCciBqnztGVe92up87S1uhTzbFsIT58Ju1ZbXUmLUFdXx7x586irq7O6FLEx5UzMoJyJGZQzMZodM6aBv8gBJJ0FBP29SDoLrC7FXJVr4emzYev/rK7E9pLJJMFgkGSyhcwqEUsoZ2IG5UzMoJyJ0eyYMa3xzxKt8Rfb8pbB2P9ArxOtrkRERERERHajNf4ikh3RILx4ESx93+pKRERERESkGTTwFzmAoK87Hwz6K0Ffd6tLsU4iAq9cCXP/bXUlthQMBvnggw8IBoNWlyI2ppyJGZQzMYNyJkazY8Y08Bc5AG8iRJ8dH+JNhKwuxVrpJEy4Bab/2epKbMfr9dKnTx+8Xq/VpYiNKWdiBuVMzKCcidHsmDGt8c8SrfGXFmX4bXDmOKurEBERERFp0bTGXyRLEk4vO4v6k3Da54rfIZvx5/pP/1P22enUSolEgp07d5JIJKwuRWxMORMzKGdiBuVMjGbHjGngL3IANd5OTOt/NzXeTlaXklvmvgivXg3xiNWV5L2amhqmTZtGTU2N1aWIjSlnYgblTMygnInR7JgxTfXPEk31t6+kw0NdQVsKYztxpeNWl5N7ep5Uf7s/Xw7nPsclk0nq6uooLCzE5XJZXY7YlHImZlDOxAzKmRgtnzKmqf4iWeJKxymJbtWgf1/WTYNnz4GaHVZXkrdcLhclJSU5/4tF8ptyJmZQzsQMypkYzY4Z08Bf5ADCntYs7Po9wp7WVpeSu7YugKfPhMq1VleSl8LhMAsXLiQcDltditiYciZmUM7EDMqZGM2OGdPAX+QA4i4/20sGEXf5rS4lt+1aDePPgm2LrK4k78TjcbZv3048rlklYhzlTMygnIkZlDMxmh0zpjX+WaI1/iJf8ZXB916FHsdbXYmIiIiIiK1pjb+IWCMShOcvgKXvW12JiIiIiIiggb/IAYV8XZn4rT8Q8nW1upT8kQjDK1fCnGetriQvhEIhJk6cSCgUsroUsTHlTMygnIkZlDMxmh0zpoG/yAF4ErV0r5yBJ1FrdSn5JZ2Ed34Mk39rdSU5z+Px0L17dzwej9WliI0pZ2IG5UzMoJyJ0eyYMa3xzxKt8RfZj6HXwTmPgVPXGkVEREREskVr/EWyJOEooMrfk4SjwOpS8tecZ+DVqyAesbqSnJRIJKiqqiKRSFhditiYciZmUM7EDMqZGM2OGWv2wD+ZTPLnP/+Z4447jrKyMtxud+axuXPn8sMf/pDly5dnpUgRK9X4OhMYOI4aX2erS8lvS9+FFy6AcKXVleScmpoaAoEANTU1VpciNqaciRmUMzGDciZGs2PGmjXVPxaL8Z3vfIfJkyfTpk0bvF4vW7ZsIZlMAlBVVUWnTp244447eOCBB7JedC7SVH/7SjgKqPF1pjiyBXc6ZnU5+a/94XDlG1CmzRIbJBIJampqKC4ubnQRVSSblDMxg3ImZlDOxGj5lDFDp/o/+uijTJo0ifvuu49t27Zxww03NHq8VatWnHLKKXz00UfNObxITnGnY7QKr9OgP1t2LIHxZ8D2pVZXkjPcbjetWrXK+V8skt+UMzGDciZmUM7EaHbMWLMG/v/+97858cQTuffee3E6nTgcjj3a9O7dm/Xr1x9ygSJWC7tbsaTzxYTdrawuxT5Cm+Dps2BdudWV5IRwOMySJUsIh8NWlyI2ppyJGZQzMYNyJkazY8aaNfBfs2YNxx9//H7btGnThl27djWrKJFcEncXsaH1cOLuIqtLsZdIVf2a/yXvWl2J5eLxOBs2bCAej1tditiYciZmUM7EDMqZGM2OGWvW3AW/308wGNxvm/Xr19OqVavmHF4kp5RGNnHm4p9bXYY9JSLw6tVwzv/BMddbXY1lSktLOfPMM60uQ2xOORMzKGdiBuVMjGbHjDXrE/+jjjqKiRMnEovtfc1zMBjko48+YtiwYYdUnIi0AOkkvPtTmPQbqysREREREbGlZg38b7zxRtavX8/VV19NKBRq9FhVVRXXXnstlZWV3HzzzVkpUsRKIV8XPhv4G0K+LlaXYm+B38Hbt0EqaXUlpguFQnz22Wd7nE9Fskk5EzMoZ2IG5UyMZseMNWuq/9ixY/nkk0945plneOuttzJT+o855hgWLVpENBrllltuYfTo0dmsVcQSnmSYDtUL8STts7lHzvryOajdAWOeBo/f6mpM4/F46NChAx6Px+pSxMaUMzGDciZmUM7EaHbMmCOdTqeb++Rnn32WP/3pTyxYsICGwxxxxBH87Gc/47rrrstakfmgqfdPtNzmufDUSKurENm/7sfB2JehsI3VlYiIiIiI5KymjkMPaeDfIBwOU1lZSVlZGUVFLXPncw387Svp8FBX0JbC2E5cafvs7Jnz2g+EK9+Asm5WV2K4ZDJJXV0dhYWFuFwuq8sRm1LOxAzKmZhBOROj5VPGmjoObdYa/2/y+/106dKlxQ76xd6qfV347Fu/p1pr/M21Yyn86wzYttjqSgxXXV3NZ599RnV1tdWliI0pZ2IG5UzMoJyJ0eyYsWYN/OfMmcODDz7Itm3b9vr41q1befDBB5k3b96h1CaSE4qjWzlp+UMUR7daXUrLU70Znjkb1k63uhJDFRcXc9JJJ1FcXGx1KWJjypmYQTkTMyhnYjQ7ZqxZU/2/973vMXXqVNavX4/D4djj8VQqRe/evRkxYgTPP/98VgrNdZrqL2Igtw8u+id86zyrKxERERERyRmGTvUvLy/n1FNP3eugH8DpdHLqqacyfbq9P6WTliHiLmN5x+8ScZdZXUrLlYjAa9fAF/+yuhJDRCIRli9fTiQSsboUsTHlTMygnIkZlDMxmh0z1qyB/9atW+nevft+23Tt2pUtW7Y0qyiRXBJ1l7Kq/dlE3Tk8k6MlSKfgvZ/Dp+OsriTrotEoq1atIhqNWl2K2JhyJmZQzsQMypkYzY4Za9ZU/7Zt23LxxRfz1FNP7bPNTTfdxGuvvUZlZeUhFZgvNNVfxERDroJz/wTO3N5lVURERETESIZO9T/qqKOYMGECNTU1e328urqaCRMmcNRRRzXn8CIi+zf3BXj5CoiHra5ERERERCTnNWvgf9NNN7Fjxw7OPPNMFixY0OixBQsWcPbZZ1NRUcFNN92UlSJFrFTt7Uyg//1UeztbXYrsbvkH8Nx5ULfL6koOWXV1NYFAwFa3jJHco5yJGZQzMYNyJkazY8bczXnSZZddxgcffMDzzz/PkCFD6NixI127dmXTpk1s27aNdDrNNddcw9ixY7Ndr4jpXKkYZeG1uFIxq0uRb9o4C54+C658A1r1sLqaZnO5XJSVleFyaemCGEc5EzMoZ2IG5UyMZseMNWuNf4OnnnqKv/zlLyxatCjztUGDBnHbbbdxww03ZKXAfKE1/iIWKulcP/jveITVlYiIiIiImKap49BDGvg3qKuro6qqilatWlFYWHioh8tLGvjbV8rhIuouxZsI4UwnrS5H9sVbBmNfgl4nWV3JQUulUkSjUbxeL05ns1ZgiRyQciZmUM7EDMqZGC2fMmbo5n7fVFhYSJcuXVrsoF/sLeTrxsRBfyLk62Z1KbI/0SC8cBEsesvqSg5aKBRi4sSJhEIhq0sRG1POxAzKmZhBOROj2TFjWfnEX/SJv53FnT4qi/rRunYFnlTE6nLkQBxOOPt3cFz+bC4aj8eprKykdevWeDweq8sRm1LOxAzKmZhBOROj5VPGDP/Ef9KkSZxzzjl06NABj8eDy+Xa44/b3ay9A0VyiicVoUP1/zTozxfpFHzwC/jkAasraTKPx5M5l4oYRTkTMyhnYgblTIxmx4w1a2T+zjvvcOGFF5JKpejRowcDBgzQIF9sK+ouYWPr4+lW+TnehH1u6WF70x6Dmu1w7p/Aldvnp2g0ysaNG+nWrRter9fqcsSmlDMxg3ImZlDOxGh2zFiz3g0/8MADFBQU8NZbb3HmmWdmuyaRnBLxtGZJ50tpV7NMA/98M+9FqN0OlzwHBbm7B0kkEmHJkiW0a9fONr9cJPcoZ2IG5UzMoJyJ0eyYsWat8ff7/Vx++eU888wzRtSUl7TGXySHdT0GrngNCttYXYmIiIiISNYYusa/uLiYNm30BlpE8sSm2TD+TKhcZ3UlIiIiIiKma9bA/7TTTqO8vDzbtYjkpBpvJ6b1vZMabyerS5FDsXNF/eB/6/+srmQPNTU1TJs2jZqaGqtLERtTzsQMypmYQTkTo9kxY80a+P/ud79j1apVPPTQQ+hugGJ3jnQCf3wXjnTC6lLkUNVshWdGw5opVlfSiMPhwO/343A4rC5FbEw5EzMoZ2IG5UyMZseMNWuN//XXX8/atWsJBAL06tWLo446irKysj0P7nAwfvz4rBSa67TGXySPuArgwn/AoIusrkREREREpNmaOg5t1sDf6WzaRAGHw0EymTzYw+clDfztK4WThMuPOxnGScrqciRbHE44+7dw3PetroRUKkUikcDtdjf5/CpysJQzMYNyJmZQzsRo+ZQxQzf3W7NmTZP+rF69utnfgEiuCPm788HgJwn5u1tdimRTOgUf/BI+vs/qSgiFQnzwwQeEQiGrSxEbU87EDMqZmEE5E6PZMWPu5jypZ8+e2a5DJGcVxnZw7Oo/UxjbYXUpYoTpj0PNdjjvL+Bq1inxkBUWFnLsscdSWFhoyetLy6CciRmUMzGDciZGs2PGmjXVX/akqf4iea7v6XDp81BQZHUlIiIiIiJNYuhU/90lk0m2bdvG+vXr9/pHJN9FXcWsazuCqKvY6lLESCs/gefOhdqdpr90NBpl3bp1RKNR019bWg7lTMygnIkZlDMxmh0z1uyB/4IFCxg9ejQlJSV06dKF3r177/HnsMMOy2atIpYIF7RlXo//R7igrdWliNE2zYHxZ0DlWlNfNhwOM2/ePMLhsKmvKy2LciZmUM7EDMqZGM2OGWvWVP/FixczbNgwAEaNGsW7777LkUceSceOHfnyyy+pqKjg1FNPpUePHjzzzDNZLzoXaaq/iI0Ud4QrXofOg62uRERERERknwyd6v/QQw8Rj8eZNm0ab7/9NgAXXnghH374IWvWrOG6665j8eLFPPjgg82rXkTESjXb4NlzYPVkqysRERERETlkzRr4BwIBvvvd73LUUUdlvtYwcaCoqIh//OMftG7dmnvuuScrRYpYqaagA58f9jNqCjpYXYqYKRqCf18C/3vd8Jeqqanh888/p6amxvDXkpZLORMzKGdiBuVMjGbHjDVr4F9RUUG/fv0yf3e73dTV1TX6+6mnnsrEiRMPvUIRizlI40wncKAbYLQ4yRi8cQOU/83Ql3E4HDidThwOh6GvIy2bciZmUM7EDMqZGM2OGWvWTavbtGlDbW1t5u/t2rXbYwf/goICgsHgoVUnkgOKYjsYtubPVpchlknDR3dC9RY440Ew4BdAUVFRZt8UEaMoZ2IG5UzMoJyJ0eyYsWZ94t+nTx/Wrl2b+fvQoUP5+OOP2b59OwC1tbVMmDCB3r17Z6VIESulcZB0uEljnyt+0gwz/gxv3gzJeNYPnU6nSSaTNGOvVZEmU87EDMqZmEE5E6PZMWPNGvifeeaZTJo0KfOp/80338yuXbsYMmQIl1xyCYMGDWLdunXccMMNWS1WxApBfw/ePeppgv4eVpciVlvwMrx0GUSzu94rGAzy7rvvapaUGEo5EzMoZ2IG5UyMZseMNWvgf+ONNzJ+/PjMfQ3POeccHn/8ccLhMG+88QY7duzgjjvu4LbbbstqsSJWKIxVcPTav1MYq7C6FMkFqz6F574LtdnLQ2FhIUcffTSFhYVZO6bINylnYgblTMygnInR7JgxRzqL8xeSySQVFRV06NDBVhshNEVT759ouc1z4amRVlchkv/aHAZX/hfaaEmTiIiIiFijqePQZn3ivy8ul4uOHTu2uEG/2FvMVcTG1scTcxVZXYrkkl2rYfyZsHneIR8qFouxceNGYrHYodclsg/KmZhBORMzKGdiNDtmLKsDfxE7qitox5xeP6SuoJ3VpUiuqd0Oz34XVk06pMPU1dUxZ86cRrdFFck25UzMoJyJGZQzMZodM9akqf6jRo1q3sEdDj799NNmPTffaKq/faVxkHR6cKXiOLDPzp6SRU4PXPAkDL6kWU9v2DnW5XJpxpQYRjkTMyhnYgblTIyWTxlr6jjU3ZSDTZ48ea9fdzgce73FQcPXc72TRJrCQRp3yj7TfMQAqTj890ao2QbDbz3opzscDtzuJp2ORZpNORMzKGdiBuVMjGbHjDVpqn8qlWr0JxKJcO6559K7d2+eeeYZ1qxZQzgcZs2aNTz99NMcdthhnH/++UQiEaPrFzFcbUF7vuh1K7UF7a0uRXJaGibeBR/dBQe5Z2ptbS1ffPFF5hapIkZQzsQMypmYQTkTo9kxY81a4z9u3DjmzJnD7Nmzueaaa+jZsyder5eePXty7bXXMnPmTGbNmsW4ceOyXa+I6dIOJ3GXn7RDW2JIE5T/tf7T/2S8yU9Jp9PE4/G9zqASyRblTMygnIkZlDMxmh0z1qzb+R122GGce+65/OlPf9pnmx//+Me88847rF69+pAKzBda4y8ijRx2Klz2IniLra5ERERERGzK0Nv5bd68mYKCgv228Xg8bNmypTmHFxHJf6snwbPnQM0OqysRERERkRauWQP/bt26MWHChH3e1zAajTJhwgS6du16SMWJ5IIqf0/ePuoZqvw9rS5F8s2WeTD+DNi5ar/NqqqqePvtt6mqqjKlLGmZlDMxg3ImZlDOxGh2zFizBv7XXHMNK1euZNSoUUyZMoVkMglAMpkkEAhw2mmnsXr1aq699tps1ipiCX98F4M3PI8/vsvqUiQfVa6Bp8+qX2azD36/n8GDB+P3+00sTFoa5UzMoJyJGZQzMZodM9asNf7xeJxLLrmEt99+G4fDgdPppE2bNuzatYtUKkU6nea8887j9ddft91tEPZFa/xFZL8KiuHS56HvaVZXIiIiIiI2Yegaf4/Hw1tvvcWLL77IqFGjKCsrY9euXZSVlXHaaafx73//m7feeqvFDPrF3uKuQraUDiHuKrS6FMlnsRp46TKY/8oeD8XjcbZs2UI83vQ7AYgcLOVMzKCciRmUMzGaHTN2SPcn+973vsfHH39MRUUF8XiciooKJk6cyNixY7NVn4jlagvaM6vPT6ktaG91KZLvUnF48/swvfEdUWpra5k1a5at7hUruUc5EzMoZ2IG5UyMZseMNWuqv+xJU/3tK4WLuLsQT6IOJ0mryxG7OP4WOOthcDhIpVLE43E8Hg9O5yFdjxXZJ+VMzKCciRmUMzFaPmWsqePQQ5qLP3/+fF566SWWLl1KbW0tn3zyCQBr165l1qxZnHHGGbRu3fpQXkLEck6SeBPVVpchdvP5E1CzDS54Eqe7AK/Xa3VFYnNOp1M5E8MpZ2IG5UyMZseMNfvyxb333svQoUN59NFHeeedd5g0aVLmsVQqxdixY3nxxRezUqSIleoK2vFljxupK2hndSliNwtfh3+Poa5yO19++SV1dXVWVyQ2VldXp5yJ4ZQzMYNyJkazY8aaNfB/+eWXeeihhzjjjDOYN28ed955Z6PHDzvsMI455hjefvvtrBQpYqWkw02ttyNJhzarFAOsCZB8/QZqQ1WZW6OKGCGZTFJbW6uciaGUMzGDciZGs2PGmrXGf/jw4VRUVLBw4UIKCgp44IEHePDBBxt1zLXXXsvkyZNZu3ZtNuvNWVrjLyKHpFVPuPK/0K6v1ZWIiIiISJ4w9HZ+//vf/zjrrLMoKCjYZ5suXbqwbdu25hxeRKTlqVoH48+A9TOtrkREREREbKZZA/90On3A3Q23bduGz+drVlEiuSTo78F7g/9B0N/D6lLEpjIZoxiePx+WvGt1SWJDwWCQ9957j2AwaHUpYmPKmZhBOROj2TFjzRr49+vXj/Ly8n0+nkwmmTZtGkcccUSzCxPJFd54FQO2vIk3XmV1KWJTjTKWCMOrV8Gsf1pdltiM1+tlwIABttulWHKLciZmUM7EaHbMWLMG/pdeeilz5szh8ccf3+vjjzzyCCtXruR73/veodQmkhN8iRB9d3yILxGyuhSxqT0ylk7B+7fDx/fBwW/DIrJXPp+Pvn37ajaeGEo5EzMoZ2I0O2asWZv7hcNhTjzxRObPn8+xxx4LwBdffMFPf/pTpk6dyuzZszn++OMJBAK43S1jJ3Rt7mdfcaePyqI+tK5dhScVsbocsaH9ZmzwZXD+E+DyWFOc2EY8HqeyspLWrVvj8ShPYgzlTMygnInR8iljhm7u5/f7mTRpEldddRVz5sxh1qxZpNNpHnvsMebMmcOVV17Jhx9+2GIG/WJvtd6OlPe9g1pvR6tLEZvab8YWvAIvXgwRzTiRQ1NbW0t5eTm1tbVWlyI2ppyJGZQzMZodM9asT/x3t2vXLr744gt27txJWVkZw4YNo3379tmqL2/oE3/7SjrcRD2t8MarcKUTVpcjNtSkjHX8NlzxGpR2Nrc4sY1kMkk0GsXr9eJyuawuR2xKORMzKGditHzKWFPHoYc88Jd6GviLiOFKu8GVb0CHgVZXIiIiIiI5wNCp/rtbsmQJb775Ji+88MKhHkokJ9V52jK/29XUedpaXYrYVJMzFtoIT58Ja6ebU5jYSl1dHfPnz6eurs7qUsTGlDMxg3ImRrNjxpo98J83bx5Dhw5l0KBBjBkzhmuvvTbzWCAQoLCwkHfeeScbNYpYKun0UlnUl6TTPrfzkNxyUBmLBOGFC2Hhf40vTGwlmUxSWVlJMpm0uhSxMeVMzKCcidHsmLFmTfVfvnw5w4YNI5lMcuONN7J8+XI++OCDTMek02m6d+/OaaedxnPPPZf1onORpvqLiLkccNbDcMItVhciIiIiIhYxdKr/Aw88QCwWY9asWTz22GOZW/o1cDgcnHDCCXzxxRfNObyIiBxQGj76NXz4a9BWLSIiIiKyH80a+H/66adcdNFFHH744fts06NHDzZv3tzswppr6tSpXHzxxXTu3Bmv10vnzp0588wzef/99/doO2PGDEaPHk2bNm0oLCxk8ODBPP7447aa0iGHLujrzoeD/kzQ193qUsSmDiljnz8Br18HiWj2CxNbCQaDfPjhhwSDQatLERtTzsQMypkYzY4Za9bAv6qqim7duu23TSqVIhaLNauo5nrooYc45ZRTmDJlCmeffTY///nPOffcc6msrGTy5MmN2k6YMCHT9sILL+SWW24hFovx05/+lMsvv9zUuiW3eRMheu/4BG9C91EXYxxyxha9CS9cBOGqrNYl9uL1eunduzder/YrEeMoZ2IG5UyMZseMuZvzpA4dOrBy5cr9tlm0aBHdu5v3Cemrr77KPffcw+mnn85///tfSkpKGj0ej8cz/x8KhbjhhhtwuVxMnjyZY445BoBx48YxatQoXn/9dV5++WVdABAAfIkgA7a9bXUZYmNZydi6afD0WfW3+yvb/4VZaZl8Ph8DBgywugyxOeVMzKCcidHsmLFmfeI/atQo3n33XVasWLHXx7/44gs+/fRTzjrrrEMqrqlSqRR33HEHfr+fl156aY9BP4DH48n8/2uvvUZFRQVjx47NDPqh/h/4oYceAuBvf/ub8YVLXkg4vewq7EtCu/qLQbKWsR1L4V+nw9aF2SlMbCWRSLBr1y4SiYTVpYiNKWdiBuVMjGbHjDVr4H/nnXficrk4+eST+fvf/55Zy79o0SKefPJJzj33XEpKSrj99tuzWuy+zJgxg7Vr13LOOefQunVr3nvvPX73u9/xpz/9ifLy8j3aT5o0CYCzzz57j8dOOeUUCgsLKS8vJxrVmlmBGm8npg64lxpvJ6tLEZvKasaqt8Az34HVkw/9WGIrNTU1TJ06lZqaGqtLERtTzsQMypkYzY4Za9bAf8CAAbzxxhtEo1FuueUW/vWvf5FOpxk8eHBmrfx///tfevToke1696rh7gGdOnVi6NChfPe73+VXv/oVP/nJTxg+fDgjRoxgx44dmfbLli0DoF+/fnscy+1207t3bxKJBKtXr97na0ajUUKhUKM/QOa/Df8fDoeB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mvh7LBZj8+bNFBUV7fb7JPPU1tZSUVHBypUru/T1GyRzKWOSDsqZpINyJumgnEmqZVLGTNOkrq6O3r1773Zct5z4tx4Jaf3kf3u1tbVtxu2Mx+PB42l7dczW5RpiT/n5+V3+f3zJbMqYpINyJumgnEk6KGeSapmSsd3NW1t1yyscDB06FICFCxfu9PmqqioAhgwZkraaRERERERERFKhW078jznmGADeeecdYrFYm+fq6uqYNm0aPp+Pww8/3IryRERERERERJKmW078Bw0axIknnsiyZcv4wx/+0Oa52267jYaGBi6++GJycvbsdhliTx6Ph9tuu22HUztEkkUZk3RQziQdlDNJB+VMUs2OGTPM9q77b1OLFy9mzJgxbNiwgTPOOIPhw4fzySefMGXKFIYMGcL06dMpKiqyukwRERERERGRvdJtJ/4AK1eu5NZbb+Wtt96iurqasrIyzjzzTG677TYKCwutLk9ERERERERkr3Xrib+IiIiIiIiI3XXLc/xFREREREREugtN/EVERERERERsTBN/6XZWrVrF97//fXr37o3H46F///5ce+21bNmypUPfX11dzd/+9jfOOuss9tlnH3w+H36/n7Fjx/L444/vcItI6Z72Nmc7849//APDMDAMg7/97W9JrFYyVTJz9tFHH3HOOedQVlaGx+OhrKyME088kTfeeCMFlUumSFbGXnnlFY4//njKy8vx+XwMHDiQ8847jxkzZqSocskU//vf//jJT37CUUcdRX5+PoZh8H//93+deq1U/O4Ve0hGzjJ9DqBz/KVb2f5uDsOGDWPmzJlMmTKFoUOHMm3atHbv5vDnP/+ZH/7wh5SWlnLsscfSt29f1q9fzwsvvEAgEODss8/mf//7H4ZhpOmnkq4mGTnb3sqVKxk1ahTRaJT6+nomTZrEpZdemqKfQDJBMnP261//mltuuYXi4mJOPfVUysrK2LRpE7Nnz+aYY47hd7/7XYp/GumKkpWx66+/ngceeICioiLOPPNMiouLWbRoEa+88gqRSIS///3vXHzxxWn4iaQrOuCAA/jyyy/Jzc2lvLyc+fPnc+GFF/LPf/5zj14nFb97xT6SkbOMnwOYIt3IiSeeaALmo48+2ubx6667zgTMK664ot3XeP/9982XXnrJjEQibR5fu3atWVFRYQLmc889l9S6JbMkI2fbisVi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S9rbnO2KPvGXbSUrZ9XV1eZ1111n9u/f33S73WZhYaF5+umnmzNmzEjDTyFdWTIyFgqFzIceesg87LDDzLy8PNPpdJo9e/Y0J0yYYL799ttp+kmkq2pvv2rbTLX3XtbRvEr3k4ycZfocQJ/4i4iIiIiIiNiYruovIiIiIiIiYmOa+IuIiIiIiIjYmCb+IiIiIiIiIjamib+IiIiIiIiIjWniLyIiIiIiImJjmviLiIiIiIiI2Jgm/iIiIiIiIiI2pom/iIiIiIiIiI1p4i8iImJT/fv3p3///mnb3rJlyzAMg4kTJ6Ztm9uaOHEihmEkvn7zm99YUseeyM3NbVPzsmXLrC5JRERsSBN/ERERSanWCXm6JrXXXHMNt912G2PHjk3L9tavX4/T6eTqq6/e4++9+eabue2229h///1TUJmIiEicy+oCRERExB769OnDvHnz8Pv9ltZx7bXXpnWlw8svv0wsFuOss87a4++9+eabgfhqiS+//DLZpYmIiACa+IuIiEiSuN1uhg0bZnUZaffiiy9SVFTEuHHjrC5FRERkp7TUX0REJM1mzJiBYRicffbZuxwzePBgPB4PmzdvbvP422+/zSmnnEJxcTEej4dBgwZxww03UFNT0+HtNzc3c++99zJq1Ciys7PJz8/nqKOO4j//+c8uv2fmzJl85zvfoU+fPng8HsrKyjjxxBP573//mxizs3P8DcPgqaeeAmDAgAGJc9lbP5E//PDDcTqduzwN4P7778cwDB544IEO/3y78q1vfQvDMAiHw9x5550MGjQIr9fL0KFDmTRpUmLcH/7wB0aOHInP56O8vJzbb7+dWCy209cMBAJMnjyZ0047DafTCUAwGOShhx7iwAMPpKCggOzsbCoqKjjttNN499139/rnEBER2VP6xF9ERCTNjjjiCIYMGcJrr71GdXU1RUVFbZ6fPn06ixYt4pxzzqGwsDDx+J133sltt91GUVEREyZMoKSkhK+++or777+fN954g+nTp7e7zD4UCnHiiSfy0UcfMWLECH70ox/R2NjIc889xwUXXMDs2bP57W9/2+Z7Jk2axA9/+EOcTienn346gwcPZsOGDXz66af88Y9/5Nvf/vYut3fbbbfx0ksv8eWXX3LNNdfQo0cPgMSfV111FZdccgmTJk3i7rvvbvO9pmny17/+FY/HwyWXXNJeWzvs/PPP55NPPuGUU07B7Xbzv//9j8svv5ysrCxmzZrFM888w6mnnsrxxx/Pq6++yh133IHP5+MXv/jFDq/1+uuvEwqF2hzEufjii/nvf//LyJEjufjii/H5fKxZs4apU6fy9ttvc8IJJyTtZxEREekQU0RERNLu7rvvNgHzscce2+G5K664wgTMV155JfHY5MmTTcA88sgjzZqamjbjn3zySRMwr7nmmjaP9+vXz+zXr99Ot3vqqaea4XA48fi6devMiooKEzA/+uijxONz5841XS6XWVBQYM6ZM2eHWlesWJH476VLl5qAeckll7QZc8kll5iAuXTp0h2+v7m52SwuLjZLS0vb1GOapvn++++bgPnd7353h+/bmd1txzRN8+ijjzYB8+CDDza3bNmSeHzx4sWm2+02/X6/2b9/f3PVqlWJ52pqaszi4mKzuLh4h/pM0zTPPfdcMycnx2xqakqMNwzDHD16tBmJRHYYv2nTpk7VLiIisje01F9ERMQCF110EQ6HI7EMvlUwGOTZZ5+lpKSEk08+OfH4o48+CsBf//rXHT7VnzhxIgcccADPPPNMu9t94oknEkvnXa6tC/969erFLbfckhjT6k9/+hORSIRbbrmFfffdd4fXq6io6MBPu2sej4fvfe97rFu3jldeeaXNc3/5y18AuPLKK/dqG9v77W9/m1hxADBw4EDGjh1LIBDglltuoU+fPonn/H4/p512Gps2bWL16tVtXqe5uZm33nqLk08+Ga/XC4DD4cA0TTweDw7HjrtZ26/uEBERSQct9RcREbFARUUFxx57LO+99x7ffPMNI0aMAOCVV16hpqaG6667rs3EfMaMGbjd7jbn1G8rFAqxcePGnZ460Kquro7FixdTXl7OkCFDdnj++OOPB+Dzzz9PPPbxxx8DtDkIkWxXXnkl999/P3/5y18SS+Y3bNjASy+9xIgRIzjqqKOSur3Ro0fv8Fjv3r3bfW7VqlX069cv8fg777xDfX19m6v55+Xlcdppp/Hqq69y4IEHcs455zB27FgOO+wwsrOzk/pziIiIdJQm/iIiIha55JJLeO+993jqqacS59W3rgDY/pz26upqIpEId9xxx25fs76+fpcT/0AgAEBpaelOny8rK2szDkhcNHDbT8GTbeDAgYwfP563336bpUuXMmDAAJ588klCoRBXXHFF0re3s+sgtB5k2d1z4XC4zeMvvvgiWVlZTJgwoc3jzz77LL/97W955plnuPXWWwHwer18+9vf5v7776dnz55J+TlEREQ6Skv9RURELHL22WeTl5fHP//5T6LRKBs2bODtt99m//33Z//9928z1u/3U1BQgGmau/3a9hPp7bVOatetW7fT59euXdtmHGy9CN/2y9yT7aqrrsI0TSZNmpT40+fzcdFFF6V0u50VjUZ59dVXOfbYY3c4WODz+bj99ttZuHAhK1as4J///Cdjx47l6aef5txzz7WoYhER6c408RcREbFIdnY25557LmvWrOG9997jX//6F5FIZKdXsD/88MPZsmULc+fO7fT28vLyGDRoEKtXr6aqqmqH56dMmQLAQQcd1Ga7EL+NYGe13uYuGo3ucsyECRPo168fTzzxBG+++SaLFy/m29/+NgUFBZ3ebip9+OGHVFdXt1nmvzMVFRVceOGFvP322wwePJgPP/xwh1s0ioiIpJom/iIiIhZqvef9008/zdNPP43L5eLCCy/cYdx1110HwGWXXcaaNWt2eL6hoSFxPv7ufP/738c0TW644YY2E/FNmzZx1113Jca0+uEPf4jL5eLOO+9k/vz5O7zeqlWr2t1m66kHK1eu3OUYh8PBFVdcwfr167n00kuB5F/UL5leeOEFHA4HZ5xxRpvHN27cyCeffLLD+IaGBurq6nA6nW2u3SAiIpIO+s0jIiJioaOOOooBAwbw3HPPEQ6HOe200ygpKdlh3HHHHcdvfvMbbrrpJgYPHswpp5zCgAEDqK+vZ/ny5VRWVjJ27Fjeeuut3W7v+uuv58033+Tll19m//3355RTTqGxsZHnnnuODRs28POf/5yxY8cmxo8YMYI//vGPXHnllRxwwAGcfvrpDB48mE2bNvHpp5/i9/sTKwV25bjjjuO+++7jsssu45xzziE3N5cePXrw4x//uM24H/zgB9x+++2sXbuW/fbbL7HaoCt66aWXGDNmDL169Wrz+OrVqzn88MMZPnw4Bx10EBUVFdTW1vLaa6+xbt06fvzjH5Ofn29R1SIi0l1p4i8iImIhwzC4+OKLExft29ky/1a/+MUvOPLII3n00UeZOnUqL7/8Mn6/nz59+nD55Zfz3e9+t93tZWVl8e677/Lggw/yzDPP8Nhjj+Fyudh///15+OGHueCCC3b4nssuu4yRI0dy//3388EHH/DSSy9RXFzMfvvtl/h0fnfGjx/PAw88wKRJk3jooYcIhUL069dvh4l/SUkJEyZM4MUXX+zSn/Z/+umnrFq1KrEKY1v9+/fnjjvu4IMPPmDKlCls2rSJwsJChg4dym9+8xvOP/98CyoWEZHuzjBN07S6CBEREZFYLMagQYPYuHEja9as2eNPxidOnMhTTz3F0qVL6d+/f2qKBG6++WbuvfdelixZwoABA5LymumqXUREuied4y8iIiJdwn//+1+WLVvGxRdfvFfL4QcMGIBhGPzmN79JYnVbvfjii+y///5JmfTn5uZiGEbiNo4iIiKpoKX+IiIiYqlf//rXbN68mccff5zc3FxuuummTr3OmWee2ebT8m2vVZBM8+bNS9pr3XzzzYRCocTfW2+fKCIikkxa6i8iIiKWMgwDt9vNvvvuywMPPMCxxx5rdUkiIiK2ok/8RURExFL6DEJERCS1dI6/iIiIiIiIiI1p4i8iIiIiIiJiY5r4i4iIiIiIiNiYJv4iIiIiIiIiNqaJv4iIiIiIiIiNaeIvIiIiIiIiYmOa+IuIiIiIiIjYmCb+IiIiIiIiIjamib+IiIiIiIiIjf0/1qhXxg7oJ6IAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "tidal.graphics.tidal_phase_exceedance(data.d, data.s, flood, ebb)" + "data": { + "image/png": "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iLkccNbDcMItVhciIiIiIhYxdKr/Aw88QCwWY9asWTz22GOZW/o1cDgcnHDCCXzxxRfNObyIiBxQGj76NXz4a9BWLSIiIiKyH80a+H/66adcdNFFHH744fts06NHDzZv3tzswppr6tSpXHzxxXTu3Bmv10vnzp0588wzef/99/doO2PGDEaPHk2bNm0oLCxk8ODBPP7447aa0iGHLujrzoeD/kzQ193qUsSmDiljnz8Br18HiWj2CxNbCQaDfPjhhwSDQatLERtTzsQMypkYzY4Za9bAv6qqim7duu23TSqVIhaLNauo5nrooYc45ZRTmDJlCmeffTY///nPOffcc6msrGTy5MmN2k6YMCHT9sILL+SWW24hFovx05/+lMsvv9zUuiW3eRMheu/4BG9C91EXYxxyxha9CS9cBOGqrNYl9uL1eunduzder/YrEeMoZ2IG5UyMZseMuZvzpA4dOrBy5cr9tlm0aBHdu5v3Cemrr77KPffcw+mnn85///tfSkpKGj0ej8cz/x8KhbjhhhtwuVxMnjyZY445BoBx48YxatQoXn/9dV5++WVdABAAfIkgA7a9bXUZYmNZydi6afD0WfW3+yvb/4VZaZl8Ph8DBgywugyxOeVMzKCcidHsmLFmfeI/atQo3n33XVasWLHXx7/44gs+/fRTzjrrrEMqrqlSqRR33HEHfr+fl156aY9BP4DH48n8/2uvvUZFRQVjx47NDPqh/h/4oYceAuBvf/ub8YVLXkg4vewq7EtCu/qLQbKWsR1L4V+nw9aF2SlMbCWRSLBr1y4SiYTVpYiNKWdiBuVMjGbHjDVr4H/nnXficrk4+eST+fvf/55Zy79o0SKefPJJzj33XEpKSrj99tuzWuy+zJgxg7Vr13LOOefQunVr3nvvPX73u9/xpz/9ifLy8j3aT5o0CYCzzz57j8dOOeUUCgsLKS8vJxrVmlmBGm8npg64lxpvJ6tLEZvKasaqt8Az34HVkw/9WGIrNTU1TJ06lZqaGqtLERtTzsQMypkYzY4Za9bAf8CAAbzxxhtEo1FuueUW/vWvf5FOpxk8eHBmrfx///tfevToke1696rh7gGdOnVi6NChfPe73+VXv/oVP/nJTxg+fDgjRoxgx44dmfbLli0DoF+/fnscy+1207t3bxKJBKtXr97na0ajUUKhUKM/QOa/Df8fDoeB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mvh7LBZj8+bNFBUV7fb7JPPU1tZSUVHBypUru/T1GyRzKWOSDsqZpINyJumgnEmqZVLGTNOkrq6O3r1773Zct5z4tx4Jaf3kf3u1tbVtxu2Mx+PB42l7dczW5RpiT/n5+V3+f3zJbMqYpINyJumgnEk6KGeSapmSsd3NW1t1yyscDB06FICFCxfu9PmqqioAhgwZkraaRERERERERFKhW078jznmGADeeecdYrFYm+fq6uqYNm0aPp+Pww8/3IryRERERERERJKmW078Bw0axIknnsiyZcv4wx/+0Oa52267jYaGBi6++GJycvbsdhliTx6Ph9tuu22HUztEkkUZk3RQziQdlDNJB+VMUs2OGTPM9q77b1OLFy9mzJgxbNiwgTPOOIPhw4fzySefMGXKFIYMGcL06dMpKiqyukwRERERERGRvdJtJ/4AK1eu5NZbb+Wtt96iurqasrIyzjzzTG677TYKCwutLk9ERERERERkr3Xrib+IiIiIiIiI3XXLc/xFREREREREugtN/EVERERERERsTBN/6XZWrVrF97//fXr37o3H46F///5ce+21bNmypUPfX11dzd/+9jfOOuss9tlnH3w+H36/n7Fjx/L444/vcItI6Z72Nmc7849//APDMDAMg7/97W9JrFYyVTJz9tFHH3HOOedQVlaGx+OhrKyME088kTfeeCMFlUumSFbGXnnlFY4//njKy8vx+XwMHDiQ8847jxkzZqSocskU//vf//jJT37CUUcdRX5+PoZh8H//93+deq1U/O4Ve0hGzjJ9DqBz/KVb2f5uDsOGDWPmzJlMmTKFoUOHMm3atHbv5vDnP/+ZH/7wh5SWlnLsscfSt29f1q9fzwsvvEAgEODss8/mf//7H4ZhpOmnkq4mGTnb3sqVKxk1ahTRaJT6+nomTZrEpZdemqKfQDJBMnP261//mltuuYXi4mJOPfVUysrK2LRpE7Nnz+aYY47hd7/7XYp/GumKkpWx66+/ngceeICioiLOPPNMiouLWbRoEa+88gqRSIS///3vXHzxxWn4iaQrOuCAA/jyyy/Jzc2lvLyc+fPnc+GFF/LPf/5zj14nFb97xT6SkbOMnwOYIt3IiSeeaALmo48+2ubx6667zgTMK664ot3XeP/9982XXnrJjEQibR5fu3atWVFRYQLmc889l9S6JbMkI2fbisVi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S9rbnO2KPvGXbSUrZ9XV1eZ1111n9u/f33S73WZhYaF5+umnmzNmzEjDTyFdWTIyFgqFzIceesg87LDDzLy8PNPpdJo9e/Y0J0yYYL799ttp+kmkq2pvv2rbTLX3XtbRvEr3k4ycZfocQJ/4i4iIiIiIiNiYruovIiIiIiIiYmOa+IuIiIiIiIjYmCb+IiIiIiIiIjamib+IiIiIiIiIjWniLyIiIiIiImJjmviLiIiIiIiI2Jgm/iIiIiIiIiI2pom/iIiIiIiIiI1p4i8iImJT/fv3p3///mnb3rJlyzAMg4kTJ6Ztm9uaOHEihmEkvn7zm99YUseeyM3NbVPzsmXLrC5JRERsSBN/ERERSanWCXm6JrXXXHMNt912G2PHjk3L9tavX4/T6eTqq6/e4++9+eabue2229h///1TUJmIiEicy+oCRERExB769OnDvHnz8Pv9ltZx7bXXpnWlw8svv0wsFuOss87a4++9+eabgfhqiS+//DLZpYmIiACa+IuIiEiSuN1uhg0bZnUZaffiiy9SVFTEuHHjrC5FRERkp7TUX0REJM1mzJiBYRicffbZuxwzePBgPB4PmzdvbvP422+/zSmnnEJxcTEej4dBgwZxww03UFNT0+HtNzc3c++99zJq1Ciys7PJz8/nqKOO4j//+c8uv2fmzJl85zvfoU+fPng8HsrKyjjxxBP573//mxizs3P8DcPgqaeeAmDAgAGJc9lbP5E//PDDcTqduzwN4P7778cwDB544IEO/3y78q1vfQvDMAiHw9x5550MGjQIr9fL0KFDmTRpUmLcH/7wB0aOHInP56O8vJzbb7+dWCy209cMBAJMnjyZ0047DafTCUAwGOShhx7iwAMPpKCggOzsbCoqKjjttNN499139/rnEBER2VP6xF9ERCTNjjjiCIYMGcJrr71GdXU1RUVFbZ6fPn06ixYt4pxzzqGwsDDx+J133sltt91GUVEREyZMoKSkhK+++or777+fN954g+nTp7e7zD4UCnHiiSfy0UcfMWLECH70ox/R2NjIc889xwUXXMDs2bP57W9/2+Z7Jk2axA9/+EOcTienn346gwcPZsOGDXz66af88Y9/5Nvf/vYut3fbbbfx0ksv8eWXX3LNNdfQo0cPgMSfV111FZdccgmTJk3i7rvvbvO9pmny17/+FY/HwyWXXNJeWzvs/PPP55NPPuGUU07B7Xbzv//9j8svv5ysrCxmzZrFM888w6mnnsrxxx/Pq6++yh133IHP5+MXv/jFDq/1+uuvEwqF2hzEufjii/nvf//LyJEjufjii/H5fKxZs4apU6fy9ttvc8IJJyTtZxEREekQU0RERNLu7rvvNgHzscce2+G5K664wgTMV155JfHY5MmTTcA88sgjzZqamjbjn3zySRMwr7nmmjaP9+vXz+zXr99Ot3vqqaea4XA48fi6devMiooKEzA/+uijxONz5841XS6XWVBQYM6ZM2eHWlesWJH476VLl5qAeckll7QZc8kll5iAuXTp0h2+v7m52SwuLjZLS0vb1GOapvn++++bgPnd7353h+/bmd1txzRN8+ijjzYB8+CDDza3bNmSeHzx4sWm2+02/X6/2b9/f3PVqlWJ52pqaszi4mKzuLh4h/pM0zTPPfdcMycnx2xqakqMNwzDHD16tBmJRHYYv2nTpk7VLiIisje01F9ERMQCF110EQ6HI7EMvlUwGOTZZ5+lpKSEk08+OfH4o48+CsBf//rXHT7VnzhxIgcccADPPPNMu9t94oknEkvnXa6tC/969erFLbfckhjT6k9/+hORSIRbbrmFfffdd4fXq6io6MBPu2sej4fvfe97rFu3jldeeaXNc3/5y18AuPLKK/dqG9v77W9/m1hxADBw4EDGjh1LIBDglltuoU+fPonn/H4/p512Gps2bWL16tVtXqe5uZm33nqLk08+Ga/XC4DD4cA0TTweDw7HjrtZ26/uEBERSQct9RcREbFARUUFxx57LO+99x7ffPMNI0aMAOCVV16hpqaG6667rs3EfMaMGbjd7jbn1G8rFAqxcePGnZ460Kquro7FixdTXl7OkCFDdnj++OOPB+Dzzz9PPPbxxx8DtDkIkWxXXnkl999/P3/5y18SS+Y3bNjASy+9xIgRIzjqqKOSur3Ro0fv8Fjv3r3bfW7VqlX069cv8fg777xDfX19m6v55+Xlcdppp/Hqq69y4IEHcs455zB27FgOO+wwsrOzk/pziIiIdJQm/iIiIha55JJLeO+993jqqacS59W3rgDY/pz26upqIpEId9xxx25fs76+fpcT/0AgAEBpaelOny8rK2szDkhcNHDbT8GTbeDAgYwfP563336bpUuXMmDAAJ588klCoRBXXHFF0re3s+sgtB5k2d1z4XC4zeMvvvgiWVlZTJgwoc3jzz77LL/97W955plnuPXWWwHwer18+9vf5v7776dnz55J+TlEREQ6Skv9RURELHL22WeTl5fHP//5T6LRKBs2bODtt99m//33Z//9928z1u/3U1BQgGmau/3a9hPp7bVOatetW7fT59euXdtmHGy9CN/2y9yT7aqrrsI0TSZNmpT40+fzcdFFF6V0u50VjUZ59dVXOfbYY3c4WODz+bj99ttZuHAhK1as4J///Cdjx47l6aef5txzz7WoYhER6c408RcREbFIdnY25557LmvWrOG9997jX//6F5FIZKdXsD/88MPZsmULc+fO7fT28vLyGDRoEKtXr6aqqmqH56dMmQLAQQcd1Ga7EL+NYGe13uYuGo3ucsyECRPo168fTzzxBG+++SaLFy/m29/+NgUFBZ3ebip9+OGHVFdXt1nmvzMVFRVceOGFvP322wwePJgPP/xwh1s0ioiIpJom/iIiIhZqvef9008/zdNPP43L5eLCCy/cYdx1110HwGWXXcaaNWt2eL6hoSFxPv7ufP/738c0TW644YY2E/FNmzZx1113Jca0+uEPf4jL5eLOO+9k/vz5O7zeqlWr2t1m66kHK1eu3OUYh8PBFVdcwfr167n00kuB5F/UL5leeOEFHA4HZ5xxRpvHN27cyCeffLLD+IaGBurq6nA6nW2u3SAiIpIO+s0jIiJioaOOOooBAwbw3HPPEQ6HOe200ygpKdlh3HHHHcdvfvMbbrrpJgYPHswpp5zCgAEDqK+vZ/ny5VRWVjJ27Fjeeuut3W7v+uuv58033+Tll19m//3355RTTqGxsZHnnnuODRs28POf/5yxY8cmxo8YMYI//vGPXHnllRxwwAGcfvrpDB48mE2bNvHpp5/i9/sTKwV25bjjjuO+++7jsssu45xzziE3N5cePXrw4x//uM24H/zgB9x+++2sXbuW/fbbL7HaoCt66aWXGDNmDL169Wrz+OrVqzn88MMZPnw4Bx10EBUVFdTW1vLaa6+xbt06fvzjH5Ofn29R1SIi0l1p4i8iImIhwzC4+OKLExft29ky/1a/+MUvOPLII3n00UeZOnUqL7/8Mn6/nz59+nD55Zfz3e9+t93tZWVl8e677/Lggw/yzDPP8Nhjj+Fyudh///15+OGHueCCC3b4nssuu4yRI0dy//3388EHH/DSSy9RXFzMfvvtl/h0fnfGjx/PAw88wKRJk3jooYcIhUL069dvh4l/SUkJEyZM4MUXX+zSn/Z/+umnrFq1KrEKY1v9+/fnjjvu4IMPPmDKlCls2rSJwsJChg4dym9+8xvOP/98CyoWEZHuzjBN07S6CBEREZFYLMagQYPYuHEja9as2eNPxidOnMhTTz3F0qVL6d+/f2qKBG6++WbuvfdelixZwoABA5LymumqXUREuied4y8iIiJdwn//+1+WLVvGxRdfvFfL4QcMGIBhGPzmN79JYnVbvfjii+y///5JmfTn5uZiGEbiNo4iIiKpoKX+IiIiYqlf//rXbN68mccff5zc3FxuuummTr3OmWee2ebT8m2vVZBM8+bNS9pr3XzzzYRCocTfW2+fKCIikkxa6i8iIiKWMgwDt9vNvvvuywMPPMCxxx5rdUkiIiK2ok/8RURExFL6DEJERCS1dI6/iIiIiIiIiI1p4i8iIiIiIiJiY5r4i4iIiIiIiNiYJv4iIiIiIiIiNqaJv4iIiIiIiIiNaeIvIiIiIiIiYmOa+IuIiIiIiIjYmCb+IiIiIiIiIjamib+IiIiIiIiIjf0/1qhXxg7oJ6IAAAAASUVORK5CYII=", + "text/plain": [ + "
" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - }, - "vscode": { - "interpreter": { - "hash": "1b38577481a8c337d860514619746143ecc67292e11e5807b52b737c5351e332" - } + }, + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "tidal.graphics.tidal_phase_exceedance(data.d, data.s, flood, ebb)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" }, - "nbformat": 4, - "nbformat_minor": 4 + "vscode": { + "interpreter": { + "hash": "1b38577481a8c337d860514619746143ecc67292e11e5807b52b737c5351e332" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/examples/tidal_performance_example.ipynb b/examples/tidal_performance_example.ipynb index 1eb311853..a3cd56c62 100644 --- a/examples/tidal_performance_example.ipynb +++ b/examples/tidal_performance_example.ipynb @@ -1,690 +1,715 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Tidal Power Performance Analysis\n", - "\n", - "The following example demonstrates a simple workflow for conducting the power performance analysis of a turbine, given turbine specifications, power data, and Acoustic Doppler Current Profiler (ADCP) water measurements.\n", - "\n", - "In this case, the turbine specifications can be broken down into\n", - " 1. Shape of the rotor's swept area\n", - " 2. Turbine rotor diameter/height and width\n", - " 3. Turbine hub height (center of swept area)\n", - "\n", - "Additional data needed:\n", - " - Power data from the current energy converter (CEC)\n", - " - 2-dimensional water velocity data\n", - "\n", - "In this jupyter notebook, we'll be covering the following three topics:\n", - " 1. CEC power-curve\n", - " 2. Velocity profiles\n", - " 3. CEC efficiency profile (or power coefficient profile)\n", - "\n", - "Start by importing the necessary tools:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from mhkit.tidal import performance\n", - "from mhkit.dolfyn import load" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this case, we'll use ADCP data from the ADCP example notebook. I am importing a dataset from the ADCP example notebook. This data retains the original timestamps (1 Hz sampling frequency) and was rotated into the principal coordinate frame (streamwise-cross_stream-up)." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# Open processed ADCP dataset\n", - "ds = load('data/tidal/adcp.principal.a1.20200815.nc')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, since we don't have power data, we'll invent a mock timeseries based off the cube of water velocity, just to have something to work with." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Streamwise and hub-height water velocity\n", - "streamwise_vel = ds['vel'].sel(dir='streamwise')\n", - "hub_height_vel = abs(streamwise_vel.isel(range=10))\n", - "\n", - "# Emulate power data\n", - "power = hub_height_vel**3 * 1e5\n", - "# Emulate cut-in speed by setting power at flow speeds below 0.5 m/s to 0 W\n", - "power = power.where(abs(streamwise_vel.mean('range')) > 0.5, 0)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first step for any of the following calculations is to first split velocity into ebb and flood tide. You'll need some background information on the site to know which direction is positive and which is negative in the data." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "ebb = streamwise_vel.where(streamwise_vel > 0)\n", - "flood = streamwise_vel.where(streamwise_vel < 0)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With the ebb and flood velocities, we can also divide the power data into that for ebb and flood tides." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Make sure ebb and flood are on same timestamps\n", - "power = power.interp(time=streamwise_vel['time'])\n", - "\n", - "power_ebb = power.where(~ebb.mean('range').isnull(), 0)\n", - "power_flood = power.where(~flood.mean('range').isnull(), 0)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Power-curve\n", - "\n", - "Now with power and velocity divided into ebb and flood tides, we can calculate the power curve for the CEC in both conditions\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "power_curve_ebb = performance.power_curve(\n", - " power_ebb,\n", - " velocity=ebb,\n", - " hub_height=4.2,\n", - " doppler_cell_size=0.5, \n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " turbine_profile='circular',\n", - " diameter=3,\n", - " height=None,\n", - " width=None)\n", - "power_curve_flood = performance.power_curve(\n", - " power_flood,\n", - " velocity=flood,\n", - " hub_height=4.2,\n", - " doppler_cell_size=0.5, \n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " turbine_profile='circular',\n", - " diameter=3,\n", - " height=None,\n", - " width=None)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
U_avgU_avg_power_weightedP_avgP_stdP_maxP_min
U_bins
(0.0, 0.1]0.0674590.0000000.0000000.0000000.0000000.000000
(0.1, 0.2]0.1156140.0000000.0000000.0000000.0000000.000000
(0.2, 0.3]0.2496760.2256390.0000000.0000000.0000000.000000
(0.3, 0.4]0.3396000.3155610.0000000.0000000.0000000.000000
(0.4, 0.5]0.4593930.4372492890.7249862660.8100225551.535008229.914964
(0.5, 0.6]0.5485070.53297419677.3435184645.89093624323.23445415031.452582
(0.6, 0.7]0.6714490.65536240369.4355173679.26013545506.30667737083.470337
(0.7, 0.8]0.7261890.70484552413.9720242856.73714257360.86147350670.102583
(0.8, 0.9]0.8439580.82591679944.0008559798.56967496206.92802566531.815452
(0.9, 1.0]0.9387010.920960103970.0421755828.263891112163.97743499100.055332
(1.0, 1.1]1.0466071.026293148511.10000818809.350864171583.550611124179.073981
(1.1, 1.2]1.1473481.127691200340.8205816299.518554209073.741656187772.752668
\n", - "
" - ], - "text/plain": [ - " U_avg U_avg_power_weighted P_avg P_std \\\n", - "U_bins \n", - "(0.0, 0.1] 0.067459 0.000000 0.000000 0.000000 \n", - "(0.1, 0.2] 0.115614 0.000000 0.000000 0.000000 \n", - "(0.2, 0.3] 0.249676 0.225639 0.000000 0.000000 \n", - "(0.3, 0.4] 0.339600 0.315561 0.000000 0.000000 \n", - "(0.4, 0.5] 0.459393 0.437249 2890.724986 2660.810022 \n", - "(0.5, 0.6] 0.548507 0.532974 19677.343518 4645.890936 \n", - "(0.6, 0.7] 0.671449 0.655362 40369.435517 3679.260135 \n", - "(0.7, 0.8] 0.726189 0.704845 52413.972024 2856.737142 \n", - "(0.8, 0.9] 0.843958 0.825916 79944.000855 9798.569674 \n", - "(0.9, 1.0] 0.938701 0.920960 103970.042175 5828.263891 \n", - "(1.0, 1.1] 1.046607 1.026293 148511.100008 18809.350864 \n", - "(1.1, 1.2] 1.147348 1.127691 200340.820581 6299.518554 \n", - "\n", - " P_max P_min \n", - "U_bins \n", - "(0.0, 0.1] 0.000000 0.000000 \n", - "(0.1, 0.2] 0.000000 0.000000 \n", - "(0.2, 0.3] 0.000000 0.000000 \n", - "(0.3, 0.4] 0.000000 0.000000 \n", - "(0.4, 0.5] 5551.535008 229.914964 \n", - "(0.5, 0.6] 24323.234454 15031.452582 \n", - "(0.6, 0.7] 45506.306677 37083.470337 \n", - "(0.7, 0.8] 57360.861473 50670.102583 \n", - "(0.8, 0.9] 96206.928025 66531.815452 \n", - "(0.9, 1.0] 112163.977434 99100.055332 \n", - "(1.0, 1.1] 171583.550611 124179.073981 \n", - "(1.1, 1.2] 209073.741656 187772.752668 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "power_curve_flood" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we can plot the two power curves. A velocity bin is missing in the ebb tide power curve in this example because the data is so short, there are no samples for that bin." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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E6NHj2bFihWMGDGClJQUtm3bxqJFi7TrHRwciImJ0Z6zR48eeHt7X/a1k5KScHd3x2KxUF5ert35LCgo4Pz589odTpthw4axf/9+AKKiovD19WXjxo0YjUYGDBjAHXfcwYcffgiog6jt7mdycjJlZWWMHj3a7vkqKioYOHCg3bHBgwdf8WcnhBBtjYxNMjYJIVo3meC1Yjqd7opDUUb07ESQyZmM/LI69zrogECTMyN6dmr0tNRLly6lsrKSzp07a8cURcFoNJKbm4u3tzdTp07l6aefZv78+XzxxRf07duXAQMGaG3rciV7LXr37s13332HwWAgODgYJycnAAoKCgC0sJvqz2k7ptPpGDlyJAkJCTg6OhIfH09UVBQWi4WkpCS2bt3KM888A4DVagXgxx9/tHufgPaaNm5ubpfttxAd1cLEheh1emYMmFHr3OL9i7EqVmZGz2yBnokrJWOTjE1CdHStfSyTEM12wqDX8erESEAdMKuzff/qxMhGH0ArKyv55z//ybx580hMTNQe+/fvJywsjBUrVgBw5513UlZWxurVq/niiy+0kBmAPn36UFlZyb59+7RjJ06cIC8v77Kv7+joSI8ePejatavdYObp6UlwcLBd6A2o6bIjIiK07+Pj40lISCAhIYH4+Hh0Oh0jRozgvffeo7S0VLvLGhkZiZOTE6mpqfTo0cPuERISck2fnRAdkV6nZ0HiAhbvX2x3fPH+xSxIXIBeJ8NSeyJjk4xNQrRHrX0skxW8dmRcVBCL7o/h9e+T7dJRB5qceXViJOOighr9NX/44Qdyc3N55JFHMJlMdud+/etfs3TpUp588knc3NyYNGkSr7zyCocPH2bKlClauz59+nDrrbfy2GOPsWjRIoxGI88++ywuLi617nJejeeff55XX32V7t27Ex0dzbJly0hMTNQGdlAH0aeffhoHBwdGjBihHXv22WeJiYnB09MTAA8PD5577jl+97vfYbVaGT58OAUFBWzduhV3d3cefPDBa+6nEB2J7W7ngsQF2ve2AXFW9Kw674aKtk3GJnsyNgnR9lUfyxQUnhjwRKsay2SC186MiwpidGQgO1NyyCwsw9/DmSFdfRr97qjN0qVLufXWW2sNoKCmen7rrbfYu3cvMTExTJ06lQkTJjBy5EhCQ0Pt2v7zn//kkUceYeTIkQQGBvL2229z6NAhnJ2dr7lvs2fPpqCggGeffZbMzEwiIyP57rvv6Nmzp9YmKioKPz8/wsLCtAEzLi4Oi8Vil30M4E9/+hP+/v68/fbbnDp1Ci8vL2JiYvj9739/zX0UoiOaMWAGVquVBYkLWLR/EVbF2ioGRNF0ZGy6RMYmIdqHGQNmcDz3OAsTF/LR/o+wKJZWM5bplKstKiOuS0FBASaTifz8fO2XNkBZWRkpKSl07dr1ugaO9iItLY2QkBDWrl3LLbfc0tLdEddAfqZFQzakbmD2htna909GP8kDfR/AxcGlyV6zvt+/HV1Dn4v8f2xPxqa2T36mRWN6ev3TrD+7HgCj3sjeaXuv+jmaYmySzQ6iVVi/fj3fffcdKSkpbN26ld/85jeEh4czcuTIlu6aEKIJLDu4zO77vyf+ndu/uZ3vTn6HVbG2UK+EsCdjkxCiPkUVRWxM2wiAg94Bs9Vca09eS5EJnmgVzGYzv//97+nbty933XUXnTp10grLCiHal8X7F7MvS01cMXfYXEaHqSneM0sy+cPmP/CbH37Drgz71PoWq8K2k9n8J/Ec205mY7FK8IloejI2CSHq88qWV7AoFrwcPdnbeTKzIh6sM/FKS5A9eKJVGDt2LGPHXlldJSFE26VlGEOPFSuDAgYxqcckFuxbwOIDi3HUO3I45zAP//Qw8SHxZJVkUVZh5MLR6Zjyj/Ca4z95reIB8k19COi9HG9XB5aNW3b5FxbiGsjYJISoy+L9i1mbuhaA+7rcgm7dn5nx2EZwcrdLItZSZIInhBCi2VgVK5O6T+I/J/9DgGsAnd3V2l2zBs7CoDdQbC6mtLKUfx/7NwlnE7TrKk0fcENhFDfqj9BLn8Ya0xqKCk/SnegWeR9CCCE6rhJzCXqdHqtiZZxTsHbcNqlr6a0GMsETQgjRbGZGz2RR4iIAYgJi7NLNV7/bOaXPFObtnsemc5sAcHA7zc6uGVScg31dtuHglk1lcXcunJ+Oxao0WTZGIYQQoqauTj5YFSs9HTzo9t8X1YPp+wGY0elG8Ahswd618B68t99+mxtuuAEPDw/8/f258847OXr0qF0bRVF47bXXCA4OxsXFhfj4eA4dOmTXpry8nKeeego/Pz/c3Ny44447SEtLs2uTm5vLtGnTMJlMmEwmpk2bVqtYaWpqKhMnTsTNzQ0/Pz9mz55NRUWFXZukpCTi4uJwcXGhc+fOvPHGG0giUiGEuHJ7MvcAMMh/UL1tunl14/6ub9DpzAT8ytRMd8WOZQwKDyHPLRuvYl9Gp0Vgyj/CzpScZum3EEIIAbA6Wa1bOS7z7KWD38+GJXHqY3fLbh1o0Qnexo0bmTVrFtu3b2fNmjVUVlYyZswYiouLtTbvvvsu77//Pn//+9/ZtWsXgYGBjB49msLCQq3NM888wzfffMPKlSvZvHkzRUVF3H777VgsFq3NlClTSExMZPXq1axevZrExESmTZumnbdYLEyYMIHi4mI2b97MypUr+frrr3n22We1NgUFBYwePZrg4GB27drF/Pnzee+993j//feb+JMSQoj2wWw1cyDrAKCu4NWr4Dxeu97nf5aPWZt+jLsKitTjOh0oCr9k7uNDx4W85vhPMgvL6n8eIYQQohHllOWwozwTgHHFJZdOTPwQHtuoPgY/1EK9U7VoiObq1avtvl+2bBn+/v7s2bOHkSNHoigKH3zwAX/4wx/41a9+BcCnn35KQEAAX3zxBY8//jj5+fksXbqUzz77jFtvvRWAzz//XKtTM3bsWA4fPszq1avZvn07Q4cOBeDjjz8mNjaWo0eP0rt3b37++WeSk5M5e/YswcFqLO28efOYPn06b775Jp6enqxYsYKysjKWL1+Ok5MTUVFRHDt2jPfff585c+bYhRoJIYSo7Uj2EUorS/F09KS7wQ02vK0OhB6BYLXCyfWw+xM4tpoIxQI6KFSc2eJcVR9PUUCnY4T/QAamxXLM2oVXPaSWlRBCiOax9sxaLIqVCOdOhFamgn8kZCZD0AAIjm7p7gGtrExCfn4+AD4+PgCkpKSQkZHBmDFjtDZOTk7ExcWxdetWAPbs2YPZbLZrExwcTFRUlNZm27ZtmEwmbXIHcOONN2IymezaREVFaZM7ULNnlZeXs2fPHq1NXFwcTk5Odm3Onz/P6dOn63xP5eXlFBQU2D2EuBqvvfYa0dHRLd0NIRrF3ky1CGyMfwz6okzY+A5cSIZN78GHA2DF3XD0R1AsKKGxvOrwDEMDhpLpaCCmtIx1Z8/jVexLnls2a7ocJt/UhyFdfVr4XQnR8cjYJDqqn07/BMC4UrN6oGtcC/ambq1mgqcoCnPmzGH48OFERUUBkJGRAUBAQIBd24CAAO1cRkYGjo6OeHt7N9jG39+/1mv6+/vbtan5Ot7e3jg6OjbYxva9rU1Nb7/9trbvz2QyERIScplPou2ZPn06Op0OnU6H0WikW7duPPfcc3ahtm3ZkiVLiI+Px9PTE51OV2vvZl0yMzN5/PHHCQ0NxcnJicDAQMaOHcu2bdu0Njqdjm+//fa6+3f69Gnt89fpdHh4eNC3b19mzZrF8ePHr/v5hWhMey6oN8xiAmIgXQ3VZMWvYf2fIC8VnE0w9AmYuQPdw6vZH3kKg1sKQ0pL+TQjE3+LhYFpsVQWd8fB7SQBvZdLghVRJxmbapOxSYjrk1WSpdVpHXvusHqw390Q91KLJ1aprtVk0XzyySc5cOAAmzdvrnWuZuijoiiXDYes2aau9o3RxpZgpb7+vPzyy8yZM0f7vqCgoHkmeYUZ6gZPW+hTExs3bhzLli3DbDbzyy+/8Nvf/pbi4mIWLVrU5K99ORaLBZ1Oh15/bfczSkpKGDduHOPGjePll1++omvuvvtuzGYzn376Kd26dePChQusW7eOnJymSwaxdu1a+vbtS0lJCUlJSfztb39jwIABfP/999xyyy1N9rpCXCmrYmWfbYJXUgz//YN6QrGAf1+IvAP6/wZ8wrVrjAbwKO7E0sw9pFr9OI8fx6xd8Mq/lYBAtQ6eaENkbNLI2CRjk2h7fj7zMwoK/V2C6GxOhcD+0OUG9dGKtIoVvKeeeorvvvuODRs20KVLF+14YKD6y7/m6lhmZqa2chYYGEhFRQW5ubkNtrlw4UKt183KyrJrU/N1cnNzMZvNDbbJzFQ3WdZc2bNxcnLC09PT7tEsCjPU0KfCulcWG5vtTmBISAhTpkxh6tSp2h3A8vJyZs+ejb+/P87OzgwfPpxdu3Zp1w4aNIh58+Zp39955504ODho4awZGRnodDotw2pFRQUvvPACnTt3xs3NjaFDh5KQkKBdv3z5cry8vPjhhx+IjIzEycmJM2fOXPN7e+aZZ3jppZe48cYbr6h9Xl4emzdv5s9//jOjRo0iLCyMIUOG8PLLLzNhwgQAwsPDAbjrrrvQ6XTa9wDvvPMOAQEBeHh48Mgjj1BWdmUJJHx9fQkMDKRbt25MmjSJtWvXMnToUB555BG7hEPff/89gwYNwtnZmW7duvH6669TWVkJwH333cdvfvMbu+c1m834+fmxbJkUkxbXJyU/hbyKApytViJtkzubzEOQ8Dbs/9LucPfK5xmd7cusgE5826M3F361ilcf/Q2bX7yZb3/1mRQ5b2tkbJKxScYm0YbZwjPHlqk/m0Te0YK9qV+LTvAUReHJJ59k1apVrF+/nq5du9qd79q1K4GBgaxZs0Y7VlFRwcaNG7npppsA9Rew0Wi0a5Oens7Bgwe1NrGxseTn57Nz506tzY4dO8jPz7drc/DgQdLT07U2P//8M05OTgwaNEhrs2nTJrvSCT///DPBwcF2vwQbXUVx/Q9zWd1tK0vV7ytLq7UtvbLnbQQuLi6YzWps8gsvvMDXX3/Np59+yt69e+nRowdjx47V7hjGx8drg6CiKPzyyy94e3trq7kbNmwgMDCQ3r17A/DQQw+xZcsWVq5cyYEDB5g8eTLjxo2zC/koKSnh7bff5h//+AeHDh2qM0S3qbi7u+Pu7s63335LeXl5nW1sf0QsW7aM9PR07ft//etfvPrqq7z55pvs3r2boKAgFi5ceE390Ov1PP3005w5c0bbR/rTTz9x//33M3v2bJKTk/noo49Yvnw5b775JgBTp07lu+++o6ioSHuen376ieLiYu6+++5r6ocQNrbwzP6+fTGGj7h0op7MYwVlZv6TeB4X5xQ2ubqQ7KZnUnRnYrv7SlhmayBjk4xN10DGJtFWZRRnsC9zHwBjzh5UD0ZMasEeNUBpQU888YRiMpmUhIQEJT09XXuUlJRobd555x3FZDIpq1atUpKSkpT77rtPCQoKUgoKCrQ2M2bMULp06aKsXbtW2bt3r3LzzTcrAwYMUCorK7U248aNU/r3769s27ZN2bZtm9KvXz/l9ttv185XVlYqUVFRyi233KLs3btXWbt2rdKlSxflySef1Nrk5eUpAQEByn333ackJSUpq1atUjw9PZX33nvvit9zfn6+Aij5+fl2x0tLS5Xk5GSltLS09kWvetb/+PzXl9oVpCvKn/zrb7vkVvvn/XPXuttdpQcffFCZNGmS9v2OHTsUX19f5Z577lGKiooUo9GorFixQjtfUVGhBAcHK++++66iKIry3XffKSaTSbFYLEpiYqLSqVMn5Xe/+53y/PPPK4qiKI899phy7733KoqiKCdOnFB0Op1y7tw5uz7ccsstyssvv6woiqIsW7ZMAZTExMSrfi8N2bBhgwIoubm5l23773//W/H29lacnZ2Vm266SXn55ZeV/fv327UBlG+++cbuWGxsrDJjxgy7Y0OHDlUGDBhQ72ulpKQogLJv375a5w4fPqwAyldffaUoiqKMGDFCeeutt+zafPbZZ0pQUJCiKOp/Gz8/P+Wf//yndv6+++5TJk+efLm3XEuDP9OiQ3px04tK1PIo5e9759v//jm3r872n25NUcJe/EGZvOAOJWp5lPLuxpev6/Xr+/3b0TX0ucjYJGOTosjYJISiKMryg8uVqOVRygP/N179nfT3IY3yvE0xNrXoCt6iRYvIz88nPj6eoKAg7fHVV19pbV544QWeeeYZZs6cyeDBgzl37hw///wzHh4eWpu//vWv3Hnnndxzzz0MGzYMV1dXvv/+ewwGg9ZmxYoV9OvXjzFjxjBmzBj69+/PZ599pp03GAz8+OOPODs7M2zYMO655x7uvPNO3nvvPa2NyWRizZo1pKWlMXjwYGbOnMmcOXPs9ti1qN3LoLKBkImi9PrPXacffvgBd3d3nJ2diY2NZeTIkcyfP5+TJ09iNpsZNmyY1tZoNDJkyBAOH1Y3p44cOZLCwkL27dvHxo0biYuLY9SoUWzcuBGAhIQE4uLUDEV79+5FURR69eql3Y10d3dn48aNnDx5UnsNR0dH+vfv32Cf+/btq10/fvz4Rv087r77bs6fP893333H2LFjSUhIICYmhuXLlzd43eHDh4mNjbU7VvP7q6HU2CO6Z88e3njjDbvP7tFHHyU9PZ2SkhKMRiOTJ09mxQq1gGdxcTH/+c9/mDp16jX3QQibvReqMmg6dYKSbDA41dtWURS+2JEKQLGf+vu+R1Dr2uMgrpCMTdpryNikkrFJtEW1wjMjWmd4JrRwkhXb/+AN0el0vPbaa7z22mv1tnF2dmb+/PnMnz+/3jY+Pj58/vnnDb5WaGgoP/zwQ4Nt+vXrx6ZNmxps0+h+f77+c7pLk1gGPwTd49V/ZyTBf5+H2/4Cgf3UY+5B9tc+k9RoXRw1ahSLFi3CaDQSHByM0WgE0EJeG0qUYzKZiI6OJiEhga1bt3LzzTczYsQIEhMTOX78OMeOHSM+Xn1fVqsVg8HAnj177CbwoIaf2Li4uFw2Ec9///tfLVTHxcXl2t98PZydnRk9ejSjR4/mj3/8I7/97W959dVXmT59eqO/Vn1sf6jYwp+tViuvv/66VleyZn9BDYWJi4sjMzOTNWvW4Ozs3Oh/ZIiOJ70onfTidAw6AwMKLqoHgwdCt/g6k23sTc3lSEYhzkY9RUoaAD29ezZjj8VlydgkY9M1krFJtDVphWkkXUxCr9MzJrXqd1TkHVisCjtTcsgsLMPfw5khXX1axRaCVpFkRVyGo1v9D2O1Ar8egRAaqz66DFGPdRly6Vi1zHQNPu81cHNzo0ePHoSFhWkDKECPHj1wdHS0y45qNpvZvXs3ERER2rH4+Hg2bNjApk2biI+Px8vLi8jISObOnYu/v7/WduDAgVgsFjIzM+nRo4fdw5aU50qFhYVp13bu3Pma3vfViIyMtEvPbTQa7TaYA0RERLB9+3a7YzW/v1JWq5UPP/yQrl27MnDgQABiYmI4evRorc+uR48eWia3m266iZCQEL766itWrFjB5MmTcXR0vKY+CGGzJ1PdaxPhE4FratV+6B63wqiX65zgrdiurt491uM0OWXZAHQzdWvyfr799tvccMMNeHh44O/vz5133qkl0bBRFIXXXnuN4OBgXFxciI+P59ChQ3ZtysvLeeqpp/Dz88PNzY077riDtLQ0uza5ublMmzZNK6Mzbdq0WqnuU1NTmThxIm5ubvj5+TF79my7feAASUlJxMXF4eLiQufOnXnjjTeu6AbqdZOxScamayBjk2iLbKt3N7iH4VdRAt5dWZ3ly/A/r+e+j7fz9MpE7vt4O8P/vJ7VB5suKuFKSX5p0aTc3Nx44okneP755/Hx8SE0NJR3332XkpISHnnkEa1dfHw8f/vb3/Dx8SEyMlI7Nn/+fLs7er169WLq1Kk88MADzJs3j4EDB3Lx4kXWr19Pv379uO222xr9PWRkZJCRkcGJEycA9Y8pDw8PQkND8fGpXWA5OzubyZMn8/DDD9O/f388PDzYvXs37777LpMmXdqMGx4ezrp16xg2bBhOTk54e3vz9NNP8+CDDzJ48GCGDx/OihUrOHToEN26Xf4P2+zsbDIyMigpKeHgwYN88MEH7Ny5kx9//FG7o/zHP/6R22+/nZCQECZPnoxer+fAgQMkJSUxd+5cQL2jPWXKFBYvXsyxY8fYsGFDY3yMooPTwjMDYiDhI/Vg+LA62+YWV/BDkjpADi34iGWe0NnJB1eja5P3c+PGjcyaNYsbbriByspK/vCHPzBmzBiSk5Nxc1MnGe+++y7vv/8+y5cvp1evXsydO5fRo0dz9OhRbfvAM888w/fff8/KlSvx9fXl2Wef5fbbb7db4ZkyZQppaWmsXr0agMcee4xp06bx/fffA2oa/QkTJtCpUyc2b95MdnY2Dz74IIqiaBErBQUFjB49mlGjRrFr1y6OHTvG9OnTcXNz49lnn23yz6utkrFJxiYhroYWnlmu3vw41ekWnlixj5q30jLyy3ji870suj+GcVE1ohOaU6Pt5hNX5JqSrFyLgnRFWf+W+rWJ1dzIXlNpaany1FNPKX5+foqTk5MybNgwZefOnXZt8vLyFIPBoPz615c25n/zzTcKoPz973+3a1tRUaH88Y9/VMLDwxWj0agEBgYqd911l3LgwAFFUdSN7CaTqdHe36uvvqoAtR7Lli2rs31ZWZny0ksvKTExMYrJZFJcXV2V3r17K//v//0/uwRC3333ndKjRw/FwcFBCQsL046/+eabip+fn+Lu7q48+OCDygsvvHBFG9ltD1dXVyUiIkKZOXOmcvz48VrtV69erdx0002Ki4uL4unpqQwZMkRZsmSJXZtDhw4pgBIWFqZYrdar+rxsZCO7qG7SN5OUqOVRytoD/1Q3p//JX1HMZXW2/XjTSSXsxR+Ue/76o7L6zwHK0E8ilSd/euy6+3AtG9kzMzMVQNm4caOiKIpitVqVwMBA5Z133tHalJWVKSaTSVm8eLGiKOrvM6PRqKxcuVJrc+7cOUWv1yurV69WFEVRkpOTFUDZvn271mbbtm0KoBw5ckRRFEX573//q+j1ervEHV9++aXi5OSkvYeFCxcqJpNJKSu79Fm+/fbbSnBw8BX/v3vNSVauhYxNjfb+ZGySsUk0j9P5p5Wo5VHKgE8HKDlvBSvKq57Kw3MXKWEv/lDnI/zFH5Qb31qrVFqu/3fwtdIpSnPEcQibgoICTCYT+fn5djXxysrKSElJoWvXrlq8uRBtmfxMC5u8sjxGfKWWRdjUewbeq38P4SNgeu09z4qicMu8jZy6WMyy4fmM2v0Eik83Sp7YjJvx2sL0bOr7/duQEydO0LNnT5KSkoiKiuLUqVN0796dvXv3auFlAJMmTcLLy4tPP/2U9evXc8stt5CTk4O3t7fWZsCAAdx55528/vrrfPLJJ8yZM6dWSKaXlxd//etfeeihh/jjH//If/7zH/bv36+dz83NxcfHh/Xr1zNq1CgeeOAB8vPz+c9//qO12bdvHzExMZw6dapW+SFQw0erp8kvKCggJCSkzs9F/j8W7Y38TIur9dH+j/h74t8ZZurF4sS1lLsG0TvnPaDhvXZfPnojsd19L/v81zI2XY7swRNCCNGk9maq4ZndTN3wTlP/TVjd4ZnbTmVz6mIx7k4ODHM6BYCuy5DrntxdC0VRmDNnDsOHDycqKgpQw+IAAgIC7NoGBARo5zIyMnB0dLSb3NXVpq4aaP7+/nZtar6Ot7c3jo6ODbaxfW9rU9Pbb7+t7fszmUyEhIRc5pMQQoiOa/VpNYzeFp6ZFngrl5vcAWQWNpA9uInJBE8IIUST0vbf+cfA6aqkFuHD62y7oqo0wp0Dg3HMUBOzENIy5RGefPJJDhw4wJdfflnrXEPZF+tTs01d7RujjVIjBX1NL7/8Mvn5+drj7NmzDfZbCCE6qpN5JzmRdwIHvQM3p6hjWWmPCVd0rb9Hy60QywRPCCFEk7Kt4MW4dYGiDDA4QpfBtdplFZbz00F11WnKDSFknd/LxM5BPJe9vXmyQlbz1FNP8d1337Fhwwa6dOmiHbdlRKy5OpaZmamtnAUGBlJRUUFubm6DbS5cuFDrdbOysuza1Hyd3NxczGZzg20yMzOB2quMNk5OTnh6eto9hBBC1GZbvRtm6oWpLB/c/IkYMpogU/2TNx0QZFJLJrQUmeAJIYRoMiXmEg5nqzWvBpVUpWLvPBiMtet7/d+es1RaFQaGehFpzOC4UsZpRyNHSzIuuzrWWBRF4cknn2TVqlWsX7++1h62rl27EhgYyJo1a7RjFRUVbNy4kZtuugmAQYMGYTQa7dqkp6dz8OBBrU1sbCz5+fns3LlTa7Njxw7y8/Pt2hw8eFCr2Qbw888/4+TkxKBBg7Q2mzZtsiud8PPPPxMcHEx4eHgjfSpCCNHxKIrC6hRbeKZVPRhxOwYHB16dGFnnNbaR6tWJkS1aD08meEIIIZrMgYsHqFQqCXQLJDj9oHqwjvIIVqvCF1XhmVOHhoFXCCdiHwWgRzMWOJ81axaff/45X3zxBR4eHloq+tLSUkANe3zmmWd46623+Oabbzh48CDTp0/H1dWVKVOmAGqB7EceeYRnn32WdevWsW/fPu6//3769evHrbfeCqh1xcaNG8ejjz7K9u3b2b59O48++ii33347vXv3BmDMmDFERkYybdo09u3bx7p163juued49NFHtVW3KVOm4OTkxPTp0zl48CDffPMNb731FnPmzGm2SbEQQrRHx3KPcbrgNI56R0adrtoyEHEHAOOigugV4F7rmkCTc8uXSEDq4AkhhGhCdvvvdldlzaxj/92m41mk5Zbi6ezA7f2DwGjgpFGtkdXdq3uz9XfRokWAWuusumXLljF9+nQAXnjhBUpLS5k5cya5ubkMHTqUn3/+WauBB/DXv/4VBwcH7rnnHkpLS7nllltYvny5VvcLYMWKFcyePZsxY8YAcMcdd/D3v/9dO28wGPjxxx+ZOXMmw4YNw8XFhSlTpvDee+9pbUwmE2vWrGHWrFkMHjwYb29v5syZw5w5cxr7oxFCiA7FFp45wjsC95Pfg4u3Nn6VV1o4k10CwHuT+2M06PH3UMMyW3LlzkYmeEIIIZqMbYI3yD0MCtJAb4QuQ2q1syVXuXtQF5yrJnYnctUCzj28ezRTb7mivX46nY7XXnuN1157rd42zs7OzJ8/XytIXhcfHx8+//zzBl8rNDSUH36oXU6iun79+rFp06YG2wghhLhy1cMzx1VUjQu9J4DBCMCBtHzKK634uTtyd0yXVhcxIRM8IYQQTcJsMbM/S63hFmOru9Y5Bhxd7dql55ey7rCacGTq0FAoy0f55X1O5BwBoKdX84VoCiGEEMnZyaQVpeFicGbkqd3qwcg7tPM7TmUDMKSrT6ub3IHswRNCCNFEknOSKbOUYXIy0S39qHqwjvp3X+06i1WBoV196OHvAef2kL5jPiXWChz0DoR6hjZzz4UQQnRktvDMkb5RuBZlgJMndIvXzu9IyQFgaNfLFzJvCTLBE6INmz59OnfeeWdLd0OIOtnCMwf6D0SfukU9WCPBSqXFysqdah22qTeGqQfTdlOo1xOhd6W3d2+MemOz9VkIcf1kbBJtmVWx8tPpnwAYZ0tQ3GssODgBYLZY2XNGLYMztFvLlUJoiEzwxHWbPn06Op0OnU6H0WikW7duPPfccxQXF7d015rcm2++yU033YSrqyteXl5XdM2pU6e47777CA4OxtnZmS5dujBp0iSOHTsGwOnTp9HpdCQmJl53/xISErT/Nnq9HpPJxMCBA3nhhRfsUq8L0RS0/Xee3SAvFXQGCLkRAItVYdvJbN753xEyCsrwdjUytm9V3bazO+ldYeZfvR7mywm1i4wLcSVkbJKxSYhrcSDrAOnF6bg6uDLcFp4ZcSk8M+lcPiUVFrxcjfTy94DCDNjwtvq1lZAJXnvVzD9s48aNIz09nVOnTjF37lwWLlzIc8891yyvfTkWiwWr1XrZdgkJCVddN6qiooLJkyfzxBNPXHH70aNHU1BQwKpVqzh69ChfffUVUVFR5OfnX9VrX42jR49y/vx5du3axYsvvsjatWuJiooiKSmpyV5TdGxWxXqpwHm5RT0YPBCc3Fl9MJ3hf17PfR9v5x+bUwCoqLSy4UgmKAqk7VLbd7mhVe5tENdBxiaNjE0yNonWyRaeOcovGuf8VDC6Qo9btfM7TqnhmUPCfdDrdervs43vyARPNINm/mFzcnIiMDCQkJAQpkyZwtSpU/n2228BKC8vZ/bs2fj7++Ps7Mzw4cPZtWuXdu2gQYOYN2+e9v2dd96Jg4MDBQUFAGRkqEWOjx5V9/BUVFTwwgsv0LlzZ9zc3Bg6dCgJCQna9cuXL8fLy4sffviByMhInJycOHPmTJO879dff53f/e539OvX74raJycnc+rUKRYuXMiNN95IWFgYw4YN48033+SGG24A0AorDxw4EJ1Op6Vrt1gszJkzBy8vL3x9fXnhhReuKOMfgL+/P4GBgfTq1Yvf/OY3bNmyhU6dOtUa/JctW0ZERATOzs706dOHhQsXaudiY2N56aWX7NpnZWVhNBrZsGHDFfVDdBwn805SUFGAi4MLEVkn1YPhw1h9MJ0nPt9Len6ZXfviCgtPfL6XX7ZvhbI8rA7OEBDVAj0XTUrGJhmbqpGxSbQ2FquFn0//DFQLz+xxq11ysB0paoKVod1a5/47kAle66YoUFF8bY9KtSgvlaXXdv0V/nKuj4uLC2azGVBrRn399dd8+umn7N27lx49ejB27FhyctQ7IPHx8dogqCgKv/zyC97e3mzevBmADRs2EBgYqBX/feihh9iyZQsrV67kwIEDTJ48mXHjxnH8+HHt9UtKSnj77bf5xz/+waFDh/D397+u99NYOnXqhF6v59///jcWi6XONjt37gRg7dq1pKens2rVKgDmzZvHJ598wtKlS9m8eTM5OTl8880319QPFxcXZsyYwZYtW8jMzATg448/5g9/+ANvvvkmhw8f5q233uKVV17h008/BWDq1Kl8+eWXdgP3V199RUBAAHFxcdfUD9F+2cIz+/v1x3hmGwCW0GG8/n0yDf12SVj3PyzA8C4B/Pq/U8guzW76zoqrI2MTIGOTjE2iPdqbuZes0iw8jB7cdLrqhk/kJO18pcXK7tO5dCKXOI9zcD4R0tVs0aTvV78/n9jiq3lSJqE1M5fAW8HX9xyfjLu2635/HhzdrunSnTt38sUXX3DLLbdQXFzMokWLWL58OePHjwfUX9Zr1qxh6dKlPP/888THx7N06VKsVitJSUkYDAbuv/9+EhISuO2220hISNB+SZ88eZIvv/yStLQ0goPVz+a5555j9erVLFu2jLfeegsAs9nMwoULGTBgwLW9/ybSuXNnPvzwQ1544QVef/11Bg8ezKhRo5g6dSrdunUD1IEWwNfXl8DAQO3aDz74gJdffpm7774bgMWLF/PTTz9dc1/69OkDqPsq/P39+dOf/sS8efP41a9+Bah3a5OTk/noo4948MEHuffee/nd737H5s2bGTFiBABffPEFU6ZMQa+Xe0XC3p7MPQDEmHpA7v+BTs8ea2/S8w/Ve40CdC47TpqzA4U6hdMFp/Fy8mqeDosrJ2OTjE0yNol2ypZc5Wb/GByPfQYGR+g5RjufnF5AUXklM5030OObf9tf/P3sS/+OewlGvdwcXa6T/OSLRvHDDz/g7u6Os7MzsbGxjBw5kvnz53Py5EnMZjPDhl3KnGc0GhkyZAiHDx8GYOTIkRQWFrJv3z42btxIXFwco0aNYuPGjQB2g+jevXtRFIVevXrh7u6uPTZu3MjJkye113B0dKR///6X7Xf15xg/fjypqam1jjW2WbNmkZGRweeff05sbCz/93//R9++fVmzZk291+Tn55Oenk5sbKx2zMHBgcGDB19zP2x3O3U6HVlZWZw9e5ZHHnnE7v3PnTtX+1w7derE6NGjWbFiBQApKSls27aNqVOnXnMfRPukKIq2ghdjqdpDFzSA9PLLZ8N8o3IaXw9+HYBupm4Y9IYm66do/2RsunIyNomOrtJayZoz6s/7OHPVFKn7zeDsqbWx7b870WUyPLYRAqv9/zzxQ/XYYxth8EPN1u+6yApea2Z0Ve9WXqmiC+oDICMJ/vs83PYXCKyKwXcPUB9X+tpXYdSoUSxatAij0UhwcDBGo/qHnC0bVs1ECYqiaMdMJhPR0dEkJCSwdetWbr75ZkaMGEFiYiLHjx/n2LFjWqy/1WrFYDCwZ88eDAb7P/zc3d21f7u4uFxRcobq2cB27NjBiy++aLdnwsXF5Yo/g6vh4eHBHXfcwR133MHcuXMZO3Ysc+fOZfTo0U3yenWx/RETHh6ubfT/+OOPGTp0qF276p/z1KlTefrpp5k/fz5ffPEFffv2bXV3okXLO198ngslF3DQOdD/Yqp6MGwY/h7OV3C1jhwnNYSuh1ePpuukuHYyNsnY1IRkbBItZVfGLnLKcvBy8mJoSlV4ZrXsmXBp/12fXj0hsCvknLp0MmgABEc3U28bJhO81kynu7pQFJ9u6gPAoeqXf5chzfLD5ubmRo8etf8Y69GjB46OjmzevJkpU6YAaojK7t27eeaZZ7R28fHxbNiwgR07dvDGG2/g5eVFZGQkc+fOxd/fn4iICEDd3G2xWMjMzNRCMa5H9T6npaXh4OBQ5/toSjqdjj59+rB161ZAvcML2O2DMJlMBAUFsX37dkaOHAlAZWUle/bsISYm5qpfs7S0lCVLljBy5Egt7KZz586cOnWqwbued955J48//jirV6/miy++YNq0aVf92qL9s63eRfpG4npqu3owfDhDuvoQZHImI7+szn14OiDQ5EyZTp089PCWCV6rJGOTjE1VZGwS7YktPPOWgBswHlkKegfofWm13GJV2Fm9wHnJRTB1gdwzl/YXtxIywRNNys3NjSeeeILnn38eHx8fQkNDeffddykpKeGRRx7R2sXHx/O3v/0NHx8fIiMjtWPz58/X4u4BevXqxdSpU3nggQeYN28eAwcO5OLFi6xfv55+/fpx2223Nev7S01NJScnh9TUVCwWi3bXtUePHnZ3bW0SExN59dVXmTZtGpGRkTg6OrJx40Y++eQTXnzxRUDNKubi4sLq1avp0qULzs7OmEwmnn76ad555x169uxJREQE77//Pnl5eVfUz8zMTMrKyigsLGTPnj28++67XLx4UdskD/Daa68xe/ZsPD09GT9+POXl5ezevZvc3FzmzJkDqP89J02axCuvvMLhw4e1P4yEqG7Phar9d969IfsHQAehsRj0Ol6dGMkTn++tdY0OmGJYy5Od0pmZqd4hlRU80VRkbLInY5Po6MxWM2tT1wLVwjPDR4DrpULmRzIKKCirxM3RQN9gTzDoYdYOyE2FxBXgEVjXU7cImeC1Vx6B6gbPVvDD9s4772C1Wpk2bRqFhYUMHjyYn376CW9vb62N7c5fXFycFr4SFxfHBx98UCsL1rJly5g7dy7PPvss586d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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def plot_power_curve(P_curve, ax):\n", - " ax.plot(P_curve['U_avg'], P_curve['P_avg'], '-o', color='C0', label='Avg Power')\n", - " ax.plot(P_curve['U_avg'], (P_curve['P_avg'] - P_curve['P_std']), '--+', color='C1', label='Power - 1 Std Dev')\n", - " ax.plot(P_curve['U_avg'], (P_curve['P_avg'] + P_curve['P_std']), '-+', color='C1', label='Power + 1 Std Dev')\n", - " ax.plot(P_curve['U_avg'], P_curve['P_min'], '--x', color='C2', label='Min Power')\n", - " ax.plot(P_curve['U_avg'], P_curve['P_max'], '-x', color='C2', label='Max Power')\n", - " ax.set(xlabel='Flow Speed at Hub Height [m/s]', ylabel='Power [W]')\n", - " ax.legend()\n", - "\n", - "fig, ax = plt.subplots(1,2, figsize=(10,7))\n", - "plot_power_curve(power_curve_ebb, ax[0])\n", - "plot_power_curve(power_curve_flood, ax[1])" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Velocity Profiles\n", - "Various velocity profiles can be created next from the water velocity data, and we can do this again with ebb and flood tide. These functions are following three steps:\n", - " 1. Reshape the data into bins by time (ensembles)\n", - " 2. Apply a function to the ensembles to get ensemble statistics (mean, root-mean-square (RMS), or standard devation)\n", - " 3. Regroup and bin the ensemble statistics by flow speed\n", - "\n", - "These profiles are created using the `velocity_profiles` method, and a profile is specified using the \"function\" argument. For the average velocity profiles, we'll set the function = 'mean'.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "avg_profile_ebb = performance.velocity_profiles(\n", - " velocity=ebb, \n", - " hub_height=4.2,\n", - " water_depth=10,\n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " function='mean')\n", - "avg_profile_flood = performance.velocity_profiles(\n", - " velocity=ebb, \n", - " hub_height=4.2,\n", - " water_depth=10,\n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " function='mean')\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### RMS Tidal Velocity\n", - "\n", - "For RMS velocity profiles, we'll set the function = 'rms'." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "rms_profile_ebb = performance.velocity_profiles(\n", - " velocity=ebb, \n", - " hub_height=4.2,\n", - " water_depth=10,\n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " function='rms')\n", - "rms_profile_flood = performance.velocity_profiles(\n", - " velocity=ebb, \n", - " hub_height=4.2,\n", - " water_depth=10,\n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " function='rms')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Std Dev Tidal Velocity\n", - "\n", - "And to get the standard deviation, we'll set function = 'std'." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "std_profile_ebb = performance.velocity_profiles(\n", - " velocity=ebb, \n", - " hub_height=4.2,\n", - " water_depth=10,\n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " function='std')\n", - "std_profile_flood = performance.velocity_profiles(\n", - " velocity=ebb, \n", - " hub_height=4.2,\n", - " water_depth=10,\n", - " sampling_frequency=1, \n", - " window_avg_time=600,\n", - " function='std')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we can plot these variables together based on ebb and flood tides. The following code plots the mean and RMS profiles as line plots with \"x\" and \"+\" markers, respectively, and shades the area between +/- 1 standard deviation from the mean." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Flood Tide')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAJuCAYAAACOkPJ5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXxU133//9edRSON9gUhCQnEDkJgxBK22IaAMcFLncROWieO3SZu2qTN6uZbf5s0idPEv+SbJk3dLE2a1o2z2nHSOl4wNt5ZhADJIMQmLAQSEkL7Mlpm5t7fH1czkkDL3NG9oxnp83w8eICuZu69YEtvnXM/53MUTdM0hBBCCCGEEEIE2ab6BoQQQgghhBAi2shASQghhBBCCCGuIQMlIYQQQgghhLiGDJSEEEIIIYQQ4hoyUBJCCCGEEEKIa8hASQghhBBCCCGuIQMlIYQQQgghhLiGDJSEEEIIIYQQ4hoyUBJCCCGEEEKIa8hASYhRPP744yiKMuav1157LfhaRVH4m7/5m5DPeeTIEcP3M969XHtfDzzwAIWFhSGf96tf/arh+xFCCGGN8fLnoYceCr6usLCQBx54YErucaLs2Lp1a0iZ9dWvfjX4971w4cKE1926dStbt2417e8hxEQcU30DQkSz//qv/2LZsmXXHS8qKorofRw8eHDEx1//+td59dVXeeWVV0YcLyoqoqCggM985jORvD0hhBAmGy1/8vLypuhujPnhD39IZ2dn8OPnnnuOf/qnf7ru75Sfn4/L5eLgwYPk5uZOxa0KMS4ZKAkxjuLiYtatWzfVt8HGjRtHfDxr1ixsNtt1xwFSUlIidVtCCCEsEi35E45rJxNPnz4NjP13mjVrVkTuSwijpPROCJP8+7//O0uWLMHlclFUVMRvfvObUV/X1tbGn//5n5ORkUFiYiJ33HEH77zzjmn3MVrpXWdnJw8++CCZmZkkJSWxa9cuzp49O+r7z507x7333kt2djYul4vly5fzgx/8wLT7E0IIYY2LFy/ykY98ZMT373/+539GVdURr2ttbeWTn/wkc+bMIS4ujgULFvAP//AP9Pf3j3idkewI12ild5qm8e1vf5t58+YRHx/PmjVreOGFF0Z9f2dnJw899BDz588nLi6OOXPm8NnPfpaenh5T71PMTPJESYhx+P1+fD7fiGOKomC320cce+aZZ3j11Vd55JFHSExM5Ic//CF/9md/hsPh4O677x7x2o997GPccsst/OpXv+LSpUt86UtfYuvWrRw/fpy0tDTT/w6apnHXXXdx4MAB/vEf/5H169ezf/9+3vve91732qqqKjZv3szcuXP553/+Z3JycnjxxRf59Kc/TXNzM1/5yldMvz8hhBDXGy1/HI6xf2y7evUqmzdvZmBggK9//esUFhby7LPP8tBDD3H+/Hl++MMfAtDX18e2bds4f/48X/va11i1ahVvvvkmjz76KBUVFTz33HOAseww29e+9jW+9rWv8bGPfYy7776bS5cu8eCDD+L3+1m6dGnwdR6Ph5tvvpm6ujr+7//9v6xatYqTJ0/yj//4j5w4cYKXX34ZRVEsv18xjWlCiOv813/9lwaM+stut494LaAlJCRojY2NwWM+n09btmyZtmjRouvO+b73vW/E+/fv368B2j/90z+FfH/333+/lpiYOObn5s2bF/z4hRde0ADt+9///ojXfeMb39AA7Stf+Urw2K233qrl5+drHR0dI177N3/zN1p8fLzW2toa8j0KIYQwbrz88Xq9wdfNmzdPu//++4Mf//3f/70GaKWlpSPO99d//deaoijamTNnNE3TtB//+McaoD355JMjXvetb31LA7S9e/dqmmYsO0L9O5WVlY35uZqaGk3TNK2trU2Lj48fMytvvvnm4LFHH31Us9ls1533d7/7nQZozz//fMj3KMRopPROiHH8/Oc/p6ysbMSv0tLS6163fft2Zs+eHfzYbrfzoQ99iOrqaurq6ka89sMf/vCIjzdv3sy8efN49dVXLfk7BM577XXvvffeER/39fWxb98+3ve+9+F2u/H5fMFfu3fvpq+vj0OHDllyj0IIIUYaLX/Ge6L0yiuvUFRUxLve9a4Rxx944AE0TQs2/3nllVdITEy8rtoh0EFv3759QOjZYbaDBw/S19c3ZlYO9+yzz1JcXMzq1atHZNatt956XYdaIcIhpXdCjGP58uUhLabNyckZ81hLSwv5+fkTvralpWUSdzq2lpYWHA4HmZmZo97f8Nf5fD4ee+wxHnvssVHP1dzcbMk9CiGEGCnU/AloaWkZdWuIQKe8QMa0tLSQk5NzXUladnY2DodjxOtCyQ6zBa4/Xq4GXLlyherqapxO56jnkswSkyUDJSFM0NjYOOaxa0NmrNcu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HWjf30Cr1aJXr15wc3PTtw0YMAAigitXriA4OLhLMzfWnjGsWLEC0dHRWLhwIQBgyJAhcHJyQkxMDP74xz9a/LteljSPO8JS5jF1LtYm8z+nWZvqsTaZliXN446wlHncGbr1J0p2dnYICwtDamqqQXtqaiqioqKa3ScyMrLJ9vv27UN4eDhUKlWXZW1Oe/ID9av8mTNnYvPmzWY/b9fYMbi6uuLf//43Tp48qf9JSkpCv379cPLkSYwaNcpU0QG0728QHR2N77//HuXl5fq2vLw8KJVK+Pr6dmne5rRnDHfv3oVSafjyYWNjA+DHd78smSXN4/aypHlMnYu1yfzPadameqxNpmVJ87i9LGkedwpT3jnCEjXcenLDhg2Sk5Mj8+bNEycnJ7l48aKIiCxatEimT5+u377h1o0vvvii5OTkyIYNGyziFqxtzb9582axtbWVd999VwoLC/U/t2/fNkt+EePH0Ji57yxkbP6ysjLx9fWVn/3sZ/Kf//xHMjIyJDg4WJ5//nlzDcHoMSQnJ4utra2sW7dO8vPzZf/+/RIeHi4jR440S/6ysjLJzs6W7OxsASCrVq2S7Oxs/S1kLX0eG5vfEucxdS7WJvM/p1mbWJs6irXJ/PO4o7r9QklE5N133xV/f3+xs7OT4cOHS0ZGhv53M2bMkNjYWIPt09PTZdiwYWJnZycBAQHy3nvvmTixIWPyx8bGCoAmPzNmzDB98PsY+ze4n7mLkYjx+U+fPi1jxowRBwcH8fX1lfnz58vdu3dNnNqQsWNYs2aNhISEiIODg2i1Wnn22WflypUrJk5dLy0trcXntaXPY2PzW+o8ps7F2mT+5zRrE2tTR7A2WcY87giFiBV8FklERERERGRC3foaJSIiIiIiouZwoURERERERNQIF0pERERERESNcKFERERERETUCBdKREREREREjXChRERERERE1AgXSkRERERERI1woURERERERNQIF0pEFiA9PR0KhQK3b9+2yOM1Pq5CocDkyZM79dit2bRpk77vefPmmbRvIqLuiLWpdaxNDzculMhivP/++3BxcUFtba2+rby8HCqVCjExMQbbZmZmQqFQIC8vr9XjdtULMwBcu3YNKpUKn3zySbO/nz17NoYMGdLp/bYmKioKhYWFcHNzA1D/Qu7u7t5px8/NzcWmTZs65VgFBQVQq9UoLS1t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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def plot_velocity_profiles(avg_profile, rms_profile, std_profile, ax):\n", - " alt = avg_profile.index\n", - " mean = avg_profile.values.T\n", - " rms = rms_profile.values.T\n", - " std = std_profile.values.T\n", - "\n", - " ax.plot(mean[0], alt, '-x', label=avg_profile.columns[0])\n", - " ax.plot(mean[1], alt, '-x', label=avg_profile.columns[1])\n", - " ax.plot(mean[2], alt, '-x', label=avg_profile.columns[2])\n", - "\n", - " ax.fill_betweenx(alt, mean[0]-std[0], mean[0]+std[0], facecolor='lightblue')\n", - " ax.fill_betweenx(alt, mean[1]-std[1], mean[1]+std[1], facecolor='moccasin')\n", - " ax.fill_betweenx(alt, mean[2]-std[2], mean[2]+std[2], facecolor='palegreen')\n", - "\n", - " ax.plot(rms[0], alt, '+', color='C0')\n", - " ax.plot(rms[1], alt, '+', color='C1')\n", - " ax.plot(rms[2], alt, '+', color='C2')\n", - " ax.set(xlabel='Water Velocity [m/s]', ylabel='Altitude [m]', ylim=(0,10))\n", - " ax.legend()\n", - "\n", - "fig, ax = plt.subplots(1, 2, figsize=(10, 7))\n", - "plot_velocity_profiles(avg_profile_ebb, rms_profile_ebb, std_profile_ebb, ax[0])\n", - "ax[0].set_title('Ebb Tide')\n", - "plot_velocity_profiles(avg_profile_flood, rms_profile_flood, std_profile_flood, ax[1])\n", - "ax[1].set_title('Flood Tide')" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Current Energy Converter Efficiency\n", - "\n", - "The CEC efficiency, or device power coefficient, can be found using the `device_efficiency` method." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "efficiency_ebb = performance.device_efficiency(\n", - " power=power_ebb,\n", - " velocity=ebb,\n", - " water_density=ds['water_density'],\n", - " capture_area=np.pi*1.5**2,\n", - " hub_height=4.2,\n", - " sampling_frequency=1,\n", - " window_avg_time=600)\n", - "efficiency_flood = performance.device_efficiency(\n", - " power=power_flood,\n", - " velocity=flood,\n", - " water_density=ds['water_density'],\n", - " capture_area=np.pi*1.5**2,\n", - " hub_height=4.2,\n", - " sampling_frequency=1,\n", - " window_avg_time=600)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And these efficiency curves can be plotted as profiles:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Flood Tide')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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BocjyeY2b96My5cvS/d1Oh1Wr16NDh06GPWCAcCXX35pdH/Xrl24cOGC1RYfHDJkSK3XXbVqldF9Dw8PDBkyBIcOHUL37t3Rp0+fGrdbE0oisi/Dhg3D8ePHcfDgQaPjK1asgEqlkuLBsGHDUFJSgu+//77GeYbHAdPjh6UNGDAAbm5udcbLm9177704d+4cAgICao1bpi5eTZbBnjCymKNHj9aYmQQAHTp0MFrTJjAwEEOHDsXrr78uzY48efJkrctU7N+/H8888wwefvhhZGZmYs6cOWjdujWef/55q7yHkSNHYvDgwZg1axZKS0vRp08f7Ny5E1988UWNc99//30MGjQId955J6ZMmYJ27dqhuLgYZ8+exU8//VRjcVgisi8vvfQSVqxYgXvuuQf/+te/EB4ejrVr12LJkiWYMmUKOnXqBAB48skn8dFHH2HChAnIyMhAt27dsGPHDixYsAB33303hg8fDsC8+GFJLVq0wMyZM/Hmm28axcuEhIQaw5HTp0/Hd999h8GDB+Oll15C9+7dodfrcfHiRWzcuBF///vf0b9/f6u2l24i98wAUr76ZiYBEEuXLpXOBSCmTp0qlixZIjp06CBcXFxEly5dxJdfflnra27cuFE88cQTws/PT7i7u4u7775bnDlzxqz2mTM7UgghCgoKxNNPPy38/PyEh4eHGDFihDh58mSts5vS09PF008/LVq3bi1cXFxEy5YtxcCBA82avUlETVPfTMKb3To7UgghLly4IMaPHy8CAgKEi4uL6Ny5s3jnnXeETqczOi83N1c899xzIjQ0VDg7O4vw8HAxe/ZsUV5ebnSeOfGjse/p1tmRQgih1+tFYmKiCAsLE66urqJ79+7ip59+ErGxsUazI4UQoqSkRLz22muic+fOwtXVVfj6+opu3bqJl156yWjmOlmfSggh5Ej+iIiIiJoz1oQRERERyYBJGBEREZEMmIQRERERyYBJGBEREZEMmIQRERERyYBJGBEREZEMHH6xVr1ejz///BPe3t419v0iIuUSQqC4uBitWrWCk5Myv08yPhE5JlPjk8MnYX/++SfCwsLkbgYRWUlmZmaN7a6UgvGJyLE1FJ8cPgnz9vYGUP2D8PHxkbk1RGQpRUVFCAsLk/7GlYjxicgxmRqfHD4JM3Tx+/j4MMgROSAlD+MxPhE5tobikzILKYiI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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def plot_efficiency(efficiency, ax):\n", - " means = efficiency.U_avg.values.T\n", - " eta = efficiency.Efficiency.values.T\n", - " ax.plot(means, eta, '-o')\n", - " ax.set(xlabel=\"Hub Height Flow Velocity [m/s]\", ylabel='Efficiency [%]')\n", - "\n", - "fig, ax = plt.subplots(1, 2, figsize=(7, 6))\n", - "plot_efficiency(efficiency_ebb, ax[0])\n", - "ax[0].set_title('Ebb Tide')\n", - "plot_efficiency(efficiency_flood, ax[1])\n", - "ax[1].set_title('Flood Tide')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - }, - "vscode": { - "interpreter": { - "hash": "357206ab7e4935423e95e994af80e27e7e6c0672abcebb9d86ab743298213348" - } - } + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tidal Power Performance Analysis\n", + "\n", + "The following example demonstrates a simple workflow for conducting the power performance analysis of a turbine, given turbine specifications, power data, and Acoustic Doppler Current Profiler (ADCP) water measurements.\n", + "\n", + "In this case, the turbine specifications can be broken down into\n", + " 1. Shape of the rotor's swept area\n", + " 2. Turbine rotor diameter/height and width\n", + " 3. Turbine hub height (center of swept area)\n", + "\n", + "Additional data needed:\n", + " - Power data from the current energy converter (CEC)\n", + " - 2-dimensional water velocity data\n", + "\n", + "In this jupyter notebook, we'll be covering the following three topics:\n", + " 1. CEC power-curve\n", + " 2. Velocity profiles\n", + " 3. CEC efficiency profile (or power coefficient profile)\n", + "\n", + "Start by importing the necessary tools:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\mcve343\\Anaconda3\\lib\\site-packages\\xarray\\backends\\cfgrib_.py:29: UserWarning: Failed to load cfgrib - most likely there is a problem accessing the ecCodes library. Try `import cfgrib` to get the full error message\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from mhkit.tidal import performance\n", + "from mhkit.dolfyn import load" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, we'll use ADCP data from the ADCP example notebook. I am importing a dataset from the ADCP example notebook. This data retains the original timestamps (1 Hz sampling frequency) and was rotated into the principal coordinate frame (streamwise-cross_stream-up)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Open processed ADCP dataset\n", + "ds = load(\"data/tidal/adcp.principal.a1.20200815.nc\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, since we don't have power data, we'll invent a mock timeseries based off the cube of water velocity, just to have something to work with." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Streamwise and hub-height water velocity\n", + "streamwise_vel = ds[\"vel\"].sel(dir=\"streamwise\")\n", + "hub_height_vel = abs(streamwise_vel.isel(range=10))\n", + "\n", + "# Emulate power data\n", + "power = hub_height_vel**3 * 1e5\n", + "# Emulate cut-in speed by setting power at flow speeds below 0.5 m/s to 0 W\n", + "power = power.where(abs(streamwise_vel.mean(\"range\")) > 0.5, 0)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first step for any of the following calculations is to first split velocity into ebb and flood tide. You'll need some background information on the site to know which direction is positive and which is negative in the data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "ebb = streamwise_vel.where(streamwise_vel > 0)\n", + "flood = streamwise_vel.where(streamwise_vel < 0)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the ebb and flood velocities, we can also divide the power data into that for ebb and flood tides." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Make sure ebb and flood are on same timestamps\n", + "power = power.interp(time=streamwise_vel[\"time\"])\n", + "\n", + "power_ebb = power.where(~ebb.mean(\"range\").isnull(), 0)\n", + "power_flood = power.where(~flood.mean(\"range\").isnull(), 0)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Power-curve\n", + "\n", + "Now with power and velocity divided into ebb and flood tides, we can calculate the power curve for the CEC in both conditions\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "power_curve_ebb = performance.power_curve(\n", + " power_ebb,\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " doppler_cell_size=0.5,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " turbine_profile=\"circular\",\n", + " diameter=3,\n", + " height=None,\n", + " width=None,\n", + ")\n", + "power_curve_flood = performance.power_curve(\n", + " power_flood,\n", + " velocity=flood,\n", + " hub_height=4.2,\n", + " doppler_cell_size=0.5,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " turbine_profile=\"circular\",\n", + " diameter=3,\n", + " height=None,\n", + " width=None,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
U_avgU_avg_power_weightedP_avgP_stdP_maxP_min
U_bins
(0.0, 0.1]0.0674590.0000000.0000000.0000000.0000000.000000
(0.1, 0.2]0.1156140.0000000.0000000.0000000.0000000.000000
(0.2, 0.3]0.2496760.2256390.0000000.0000000.0000000.000000
(0.3, 0.4]0.3396000.3155610.0000000.0000000.0000000.000000
(0.4, 0.5]0.4593930.4372492890.7249862660.8100225551.535008229.914964
(0.5, 0.6]0.5485070.53297419677.3435184645.89093624323.23445415031.452582
(0.6, 0.7]0.6714490.65536240369.4355173679.26013545506.30667737083.470337
(0.7, 0.8]0.7261890.70484552413.9720242856.73714257360.86147350670.102583
(0.8, 0.9]0.8439580.82591679944.0008559798.56967496206.92802566531.815452
(0.9, 1.0]0.9387010.920960103970.0421755828.263891112163.97743499100.055332
(1.0, 1.1]1.0466071.026293148511.10000818809.350864171583.550611124179.073981
(1.1, 1.2]1.1473481.127691200340.8205816299.518554209073.741656187772.752668
\n", + "
" + ], + "text/plain": [ + " U_avg U_avg_power_weighted P_avg P_std \\\n", + "U_bins \n", + "(0.0, 0.1] 0.067459 0.000000 0.000000 0.000000 \n", + "(0.1, 0.2] 0.115614 0.000000 0.000000 0.000000 \n", + "(0.2, 0.3] 0.249676 0.225639 0.000000 0.000000 \n", + "(0.3, 0.4] 0.339600 0.315561 0.000000 0.000000 \n", + "(0.4, 0.5] 0.459393 0.437249 2890.724986 2660.810022 \n", + "(0.5, 0.6] 0.548507 0.532974 19677.343518 4645.890936 \n", + "(0.6, 0.7] 0.671449 0.655362 40369.435517 3679.260135 \n", + "(0.7, 0.8] 0.726189 0.704845 52413.972024 2856.737142 \n", + "(0.8, 0.9] 0.843958 0.825916 79944.000855 9798.569674 \n", + "(0.9, 1.0] 0.938701 0.920960 103970.042175 5828.263891 \n", + "(1.0, 1.1] 1.046607 1.026293 148511.100008 18809.350864 \n", + "(1.1, 1.2] 1.147348 1.127691 200340.820581 6299.518554 \n", + "\n", + " P_max P_min \n", + "U_bins \n", + "(0.0, 0.1] 0.000000 0.000000 \n", + "(0.1, 0.2] 0.000000 0.000000 \n", + "(0.2, 0.3] 0.000000 0.000000 \n", + "(0.3, 0.4] 0.000000 0.000000 \n", + "(0.4, 0.5] 5551.535008 229.914964 \n", + "(0.5, 0.6] 24323.234454 15031.452582 \n", + "(0.6, 0.7] 45506.306677 37083.470337 \n", + "(0.7, 0.8] 57360.861473 50670.102583 \n", + "(0.8, 0.9] 96206.928025 66531.815452 \n", + "(0.9, 1.0] 112163.977434 99100.055332 \n", + "(1.0, 1.1] 171583.550611 124179.073981 \n", + "(1.1, 1.2] 209073.741656 187772.752668 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "power_curve_flood" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we can plot the two power curves. A velocity bin is missing in the ebb tide power curve in this example because the data is so short, there are no samples for that bin." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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E6NHj2bFihWMGDGClJQUtm3bxqJFi7TrHRwciImJ0Z6zR48eeHt7X/a1k5KScHd3x2KxUF5ert35LCgo4Pz589odTpthw4axf/9+AKKiovD19WXjxo0YjUYGDBjAHXfcwYcffgiog6jt7mdycjJlZWWMHj3a7vkqKioYOHCg3bHBgwdf8WcnhBBtjYxNMjYJIVo3meC1Yjqd7opDUUb07ESQyZmM/LI69zrogECTMyN6dmr0tNRLly6lsrKSzp07a8cURcFoNJKbm4u3tzdTp07l6aefZv78+XzxxRf07duXAQMGaG3rciV7LXr37s13332HwWAgODgYJycnAAoKCgC0sJvqz2k7ptPpGDlyJAkJCTg6OhIfH09UVBQWi4WkpCS2bt3KM888A4DVagXgxx9/tHufgPaaNm5ubpfttxAd1cLEheh1emYMmFHr3OL9i7EqVmZGz2yBnokrJWOTjE1CdHStfSyTEM12wqDX8erESEAdMKuzff/qxMhGH0ArKyv55z//ybx580hMTNQe+/fvJywsjBUrVgBw5513UlZWxurVq/niiy+0kBmAPn36UFlZyb59+7RjJ06cIC8v77Kv7+joSI8ePejatavdYObp6UlwcLBd6A2o6bIjIiK07+Pj40lISCAhIYH4+Hh0Oh0jRozgvffeo7S0VLvLGhkZiZOTE6mpqfTo0cPuERISck2fnRAdkV6nZ0HiAhbvX2x3fPH+xSxIXIBeJ8NSeyJjk4xNQrRHrX0skxW8dmRcVBCL7o/h9e+T7dJRB5qceXViJOOighr9NX/44Qdyc3N55JFHMJlMdud+/etfs3TpUp588knc3NyYNGkSr7zyCocPH2bKlClauz59+nDrrbfy2GOPsWjRIoxGI88++ywuLi617nJejeeff55XX32V7t27Ex0dzbJly0hMTNQGdlAH0aeffhoHBwdGjBihHXv22WeJiYnB09MTAA8PD5577jl+97vfYbVaGT58OAUFBWzduhV3d3cefPDBa+6nEB2J7W7ngsQF2ve2AXFW9Kw674aKtk3GJnsyNgnR9lUfyxQUnhjwRKsay2SC186MiwpidGQgO1NyyCwsw9/DmSFdfRr97qjN0qVLufXWW2sNoKCmen7rrbfYu3cvMTExTJ06lQkTJjBy5EhCQ0Pt2v7zn//kkUceYeTIkQQGBvL2229z6NAh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4eHBHXfcwR133MHcuXMZO3Ysc+fOZfTo0U3yenWx/RETHh6ubfT/+OOPGTp0qF276p/z1KlTefrpp5k/fz5ffPEFffv2bXV3okXLO198ngslF3DQOdD/Yqp6MGwY/h7OV3C1jhwnNYSuh1ePpuukuHYyNsnY1IRkbBItZVfGLnLKcvBy8mJoSlV4ZrXsmXBp/12fXj0hsCvknLp0MmgABEc3U28bJhO81kynu7pQFJ9u6gPAoeqXf5chzfLD5ubmRo8etf8Y69GjB46OjmzevJkpU6YAaojK7t27eeaZZ7R28fHxbNiwgR07dvDGG2/g5eVFZGQkc+fOxd/fn4iICEDd3G2xWMjMzNRCMa5H9T6npaXh4OBQ5/toSjqdjj59+rB161ZAvcML2O2DMJlMBAUFsX37dkaOHAlAZWUle/bsISYm5qpfs7S0lCVLljBy5Egt7KZz586cOnWqwbued955J48//jirV6/miy++YNq0aVf92qL9s63eRfpG4npqu3owfDhDuvoQZHImI7+szn14OiDQ5EyZTp089PCWCV6rJGOTjE1VZGwS7YktPPOWgBswHlkKegfofWm13GJV2Fm9wHnJRTB1gdwzl/YXtxIywRNNys3NjSeeeILnn38eHx8fQkNDeffddykpKeGRRx7R2sXHx/O3v/0NHx8fIiMjtWPz58/X4u4BevXqxdSpU3nggQeYN28eAwcO5OLFi6xfv55+/fpx2223Nev7S01NJScnh9TUVCwWi3bXtUePHnZ3bW0SExN59dVXmTZtGpGRkTg6OrJx40Y++eQTXnzxRUDNKubi4sLq1avp0qULzs7OmEwmnn76ad555x169uxJREQE77//Pnl5eVfUz8zMTMrKyigsLGTPnj28++67XLx4UdskD/Daa68xe/ZsPD09GT9+POXl5ezevZvc3FzmzJkDqP89J02axCuvvMLhw4e1P4yEqG7Phar9d969IfsHQAehsRj0Ol6dGMkTn++tdY0OmGJYy5Od0pmZqd4hlRU80VRkbLInY5Po6MxWM2tT1wLVwjPDR4DrpULmRzIKKCirxM3RQN9gTzDoYdYOyE2FxBXgEVjXU7cImeC1Vx6B6gbPVvDD9s4772C1Wpk2bRqFhYUMHjyYn376CW9vb62N7c5fXFycFr4SFxfHBx98UCsL1rJly5g7dy7PPvss586d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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_power_curve(P_curve, ax):\n", + " ax.plot(P_curve[\"U_avg\"], P_curve[\"P_avg\"], \"-o\", color=\"C0\", label=\"Avg Power\")\n", + " ax.plot(\n", + " P_curve[\"U_avg\"],\n", + " (P_curve[\"P_avg\"] - P_curve[\"P_std\"]),\n", + " \"--+\",\n", + " color=\"C1\",\n", + " label=\"Power - 1 Std Dev\",\n", + " )\n", + " ax.plot(\n", + " P_curve[\"U_avg\"],\n", + " (P_curve[\"P_avg\"] + P_curve[\"P_std\"]),\n", + " \"-+\",\n", + " color=\"C1\",\n", + " label=\"Power + 1 Std Dev\",\n", + " )\n", + " ax.plot(P_curve[\"U_avg\"], P_curve[\"P_min\"], \"--x\", color=\"C2\", label=\"Min Power\")\n", + " ax.plot(P_curve[\"U_avg\"], P_curve[\"P_max\"], \"-x\", color=\"C2\", label=\"Max Power\")\n", + " ax.set(xlabel=\"Flow Speed at Hub Height [m/s]\", ylabel=\"Power [W]\")\n", + " ax.legend()\n", + "\n", + "\n", + "fig, ax = plt.subplots(1, 2, figsize=(10, 7))\n", + "plot_power_curve(power_curve_ebb, ax[0])\n", + "plot_power_curve(power_curve_flood, ax[1])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Velocity Profiles\n", + "Various velocity profiles can be created next from the water velocity data, and we can do this again with ebb and flood tide. These functions are following three steps:\n", + " 1. Reshape the data into bins by time (ensembles)\n", + " 2. Apply a function to the ensembles to get ensemble statistics (mean, root-mean-square (RMS), or standard devation)\n", + " 3. Regroup and bin the ensemble statistics by flow speed\n", + "\n", + "These profiles are created using the `velocity_profiles` method, and a profile is specified using the \"function\" argument. For the average velocity profiles, we'll set the function = 'mean'.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "avg_profile_ebb = performance.velocity_profiles(\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " water_depth=10,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " function=\"mean\",\n", + ")\n", + "avg_profile_flood = performance.velocity_profiles(\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " water_depth=10,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " function=\"mean\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### RMS Tidal Velocity\n", + "\n", + "For RMS velocity profiles, we'll set the function = 'rms'." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "rms_profile_ebb = performance.velocity_profiles(\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " water_depth=10,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " function=\"rms\",\n", + ")\n", + "rms_profile_flood = performance.velocity_profiles(\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " water_depth=10,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " function=\"rms\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Std Dev Tidal Velocity\n", + "\n", + "And to get the standard deviation, we'll set function = 'std'." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "std_profile_ebb = performance.velocity_profiles(\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " water_depth=10,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " function=\"std\",\n", + ")\n", + "std_profile_flood = performance.velocity_profiles(\n", + " velocity=ebb,\n", + " hub_height=4.2,\n", + " water_depth=10,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + " function=\"std\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can plot these variables together based on ebb and flood tides. The following code plots the mean and RMS profiles as line plots with \"x\" and \"+\" markers, respectively, and shades the area between +/- 1 standard deviation from the mean." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Flood Tide')" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" }, - "nbformat": 4, - "nbformat_minor": 4 + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAJuCAYAAACOkPJ5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXxU133//9edRSON9gUhCQnEDkJgxBK22IaAMcFLncROWieO3SZu2qTN6uZbf5s0idPEv+SbJk3dLE2a1o2z2nHSOl4wNt5ZhADJIMQmLAQSEkL7Mlpm5t7fH1czkkDL3NG9oxnp83w8eICuZu69YEtvnXM/53MUTdM0hBBCCCGEEEIE2ab6BoQQQgghhBAi2shASQghhBBCCCGuIQMlIYQQQgghhLiGDJSEEEIIIYQQ4hoyUBJCCCGEEEKIa8hASQghhBBCCCGuIQMlIYQQQgghhLiGDJSEEEIIIYQQ4hoyUBJCCCGEEEKIa8hASYhRPP744yiKMuav1157LfhaRVH4m7/5m5DPeeTIEcP3M969XHtfDzzwAIWFhSGf96tf/arh+xFCCGGN8fLnoYceCr6usLCQBx54YErucaLs2Lp1a0iZ9dWvfjX4971w4cKE1926dStbt2417e8hxEQcU30DQkSz//qv/2LZsmXXHS8qKorofRw8eHDEx1//+td59dVXeeWVV0YcLyoqoqCggM985jORvD0hhBAmGy1/8vLypuhujPnhD39IZ2dn8OPnnnuOf/qnf7ru75Sfn4/L5eLgwYPk5uZOxa0KMS4ZKAkxjuLiYtatWzfVt8HGjRtHfDxr1ixsNtt1xwFSUlIidVtCCCEsEi35E45rJxNPnz4NjP13mjVrVkTuSwijpPROCJP8+7//O0uWLMHlclFUVMRvfvObUV/X1tbGn//5n5ORkUFiYiJ33HEH77zzjmn3MVrpXWdnJw8++CCZmZkkJSWxa9cuzp49O+r7z507x7333kt2djYul4vly5fzgx/8wLT7E0IIYY2LFy/ykY98ZMT373/+539GVdURr2ttbeWTn/wkc+bMIS4ujgULFvAP//AP9Pf3j3idkewI12ild5qm8e1vf5t58+YRHx/PmjVreOGFF0Z9f2dnJw899BDz588nLi6OOXPm8NnPfpaenh5T71PMTPJESYhx+P1+fD7fiGOKomC320cce+aZZ3j11Vd55JFHSExM5Ic//CF/9md/hsPh4O677x7x2o997GPccsst/OpXv+LSpUt86UtfYuvWrRw/fpy0tDTT/w6apnHXXXdx4MAB/vEf/5H169ezf/9+3vve91732qqqKjZv3szcuXP553/+Z3JycnjxxRf59Kc/TXNzM1/5yldMvz8hhBDXGy1/HI6xf2y7evUqmzdvZmBggK9//esUFhby7LPP8tBDD3H+/Hl++MMfAtDX18e2bds4f/48X/va11i1ahVvvvkmjz76KBUVFTz33HOAseww29e+9jW+9rWv8bGPfYy7776bS5cu8eCDD+L3+1m6dGnwdR6Ph5tvvpm6ujr+7//9v6xatYqTJ0/yj//4j5w4cYKXX34ZRVEsv18xjWlCiOv813/9lwaM+stut494LaAlJCRojY2NwWM+n09btmyZtmjRouvO+b73vW/E+/fv368B2j/90z+FfH/333+/lpiYOObn5s2bF/z4hRde0ADt+9///ojXfeMb39AA7Stf+Urw2K233qrl5+drHR0dI177N3/zN1p8fLzW2toa8j0KIYQwbrz88Xq9wdfNmzdPu//++4Mf//3f/70GaKWlpSPO99d//deaoijamTNnNE3TtB//+McaoD355JMjXvetb31LA7S9e/dqmmYsO0L9O5WVlY35uZqaGk3TNK2trU2Lj48fMytvvvnm4LFHH31Us9ls1533d7/7nQZozz//fMj3KMRopPROiHH8/Oc/p6ysbMSv0tLS6163fft2Zs+eHfzYbrfzoQ99iOrqaurq6ka89sMf/vCIjzdv3sy8efN49dVXLfk7BM577XXvvffeER/39fWxb98+3ve+9+F2u/H5fMFfu3fvpq+vj0OHDllyj0IIIUYaLX/Ge6L0yiuvUFRUxLve9a4Rxx944AE0TQs2/3nllVdITEy8rtoh0EFv3759QOjZYbaDBw/S19c3ZlYO9+yzz1JcXMzq1atHZNatt956XYdaIcIhpXdCjGP58uUhLabNyckZ81hLSwv5+fkTvralpWUSdzq2lpYWHA4HmZmZo97f8Nf5fD4ee+wxHnvssVHP1dzcbMk9CiGEGCnU/AloaWkZdWuIQKe8QMa0tLSQk5NzXUladnY2DodjxOtCyQ6zBa4/Xq4GXLlyherqapxO56jnkswSkyUDJSFM0NjYOOaxa0NmrNcuWrTIknvLzMzE5/PR0tIy4l6uvY/09HTsdjv33Xcfn/rUp0Y91/z58y25RyGEEJOTmZlJQ0PDdccvX74MQFZWVvB1paWlaJo2YrDU1NSEz+cb8bpQssNsgWuNlZXDB4NZWVkkJCTwn//5n6OeK/B3ESJcUnonhAn27dvHlStXgh/7/X5++9vfsnDhwhFPkwB++ctfjvj4wIED1NbWWraJ3rZt20a97q9+9asRH7vdbrZt20Z5eTmrVq1i3bp11/26dtAnhBAiOmzfvp2qqiqOHTs24vjPf/5zFEUJZsH27dvp7u7mf/7nf657XeDzEHp2mG3jxo3Ex8ePmZXD3X777Zw/f57MzMxRMyvUzdeFGIs8URJiHJWVldd1HQJYuHDhiH0fsrKyeM973sOXv/zlYNe706dPj9oi/MiRI3z84x/nnnvu4dKlS/zDP/wDc+bM4ZOf/KQlf4edO3dy00038cUvfpGenh7WrVvH/v37eeKJJ6577fe//33e/e53c+ONN/LXf/3XFBYW0tXVRXV1NX/84x+v2+BWCCFEdPjc5z7Hz3/+c2677TYeeeQR5s2bx3PPPccPf/hD/vqv/5olS5YA8NGPfpQf/OAH3H///Vy4cIGVK1fy1ltv8c1vfpPdu3ezY8cOwFh2mCk9PZ2HHnqIf/qnfxqRlV/96levK7377Gc/y9NPP81NN93E5z73OVatWoWqqly8eJG9e/fyhS98gQ0bNlh6v2J6k4GSEOP48z//81GP//SnP+XjH/948OM777yTFStW8KUvfYmLFy+ycOFCfvnLX/KhD33ouvf+7Gc/44knnuBP//RP6e/vZ9u2bXz/+98nIyPDkr+DzWbjmWee4fOf/zzf/va3GRgYYMuWLTz//PPX7fpeVFTEsWPH+PrXv86XvvQlmpqaSEtLY/HixezevduS+xNCCDF5s2bN4sCBAzz88MM8/PDDdHZ2smDBAr797W/z+c9/Pvi6+Ph4Xn31Vf7hH/6B//f//h9Xr15lzpw5PPTQQyO2gDCSHWYbvtXGE088wbJly/jxj3/Md77znRGvS0xM5M033+T/+//+P37yk59QU1NDQkICc+fOZceOHfJESUyaommaNtU3IYQQQgghhBDRRNYoCSGEEEIIIcQ1ZKAkhBBCCCGEENeQgZIQQgghhBBCXGNKB0pvvPEGd9xxB3l5eSiKcl2rSk3T+OpXv0peXh4JCQls3bqVkydPTs3NCiGEmBEkm4QQQsAUD5R6enq44YYb+Ld/+7dRP//tb3+b7373u/zbv/0bZWVl5OTkcMstt9DV1RXhOxVCCDFTSDYJIYSAKOp6pygKf/jDH7jrrrsAfcYuLy+Pz372s/yf//N/AOjv72f27Nl861vf4hOf+MQU3q0QQoiZQLJJCCFmrqjdR6mmpobGxkZ27twZPOZyubj55ps5cODAmGHU399Pf39/8GNVVWltbSUzMxNFUSy/byGEEDpN0+jq6iIvLw+bbXosiZVsEkKI2GYkm6J2oNTY2AjA7NmzRxyfPXs2tbW1Y77v0Ucf5Wtf+5ql9yaEECJ0ly5dIj8/f6pvwxSSTUIIMT2Ekk1RO1AKuHamTdO0cWffHn744RE7UHd0dDB37lwuXbpESkqKZfcpIqPZ08+B+rZxX9Pl8bLvxBUOn2sJHls2J4Udq/QfbJITnCS7nde9TwHuWJxj6v1OmbZK6L084csOJ7ZTmdh93XF3Vxc3//G35NZfREP/t7mwcClvb94GQG9iMp7kZDy9Ho6dPEbVO1XB987Lncea4jUAJMYn4k5wG7r1XCWX99rfa+g9Ijp1dnZSUFBAcnLyVN+K6SSbxHBVzZ1Ut3nGfU242ZTtjmPjnAxzb3iqXHkd/P0TvuwP6Vdoc3pHHHN3dXHDwddY/nZZ8NhouQTg6fXw5tE3qb08NHkx2Wxaa1vLDbYbDL1HRCcj2RS1A6WcHP0H1sbGRnJzc4PHm5qarpvJG87lcuFyua47npKSImE0DfQ7+nF3+MZ9zVvVDRy52EtOdjpNHfo35LPNPha0qexcnTvm+xSYPv+P+JPAMXEIJCYNkJDov+54ydv7Wdp8CVwKdYULyb9wnlV1Z+m/UsixG3cAkABU1lZypuEMcYlx+FX9PHXtdczpnMP6levDunW34ibFPk3+Owjg+kFFLJNsEqNJ6ge31z7uawLZ5ExIxK/qy8NDyabERNf0+X/Ekwj+8f+dANwpCfQ5R/6IWvL2ftafPkJb3mzSW5oARs0l0LOprq0Oe4Idd7wbT59n0tmUZEsixTZN/jsIILRsitqi8fnz55OTk8NLL70UPDYwMMDrr7/O5s2bp/DORDTbW9HAnvIGdpXkMjs1Pnh809Is9pQ3sLeiYQrvLjasefNl1r++lwuLl484fnLNRta/vpc1b74MQNmJMkqPl7Jh1Qbs9qHgK15UTOnxUspOlCHEdCPZJMIxPJsctqEfziSbQhPIpbKbd9KelR08fm0uwVA2FS0qGnEOySYRjil9otTd3U11dXXw45qaGioqKsjIyGDu3Ll89rOf5Zvf/CaLFy9m8eLFfPOb38TtdnPvvfdO4V2LaKZqGrtKctm5Opf/2ncegOX5Kdy6OpdUtxM1Opo8RjVFVSm7eSe97kQKz53C73Bw5MYdnFqzEU9yCoqqAqBqKhtWbWD9yvWUnyoHYOWSlawrXkeiOxFVU6fyryFE2CSbhNmGZ9OrJ64AcOPyWWxflSPZFIJALh27cQc7n/o5ALWLlnHsxh0jcgmGsqkgt4Cq6ioURWH9yvUULy6WbBKGTelA6ciRI2zbti34caB++/777+fxxx/ni1/8Ir29vXzyk5+kra2NDRs2sHfv3mlZ7y7Msask77pjKwpSSXE7xy1tEEOO3qx381p+9CAAfoczeCxQ3gCwYdWG6957w7IbSExIDLu0QYhoINkkzDZaNt20IluyKUSBDBqudnERnuSUEbkEQ9nU2Kw3XrHZbMFjkk3CqCkdKG3dupXxtnFSFIWvfvWrfPWrX43cTQkhIksDh8+BXbWjaAoOxUGfvW+q70qEyOl0jii9nA4km4QQ12aTZtPos0k2xQK73Y7D4TBlfWzUNnMQQkx/Tq+TOY1zSO1NxTa4ZNKOnRqlZorvTIRKURTy8/NJSkqa6lsRQghTSDbFPrfbTW5uLnFxcZM6jwyUhBBTQlEVFtcuJtWeStqcNOxOO4qi4MBBiiKdhWKBpmlcvXqVuro6Fi9ePO2eLAkhZp6xsimBBBKUhIlPIKaUpmkMDAxw9epVampqWLx48aQ2PJeBkhBiSsR543CpLjILMolzD834OHESr8SP804RTWbNmsWFCxfwer0yUBJCxLyxssmFS7IpRiQkJOB0OqmtrWVgYID4+PD/u0Vte3AhxPSmaHrtsGKbPnvszETTaY8kIYSQbJoeJvMUacR5TDmLEEIIIYQQQkwjMlASQgghhBBCiGvIQEkIIcLQ0tJCdnY2Fy5cmOpbscyFCxdQFAVFUVi9evVU344QQogJSDaZSwZKQoiY9b2XzvKv+86N+rl/3XeO77101rJrP/roo9xxxx0UFhYGj128eJE77riDxMREsrKy+PSnP83AwMC45+nv7+dv//ZvycrKIjExkTvvvJO6ujrD93PixAluvvlmEhISmDNnDo888si4ewEBFBYWBsMm8Ovv//7vg58vKCigoaGBL3zhC4bvRwghZirJpiGxnk3S9U4IEbPsNoXvDgbOp7cvDh7/133n+O5LZ/n8LUssuW5vby8/+9nPeP7554PH/H4/t912G7NmzeKtt96ipaWF+++/H03TeOyxx8Y812c/+1n++Mc/8pvf/IbMzEy+8IUvcPvtt3P06NGQu8h1dnZyyy23sG3bNsrKyjh79iwPPPAAiYmJEwbJI488woMPPhj8ePh+SHa7nZycHNkjSQghDJBs0k2HbJKBkhAiamiaRq/XT5ziC+n1H79xPl6/yndfOovXr/LXWxfyo9fO89gr1fztexbx8Rvn4xkI7VwJg3tlhOKFF17A4XCwadOm4LG9e/dSVVXFpUuXyMvLA+Cf//mfeeCBB/jGN75BSsr1e0N1dHTws5/9jCeeeIIdO3YA8Itf/IKCggJefvllbr311pDu55e//CV9fX08/vjjuFwuiouLOXv2LN/97nf5/Oc/P+7fKzk5mZycnJCuI4QQM5GmaXi8fohwNhnJJZBssoIMlIQQUaPPq3LTV8rCeu9jr1Tz2CvVY348kapHbsUdF9q3xDfeeIN169aNOHbw4EGKi4uDQQRw66230t/fz9GjR9m2bdt15zl69Cher5edO3cGj+Xl5VFcXMyBAwdCDqODBw9y880343K5Rlz74Ycf5sKFC8yfP3/M937rW9/i61//OgUFBdxzzz383d/93aR3MhdCiOlEz6Y3wnrvZLLJSC6BZJMVZKAkhBAGXbhwYUToADQ2NjJ79uwRx9LT04mLi6OxsXHU8zQ2NhIXF0d6evqI47Nnzx7zPWOdZ3g9euAcgc+NFUaf+cxnWLNmDenp6Rw+fJiHH36Ympoa/uM//iPkawshhIgOkk3mk4GSECJqxDttHPzaRlKVVEPvC5Q0OO0KXr/G375nEX+9daGhcyQ4Q6u5Br0OfLSdvkcrI9A0zfCmrOG859rXBxbLjneez33uc8E/r1q1ivT0dO6++26+9a1vkZmZaej6QggxXcU7bRz52k24lQRD75tsNhnJJZBssoIMlIQQUUNRFBLi7LiV0L81/eu+czz2SjWfv2UJn96+OLhY1mm3jVhEa6asrCza2tpGHMvJyaG0tHTEsba2Nrxe73WzecPfMzAwQFtb24iZu6amJjZv3hzy/eTk5Fw3y9fU1AQw5rVHs3HjRgCqq6tloCSEEIMURcEt2TQjs0nagwshYtbwDkKB4Pn09sV8/pYlfHec9qyTVVJSQlVV1YhjmzZtorKykoaGhuCxvXv34nK5WLt27ajnWbt2LU6nk5deeil4rKGhgcrKSkNhtGnTJt54440R7V737t1LXl7edWUP4ykvLwcgNzc35PcIIYQYSbJp6Nqxnk0yUBJCxCy/qo0IooBAIPnV8fdqCNett97KyZMnR8zc7dy5k6KiIu677z7Ky8vZt28fDz30EA8++GCwq1B9fT3Lli3j8OHDAKSmpvKxj32ML3zhC+zbt4/y8nI+8pGPsHLlymCnoVDce++9uFwuHnjgASorK/nDH/7AN7/5zRFdhQ4fPsyyZcuor68H9EW23/ve96ioqKCmpoYnn3yST3ziE9x5553MnTvXrH8qIYSYcSSbdNMhm6T0TggRsz43zl4UVpU2AKxcuZJ169YFv4GDvq/Dc889xyc/+Um2bNlCQkIC9957L9/5zneC7/N6vZw5cwaPxxM89r3vfQ+Hw8EHP/hBent72b59O48//viIfSq2bt1KYWEhjz/++Kj3k5qayksvvcSnPvUp1q1bR3p6Op///Of5/Oc/H3yNx+PhzJkzeL1eAFwuF7/97W/52te+Rn9/P/PmzePBBx/ki1/8opn/VEIIMeNINummQzbJQEkIIcLw5S9/OTgrZ7PpD+fnzp3Ls88+O+Z7CgsLr9uRPD4+nscee2zcjf8uXLjAAw88MO79rFy5kjfeGLt97datW0dce82aNRw6dGjccwohhIgtkk3mkoGSEEKEYffu3Zw7d476+noKCgosu87p06dJTk7mox/9qGXXGMvFixcpKipiYGCAoqKiiF9fCCGEMZJN5pKBkhBChOkzn/mM5ddYtmwZJ06csPw6o8nLy6OiogJgxIaBQgghopdkk3lkoCSEEGJUDoeDRYsWTfVtCCGEEEGRzCbpeieEEEIIIYQQ15CBkhBCCCGEEEJcQwZKQgghhBBCCHENGSgJIYQQQgghxDVkoCSEEEIIIYQQ15CBkhBCCCGEEEJcQwZKQggRhpaWFrKzs7lw4cJU34plLly4gKIoKIrC6tWrp/p2hBBCTECyyVwyUBJCxK5XH4XXvz36517/tv55izz66KPccccdFBYWBo9dvHiRO+64g8TERLKysvj0pz/NwMDAuOfZunVr8Bt+4Nef/umfGrqXvr4+HnjgAVauXInD4eCuu+4K6X1tbW3cd999pKamkpqayn333Ud7e3vw8wUFBTQ0NPCFL3zB0P0IIcSMJtkETI9skg1nhRCxy2aHV7+h//nmLw4df/3b+vFt/2DJZXt7e/nZz37G888/Hzzm9/u57bbbmDVrFm+99RYtLS3cf//9aJrGY489Nu75HnzwQR555JHgxwkJCYbux+/3k5CQwKc//WmefvrpkN937733UldXx549ewD4y7/8S+677z7++Mc/AmC328nJySEpKcnQ/QghxIwm2RS8dqxnkwyUhBDRQ9PA6wHFGdrrN30K/AN68PgH4N2fg7e+B2/8P7jp7/TPD/SEdi6nGxQlpJe+8MILOBwONm3aFDy2d+9eqqqquHTpEnl5eQD88z//Mw888ADf+MY3SElJGfN8brebnJyc0O5zFImJifzoRz8CYP/+/SNm3sZy6tQp9uzZw6FDh9iwYQMAP/3pT9m0aRNnzpxh6dKlYd+PEEJMK8Fs0kJ7vVnZZCCXQLLJCjJQEkJED28vaY+uCu+9b/w//ddYH0/k/16GuMTQLvXGG6xbt27EsYMHD1JcXBwMIoBbb72V/v5+jh49yrZt28Y83y9/+Ut+8YtfMHv2bN773vfyla98heTk5NDvPQwHDx4kNTU1GEQAGzduJDU1lQMHDshASQghAry9uKcimwzkEkg2WUEGSkIIYdCFCxdGhA5AY2Mjs2fPHnEsPT2duLg4GhsbxzzXhz/8YebPn09OTg6VlZU8/PDDvP3227z00kuW3Pvw+83Ozr7ueHZ29rj3K4QQIjpJNplPBkpCiOjhTKD94VOkKanG3hcoabDH6WUON/2dXupg6NrukF/a29tLfHz8dceVUUokNE0b9XjAgw8+GPxzcXExixcvZt26dRw7dow1a9aEfE/hCOd+hRBixnEm4Hn4PG7F2BqdSWeTgVwCySYryEBJCBE9FAXi3KCEXmrA69/Wg2jbP+iLZgOLZe1xIxfRmigrK4u2trYRx3JycigtLR1xrK2tDa/Xe91s3njWrFmD0+nk3LlzloZRTk4OV65cue741atXDd2vEEJMe8FsMjBwkWwKS7Rlk7QHF0LEruEdhALBc/MX9Y9f/cbY7VknqaSkhKqqqhHHNm3aRGVlJQ0NDcFje/fuxeVysXbt2pDPffLkSbxeL7m5uabd72g2bdpER0cHhw8fDh4rLS2lo6ODzZs3W3ptIYSY1iSbwhZt2SQDJSFE7FL9I4MoIBBIqt+Sy956662cPHlyxMzdzp07KSoq4r777qO8vJx9+/bx0EMP8eCDDwa7CtXX17Ns2bJgAJw/f55HHnmEI0eOcOHCBZ5//nnuueceSkpK2LJli6F7qqqqoqKigtbWVjo6OqioqKCioiL4+cOHD7Ns2TLq6+sBWL58Obt27eLBBx/k0KFDHDp0iAcffJDbb79dGjkIIcRkSDYFxXo2SemdECJ2bXt47M9ZVNoAsHLlStatW8eTTz7JJz7xCUDf1+G5557jk5/8JFu2bCEhIYF7772X73znO8H3eb1ezpw5g8fjASAuLo59+/bx/e9/n+7ubgoKCrjtttv4yle+gt1uD75v69atFBYW8vjjj495T7t376a2tjb4cUlJCaDXdQN4PB7OnDmD1+sNvuaXv/wln/70p9m5cycAd955J//2b/82yX8dIYSY4SSbgmI9m2SgJIQQYfjyl78cnJWz2fSH83PnzuXZZ58d8z2FhYXBcAB9d/HXX399wmtduHCBBx54YMLXjGfr1q0jrg2QkZHBL37xiwmvL4QQIjZINplLBkpCCBGG3bt3c+7cOerr6ykoKLDsOqdPnyY5OZmPfvSjll1jLBcvXqSoqIiBgQGKiooifn0hhBDGSDaZSwZKQggRps985jOWX2PZsmWcOHHC8uuMJi8vL1hL7nK5puQehBBCGCPZZB4ZKAkhhBiVw+Fg0aJFU30bQgghRFAks0m63gkhhBBCCCHENWSgJIQQQgghhBDXkIGSEEIIIYQQQlxDBkpCCCGEEEIIcQ0ZKAkhhBBCCCHENWSgJIQQQgghhBDXkIGSEEKEoaWlhezs7Al3HY9lFy5cQFEUFEVh9erVU307QgghJiDZZC4ZKAkhYtYPK37Ij9/+8aif+/HbP+aHFT+07NqPPvood9xxB4WFhcFjn/nMZ1i7di0ulyvkb979/f387d/+LVlZWSQmJnLnnXdSV1dn6F76+vp44IEHWLlyJQ6Hg7vuuiuk9xUWFgbDJvDr7//+74OfLygooKGhgS984QuG7kcIIWYyySbddMgmGSgJIWKWTbHxg4ofXBdIP377x/yg4gfYFGu+xfX29vKzn/2Mj3/84yOOa5rGX/zFX/ChD30o5HN99rOf5Q9/+AO/+c1veOutt+ju7ub222/H7/eHfA6/309CQgKf/vSn2bFjR8jvA3jkkUdoaGgI/vrSl74U/JzdbicnJ4ekpCRD5xRCiJlMskk3HbLJYfkVhBAiRJqm0evrJU6JC+n1Hy36KF6/lx9U/ACv38vHVn6Mn534GT858RP+cuVf8tGij+LxekI6V4IjAUVRQnrtCy+8gMPhYNOmTSOO/+u//isAV69e5fjx4xOep6Ojg5/97Gc88cQTwRD5xS9+QUFBAS+//DK33nprSPeTmJjIj370IwD2799Pe3t7SO8DSE5OJicnJ+TXCyHETBPIJkKLCNOyyUgugWSTFWSgJISIGn2+Pm779W1hvfcnJ37CT078ZMyPJ1J6bylupzuk177xxhusW7fO8D1e6+jRo3i9Xnbu3Bk8lpeXR3FxMQcOHAg5jCbjW9/6Fl//+tcpKCjgnnvu4e/+7u+IiwttoCqEEDPBVGWTkVwCySYryEBJCCEMunDhAnl5eZM+T2NjI3FxcaSnp484Pnv2bBobGyd9/ol85jOfYc2aNaSnp3P48GEefvhhampq+I//+A/Lry2EEMJckk3mk4GSECJqxDvi2ftne0lVUg29L1DS4LQ58ape/nLlX/KxlR8zdI4ER0LIr+3t7SU+Pt7Q+Y3QNM1QuUW4Pve5zwX/vGrVKtLT07n77rv51re+RWZmpuXXF0KIWBDviOe1P3uNBCX0nIDJZ5ORXALJJivIQEkIETUURSHBmYBbCb3U4Mdv/5ifnPgJn1r9Kf7qhr8KLpZ12p381Q1/Zcl9ZmVl0dbWNunz5OTkMDAwQFtb24iZu6amJjZv3jzp8xu1ceNGAKqrq2WgJIQQgySbdDMxm6TrnRAiZgWCJxBEAH91w1/xqdWfGrXjkFlKSkqoqqqa9HnWrl2L0+nkpZdeCh5raGigsrJySsKovLwcgNzc3IhfWwghpgvJJnNNZTbJQEkIEbNUTR0RRAGBQFI11ZLr3nrrrZw8efK6mbvq6moqKipobGykt7eXiooKKioqGBgYAKC+vp5ly5Zx+PBhAFJTU/nYxz7GF77wBfbt20d5eTkf+chHWLlypeFWqlVVVVRUVNDa2kpHR0fw2gGHDx9m2bJl1NfXA3Dw4EG+973vUVFRQU1NDU8++SSf+MQnuPPOO5k7d+4k/nWEEGJmk2waEuvZJKV3QoiY9cnVnxzzc1aVNgCsXLmSdevWBb+BB3z84x/n9ddfD35cUlICQE1NDYWFhXi9Xs6cOYPHM9QW9nvf+x4Oh4MPfvCD9Pb2sn37dh5//HHsdnvwNVu3bqWwsJDHH398zHvavXs3tbW1111b0zQAPB4PZ86cwev1AuByufjtb3/L1772Nfr7+5k3bx4PPvggX/ziFyfxLyOEEEKyaUisZ5MMlMS0sqf8MjZFYefqocezJy91UDw3jUNnm1E1jV0lk+8IM52tfX0vms1GrzsRALvPy9rX93JqzUaWVRxGUVWO3ryT0uOl2BQb61euD7737dNvs654HVXVVaiayoZVG6bqr2G5L3/5yzz00EM8+OCD2Gz6w/nXXntt3PcUFhYGwyEgPj6exx57jMcee2zM9124cIEHHnhg3HNfuHBh3M9v3bp1xLXXrFnDoUOHxn2PEMIco2XTGyeb2L4qR7IpBIFcOnbj0NOMeeeqqF1SNCKXgGA2FeQWAKCqKqXHSyleXCzZNAbJprHJQElMKzZFYU95w4hjp+o6ebGigYNnmtlVImsvJqLZbKx/fS8XFi8HwO7zse7Nl0no6WbFsUOUDYaRTbFRerx0xHtPnD2BpmpUVldO6yACfZbs3Llz1NfXU1BQYNl1Tp8+TXJyMh/96Ectu8ZYLl68SFFREQMDAxQVFUX8+kJMF6Nl05unruJTNcmmEARyabh51adZ8+bLI3IJhrKpy9Olv1fTKDtRRm9vr2STiWZKNslASUwrgdm6PeUNZKe6gscDQTR8Nk+MLjBjd20oBcIo+PnBJ0mlx0ux24YexQeCaPiTpunqM5/5jOXXWLZsGSdOnLD8OqPJy8sL1pK7XK7xXyyEGNPwbLLbhtorSzaFZngutWVmB49fm0swMpuGk2wy10zJJhkoiWln45IsOjxeDp5pDh5bUZBKUX4qdc0eUtxOUtzO696nEbk9AqLd6dXvYs47Z8m7dIE5F84DULOkiIuLlpHVUIcnKQVPcgpFi4ro8fRQWV0ZfO/8OfOZN2ceTa1NJCYkkpiQOFV/DTFJDoeDRYsWTfVtCDEthJtNQnd69btwd3Wy4thQWdZouQRQtKiIptYmaupq8PTp624km6aPSGaTDJRETHHYJh7EHDhzdUQQgb5O6eSlDgB2rs4Zsxa816fidtpH/dxMsvzYIfIuXQAg8C8+/2wV88/qbUeP3LiDozfvpPJc5YhBEkBNfQ019TWAPrM33cschBDCYZu4iXC42eTx+sy5yRi3/NihEYMkGD2XACrPVVJTVzPitZJNIhwyUBIxJS6EMNq8dBZdvb7rZu1uHSxtGG/GrqPfKwMl4NSajeRdqCbv0gU09MFSzZKiYHmDJ0mftSteXBys+w6YP2c+61fppQ3jzdhpir5489oFpCK2yH8/ISDOPvEkXrjZ1DXgx6dqIU0UTmen1mwMrpUNGC2XQM+m5rbmEYMlyaaZxaz/frKPkogpcY6J/5c9dLaZg2eaWV2YFjx28lIHVXUd5Ge5JxwoCVhWcTj4RKm+cCGgz9zNrT5Nc25+sLyhqrqKyurKEWuUauprqK2vJTsje9ww8jq8qKgMeAas+4sIywX24RjeMlaImcZlDz2b8jMSgsdCzaZOySaWVRxmxbFDI9YojZZLoGdTYJDkjncDkk0zTaDVudM5uXJWeaIkYopDUVDQ1xONZm9FA3vKG9hVksvy/BQqLrQDsGlpVrDj0HiLZtv7pMRhzZsvB7veFZ47FTx+cs3GYIOHYzfuoOxEGaXHS9mwagPlp8rxq34AihcVBxfRjrdoVrWrNKU24WjSvw3FueNQFAUNjT6lz6q/njCRqqpcvXoVt9uNwyFxImauuAkGSsOzyaYo1LX2AqFnU0e/j4yEOPNuOMYEcqns5p1kNV4mvaUJuD6XgGA2FS0qoqq6KniOyWZTP/3YFHm+EO00TcPj8dDU1ERaWtqkJ/Ek2URMURSFOLuNfv/ou1rre1HoHYR6hg16thXPJtXtRJ3gUaw8UQJFVSm7eSe97kQKz53C73Bw5MYdnFqzEU9yCoqq/9sH9qJYv3I95afKAVi5ZCXriteR6E4Maefxhmz9BwRfkw/b4ANuO3bcituiv50wm81mY+7cudIERcxoEw2UhmfTsXdaAUhLdHLr6lzJphAEcunYjTvY+dTPAahdtIxjN+4YkUswlE0FuQVUVVehKArrV66neHHxpLLJhYs4ZeYOVmNNWloaOTk5kz6PDJREzHGNM1AavhDW7bLjctro96r4VTWk9qs9Xj9eVcUZwlqo6SqwGHb50YMA+B3O4LHhLVhHWwh7w7IbSExIDL39qgINsxu4knUFp8+JoilkK9lss2+b5N9CREpcXFxwU0MhZqqJBkrDsykjabCdsaavSwolm9r7ZvZA6eiwfZICahcX4UlOGZFLMJRNjc2NgD6ZEzg2mWxaaVvJfNv8SfwtRKQ4nU7TysFloCRizkSBFKAoCpnJLi639tLSNcDstISJ3wR09vvInMElDlNBtav02/sB8Ck+4u3xU3xHQggRulDWKAVkJuv50uHx4vOrOEJ4b2e/T7avmALDs0mxKcTbJJtmGpkGFDEn1IESQEaSHkgtXf0hv2emz9wJIYQwxqYoOEIcxCTFO4hz2NCA1u7QGgb4NI0er38SdyiECIcMlETMMTJQykzWSxxCDSPQF80KIYQQRoTSlRX0aofAJJ6xbJJJPCEiTQZKIuaEsl9FQDCMDDxRkjASQghhVCj7/AUEJvGMVDvIJJ4QkScDJRFzjNWCD4aRgVm7zn6vbDQnhBDCkHDKwo1M4klZuBCRJwMlEXOMld4NhVGogx+/Bt1SCy6EEMIAl4Fqh6EnSlIWLkQ0k4GSiDlGBkrpg21Y+7wqnv7QBz8dMnMnhBDCAENPlAKTeN2hP1Hq9fkZGGNrDCGENWSgJGKOkdK7OIeNlAQnYCyQ2mWdkhBCCAPCaTRk5IkSyBpaISJNBkoi5hgJIxiauZMSByGEEFYJZ41S74CfXgN509En2SREJMlAScQcowOl8LoLyaydEEKI0BnJJpfTTlK8AzDWbEiqHYSILBkoiZjjtBnbmTyc/Sr6fCr9PmnoIIQQIjRGysJheLWDTOIJEa1koCRijqIoYdaChx5GIOV3QgghQme42mGw2VCrgbLwrgEfqmxfIUTEyEBJxCQjbViD3YUMLpqVEgchhBChMl4WPvhEyUCjIVWDLpnEEyJiZKAkYpKhJ0qDs3ZtPQOoaugzcfJESQghRKiMNxoy/kQJpPxOiEiSgZKISUYCKdXtxG5T8KsaHZ7QA0b2UhJCCBEqh03ByBLawCSe0bLwdpnEEyJiZKAkYpKRgZLNppCeaLzEoWvAh9/AEyghhBAzm5GGDkObzg4YWnckT5SEiBwZKImYFGcLr7uQkRIHDX2wJIQQQoTCyCReWmIcNgX8qkankWqHfh+aNHQQIiJkoCRiUqhhtKf8MnsrGoKd7y63ethTfplOj5e9FQ3sKb887vtnYkOHta/vZc2bLwc/tvu8rH19L+6uTta8+TJrX98LQOnxUspOlI1479un36ant4eyE2WUHi+N6H0LIcRUM5JN+443kjZY7fDCscvBwdJE2TTgV+nzqZO/2RhybS4BzDtXdV0uwfXZpKoqpcdLJZtEWBxTfQNChCPU8gaborCnvIEleckAXO3s51RdJ129Pg6eaWZXSe6475+JJQ6azcb61/dyYfFyAOw+H+vefJmEnm5WHDtE2c07AbAptusC58TZE2iqRmV1JRtWbYj4vQshxFQKdaAUyKbAPn9l1a3cuDybQ2eb2VPeEFI2JTjtk77fWBHIpeHmVZ9mzZsvj8glGMqmLk+X/l5No+xEGb29vZJNwjAZKImYFGoY7Vyth82e8gYA2nv00rvAICnw+bF09M280rtjN+4AuC6UAmEU/PzK9YA+e2e3DQV2IIgCnxdCiJki3GwCOHi2OeRsau/3kZMU/n3GmuG51JaZHTx+bS7ByGwaTrJJhENK70RMMlIHvnFJFivnpQLQ0NYHwIqCVIryU6lr9oxbGz7dnyjFaaO3aDq9+l1cLigEYM6F8wDULCni4qJlZDXU4e7qBKBoURHFi4rxq/7ge+fMnsO8OfNoam2ip7fH8D0NaAP4Nf/ELxRCiCgTajZ1erwU5adSkOUOHjt4pplNS7Moyk+dcM1S5wzMptOr38XJNRtJb2kKHhstl0DPpgX5CwDw9HkAmJc3b1LZ1K8Z604opgd5oiSmvQNnrnKitmPEsZOXOjh5ST+2c3UOu0ryRn2vL1a73oW40HdNTwpJfgeHktvpsw3VvC8/doi8SxcACMTV/LNVzD9bBcCRG3dw9OadVJ6rpLK6csQ566/U8+QLTwL6zJ7RModmmnnS/yTrbOtYqCzEpsh8jhBiejlw5ip7KxqvO37wjP5UabxcAvBO82x6b/ssjiZ2UunuQh0MoeXHDrHi2KERrxstlwAqz1XyTt07I15be7mW2su1QHjZ9Lb2Ns3+Ztbb1jNbmW3ovSJ2yUBJxCS/gY4/m5fOorG9j+MX2oPHVhSkcutgaUOK2znme2M0ioDQFvoqKCztS6SwP4HDSe1UJfSAAqfWbCTn4jvk176Dhj5YqllSFCxv8CSlAFC8uDhY960oyohOTE6H/u/q9/ux243V0nfSySvqK5RTzjrbOuYr81EUAxuUCCHEFAh1U/PNS2dRXJDG7w5e5GKzJ3h809IsNi3JGjeXYlto2RSn2djUncbS3kTeSmmjIa6fU2s2BtfKBoyWS3BNNqGgDUvz5MRkUhJT0DTNcK7Ua/XU++uZq8xlvW09WUqWofeL2CNTtSImGdlz4tDZ5uAgKSlenxs4eamDqroO8rPc0zOQNGMdkVyajRu7MnhfazazvE6WVRwmv1afjWvKzQf0mbu51adpzs3Hk6wHUlV1VbDu+55d9wTPlxCfgNfnpexEGb989pdU11aH1c62jTZeUl/iaf/T1Kq10hJXCBHVQp3ES3E7qarruG6QdPBMM1V1HRPmUsx+LzR43xl+J3e0zWJbRwbFx8pYcewQzbOHnrSNlktwTTa9dyibHHYHXT1d7Du0j//d979cbb0a1l/jonaRp/1Ps9e/l1atNaxziNggAyURk0IdKOltVhvYtCQTGCoj27Q0iz3lDeytaBj7zTEtvBDN9rm46+X9rH99L+8sXwWAbXDQdXLNRtYPa9EaaLN67eLY4kXF9Pb1Mj9/Pu4EN53dnex5aw9P732ahqvh/Xu30MIedQ//4/8f6tS62P0hQQgxrRnNpsW5Qx0ZNi3JYldJ7vTOJoOTeKBXPiw58CIlb75I7ebbuTo4eQfX5xKMn00+v4/cWbnYbDbqrtTx2xd+y8sHX6bb0x3WX6dGq+Ep/1Ps8++jQ+uY+A0i5kjpnYhJ/hDLG1RNY1dJLkvykjl4tgW7TWHn6hw2L51FqtsZUqiF83h+yoURRgE2TYO19zAncw6cOo6mKBy5cQen1mzEk5yCournVjV1RBAlJiSyfuV6ihcXk+hORNVUbtl8CxWnKjhWdYzG5kae3vs0i+YuYtPqTaQmpxq+tyaaeE59jlxyWWdfR54ydg2/EEJEWqhLhwLZpAHnGrrJz0wgxe0MdrszUjURW8LMJk2Ftfcwb8X76T3wUwAuz53PsRt3jMglCD2bDlYc5FztOU6/c5rq2mpWL1/NmqI1xDnjDN9etVbNef95lihLWGtbS7KSHN7fU0QdRZvmU7OdnZ2kpqbS0dFBSkrKxG8QMeFCu4djV0KfvXnnSjf/9vxZspJd/N+7Vxi61vuW5MTeQOlqKQy0TO4cF8vhxW8zMGs+//sXn6bVGX6XpW5PN4ePH6bqvL7o1mazsWrpKtatWEe8Kz7s8+Yr+ayzrZOFtVFKvv+OTf5tpqfSy23Ud/WF/PoXjl3mpbcb2bIsiw9smhvy+2a547ixIDOcW5w6mgaXX5j8eQ7+N1TuoXndbp7d+R76beFPDDY2N7L/2P5gtYM73s27Vr2LooVF2GzhFV3ZsLFMWcYa2xoSlcSw701Yx8j3Xym9EzHJSDMHGJqdC+f7XmzOJJiwa/vg3khxfj8faJ3Npq40nGp4A8YkdxLv2fge/nT3n1KQU4CqqlScquCJZ57g7dNv4/eH1w68Tqvjf/z/wx7/Hpq15rDOIYQQZjH6JCgwVx1zk3FhMSGXAGx6MVTWgI0PNeewzBP+YCQnK4f33/J+3nvje0lNTsXT5+G1w6/xm+d/Q219eOtiVVSqtCp+7f81B/wH6NV6w74/MfWieqDk8/n40pe+xPz580lISGDBggU88sgjqKpJX2wiZhkOo8H/ZWZGGDGp0rugwTBC9WNDYZUnmQ+15LKwzz3++8aRlZ7Fne+5kzu23UFGagb9A/28efRNfvXsr6i+GF7DB4BarZan/U/zkv8l2rS2sO9PiFBINomxhFoWHhB4uc1gNsVkLZAZuQTBSTxUHwmanZu7MrirNZssb3iNmRRFYeHchdx7273cuPZGXHEuWjta+eNrf+SZV56huS28STg/fk5oJ/iV/1eU+kvp00J/0iiiR1SvUfrWt77Fj3/8Y/77v/+bFStWcOTIEf78z/+c1NRUPvOZz0z17Ykp5DcYEsEnSmGMk7RAf+yYYkIg2YcGSgGJqp0dHZks601kf3Ib7Q6f4dMqisK8vHkU5BRw6p1TlL5dSkd3B3ve3EPurFy2rNlCTlZOWLf8jvYO7/jfYbGymLW2taQqxtdBCTERySYxFqPbG00mm2KOaQOl67NpttfF+1pnU5XQTVlSBwM24yNJu93ODctuYOn8pRw5eYTjZ45zqfESv3n+NyxfsJwNN2wgyZ008Ymu4cNHhVZBlb+KlbaVrFRW4lJchs8jpkZUD5QOHjzIn/zJn3DbbbcBUFhYyK9//WuOHDkyxXcmpprRJ0pDYTQT0ghzphuHzdpdK38gnrtbcjju7uJYUic+xfj1bDYbKxatYPG8xZRXlVN+qpyGqw387sXfsXjeYjat3kRKUnhrN85p56j2V7NUWcoa2xpZWCtMJdkkxmK0LDzwcqPVDrH4QMm0uw5kk39kNtlQKO5NZkG/m0NJ7ZxL8Izy5onFu+J595p3s3LxSg5WHKT6YjWn3jnFudpzlBSVULK8JKyGDwMMcFQ9SiWV3GC7gWKlGKcyDbcnmWaiuvTu3e9+N/v27ePs2bMAvP3227z11lvs3r17zPf09/fT2dk54peYfoyWNwTCyBbGtF1MBpIppXdjD5QA7CiUeFL4YHMOhX0JYV8mzhnHhhs28JE7P8KyBcsAOFd7jl/88RfsP7af/oH+sM6roXFaO81v/L/hLf9b9Gg9Yd+jEMNJNomxGJ7EG8wyu+GfxmIwmUwvvRt9batbtfOezkzuaJ1Fui/85wGpyansunEXH9j5AXKycvD5fZSdKOMXf/wFVdVVYZfa9tPPYfUwv/b/muPqcXya8coMETlR/UTp//yf/0NHRwfLli3Dbrfj9/v5xje+wZ/92Z+N+Z5HH32Ur33taxG8SzEVwg2j8B4oxWLtnQmBpIwfRgHJqoNbO7Ko7e1lf3IbXY7wGjMkuZPYsWkHNyy9gf3l+6lrrKP8VDmn3jkVbO1qDwSkASoqJ7WTnPafZoWygtW21SQo4Q/shJBsEmMxXu2g/274iVIMjpOsLL0bTZ43ng+05HDC3cXRxE58YZTjAeTOyuUDOz/A+UvnOVB+gM7uTl4pfYW3z7zNljVbmJsberfC4Xrp5aB6kLd5mzW2NSxTlmFXjGecsFZUP1H67W9/yy9+8Qt+9atfcezYMf77v/+b73znO/z3f//3mO95+OGH6ejoCP66dOlSBO9YREr4a5RibcATJjNSNLBGyR/abNe8gQQ+2JLDmu4UwswjAGZlzOJP3vMn3L71dtJT0unr7+PNI3rDh3cuvRN2wwc/fo5rx/mV/1cc9h+WhbUibJJNYixGs0mbUdlkVuldYKA0cTbZUVjtSeFDLTnMn0Tlg6IoLJq7iA/f/mG2rNmCK85FS3sLz7zyDM+88gwt7eFvx+HBw1vqW/zG/xtOq6dRzRpQClNE9ROlv/u7v+Pv//7v+dM//VMAVq5cSW1tLY8++ij333//qO9xuVy4XLJIbroLd9YunDCasTN3Ic7aDefAxvqeVJb0udmf3M4lV3iDEUVRKJxTyNzcuVRVV1F6vJSOrg6ef+N58rLz2LJmC7Mzw9s7yYePcq2ck/6TrLKtYqWykjjFeL25mLkkm8RYVMNd78Jr5hCLsRSp0rvRJKkOdnZkcam3l7eS2+kMoxER6A0fSpaXsHzBcsoqyzhx9gQXGy5y6flLwYYPiQnhtSvvppvX1depoIK1trUsVBZiU6L6ecaMENX/BTwez3UbftntdmnBKiaxV4UVdxONzFyjZLyULtXv5L3tWdzSnkmiP/xSApvNRvGSYu77k/tYu2Itdrudy02XeWrPU+zdv5fO7vDXeQwwwBH1CL/y/4oKtQKvFv6GumJmkWwSYzG+x5/+uzIj2t6Z3x7cqIKBBO5pyWFddwp2Lfx/83hXPDeuvZF7b7+XhQUL0TSNqvNV/OKZX1B2ogyvL/w86aCDV9RX+J3/d7yjhl9FIcwR1U+U7rjjDr7xjW8wd+5cVqxYQXl5Od/97nf5i7/4i6m+NTHFwg2jsJ4oGX5HFDCl693gtwfNr5/P4L+dgsKCfjcFA/EcTezkhLuLMPerJc4Zx6bVmyheXMyhtw9xpuYMZy+c5fzF89yw7AbWrliLKy682fp++ilVSznOcUpsJSxXluNQovpbo5hikk1iLOFO4s2IcZJZP/DbQy+9G40DhbU9qSzu07e5uBhm5QNAWnIa773pvTQ0NfDWsbe40nKF0uOlVJ6rZOMNG1k6f+l1kyqhaqONl9SXyCKLdbZ1zFXmzpy9IKNIVP808Nhjj/HlL3+ZT37ykzQ1NZGXl8cnPvEJ/vEf/3Gqb01MMdmrYhyahqlPlEB/qmQP79uFU7OxsTuNpX3JvJmp0UBD2LeUnJjMLZtv4YZlN7D/2H7qr9RzrOoYVeer2LBqA0WLisJq+AD6wtoD6oHgwtqlylJZWCtGJdkkRqNpmuE1SoEOrrLhrAEhNhqaSIrfwa72LGqTXOxPvEI33WGfKzc7l7tvvZvq2moOVBygq6eLfYf26Q0fSrZQkFsQ9rmbaWaPuodssllvW88cZY4MmCIoqgdKycnJ/Mu//Av/8i//MtW3IqJMuO3Bw/nmEnt5ZPJeFaDP3IU5UApI99m5w3Yr1bzDQfUgvfSGfa7sjGzu2n4XF+ovsL98P+2d7bxe9jrHzxxnc8lmCucUhh0kPfTwpvpmsE58sbJY6sTFCJJNYjThfOcNP5tiL5nMK70zvn52LAoKhQNJzEm5mXK1nLe1t1HDvE9FUVhcuJj5BfM5fuY4RyqP0NzWzP++8r/My5vH5pLNZKZlhn2vTTTxnPocueSy3r6eXCU37HOJ0EX1QEmIsYS94Ww4P+/G2tSd2eUNYEogASian8X2xcxV5nJEPcJJ7SRamIGvKArz8+czN2+o4UNbZxvPvf4cc2bPYcuaLWRnZId9r1108Zr6GuWUs862joXKQpnFE0KMyWguDX+PNHMwwG7OE6UgzYdTcfIu+7tYrC1mv7qfeq0+7NM57A7WFK0JNnyoPFtJ7eVaLjZcpGhhERtWbcCd4A77/A008Iz/GfKVfNbb1pOthJ9zYmIyTSpikuE1SmGWN0AsBpLJ5Q0Qdi34dQYbJrgUF1vsW3i//f1kM7lv8nabnZVLVnLfnfexpmgNdpud+iv1PPnCk7x04CW6eromdf4OOtin7uN3/t9Ro9bIwlohxKj8YXzrDa6fnRl14eacxmZs64oJqUONF9KVdG6z3cZ223bchD+YAUiIT+CmdTfxZ7f/GQsKFqBpGierT/LEM09wpPLIpBo+ANRpdfzB/wf2+PfQooXfnlyMT54oiZhkfI2S/vuM2KvCtDpwRR8saX7zZu7UkcGQpWRxl/0uzmhnKFVL6SP8RbWuOBebSzYHGz6cvXCWMzVnqL5Yzeplq1m7Yi1xzvDbgLfSyl51L1lksd62ngKlQJ4wCSGCjE7gwQzbR8n09uDmD5RgcM8kZRFzlbkcVY9yQjsRduUDQHpKOrtv2k39lXr2H9tPU2sTh94+NKLhw2SypFarpdZfywJlAets60hX0sM+l7iePFESMSns0rswvhfF3vMDE+94Ei3CR6VeP4OmKArLbMv4kP1DLFeWT/oSKUkp7Nyyk3t23UPerDz8fj9HTx7liWeeoPJs5aRbODfTzAvqC/yv/3+pV8MvzxBCTC+TKb0z+nNyTD7YnsJ9lMal+Ub9B41T4thk38QH7B8gh5xJX2bO7Dncs+sebtl8C8nuZLo93bx88GWefOFJ6hrrJn3+d7R3eMr/FK/4X6FD65j0+YROBkoiJhmduQvuozQTyhvM3NXbbnaJw9jniVfiucl+E3fZ7yKLrElfanbmbN53y/vYfdNuUpNT6e3r5bWy1/j1c7/mQv2FSZfQXeEKz6rP8kf/H2nUGid9v0KI2BbWQGnw2/WMeKJkdumdWU+UQB8sjSFTyeRO+51stW0lnvhJXUZRFJbOX8qH7/wwm1ZvIs4Zx9W2q/zPvv/h2deepa2jbVLn19A4p53jt/7f8rr/dbq0yZWeCym9EzEq1EDaU34Zm6LgtOtzAo1tvXR6vKS4neytaEDVNHaV5I1/klibuZvsQOno70CxwZr3D83cVT6vf3z6Vf38a+8O894mrsmerczmffb3UaVVUaaWMcBAeNdCD6UFBQuYN2celecqKTtRRltnG8++9iz5OfmkJqWS5E5i/cr1APT09lB5rpLixcVUVVehaiobVm0Y9xqXtcv8r/9/KVAKWG9bzyxlVtj3K4SIXaG2Bg/k0s7VucEJm8qL7Sybk8Khs80h5VKsxRJgXjbNLdE/9nv1Y8u3Tz6bVC/YnGN+WlEUlipLKVQKOawepkqrCu86gxx2B2tXrKVoYRGHTxym8lwlF+ovUHu5llnps8jPyWdzyWYgvFzS0Ditneas/yzLleWU2EpIVBIndc8zlQyUREwKddGsTVHYU97AkrxkABra+uj0eDl0tpk95Q3sKpm4vWbsBdIkw0ixwdGn9D8HBkqnXh76fe09k7i10Bav2hQbxUoxC5QFHFIPcU47F/410Rs+3LD0BpbNX8aRyiO8feZt6hrrqEMvdxjwDrBlzRZ6ensoO1FGb28vldWVE4bRcJe0S1zyX6JQKWSdbR2ZSvhtYIUQsSfUCbxALunv0Y9VXuwgOaGBg2eaQ8qlWEymSQ+UAtnUO1hW5vfBsaf1jyOUTS7FxY32G1mmLeNN/5tc5Wr410Rv+HDz+ptZtWQVByoOUFNXQ1NrE02tTVxtvcptN982qVxSUTmpneS0/zQrlBWstq0mQUmY1D3PNIo2zVs4dXZ2kpqaSkdHBykpKVN9O8IkfzjTEHJM7K1oCIYSwKalWcEw2rl64kDatSAbtzOGNh4d6ICr+yd3jmO/1wMpzg0DnqHja+/RnyyFK2kBpC4z/LbL2mXe8r9FG5MrSwjo7O7kYMVBztUODcDmZM9h4w0befqlpwHYsGpD8ElTOBYqC1lrWzujF9bK99+xyb/N9NPU089bda0hvTaQS+lJcbR1Dz01DzWXkuLs7JwfY22hu6qh8+zkzhHIJgBHPPgGGwBNNpuy3gUuYyXfqqZyWjvNYfUw/fSHf+1h6hrr2F++n6ut+gAszhnHmqI1HHr7EDD5XHLgYKWykhtsN+BSXKbccywy8v1X1iiJmKNpofef6fR4KcpPJT9raAbl4JlmNi3Noig/lU7PxLNIk+l2MzVMWKO0bBss3zFykDRvrV7y0FwDnjAHLCHO2l0rT8njA/YPsNG2MbzrXiMlKYVb330rd996d3Cvpfqm+uAgaf6c+cybM4+m1iZ6envCusZ57TxP+Z/iVf+r9Grhb64rhIgNRtYobVySxaalWSMGSSsKUinKT6Wu2TNxNsVaLIE5HSiWbYOFW/Q/BwZJU5RNNsVGka2ID9k/xEJlYXjXvUZ+Tj4f3PVBblx7Iw6HgwHvQHCQZEYu+fBRrpXzK/+vOKYeQzVzTfM0JaV3Iub4DPQGP3DmKnsrrl9of/BMMwfPNLNzdc6EteAKMbbI1owAPbVvqNwuoPao/gtgzQfCqwXXwu9SZFfs3KDcwIA2wDHtWNjnGS4nK4d5eXrwDFdTX0NNfQ0A61euN1TqMJyGxlntLC3+Fu6w3zGjZ/CEmO6MNBk6cOYqB880jzh28lIHJy/pZWUTZlOMxZJpTu2D89dUTJiRTZPooJegJPAe23vo8ffQyOQb+yiKQt9AHz7fyAYTZuUSwAADlKlldCvd3Gi7Uba6GIcMlETM8RkIo81LZ1FckMav37pAQ9vQHj2blmaxaUkWKe6xF28GzMhvH8u3D9V9B8xbq4cQgDstvPOO01koVGtta7nsv2xKIAEULymmt0+v/Q7ISs/iPRvfA0BiwuQXwLbQwh7/Hnbbd+NUJv5/TggRe4xM4m1eOouuXt+IwdKKglRuHSy7myibYm4CzyzLt0PnVah+Y+hYFGSTTbHxHvt7eNr/tClleMWLi4NrkgIURWHXu3eRnJRsSi4BnNJOEa/G8y77u0w533QkpXci5hgJoxS3k6q6jusGSQfPNFNV1xHSQGlG5tHpV/VBUmLG0LHao3CxHLLmgzvMdTeTeKIUYFNsbLdvx4U5T2eqqquCC2SXL9D3cWpua6bybCXZGdmmBVIjjbysvozfhH8DIUT0MZJNh87qVQ2JrqH1rycvdVBV10F+ljuEgdIMdfrVkYMkiJpsSlaSudl286TPAyNz6e6d+hMyTdN4pfQVUhJTTMslgHKtnOPqcdPON93IQEnEHCNhFFgwm585tEZp05IsdpXksqe8gb0VDeO8WzfjAimwWHbtPZA8bLHw8h368WO/D//cJu17kaQksdW2ddLnKTtRRunx0uAC2ZVLVgY/V3W+ireOvjXpawx3UbvIa+prk97DSQgRfULNpkAu7SrJxTWsUdCmpVmh59KMCyaGsqnkmqYNUZRN823zKVaKJ3WOa3PJNri9icPhoH+gnydfeBK/WZvtDjqoHuS0etrUc04XMlASMcevhr74UN+PIpecNH2gtDg3iRS3k52rc9lVkhvS4tsZV+KgqUMdhAIb+xWu1z9ee8/kWrya+DSl0FY46UAK7EcR6CKU6E5k7Yq1ZKTqT9LO1JxhwBv+Pk6jqdaqOaAekMGSENNMqAOlQC7tXJ2Lb3DzpU1LMrnVQC7NSMFs+sDQsVW3R102bbBtIJPwt4e4LpcSElm/cj233XQbNpuNzp5O3jzyplm3G/SG+gY1ao3p5411skZJxBwjT5QCi2F//pr+xb+iIC1Y0hBKC1aYgTN3wxfC2ge/Rcxbq5c0TKb9KpiyRmm4jbaNNPobaaZ54heP4trFsIkJiWxavYnixcU8tecpPH0eXj7wMu+96b2mLnat1CpxaS7WKetMO6cQYmr5QvxBfXiTBt/gxN9NK7KDk3ihmJGL74dnk2LTB0bF7426bHIoDnbYd/C0/2l8GD/vaLkUOPbeG9/Lc68/R+W5SjLTMkdUQUyWhsbL6svsZjdzbHNMO2+skydKIuYYGSgF3zO4Q63DbjxcZmAcDQk8UfKbFCImlTcE2BU7O+w7cGJug4TkxGTee9N7sdlsvFP3TrA9q5mOqkepVCsnfqEQIiaEl036exx2Yz+OzehcgqFsMqsEzeRJvDQljRttN5p6ToD5+fPZtHoTAG8ceYNLDZdMPb+Kyovqi1zVJreR7nQiAyURc4x0vQu+J8wwghn4RGm4wBMlswY4mt+cvTSGSVVSLQmk3Fm5bN+4HYCjJ49ypuaM6dfYr+7nnHpu4hcKIaKeP4KTeDM5lgCwD06OmTaJZ36TnSW2JSxRlph+3jVFa1g6fymaprHnrT20dZqzEXuAFy/P+5+nTTP3vLFKBkoi5kT6idKMjiSznyihYcqGuNdYbFvMUmWp6eddOn8pa4rWAPDKoVdobDanJflwr6qvUqvWmn5eIURkGc0mVdUIvMVhM/hEaQbHEgD2wSYYpk3imftEKeDdtneTRpqp51QUhW0btpGTlUP/QD/PvfYcff19E7/RgD76eM7/HF1al6nnjUUyUBIxJ6yB0uB7HDYpvTMkWN5gfNfyMVkwcwewxbbF9EAC2LR6E/Pz5+NX/Tz/+vN09ZgbHBoaL6kv0aBN3OlKCBG9jGbT8Ncbf6I0o5Np2CSeSdlk0bYNTsXJDvsO7NgnfrEBDruD3TftJtmdTHtXOy++9SKqgUZXoeihh+f9z9Or9Zp63lgjAyURc3xhfDOQ0rsw2c1+ooRlM3dWBZKiKNyy+RYy0zLx9Hl4/vXn8fpMHDgCfvzs8e+hWQuvKYUQYuoZHSh5/UNZFk42zWg2k8vCTV4/O1ymkskm2ybTz+tOcHPb1ttw2B1carzEW8fM3c4CoJ12nvc/z4BmbvfXWCJfmSLmRLIOHOSJEmDuUyCLBkqgB9Jm22bTzxvnjOO2m28jwZXA1barvHzgZdPbew8wwPP+5+nQOkw9rxAiMkLtehfgH5zAUxSwG6x2mNETeGDN+lkLFSlFFCqFpp83Kz2LW7bcAsDxM8epPGd+g6BmmnlRfRGfhdkdzWSgJGJOJDsLwQxtwxpgdhiBZaV3AcuV5SxQFph+3pSkFHbftBubzcb5S+c5fPyw6dfopZdn/c/So/WYfm4hhLUMl94FJvCkJNw4m8nNHCweBCiKwlbbVpJIMv3cCwsWsvGGjQC8UfYGdY11pl/jsnaZl9WXUSezV1WMkoGSiDlhdb1Tww+kGc30Zg5EJJBust1EMsmmnzs3O5dtG7YBUFZZxtkLZ02/RjfdPOd/jj7N3MW5QghrGa128MoEXvhioCPrtVyKi+327ZasL1u7Yi1LCpegaiovvPkC7V3tpl+jVqvldfX1GbdZugyURMyRvSoiyG7yglmwvMQBhgLJZsG3uOULllOyvASAfYf2caX5iunXaKONF/wv4NXMXQslhLCGpmlhNHOYTDfWGc6SSTzrsylHyWG9bb3p51UUhfdsfA+zM2cHO+H1D/Sbfp2z2lkOqgdn1GBJBkoi5kSyPfhMn7QzfcEsWP5EKWC2MtuSQAK9E17hnEL8fj/PvfEc3Z5u06/RRBMvqi/ij0B4CyEmR9X0zQ+MmFRJuOF3TDM2k9uDQ0QGSgCrldXkK/mmn9dhd7D75t0kuZNo62yzpBMewAntBOVauennjVYyUBIxJ6yud4H24NKC1RgrBkoWr1Ea7gblBgqUAtPPa7PZ2LllJxmpGXh6PTz3+nOmd8IDqNfqeUV9ZUbWhQsRS8KZwAs0cwhrjdIMj6ZY6sh6LUVR2GbbRgIJpp87MSGR3TfvxmF3cLHhIvvL95t+DYAytYyT6klLzh1tZKAkYo7ROnBN04Zm7oxu6mfo1dOQ2bufQ8TCCIYCyY3b9HPHOeO4fevtxLviudp6lX0H91lSjvCO9g5vqm/OqFIHIWKN0Y53MNQePLxurDM8nQLZZOokXuSyya24eY/tPZacOzsjmx2bdwDw9um3OVltzYDmLfUtqtVqS84dTWSgJGKO0Zm74QMrp5TeGRPc/dzM9uCRLSVLUBIsC6ThnfCqL1ZTdqLMkuuc1k5zWDW/y54QwhyT2ghdSu+Ms6QsPLLZlG/Lp0QpseTci+YuYsOqDQC8fvh16q/UW3KdV9VXuahetOTc0UIGSiLmGO16F3iaBGCXTf2MsaT0LvJ7McyxzWGNssaSc+dl57H1XVsBOHziMNW11sywVWgVVKgVlpxbCDE5Ed/fb6aPlGKwI+to1tnWMZvZ1py7eB2L5y0OdsLr6DJ/jz4VlZfUl2jUGk0/d7SQnxpFTJlMZyEIp5nDDE8jmxVd76Zm07q1trXkkGPJuYsWFrF62WoAXj74Mk0tTZZcp1Qt5bR62pJzCyHCN6lurAZLwgXWrFGK4PrZAJtiY7t9Oy5cpp9bURS2b9xOdkY2ff19PPf6cwx4B0y/jg8fL/hfoEVrMf3c0UC+OkVM8YexTCMQRnabgs3gwGeGD5MsWjA7NV3crAwkgM0lm5mXNw+f38dzrz9HT681m8a+ob7BO+o7lpxbCBGeyXRjNVoSDpJNsdyR9VrJSjI322625NwOh94JLzEhkdaOVss64Q0wwPP+5+nQzH9qNdVkoCRiSlgd7ybTWcjwO6YZW2wvmL1WkpLEVttWS84d6ISXnpJOT28Pz73+HD6f+X9XDY196j7qVPN3XxdChGcy3VjDKQmf8dUOZm84C1M2UAKYb5vPCmWFJedOcicFO+HVXq7lQMUBS67jwcPz/ufp0ayZJJwqMlASMcVIHfie8svsrWgIBpjNph/r9HjZW9HAnvLLE59kpmbR0d/Bsd8PhZGvTz/madOPH/1d+Oee4n2BCm2FFCvFlpzbFefi9q23Y7fZaWppYt8hvRNeT28PpcdL6entoexEGaXHSyd1HRWVF9UXadKsKfETQhhjZO1sMJsGJ/GudvTR6dHLm0POppkqkE2BJ0p93dMmmzbaNpJJpiXnnp05m+2btgNQcaqCqvNVAKZnUyedPO9/nn7N/M1up4oMlERMMVLeYFMU9pQ38FbVVf1jm429FY28WNHAnvKGkMrwZmwLVsUGR5+C84MzT94BOPb0YBA9pX8+XFM4axew0baRLLIsOXdqciqLCxcDcK72HEcqjwRDqOy4HkS2yfz7DfLh43n/87RpbZM+lxBicsLJplN1eplSY3vfsAm8ELNphkZTMJuuntc/HugxL5umsNoBwKE42GHfgQOHJedfPG8xc7LnAPBq6atcbrpsSTa10soL/hfwaubvLTgVZKAkYoqRWbudq3PZVZLLgTPNADgG/28/eKaZXSW57FydO+E5ZmwYrXk/rL0Hzr6ufxyYaTv1sn58zfvDP/cUhxGAXbGzw74DJ05Lzr9j0w7m588HoPR4KZcaLwFQWV3JhlUbWL9yvSnX6aef5/zP0aV1mXI+IUR4jAyUAtl09vLQ1+3Bs83sKW8IPZvCustpIJBNjYNNbQLrZ83Ipil+ogSQpqRxo+1Gy85/1467yEjNQNM0nnnlGXo8epmc2dl0hSvsVffij4J/08mSgZKIKb1eY19071qUSXaqvni/w6N/Q11RkEpRfip1zZ5gucNYXDHZTtykjUmXbYO5a/U/97Tqv89bC3NLoLlGL3UIi/kLScORqqSy0bbRsvNvfddWMlP1MoqD5QcBmD9nPvPmzKOptcm0Zg899PCc/zl8UfCkToiZqtcXejZ1erwUZifidtmDxw6eaWbT0iyK8lMnzCWQbCKzUP/zhcH95czIpjA2DbbCEtsS5ivzLTm3oijsvnk38a74YOMhsCab6rQ63lLfMuVcU8ma53tCWKDZ08+xK6F3VPH5Vf79pWqaOkbWyp681MHJS/p5dq7OYVdJ3qjvT3U52DQnPfwbnioDJpVindoHF4+OPFZ7VP8FsOYDsPZu4+eNi55/02SSLTt35blKWjpGtkutqa+hpr4GgPUr1wc3BJysDjrop9+ykg0hxNjOtnRT29Eb8utfOdHIG4Ml4cMdPNPMwTPN4+YSwLzUBJZnWfe9yzJmZlPLhZHHJJtCdqbmDH39fSOOWZVNV7QrppxnKkmqipjQ2NNHaX1byO3B+71+Hn/lHa60D30zUBTQNP2J0q2DpQ0p7tFLr7LdcWzIS8cZi7N2fc3mnGf5dqh6Cfo60Qs9NH3Wbs0H9M+708I7b7w1m+uFw491ZQHFi4vp6Org7IWzwWPz58xn/Sq9tCExIdHU6/mQJ0pCRJKmaVQ1d3OmtTvk91xp76OiRh8wxDkUBnxDobZpaRablmSNmUsASzOTKMpMir2ud6oP+k0aKC3YqK9LAn1NkqaalE2zTLk9M1idTXWNdTRcbQgesyqbpkMuxeBPgWKmqe/q5WBd6IOknn4fP36xmjOXu7APtgTfVZLL525fBuhPlKrqOsjPco8aSAXJ8WzOz4jNQZLqg4FWc851Ys/gIAnY9UX999qjcLEcsuaDO5zZN2XGhFFVdVVwkGQb3FCypr6G2vpasjOyZaAkRAzTNI3jVzsNDZIuNffwb8+fobPXR6LLzoBPY9NSvanMpqVZHDzTTFVdx5gDpdXZKazISo69QRIM5pJJpW1HBwdJ8Slw1z/pf55sNsWlgd2aPfbCYXU2BQZJubP0SWOrsmk65FIM/iQoZpKLHR4OX24PubK5vWeAHzx/ltqrPTjtCn5Vu25x7KalWewpb2BvRcN171+cnsi63DTDG9NGjf4WTKkDP/Z7OP6M/ufMeZCQqv95+Q69s9Cx34d33rj0ob2ZooBVYRRos7p62WpA/6EKoHhRMaXHSyk7UWb6Nb1Mjw5DQkQ7TdM4dqWD822ekN9z7nIXP3zhHD39flLcTnr6/ewqyWXTksGB0pIsdpXkjppNNgU25KWzIN3cyZWI6ru+1DAsx34PNYf0Py8ZtknrZLMpPnvy92Yiq7Mp0GzI6myaDrkkpXciar3T3kPFlc6QX3+1o48f762mrXuAVLeTFXNTSUlwBgdJKW4nO1fnsHnpLFLdTtRrOuitnJXM4owkU/8OEddvUtmdpkJ6AbRdgoISvZRhzQf0cjx3eviLXmdIGKmayoZVG1i+cDkVpysAve67eHExie5EVAsWDfs03wxuhSVEZKiaxpGGduq6+iZ+8aDjF9p44vUL+FWNxbnJFGS5iXPY2Lk6l06Pl52rcwbzKTd4jQCnTWHTnAyy3HGm/10iyqyBkuoHRxz4BmDuaskmgwLZlOhOpKauBrvdbmk2+fChaVpsPgUdJAMlEZXOtnZTeTX0lsd1LR5+srea7j4fs1JcfOLWRWQkjXyMnuJ2BhfIDn/CpADrctMoSEkw5d6nlFlhVPJ+OLlH/3PBaj2AAotjJ9N+dYaEUWAh7PDuQYFjZrVfvdZ0KHEQIpr5VY3Sy2009oS+meahs808deAimgYr56Vx382FOIaVdQ/PJRiZTQkOG1vyM0hxRc9T+LD4esAf+tO3cc0tgfLfgzMBZi/RN56dbDbZE8ARXc0xrM6mU++cAsBhd1ieTX78Md1oKHbvXExLmqZxqqWb0y2h131XN3bxny+fp8+rkp+ZwIO3LCI5IbRgcdgUNualk50YPbXJYTMzjK5WQ38PuBIhe5E557S7wRldT+ysrAOPNBkoCWEdn6pysL6Nq56BkN/zyolGnj1yGYANSzK5Z9NcbLbQZtZT4hxszs/A7bRP/OJoZ1aDIYBLFfrv+av0QZIZ4rOjbtNEq7NJGSw/0AzsTRkuHz4ZKAlhBk3TOHG1i+q20Hv4V15s5+ev1eDzayzMSeJj2xcSHxdasLjs+mxdWnyMz9YFmPU0CfRFsQD5N4DNpKBOiJ5udwGWh5ESuTCaDrXgQkSjAb/KgbpWWvtC+xrTNI0/HqnntcomAN6zcja3rc0LufwoKyGOjXPSiYvFhkKj6TcxmwIDpYLV5p0zyiodAMs3ag1mk1l7W43Di5d44i2/jlVkoCSigqZplF/p4IKBvSgOn2vhyf21qBoUz03lvpvn43SEFixJcXa25GeQ6JxGXwJmrU8CuDQ4UJIwmhRl2KIhq+u05YmSEObr9/l5q66Vjv7Qvr78qsZTBy5y+Jy+h9qd6+ewtTj0SaK8pHjW56YFO7bGPE0dbDJkAk87XD2v/9msbFLs4Mow51wmili1g/XjpJjPpmn0U6KIVeEsjn2t8grPlNUDsH5RBh/cMi/kYEmPd7J5TgauEAdVMUHzmxdGPa3QUgso+hMlMyiOqNrML8DyMIrgzzqxHkZCRJterz5I6hoI7WvL61N54vUaKi92oCjwoS3zeNfizJCvtyDNzQ3ZKTG98P06A216Ppmh7m3996z54e+VdC1Xlj5YijIRq3aIwEgp1rNJBkpiSvlVjcMNbTR0h7Y4VtM0nj92mX3H9d2etxZnc8e6OSEHS06ii3flpeGwTaNBEpgbRpcGwyh7ISSkmHPO+Fn6xoBRJlJ14GD9EyWvJqV3QpilZ8DHW3Wt9HhD+x7RN+DnZ/vOc76xG4dd4b6b57NyXlrI11uRlcySjMTpNUgCc0vCg2V3JeadMworHSByT5SkLHxiMlASU8anqhyqb6MpxMWxqqrxu4MXOXRWf3Jy29o8tq/KCfl681ITKJmdGrt7JI3HisWy07zsDiI3awfWz9zF+qydENGiq9/Hm3Ut9PlCa5Xc1evlpy9VU9fSi8tp42PbF7IoN7QuagqwJieVeanuSdxxFDOrJFz1Q91x/c+STZMWyQF5rG9dIQMlMSW8fpUD9a209IY20+Dzq/zi9Qscr21HUeDuTXODO5qHYllmEsszk6bfbF2AWbN2fh/Un9D/bNqsnTJjw2gEiyfuZKAkxOS193nZX9dKvz+0QVJrdz///mI1Vzv7SYp38Je3LCI/K7RBj11R2DAnjZzE2F3oPi5/H3hD3wtxXFfOwYAHXEkwa6E553SmgT06O95Ot653sUwGSiLi+n0q++taaA9xcWyf189/7XuHcw1d2G0KH7m5kBsKQ1/vsnp2CgvSYnhH84n4+8AX+p5T42o8Dd5eSEiFrEJzzhmXDrbo7Cxo9TdweaIkROxo7R1gf10rXjW0r9XG9l7+/cVqOjxe0hPj+MSti8hODW3Q47Lb2DQnnYyEGN9IdjymVjoEGgzdAGaVzidE5wQeROD7eSCapJnDhGSgJCKq1+fnrUuhL47t7vPx05equdTsweWw8efbF7AkL7R1MzYF3pWbTl7yNJ2tC7Cq7M6sNUVR+jQJQMXcXcjHZXEgxXoduBBT6aqnnwN1bfhDnGGvvdrDT1+qxtPvZ3ZaPJ/YuYi0xNAGPYlOvetqUtw0/xHMkrbg0399ElifTcEnStLMYULT/KtURJMer4+3LoW+OLate4B/33uOpo5+El12HrxlEXNnhfZkyGlT2Dwng0z3NJ6tC5A9KsImT5SEEA3dfZRebiPEB0mcqe/kv155hwGfytxZbh7csYjE+NB+nEpzOdmcn068I/o6rZlK08xbn9TdAq0X9U1h81eZc057PDhCW0cWaZqmRSybpPRuYjJQEhHRNeDjrUst9Ia4OPZKex//vvcc7T1e0txOPnHrYmanhfZkKMGhbySb4orOci9TaZp5T5Q6m6C9Xn+SNGelOee0u8GZZM65LBCpWTuwPpB8WmyHkRBToa6rl7LL7SFPY1TUtPHLNy7gVzWW5CXz5+9ZgMsZ2qAn2x3HhjnpOKdb19XReDtANekpd2ACL3sxxJs0uImfrQ+8olAkKx0iteFsLJOBkrBcR5+Xtwwsjr3U3MNP9p6np99HdqqLT+xcTHpSaE+GUuIcbMnPICHE4Ip53g4wqy10IIxmLwGXSWu6ovhpElg/uIhoZ6EYn7UTItJqOzwcbewI+fUHTl/l6YOX0IDVhWnce1MhDntog565KQmsyZmmXVdHY0lb8NXmnTOKsykSTYaC2RSJNUoxPoknAyVhKaOLY89d7uI/952n36dSkOXmwVsWkhQf2pOhrIQ4Ns5JJy7E4JoWTA2jwcWyc02sAU8IfUf6qRDRmTurnyjJQEmIkJ1v6+HtptA6smmaxr7jV3j+2GUANi/N4v0bC7CFuMn5koxEVmQlT9+uq6Mxq+zO7x3WiXW1OedU7ODKMOdcFohkN1ZZozQxGSgJy1z19HOwrg1fiD8gHr/QxhOv6yUNi3OT+fPtC4gP8cnQnOR41uWkYQ8xuKYNs9Yn+Qbg8kn9z2YtllUcese7KBbRNUoWD5RivbxBiEg509LNyebQOoWqmsYfy+p5/WQTALfckMOuktyQBz2rslNYlD6Nu66ORvXqm6CbofE0+PrBnQaZheac05WlD5ai1HR7ohTr2SQDJWGJxu4+DhlYHHvobDNPHbiIpsHKeWl85KZCnI7QngwtTHOzKjtlZs3WwWAYtZtzroYqfeYuMRPS8805Z/ws8zrnWWQ6zdzF+qydEFbTNI2TzV2cbe0J6fV+VeO3b9Vy5HwrAH/yrnxuXhFayZZNgXU5aeSnJIR9vzHLrKdJABcr9N/zV5u3piiKy+4gQgMl6XoXMhkoCdPVd/Vy2MDi2FdONPLsEb2kYcOSTO7ZNDfkkoYVWcksyUiceYMkMDmMAntUrJ4xYQQR3v1cNpwVYspomsbxpk7Ot3tCev2AT+WJ12o4eakDmwJ/+u55rFuUGdJ7HTaFTXPSmeWOzs1MLWfF/klzV5t3zijPpohM4Mk+SiGTgZIwlZHFsZqm8eyRel6t1Esa3rNyNretzQtp0KMAa3NSmZsa2g7o05JZ65M0bWixrGlhpOhPlKJcJAdKVs/c+fGjaiq2KH+KJ0SkaZrGscYOajt7Q3p974Cfn718nneudOOwK9y/bQErClJDem+8w8aWORmkhri2dtrRNPNKwjsaoaNBL5MzqxOrMw3s0T2AjWTpnXS9m5gMlIRpxlscu6f8MjZFYefqXEDfI+ln+85zuVUPriW5ydy+bk5I17ErChvnpDM7Mbq/2Vlqsm3Bj/5OL4tb837ouAxdTYACaflw7PegqbD27vDPH5cOtujfw8qqQCo9XopNsbF+5frgsWMnj1FSVEJVdRWqprJh1QbTr+vDRxzR/+8uRKSomkZZQzv1XX3Xfe7aXAK43Orh31+spqvPh90Gf7VzMQtyQtviIDnOzpb8TNwzpevqaHzd4L/+3zpkw7MpMIGXmK6vU6rcM/lsSojup0lg7UApkE05WTn6tfx+So+XUry42LJskq53QgBnW7qpHGdxrE1R2FPeAMC24tn86s0LwUESEHIQuew2Nuenkx4/w38Y9HWDOokwUmxw9Cn9z47AgFODE8/BqZdh7T2Tu78oL20IsCqQbIqN0uOlgD5zp2kaFacr8Pl8VFZXWjJIAhkoCTGcX9UovdxGY0//qJ8fnks7V+fS0tXPf7x0nq4+/Qe7DYuzQs6mjHgnm/IzcM2krqujmWylw/BsunJW/727WZ/AmyHZ5NesGygFsmnZgmX6tVQ/ZSfK6O3ttSybpPROzGiaplHV0s2Zlu5xXxeYsdtT3kDpuRbaugeCn9tVkjtiRm8siU47W/IzSIqT/20nHUZr3q//fvQpSB4WHIEgCnw+XDEQRqqmWlZ2EHiSVHq8dMSms4EgGv6kyUyxHkhCmMWnqhysb+OqZ2DM1wzPpe4+L8cvdNDZq5cJlcxP4+7Nc0O6Vm6Si3flps+8rqujmeza2eHZNLyM2IxssseDw6QNay1k5ROl4dk0nJXZFOu5NMOnPsRknWvtmXCQFLBxSRaF2YkjBkkrClIpyk+lrtlDp2fsOlaX3cbNczNlkBQw0Dr5cyzbBst3DJbdDZq3Vt9HqbkGPGG2d7W5wBH97XCt3kOpaFERxYuKRwzG5s+Zz7w582hqbaKnN7TOW0YMMPYPhULMJBMNkgJ2rs5la3E2b51qDg6SABbnpVDX7Jkwm2YnutiQJ4MkYHB9kknZNG+tXmYXYEY2uTLNa1ZkoUhkU2F+IQCd3fpyCSuzKdZzSX7qFJNiZD7+wJmrXGga+QV48lIHJy/pzR92rs5hV0neqO/t96szs7PdmEyY4zi1T5+lG672qP4LYM0HwqsFV73o/2dE938vh+LAidOyhaaV5yqprK4ccaymvoaa+hpAn9kzu8yhWWsmS8ky9ZxCTHdxo2xF8eT+i8E/j5dNA34Vm2STTlH0p0DaJH/QP7VvKIcCzMgmf2z8wB6vxFt6/spzlVyouzDimJXZ1Ecf3Vo3SUpoZazRRgZKYlIyE0Lv7LN56Szau70crm4JHltRkMqtg+UPKe7xz9XY3ce8mdzlbji7Cd9Il2+H3o6Rg6V5a/UQAn2Dv7Co4OsBZ/SXOCSSSDvtlpy7eHFxsO47YP6c+axfpZc2JCaY/9TtinaFZSwz/bxCxJqM+LiQniiB3gr8Wh/cMpf8DD1vxsumtj4vvV4/CTO5gcNwdhf4JllqtXw79LTCmVeHjpmRTd7Rm01Fm0SsrcgoXlyMp9fDyeqTwWORyKZYHShJ6Z2YlLR4Z8jPDQ6dbeZwdQvpSUOLzU9e6qCqroP8LPeEA6XL3ZNoXjDdmNHe9PSr+iBp+G7ntUf1PZWy5oM7Pfxze0Pb9X6quRXrBt5V1VVUVlcyJ3uom2NNfQ219bVkZ2RbEkaNWqPp5xQiFmWEOIm3t6KB1yqb2LEqZ0T53KVmD/lZ7pCyqUGyaYjNhEm806/qgyTnsM16zcgmtT8mniq5sXZCuKq6ipPVJ0l0D2WQZNPYZKAkJsVhs5HqmvjB5N6KBvaUN7CrJJeNS4Y27du0NIs95Q3srWiY8BxNPf341AjsjhYLJjtQOvZ7fbHs2ntg/rBH7Mt36MeP/X5y54+RgZJVM3dlJ8ooPV7KhlUbWLF4RfB48aJiSo+XUnaizJLrttNOnyY/tAmREUJn1OG5tHttHoXZQ98PDp5pDimXQCbxRjAzm7LmDx03K5t80Z9NdsVOAgkTvzAMw7Npbu5QsxKrs+mKdsWS80aCDJTEpGUkTBxIqqYFu9styUsB9N3Lb1mVw66SXFRt4gGQX9MHSwK9YcJkaOpQB6GU2fqxxAz947X3TL7GfIaXOAT2oli/cj0ZqRkA2Gw21q1cx4ZVG1An++87jiataeIXCTHNuRw2kiYohxueS6Dv5wcwO9XF1uLskHIJ4KpnAK/f2gX4MWOyA6XRsilnuYnZFP0DJYhsNqWnpLN+1XpLs6mFlpjdT0nWKIlJy4h38s4Erxm+EDY/0018nJ2+AT+dvd6QWoMHNHT3kZds7ULHmDDZNUrDF8Km6hvPofr1kobJtgaHmJi1A0hUEo11JAnR8IWw6SnpKIqCquoBZFVr8IAr2hXmElpbYyGms4yEOLq9vWN+/toGDYvzUnihvIGuPh+3r52DLcROdhrQ2NNPQYo1TwFiipnZFBgoJWWal02xMomnJNKsTbLV+iiGZ1NgoKQoCokJiZZmk4rKVa6SS+g/70ULeaIkJi2UJ0rD2W0KiwY38TvbYOwH6oaevpBn+aY1M9YoBQTCqLcDBsb+ocIQf99g97voZvWiWQC73U5qcioArR0mtM6dQCOxWwsuhJky4kNvNgRQkOUm3mnD0++nvtXY90JZpzRostUOw6UMTuJ1mli2NcOfKA0XGCi1d7XjV63buykgVsvvZKAkJi3RaSfO4G7kgfK7s/XGZncG/BqtvdG/GNNyihPTvnzj3BA/2KGuy8SyrRgIpEQlMvs9BQKprSPM/T8MaNKaLC3tEyJWhDWJN1h+d/aysWxq7OnHL2tozenIGpAyuHG5mQMlX7e+31OUi0Q2JbmTcDqcqKpKR1eH5deL1YYOMlASk6YoiuGZuyV5ehjVNPWM2pp1PJe7ZZ0SimLNU6VOE7+RxUCJQyRm7WBooNTS0TLBKyfPh49WrH9yJUS0S3E5sBvc42hxcKBkbKLHp2pc7ZVssiSX+jphwGPOOTU/+E06l4UikU2KogSzKRLVDle0K2gxMEi9lgyUhCmMztzNSnGRlujEr2rUXOk29N7L3X0x+cVmOlNn7gYDqWNmlTgkkIASgY1xI/lECWJ35k4IM9kUhXSDk3hL5+jVDjVN3YYn8Rq6ZKBkauldnBsS9P8e5pbfySReQCQHSn300Un0/9tfSwZKwhRGnygpijJUfmewxMHj9dPZH5vdU0xlRS14l5klDtE/ULIpNsv3rICRYRSJQX6s1oILYbZQ91MKmJXiIs3txOfXuNAkk3iG2RygmNgnLDlQ7TCzJvEiVRaenqrvSdXaHpkqhFicxJOBkjBFusEwgvBLHED2rQCsKXHoMLP0ris2asEjMHOXlpKGoij0D/Tj6bO+7EMGSkLoQtlPaThFUVicF1429ftV2vqiv4mN5UzNpkBDB5OzKcpFYgIPIDNV39cyEk+UIDazSQZKwhTOEDeeHS6wTqm+tZfuPmNPiGSghDUDJTObOWh+8JvURc9CbsX6QHLYHaQmDXa+i8DMXRdd9Gg9ll9HiGhn9IkSDGs2JJN44TG12iHQ0GFmNRqKIw5HBHbwCTxRks53Y5OBkjCN0Zm75AQnuen6vhPnDJbfdfT78HhnePmdzYI1St0t4DOxq2AMBNJ0rAWH2AwkIcwW77DjnmDj2WsFqh3qWzz0yCSecWaun0214ImS3wNqdP/8oChKRLIpOTE52Pmus8v69UOttNKvxdZaPhkoCdOEN3M3WOJgcD8lgIaZ3v3OzCdK8SngTAA06Lpq3nljYdFshFuEy0BJiMjKNLiGNsXtJCctHg04ZzCbugf8dM30NbRmZpMVa5RAbxMe5SKRTYqiBJ8qRaIrK+hbWMQSGSgJ0xjtfAfDBkqXuwwvgp3xM3dmztopyrAW4TNs0WyEnigFF83KQEmIiAonmwLd76T8Lgxmlt6lDuZST6vJ1Q4xMIkX4WqHSHVljbVskoGSME2S047TZqzV8oLZSdhtCm3dA7R0Gfsm2OwZYMA/gzfWNDOMwJq9lGKg812kwigzbWjRbCQ6Y13lKj5ths9sC0F41Q6B8rtzDcZ/oG6Y6QMlMyfxXMl6m3CQSTyLRLzaARkoiRlKURTDM3cup515s/RvBkbbhGtA40wOJJsTU7+ErXii5OuBCCwQnYxIld5FuvOdikozzZZfR4hol+pyYnAOj4U5SdgUaOkaoMXg/kitfV56fdH9fc9SZpbeDa92MHP7ilgYKE3jsnBVi51JbhkoCVMZ3U8JYGmYrVgBLs/kdUqKYk3nO9NrwaM7kCI1a+ewO0hJ0st5pPxOiMgJZ+NZl9NOYXYSEF42zeinSlZVO5i9IXqUb18R8dK7zjZU1foBjBcvbUSmzM8MMlASpgqnFnzxYCvWcw1dqKqxb1xXevrxG3zPtGLJfhUm/3Ad5TN3TsVJHMb/vw1HpGfuYnFzPyGsYLQrKzBsP6Vwyu9m8CSemaV3YE1ZuOYFNboHs5F6opScmIzD7kBVVTq6OyJyzViaxJOBkjBVOE+UCrLcxDtt9A74qW81VpLk1zSaPDM4kEzdryJQ3nDV3HK5KB8owRTUgkdoF/Qr2pWIrIcSItqF1ZU1uE6pC9Xg11FTTz/embqG1uYAxVhL9nEFB0omd0uL8myKVC4pihLxbIqlSTwZKAlTOe02kuOMbZJmtyksyp1M+V10zwpZysyZu8R0sDv1jWK7TVzbEuWldxD5WvBIdRfqpZcuov/fXwirhVPtMHdWIi6nDU+/n8stxjbP1tArHmYsM7PJiidKEPUDpQQSUDC4uC5M0pV1bDJQEqabTIehcAZKjd39M3fW3NRFszZIDuyCbmYteGfU14K7cUfkOoGBUktHS8T+n42lmTshrJLgsJPgMPaUw25TWJQT2OvPePndjJ7EM7XaYbAsvLvZ3I1io3ygZFNsJJAQkWtlpg51ZY2ETjrp1YxNPkwVY1P/QoQgIz6O2o7QvwD2lF+mt18v9app6qa5s58j51vYvHQWh842o2oau0ryxnx/v1+lpddLljsy60yiis2kWbujv9MHSqk50F4PzTVw5Sws3w6nXwVNhbV3h3du1Qtqv/l16yZKIsnya5QeLwWNYOe7lrYWztedp3hxMVXVVaiayoZVG0y/7hXtCktYYvp5hYg1GQlO6rtCKyveU34Zm6KwJC+Zk5c6OHu5i3ULMzlw5ioDPpU4h23cXAJo7OlH1TRsSmSeCkQVsybxjv5usHFRHPgHoOk81J8wJ5tiYC+lJJLwYF2X1NLjpdgUG1npWYA+UOrp7aHyXCU+nw+Hw2FJLoGeTYVKoSXnNpM8URKmyzT4RMmmKLx56irxThs+v8bp+g72VjTyYkUDe8obQgqZGdthyKwwUmxw9CnoHQyOtktw7Gk49nv9uDLJbxVRPnMXidI7m2KjrLKMOKc+oG9sbqTsRBllx8uCYWWFWCpxEMJKmQYaOtgUhT3lDVzt1LPlnSvdtHb1s7eikdcqm0LKJZ+qcdVj4iapscSsiTHFpg+WnIPna64xL5t8PfpAK4q5FWurHWyKjdLjpdRfqQf0znfdPd2UnSij/FS5ZbkEsVPtIE+UhOmS4xw4bAq+ELvR7VydC8Ce8gYALl7VZ08OnmlmV0lu8PPjudzdR/GsZJSZNnNn1kBpzfv1348+pf/ePfj4/dTLsPaeoc+Hy9sF8bMmdw4LRaL0bv3K9cDgkyUIdheqrK5kw6oNwc+brZVWBrQB4pQZ+MRViGGMlIUPzyWX00a/V+Xl4/oPdpuWZoWUS6Bn0+xEk9tlxwKzSu+uzaYeM7NJA183OFMmdYtWsrqhw/Bcsik2VFWl/HQ5AMWLii3LJYidSTx5oiRMpygKKQYbOmxckkVhtv4N4ch5/RvhioJUivJTqWv20Onxjvv+Hq+fPl90zwxZwqzSO4Bl2yC/RP9z4yn993lrYW6JPovnmUQDAnmiBEDRoiKy0vQSh/JTehjNnzOfeXPm0dTaRE9vj+nX1NBo0kzuFiVEDEpxGculnatz2VqcTb9Xz5aqOv2Je0GWm7pmT0jZ1DxjnyiZODhctg3SC/Q/H39W/12yyTTrV66nZHlJcBPY6tpqAGZlzqKptcmybLrKVfxa9G/MLE+UhOk0TaNrwNiCywNnrnKhaeQX4slLHZy8pM+671ydM249eKLTTrxjBo77bcYbZ4zp1D6oKx95rPao/gtgzQfCrwX3W1djbYZItWGtPFdJc/vIjoI19TXU1NcAemBZUQ/eQgv55Jt+XiFiSWe/8UYAcfbrc+XJ/ReDf54om7LC6LY3LdhM/Huf2qeXgwN6P0HMyyafZBOAw3H9cODV0leDf7Yim/z4aaedTDJNPa/ZZKAkTNc54MNrcBPYjUuyeOXEFXx+DQX9W+GKglRuHSxvSHGPPyCYkxw/88ruQF/kaosD1YRZy+XbobsFzr42dGzeWj2EANxp4Z87ysMogQRs2FCx9qlk8eJimtuaqamrCR6bP2c+61fp5Q2JCdaEYrNmYrt3IWJUS6/x75OtPde/54Nb5pKfoZfrTpRN+SnR28TGUmYOlJZv15sL1Z8YOmZWNskkHgA+3/WTCNs2bGNWhl4yb2U2ZSrRPVCagVPwwmotYZQavPx2Iz6/ht2m8Le36R26Tl7qoKqug/ws98RhlByZFppRyaynSqdf1QdJtmEtdGuPwsVyyJoP7vTwz632m7uJrckURYnIOqWq6qoRgyTQnyjV1teSnZEtAyUhLGR0oLS3ooEj1XopeFF+CpuW6mWzl5o95Ge5J8wml90mT5TMcPrVoUFSQpr+u1nZFOWTeFY3cwCCjRsWFizUrxmvX/Nqy1WyM7JnfDbJQEmYLpwwOnBG/2JZNicFh03/33LT0iz2lDewt6Jh3PcnOu2kGqw9n1bMCKRAB6G19wztpQSwfId+/NjvJ3+NKJ+5s3qgVHZC7273rpXvwhU3VL9fvKiY0uOllJ0os+zaHXTg1cZfSyHEdKZpGi29oX8N7B3supqeqH9/XZafyqYl+kDp4JnmCXMJZnClA5g3UApkU/Fu/eO+wc6sZmWTL7r38rH6iVIglzas2sCaFWsAUFW9sqKyutLSXAJo0VosPb8ZZvBPl8IqzQbCCEDVNNISnbT3eFmen0KK28nO1TlsXjqLVLcTdYKNOfNnchiBOYGkqUMdhC6fhI4GKFyvf+xON6eFqs8DzuTJn8ciiUpisPzdCoF9ktavXE/t5VqutFxh4dyFrF+1nkR3YnAhrRU0NFppZTazLbuGENGs2+un3x/615iqaWxflcOrJ/ROd8vzU3DabexcncOAT50wl0AfKM1YNjsodpjsYv1ANt1wJ1Q+r3+88jZYdZs52aT26feoGNuMOFLilDicOPFizUTX8FzqH+gHoG+gjzVFa9A0zdJcAn39rKZpUf0znAyUhKk8Xj+9PmPfGG8qyualt/UwWjY4UAosjg2lBeucmVx2B+YMlIYvhE3M0H/PXqQH0WRbgwf4Z/bM3fCFsGnJaVxpucKs9FkkJiRa2oI1oEVrYbYiAyUxMxmtdNhVksfbF9pQNZiV4iIz2RU8HooZXXYXYIub/Pf94dmUkKLv9bdoi7nZ5OsFp/WbjocrkUTaabfk3MNzyRXnIiE+gd6+XhbNXUR2ZvY47zTHAAN00UUK0duiPepL7+rr6/nIRz5CZmYmbreb1atXc/To0am+LTGGcBbLnr3chabB7NR4MpKMtRRNmulld2BuLTgMDZR6JtFydTRRXgseqRbhAGkpaQB0dHVE7JqxUAseSySbYks4a2dPD7YDX5Zv/Ie4GV12F2BmV1YAt0XZFO1l4RFYpxSQlpwGQHtXe8SuGe3ZFNU/Yba1tbFlyxa2bdvGCy+8QHZ2NufPnyctLW2qb02MIZyB0qk6/YfFsMIoJUHCyPQwGlwY62k197zRHkYRaOYQMBVhFAu14LFCsin2GM0mTdM4Xa8PlJbnpxq+3oxuMBRgxSReywXzsynaJ/Ei1PkO9Em8hqsNEc+mBSyI2PWMiuqB0re+9S0KCgr4r//6r+CxwsLCqbshMSGjYaSOCCPjA6X8mVwDHmA3O4wGW3XOtCdKEQyj1BT9B6/2zvaIXbOFFlRNxaZEfSFB1JNsii19Pj/dXmMl4Q1tvXR4vDjtCgtnGyvLirfbyEwweQIrFkm1gykiOlAKTOJFMJuaie4nSlGdmM888wzr1q3jnnvuITs7m5KSEn7605+O+57+/n46OztH/BKR4fWrdBjc0O9yay9dvT7iHDYWGAyj5Dg7KXFRPdaPDNPDaPCJUo8FT5RCWAA9VSJaejcYRr39vcEFtFYLbO4nJk+yKbaEV+mg//dZlJuM0+Bm5lJ2N8jsbHJblU1Rvn52CrJJSu+GRPVA6Z133uFHP/oRixcv5sUXX+Sv/uqv+PSnP83Pf/7zMd/z6KOPkpqaGvxVUFAQwTue2Vr6wq8BX5ybjGOUHdDHMydZyu4A62btPG2gmtjxRlPN2RjXIpGctYtzxuFO0Ev9pPwu9kg2xRYjbcEDApUOy+aEU+kgZXeABdUOgWyS0jurDF8/q0VoYtODh14tegerUT1QUlWVNWvW8M1vfpOSkhI+8YlP8OCDD/KjH/1ozPc8/PDDdHR0BH9dunQpgnc8s7V4jIfRqfrw1ydJ2d0gswdKCamgKPrAps/kZgNRHEhOxUkcketSNSUlDlE+cxcrJJtii9EnSn0DfmqudAPG1yfFO2xkSNmdLlZK76K82iGSzRxSk/T/3/sH+unr74vYdaM5m6J6oJSbm0tRUdGIY8uXL+fixYtjvsflcpGSkjLil4gMo2HU2++jtqkHgOUGZ+2S4xykuCSMAPPDyGYf2v3civK7KDbdGzpEey14rJBsih0+VaW9z9gk3tnLncG24Fkpxjqx5kulw5BYaTSk+aXaYZDD4SDZre93GOk1tNEqqgdKW7Zs4cyZMyOOnT17lnnz5k3RHYmxqJpGq8HSuzOXu1A1yE51kZFsNIzkaVKQYsf0L+WZumh2ClqERzSMtJaIlVNMZ5JNsaOtz2t4H+lTkyi7m9GbzF7LqidK/T3gM3ltZxRP4rlxoxC5wXcgm9q6TM7/ccgTpTB97nOf49ChQ3zzm9+kurqaX/3qV/zkJz/hU5/61FTfmrhGe58X1WAaTab1qoTRMIoSOzN3URxGMEXdhSL4RKmffrrpjtj1pivJptjRbHD/JE3Twt4/KcFhIyNeKh2CzB4oxbnBMTipana1QxRP4tkUGwlEbt3bVJSFR/P62ageKK1fv54//OEP/PrXv6a4uJivf/3r/Mu//Asf/vCHp/rWxDWaw9mjoi68WbsUKbu7nlWLZmfaE6UpWDTb3tke0ac80RxIsUKyKXYYLQlvaOujw+PFYVdYmJNs6L3SYOgaZg+UFGVY5zuzsyl6mwnA1DV0iJR22vFqxte5R0LU91a+/fbbuf3226f6NsQEjIbR5dZeOnu9xDlsLMwx1hY8P0WeJl3HskWzM2fWDgYXzUZozJKalIqiKHh9Xjx9HhITIhOEzTRTSGFErjWdSTZFP1XTaDXY8e70YIOhRTnJxBlsCy4l4dcwu9IB9GzqbLSg2qHH3POZLKLZlDy4z18Eqx1AX6eUQ05ErxmKqH6iJGKDpmmGB0qBsrtFuUlhtQUX17CsRbjJYaT26wtno1QkZ+3sdjvJiVOwaFaeKIkZorPfh8/g09pApYPRDdATHHbSpexuJMUGisn/JpZN4skTpYBgtUOXVDuADJSECboH/Az4jX0xBTbzWz7H2PqkVJeDZNlk9nqxsrEfRHUgRbKZA8jmfkJYyXBbcK+fmsFOrEbXJ+XLJrOjM/upkpUtwqNYJLMpJTEFm2LD7/fT7YncmtZozSYZKIlJM7o+qXfAz4Um/YvPaBjJ06QxxEoYQVQHUiRn7WBqasG76aZPi9z+GEJMFaPZdO5yF35VIyvZxSyDJd7SYGgMZq+ftazRUJ9UOwyy2WykJOs/m8mG6DJQEiYwOmsX2KMiO9VFprQFN4dVpXfeXhgw+QlQFK9TSiAhom1Yg7XgESy9g+gNJCHMEk5J+Kkwu925nVJ2N6ZY2XQWorvaIdKTeFPQ+a6VVvxROFiVgZKYNMPrk4Ld7oyX3SVJ2d3ozA4jZzw4B5/emT1zF8UDpSlrwxrhRbOy8ayY7jxeP30+NeTXa5oWbORgdH2SlN2NI1YaDUFUVzu4lchthg5Tk01+/LQTueuFSn7qFJPS5/PT4x1/BmBP+WVsisLO1blomkZVnR5Gc2e52VvRgKpp7CrJm/Ba+VJ2NzYzw+jo7/RFuIkZ0F4PLRfh/EFYvh1OvwqaCmvvDv/8URxGoM/cebD+HkuPl+L16h252rva6erpoup8FcWLi6mqrkLVVDas2mDJteWJkpjuQpnAG55NV9r7aO/xoigwKyXeUDZJSfg4zMqmQC4tuVn/2NMOPS16Jvn69f2VJpNLENWTeJF6olR6vBSbYhuxfUVPbw+V5yrx+Xw4HA7Lcgn0bMpUMi07fzjkiZKYlFDCyKYo7ClvYG9FAw1tvXT1+gC9HnxPeQO2EGfipAZ8HGbWgSs2OPoU+Afb6rZfhmNPw7Hf68eVSX7biOIwgsgtmrUpNipOV6AoCqqq0tzWTNmJMsqOlwXDyirRumhWCLM0h9AWfHg2BcruNA1erbwScjYlOu2kuWTOeUxmDZQCuXTmVX0/Jc0PbfV6Nh1/dvK5BOCP3tK7OOJwRODZhk2xUXq8lMbmRkCfxOvp7aHsRBnlp8otzSWIzmwK6V+9s7PT8IlTUow9uhaxqSWEMNq5OheAPeUNvHNlqINK6bkWdpXkBj8/njSXU8ruxmPmE6U179d/P/qU/nvfYKOBUy/D2nuGPh8uf6/+00iUlqpEauZu/cr1gD6DB9Dl6QKgsrqSDas2BD9vhXba8Wk+HEpsf01JNomxhDKJNzybMpKGvocePNMccjbNkbK78ZnVaGh4LjnjwdunZxLA8h2TzyWI6kk8RVFIJJEOrG38c20udXZ3UnmuEoDiRcWW5hLoeylFm5BSMi0tzdA3AkVROHv2LAsWLAj7xkRsCLWr0MYlWXR4vBw8MzRbsKIglaL8VOqaPaS4naS4x/6GKk0cJmB217tl2+BCGbRcgKqX9GPz1sLcEmiuAXfaUPchozQ/qANgN9bII1ISlcSIbexXtKiIk+dP0t3TzRtlbwAwf8585s2ZR1NrE4kJiZZsRKuh0Uor2WSbfu5IkmwSo+n3q3QN+EJ67cYlWbR2DXC4eugHNGPZJGV34zJ7Es/bqz9BAj2jALLm67kEk8umKB4ogZ5NHZr1HVLXr1xP/0A/Facr9OUS1VUAzMqcRVNrk34vFmVTs9aMpmlRNfkQ8nTi7373OzIyMiZ8naZp7N69e1I3JWKDpml09oe26/mBM1dHDJIATl7q4OQl/Yt+5+qccWvBZyWavCB0ulHs+i+zOsac2qcPkoarPar/AljzgcmvU4rSgZKbyC2arTxXSXfPyH0qauprqKnXQ3/9yvWWrlPKVmJ7oASSTeJ6oeYS6Nk0fJAEoWeT06aQKmV34zO7mYNjlNx486dDf55MNkVx6R1ENpuczusnB14tfTX4Z6uyaYABuukmmWTTzx2ukL7C582bx0033URmZmgLrBYsWDDqP7KYXhRFwe2w0z1BMweAzUtn0dXru+6J0q2DpQ3jzdiBvsN6erwMlsalOMwbKC3fDo1n4fKJoWPz1uohBPqs3WT4+yf3fgu5iNwArnhxMZcaLgXrwUF/orR+lV7eYMWMXUAkZiatJtkkRpPotIf82s1LZ9HWPUBZ9VAXtVCzyatq9PlVEhyhX2/GsZk8kPSNkh03Pqg/VYLJZZPmA9UPtuj87xnJbPL5rn8iu23DNmZlzAKsz6ZkJXoGSiGtyqqpqQk5iAAqKyspKCgI+6ZE7EhxhfZDx6GzzRw800x+5tCMyMlLHVTVdZCf5Z5woGR048AZycxAOv3q0CApebb+e+1RuFiuB1K4pQ0BavT+94xTIjcgr6quCg6SstKyAP2JUm19LdkZ2ZaGUSfG1/dEG8kmMZoEhx2HLbTSnUNnmymrbiUhbuiHYyPZ1OKJ3u9lUcHMdZDHfq+X3c1eon+cPvi13Fyj55Ip2RS9k3hxRCabAo0bZqXrg6LA4Ohqy1WyM7JnXDZJ1zsxKaGUHeytaGBPeQO7SnLZvCwreHzT0qxgx6GJSBiFwKxACnS3W75D/9g7WLe9fId+/NjvJ38NeaJE2Qm9u13RwiIAevv1so/iRcWUHi+l7ESZpdefDk+UhBiNoiikhND8Z3g2LZ0z1OTDSDbJJN4EzJrAC+TS2ntg7hr9WLL+AzynXjYnlyCqJ/FcivXZFMilDas2UJhfCECyW3+6U1ldaXkuQfRlU1j/Bx8+fJjXXnuNpqYmVHXkhm7f/e53TbkxERtCeaKk70WhdxC63Kr/0G23wS035JDqdqJqE6+c7/b66fP5iZcSh7GZFUiaqofR4hv1ABro1Uvulm/XZ+u00DdxHFM0h1GEBkqBfZKWzl9K1fkqevt6WV+8nuIlxSS6E1HN+HceRyedUbdodrIkm0RAqstJa9/4a5WGZ9NrlVeoqGkjO8XFratzQ86mZpnEG59ZE3iBXFrzfji9Tz/m9+nZ5Os3J5dgxk/iBXJp/cr1wW53A74B1q9cj8/nszyXIPqeKBn+P/ib3/wmX/rSl1i6dCmzZ88eEbLTKXBFaEJ5ojR8IezstAScdgWvX6Pf6w+p/WpAc++AdBgaj1mBFFgIOzC4sFX1wQ13giPOnBasENXlDZEaKAUWwvr8ei24qqncsOwG4l3xlrdgBfDho5feiC4QtpJkkxguxWA2FWTpXwcDPpUUtzPkbOoc8DHgV4mzS4HOqBTFnEZDwxs0uJL03339k99k9lpRPIkXidK74Q0aAuV1/QP9lm4ye61OLcYHSt///vf5z//8Tx544AELbkfEmkSnHbui4A9h5g3AblPIz3JTc6WHi1c9zE4LfeDT4pGB0rjMXjTrjB8KuP5ucEzcWSxk/ugNIwcOFBS0CPUId9gduOJc9A/009PbQ7wrcq3wO+mcNgMlySYxXGqI62cD8jPdKAq0e7x0erwTrk0arqV3gNwk2cJiTGY2GoKhgVJ/9/ivC4dM4gUFBko9vT0RvW60VTsYngKx2Wxs2bLFinsRMUhRlJBm7oabm6V/8V1sNrZngdSCT8DszUMVBeIHF2yaHUhRHEaKosyYQIq2WvDJkGwSwxnNJZfTzuxUfbBzsdnY16GU303A7Em84EDJgu+XUTyJF8lGQwCJbj2Xevt6rytltpIPHx6iZ08rwwOlz33uc/zgBz+w4l5EjDI+UNJnsC8ZDKOOfr3EQYzB7IESDAVSn8kDpSgOI4hcd6GAQCD1eCI8cxdlJQ6TIdkkhouz20hwGPsRZ+4s/evwkkzimcvsbAoOlLogxGqWkEXxJF6kJ/ASXAkoioKmaXj6IjtwiaZ1Sob/733ooYe47bbbWLhwIUVFRdftSfH735vUeUTEDL3EIfSN2goGnyjVt/bi86s4DNR2S4nDOMyetQPrShw0r774VonOuv6Z8kQpmsJosiSbxLVSXE56R9t3Zwxzs9wcPtfCxavGvg7b+7z4VBWHLTq/n005058oDVY6qH59nZLTxJ8JongSL9K5ZLPZcMe76entoae3hyR3UsSu3al1kquEvobdSoa/qv/2b/+WV199lSVLlpCZmUlqauqIX2LmMbozeWZyHG6XHb+q0dBmbCfsFpm5G5uVT5QsqQWP3v+WkWjDOtyUDZSm0RMlySZxLaPZVDCsLFwz8KRCA1p7x++wN6OZnU0OF9gHJ0JmUFl4pCsdYCibPL0RfqIURdlk+P/en//85zz99NPcdtttVtyPiEEpccYWzSqKQkFWImfqO7l41RMMp1BILfg4LHmiZNEaJdDbsNqj8+lgxEvvpmqNEtNnjZJkk7iW0YYOuenxOOwKvQN+mrv6mZUS+ven5t4BshMjO8ESM6xYP+tKBE+7nk1JWRO+JWRRPFBSFIU44hggcj8HJboToXVmZ5PhJ0oZGRksXLjQinsRMcrlsOEy2Bo1sE7J6KLZtj4vPjUy3chijiVPlPSN5ixZNBvNT5QiXXrnnpqBUj/99GvR+4OBEZJN4lpG18867DbyMvTOqkbXKUm1wzisLAs3e/2s6jVvTyYLzJiy8Ch6omR4oPTVr36Vr3zlK3g80dORQkw9oyUOQw0djP1/pAFtfRJIo4rFJ0pRaqqeKE3F99Xpsk5JsklcKznOgdEGw4GurOEMlELZoHZGsrQsfGZN4k1ZtUOkGw1FUS4Z/r/3X//1Xzl//jyzZ8+msLDwugWzx44dM+3mROxIdTlpMlAWFyi3u9LeR5/XT7zTHvJ7mz0DzHJLicN1rAijeItm7SCqw8iluIjQNkrAsDDq64n4/hEdWgezlFkRu55VJJvEtWyKQnKcg84BX8jvCVY7GGzooGp6xUNmQuTXkUQ9SxsNdZl/bnUgasvCpyybpqDaoU/rI16Z+v8Ohv/vveuuuyy4DRHrjJY4pLidpLmdtHu81LV4WJSTHPJ7pRXrGGKp6x1EdS14pMsb3An6D2eqqtLX30dCfOQ2Vo6mmbvJkGwSo0l1GRsoBSbx6lo8+FUNuy30SYtmz4AMlEajhD4RGjKrqx2MLW+LmJmyfhb0bIonBgdKX/nKV6y4DxHjUgwumgUomJVIe207F68aGyi19npRNQ1blOzaHDVireudlN4F2W12EuIT6O3rpae3J7IDpSiqBZ8MySYxmhSXE7r6Qn79rFQX8U4bfV6VxvZe5mS4Q36vrFMag82CUUe8rJ+NhKlaPwt6NmUr2RG/7rWk6b8wRUqc8R/Sw9141q9ptPdJK9brWDJQsnDWTsJohKmqBe/Qoqe7kBBmM7p+1jbYlRXCW6dkpK34jGFlNllRFh7Fk3hT1cyht68Xv+qP6LWjpdohpIFSRkYGzc3NIZ907ty51NbWhn1TIvbYbQrJccYer88dtmeFUVJ+NwrFBoaXLk/A0gWz0RtGccrU7Vchm86GTrJJTCSsaocw1yl5VY2O/tDL/GaMmCsLj96fLyKdTfGueGyDGylHei+laJnEC+n/3vb2dl544YWQN+1raWnB74/syFNMvRSXk66B0P+75w+GUVv3AN19XpLiQw80KXEYhaLoM3eaiU/bAmHk6wffADhM/CYtO6CPMFUDJQ8evJoXpxKlRfnjkGwSE0lw2HDaFLwGtpUItysr6NmUZiDLZgRL1ijJ+tlIUBSFxPhEujxd9PT2kJwY+jKJyYqWsvCQh/n333+/lfchpoFUl4N6Aw1oEuLsZKe6aOro5+JVD0UFof2wA/qi2Uh3B4sJNjv4TRwoxbn1J1WaqgeSI8O8c6sDoGn6AC/KTMlAaQprwbvoIgMT/9tGkGSTGI+iKKS4nIYm1+bO0r8WG9p6GfCpxDlCX6XQ3DvAwvTQN1GfEWJu/Wz0TuJFev0sgNvtDg6UIilaqh1C+upXVdXwrwULFlh97yLKpMQZn0UbKr8zXuJgpJPRjGHVDuhgQfmdpm/uF4WmIoymsrtQtJQ4GCXZJEJhdJ1SqttJcoIDVYP6FmNPlQKTeGIYK5o5WLp+Vp4oDTdV62cD1Q5TTZo5CNMYDSMYqgUPp8Sh2cC+TTOGJYE080oc7Iodh/GmoJMyVWEE0TNzJ4QVjG5foShK2BvP9vtVerxS3jmCJXv8Det6Z/bANIqfKLmUmVMWDtGRTZH9SUBMa26nHYei4Avxm9ae8st0evTZgotXPXT0DHDwbDObl87i0NlmVE1jV0nemO9vkRKH65lZC370d3rZXWCg1NkIl0/C8u1w+lW9HG/t3ZO7RjQvmiUOH9Y/tSw9XopNsTEvbx6gh1FPbw+V5yrx+Xw4HA42rNpg6T1ESy24EFZINdDQYU/5ZWyKwtwsNycvdXCxuYdOj5cDZ64Gy/DGyyXQy++SwugEO20pJs7JB3Jp5W79Y78Xuprg3Jv6WlqHy4Rc6o/asvBIVjsEsmn4QGkqsilTybT0GhORJ0rCNHoteOjhYFMUDp1tQQF6+n3UtXjYW9HIixUN7ClvmHCfpGZpxXo9M7sLKTY4+hT0DS4862qGY0/Dsd/rx80IP2nDik2xUXq8lHO15wDw9Hno7umm7EQZ5afKsZn5Q8YYomHWTgirGNm+wqYo7Clv4Gqn/r3pUrOHTo+XvRWNvFbZFNL+fVLtcI1AoyFTzjWYSyee09fkArQ36Nl0/FmTBmUaaNFZ2h/J0rtANjW1NgFDA6WZlk0y5SFMleJy0BriHkc7V+cCsKe8AYDGdn1TwINnmtlVkhv8/Fj6fCoer59EmbkbYmaJw5r3678ffUr/3dur/37qZVh7z9DnJyOKnyhFKpDWr1wP6LN3AJqmcfzMcQCKFxUHP2+lWF2jJEQonHYbbocdj2/ikrhrc+lqZz9vntJ/UNy0NGvCXALpyjoqmwP8Jgw+hueSwwWqH868ph9bvsOcXAJ9Es+KUvZJiuQTpWuzqcfTQ9W5KmBmZZM8URKmMlLiALBxSRazU+MBeO7oZQBWFKRSlJ9K3eBM3nhkP6VrmF0LvmwbpOXrf67co/8+by3MLYHmGvC0Te78UfxEKZL7VaxfuZ6S5SXBj89cOAPArMxZNLU20dTaZGl9eDfd+DVZVyGmLyPVDjtX57L1/2fvz4PkOtPzTvR3cquqrH2vAgr7DgIgFlaDS3NBk42mZcnTYkt956plaaRWz3hCtjxhK+6M584mXTvadxxaRprQ+LrbrVZYdmvci622LLG5gWyuIIiFAAgQIJba933JPc93//gysypRW56sc/JkIt9fBKISWVV5kmBVPvm+3/M+75G2zN8v3JkC9EztwERoQ21ajCcJy5xSNnY38Y79rLbaAfToN/K07NK6ZIc2Fen8rA8fngK+de8+2s3B3QcBmJqd4vqd60DhtKlkT5Tu3r3Ln/7pn3L37l3+j//j/6CtrY2XX36Zbdu28cgjj9j9HIUSotpvbUbmvVvjjM5Gsu77pH+WT/p1F+Hs8Y51/eAzkTg7ck8Vf/ixe7HfzddhZiD1l5TNsfei/gNw8iub84MX8YlSoZPvfL6V/+/OnT+Xud19tNsxP7hCscAC9ZT2L5Nok7AWNQEfLOb+5ne1SPB//25f5vaG2hSNU2VRDx9q7G7i+VY58X/7W0u3H1JtMgyDAAEiRDb+YpuoqqhacV+htKkY5mct/+S+9dZb/K2/9bd46qmn+OlPf8o/+2f/jLa2Nq5evcq3v/1tfvCDHzjxPIUSIWFhqR/AkwdauT04R8/4UrLQI9vq+VLK3lAXXP+EKhe/eHlhc6fp0PPQ/zGM31m6b8cpLUIAwYbNPX6R+sAB/BTWdpFIrPy3OHP6DK1NrcBS8pBTzKt56o3SLZREm4T1iJumpa+PJVZ+/Vef2k5Xk05qFW2yiN3zLIlVit6nv6FPlWDz2mQW74mgH39BC6XVZsELpU2LLGIqsyDzUGth+cr/w//wP/BP/+k/5dVXXyUQWOq4njlzhvfff9/WJyeUHtGkNTH64PZEpkg6trMB0CdKNwZm6WoJbihGPo+IURZ2i/On55aKpK1H9cfei9B3WQtSsHFzj1/Edq9CFkrp4djmBp3u097cDsD45DhtTW20NbU5Xigt4ED8ewERbRLWI2ZBm165Msyb18doSOnPgS06irp/IkRXS1C0KR/s1KZLP9LBDfWpebGOQ/rjxH2tS7ZokzTxQGvTlU+v4Pfpa+7ZtgconDaZmIQJO/b4uWC5ULp27Ro///M/v+L+1tZWJicnbXlSQuliVYxevjzM9tQupYqU1eGJAy28fHmYV64Mb/gYIkYPYGfXJZ1ut+OU/nsy5ck/9IK+/9KPNn+NIu7aFWqP0oVrFzh/9Tynj51mW8c2ABpqGwC4fuc6F65dKMjzKPVCSbRJWI9ctSmtSy+e6CTg16+nx3Y0ADpoKBddAtGmldikTWldOvWL0LRd39e2V3+8+Zo9ugRF3cRzQ5tqq3WzYGvHVqCw2jTPfEGusxaW/7UbGhoYHh5m165dWfdfvnyZrVu32vbEhNLESqGk9yR1MjEXpW8iRH0wwNnjHTx5oJX6oB8zh+hvn0fySLKxUZyVqcWotjU1k6S05e7Q87pbp6ydHq5+jSLu2hn+zFiWk5jK5PSx03Qf7ebiJ3r2K2km6T7aTSKRwLTj3zkHFlRpF0qiTcJ65KpNaV06e7yTdz8dB6CproKzxzuIJcycdAnAL4VSNnY18dK6dPIlePNP9H0en9amRNQeXQLRJrK1aWB0AGYBhTva5OKvk+VC6Zd+6Zf47//7/57vf//7GIaBaZq8++67/PZv/za/8iu/4sRzFEoIK4VSehD2269pa1djTYAnDrQA5BTBCiJGK7DzRCk9CHs/lSiklt1nVwRrEXftCmVvWD4Emx6ajSfiji/ye5BSP1ESbRLWI5rM7Z3l8oCGcEy/PrXWVXBgS52l60kT70Fs0urlAQ3elMXW612am7WLInY7uKlNSqmy0ybLv8n/7J/9M7Zv387WrVtZWFjg8OHDPPPMMzz55JP8T//T/+TEcxRKiFzFaDlpMQpWWE8IEnvDgzggzmkxSjqQAlTMXbsChzkAVFboqPxItHCDumlK/URJtElYC6WUpSYeQDxhkkjpWTCPXX2iTQ/gxDC+L6VNifLSpkJZ75aTLpTC0cLPC7mtTZb/tf1+P//23/5bfvd3f5fLly9jmiYnTpxg3759Tjw/ocSwKkYA4agulKoC+RRK0rXLwomkJSfFqIi7dq6IUaWLYsQCSimMEk3rEm0S1iJuMY0Vlhp4hkFmVilXPIak3q3ASW1K5rbk3hLidsiislI38cIRd7TJTfJ+J7Bnzx727Nlj53MRHgJiFiNYYUmQqvLo2on17gGc6Np5Uy/KjohR8Xbt3BCjTNfOBTFKkiRChCpW7swoJUSbhAfJq4EX069NVQGv5aLHLw28VXBQmxxp4ok2LUdOlDbgH/2jf5TzA/7+7/9+3k9GKH1W2z2xEUuFkljvNk+J2RtQevjWxR0Ja+Gze0FiDqRPlOKJOIlkAp+3sM9hgYWSKpREm4RcsLq2AiC0KaeD6NIKHGniOWkLL94TJTfdDpGIC7bwUjhRunz5ctbfL168SDKZ5MCBAwDcvn0br9fLqVOn7H+GQsmQNBWJHBOBln9PuriqymtGqfjeYLuKE/YGJ8UI9KmSEdj46wqMG127gD+Ax+PBNE3CkXAmkrVQzKt5Wo3Wgl5zM4g2CbmQ34lS/k4HKZRWo8Rs4cXsdihQ6t1y3DxRihIlpmIEXHqfkNMrwLlz5zK3f//3f5/a2lr+7M/+jMZGvdBrenqaX/u1X+Ppp5925lkKJUF+trulF6NKv3TuNo+DJ0pOWO9AzykVYb3rRqFkGAaVFZWEwiHC0cIXSm537qwi2iTkwuYKJWng2YKjJ0rlNaNUbvOzoLWpiSZXrm35J/f3fu/3+OY3v5kRIoDGxkb+6T/9p/ze7/2erU9OKC3ysd2l7Q0Vfg9ei0WPx8Dy9zz0OD2j5MTehCLt3LkhRuDunJLbXvDNINokrEU+1rvNFEoyO7sKjoQ5pLWpvIKG3E5kNfNoim8WN7XJ8ruqubk5RkdHV9w/NjbG/Ly723MFd9lMkIPEr9qFg9Y7KKvOnRtiBEuFkisR4SV2orQc0SZhLTYV5iBrK2zCwROlhAQNOU26UAKIxqIFv76b2mT5J/fnf/7n+bVf+zV+8IMfMDAwwMDAAD/4wQ/4+te/zksv2bSEUihJ8unaRVKFUqXYG+zByV0VUFZecNdOlNyMCC/hEyXRJmEtCr+2QgqlFTipTU6FOVicuS4UbmiT1+OlIlABlJ82Wf7X/pf/8l/y27/92/zyL/8y8biu4n0+H1//+tf5F//iX9j+BIXSIR8xCkX1m+R8ls2KvWEVnLA3eLxgeLVwlNEuJY/hwYuXJIV9funOXTnuq9gMok3CWmxmRikft4PEg6+Gg24HpxJZMQHr702cxm+453aIxqJam+oLe203tcnyK0AwGORP/uRP+Bf/4l9w9+5dlFLs3buX6upqJ56fUEIUfmBWCqWVOCTQvgDEw2VlvQNtcSh0oeTmiVKYMAmVcCUafbOINglrEU1aPxkIiTbZi6MnSg4GDXmLr1By0+0wMz/jijbNK/fs03n/a1dXV3Ps2DE7n4tQ4sTyECNJFrIZp/YRef2pQql8rHfgUrpQhXv7KkB37hpocOXadiDaJDxIPk28tC1cZpRswpHVFQ4unIWUNsnqijSuBg2V0onSmTNnMNb5gX/jjTc29YSE0mVzyUIS5mAPDv2bOLqvorhPlAqNm/sqQHvBG4wGV669GUSbhLXYjC1cmnh2UWILZ6FotcmtQiljC3dBmxZZxFQmHheW01t+d3r8+PGsv8fjca5cucL169f51V/9Vbuel1CC5CdGYm+wFcdOlBwUJLN4T5RcSReqdG9GCUp3Tkm0SVgNpVTBbeEyP7sKTlrvHD1RKj5cDxpyQZsUihAhaqgp+LUt/2v/wR/8war3/2//2//GwkJpCqxgD/nZG/KPYJWB2VVwqlBK76twJIa1OLt2gJ7VKaMN6FC6yXeiTcJqxE2V16+wuB3sxsE9SmZC7/izW/+KNGjIbeudG6srQDfx3CiUbPup+uVf/mW+853v2PVwQglS6KV+Ikar4dC/iZMnSkXatQOXrHeprl00FnVlsd88D9fOIdGm8iafBp6p1NKMkljv7MGRZehO7/grTm1KJ7IWGjeDhsC9Jp5tP7nvv/9+xjIilCd5We8yEaxSKNmCk2EOUFbx4OCOxaEysPQ6KktnN49oU3mTjy5FY8nMKZQ08ezC4WXoZTY/64o2ubi6AtzTJsv/0g8u7lNKMTw8zEcffcT//D//z7Y9MaG0MJUiYeZmcHj58hAew+Ds8c5M1+5q7wzbWqr54PYEplK8eGLLho8jYrQaNv6bXPyBLrxOvrTkBQ/N6PsTUfBVwKlf2Px1irRrB4U9UTp/9Twew0P30W4qKyqJRCNMzU5x7bNrJBIJfD4fp4+ddvx5lKr1TrRJWA0rToe0Nj22pwkArwdevzbCkwdaLWmTzCitgp1NvOXa5PHqZtv8OHzyk7LSpijRglwrrU07tu4A9InSYniR659dL6g2uRURbrlQqqury0oW8ng8HDhwgN/93d/l7Nmztj45oXSw0rXzGAYvXx4GlsIcLtyZwuf18P6tCV480ZnT48iM0ioYBrpYsmGwxvDAxe/r2+lCKTwLV/+Tvn3qFzd/DZCuXQqP4eH81fMAmUJpZm6GC9cuABREiECnCyml1k2QK0ZEm4TVyEeb5kLaxlXp9/HKlRHmwwlL2iTWu1Wws1Bark3eAJhhWJyESz/U99mlTeJ2AJa0KRrThVkkGmExtFhwbSqZE6Xvfve7DjwNodSx0rU7e1yLzcuXh7POP9JClP78RsiJ0hoYHnuKj5OpDv3F70PTdn175Kb+eOiFpc9vliIulAp5otR9tBvQ3buaoB5YvdN/B4Aje49kPu80SZKECRMkWJDr2YVok7AaVgql5doEUOH3sBgVbbIHG/9NlmuTr0LfvvOu/mirNhX3iVKhWK5NAKZpcu32NaCw2lQyM0q7d+9mcnJyxf0zMzPs3r3blicllB5WfeCP72/hc3ubs849HtlWz+GuegYmQpmO3nqIGK2FzYJ07Gdhqk//fUy/cadlF0zc139C05u7RjHHgxuFDXPoPtrNiUMnWAhpQRgYGQCgtbmVsakxxqbGWAwvOv48SnFOSbRJWI18tOnAFt2omFrQcy9WtMkAvKJNK7F7fjatTYmU/ey+fhNvqzYVcxPPJW1Kc/OebpoWUptK5kSpp6eHZHLlD080GmVwcNCWJyWUHotxay8o790a58M72W9qPumf5ZP+WQDOHu9Y1wtuANV+d3YJFD82i3S6Y7ect7+1dPvkVzbnBy9iMXJjYNbnW3nNc+fPZW53H+123OqwoBZoM9ocvYbdiDYJq5GPNt0ayn5DZkWbavOIEy8PnIgHF20q6DVd1qYYMWIqRsAIbPzFNpLzv/SPf/zjzO2f/OQn1NfXZ/6eTCZ5/fXX2blzp61PTigd+matpaA8eaCV9z+dYD6ydJrwyLZ6vpSyNtQF1++W7GmsJugvfDxmaWBzpHRilYHRp7+hO3cAwYbNPX4Rz8IYTsWtr0MisfKE7czpM7Q2tQJQXVXt+HOI4M6ejHwQbRLWIpY0GVqw9rP86M5GXvt4BFMtTXta0aYjrbV5PtuHHCeKDqe1yYXX/2KmWLQpQJEWSl/+8pcBMAxjxZZzv9/Pzp07+b3f+z1bn5xQGsxHE0yErUVz/vWlQeYjCQwDfuOFPXzr1bt80j/Ltpbghj7wgNfDwebCLx0rCZSyV5Au/Qiu/hU074TJHmjdC+N3tK3h4Bfsu44AwIVrF7h88zJb2rYwNDZEY30j07PTjE+O88jeRwr2PEqpUBJtEtaify5MjmGsGX74fh+mgroqH19/YQ9/8J9u5axN7dUVdNRIFP2q2F0opbXJXwXxMOz8HPR8WDbaVOgmXlqbqquqWQwvsr1zO33Dfa5oUx11BbseWJhRMk0T0zTZvn07Y2Njmb+bpkk0GuXWrVv87M/+rJPPVShSemZDlr7+lSvDfPjZFABPHGihttKfuf3y5WFeuTK87vc/0lJLwCupQqtj42nSpR/pYdlTvwgNW/V9Hfv1x5uv6c/bQvF27QopRheuXeD81fOcPnaaHVt0DGt9jT4duX7neiZhqBCElTt7MvJBtElYDaUU92esadN//miQe6N6zuKlJ7Znfv9z0SYDONZW2DdwJYVySJvSO/52P64/ijbZznJtaqhrAGBLm7afloM2WTY53r9/34nnIZQoSVPRO2dNjKYW9HG5x4AvHG3H5/Fw9ngHTx5opT7ox1RrtwDrK3zsrK/a1HN+qLEzzlSZWohOvgSv/aG+r6JW+74TURuFT8QIwFQmp4+dpvtoNx/f+jhzf/fRbhKJBKadbzQ2oJROlNKINgnLmY7EmYtZC4rpGdNFUkdDJUe217MQTuSsTXsbq2U+aT3sPFFark1X/0rfV91kvzaJLRzI1qbRyVFAr18oF23K6bf6j/7oj/iv/+v/msrKSv7oj/5o3a/9rd/6LVuemFAaDC9EiCWteRvmQlq8uvc201SjhzHTw7EbWRsebasruf0uBcVOMVo+BJtOpquqs9/WIP87gexdFH6f7pIqpQq2o2I5pVIoiTYJa3HfotMhEksyNK271V98tAOPYVAX9OekTRViB98Yp7WpptmeJbMlQiELpdW0yePxlI025VQo/cEf/AFf+9rXqKys5A/+4A/W/DrDMESMygyrYtQ/EeLTwTk8Bjx/rMPS926traQluErKjbCEUyk9yVQkrseJjmnxVkpuhDkA+FN2knhi45h8J4io0iiURJuE1YgnTQbmrP0Mv/vpOOFYkrb6Ch7d2Wjpew+31OIXO/j6OKVN6UKpzLTJLdKF0mrBDoXADW3K6SdruaVB7A1CmoVYgvGQtRCHVz/WHu+Tu5toqcu96PEYcFTShDbGqSPwZOpF0VteYuRaoeR3t1AKUxozSqJNwmr0z4dJrmOTe5BoPMmb18cAeOFYBx4Le5DEDp4jThRKpqkDjKDsCiW3tCkdEV5O2mS5BfK7v/u7hEIrTxHC4TC/+7u/a8uTEkoDqyEOQ1MhrvfNYmD9NGl/Uw1B2Zu0MY517VKP64gYFS9ui5FrXTsiKAtvNIsB0SYhjdUQh/dvTbAYTdBcW8GJ3U2WvvfRtnqxg+eCI4XSstdHJ5p4Rfy/1bUmns9lt4ML1jvLhdLv/M7vsLCwcjtuKBTid37nd2x5UkLxYypFr8XdSa99PALAozsbaG/IPUK1yudhf5P4v3NC7A22Uq5ilCRJAneKtHwRbRJAhzjMRnP/2Y0lTM5d1wPqzx9rx2vhNKmrtpKWYGF3upQsTrgdlhdKZaZNblGO1jvLhZJSatXuyccff0xTk7VOjFC6DC9EiCZzf+EbnQnzcc8MAC88un5gw4Mcaa3DZ0G8yhrHZpQctN5JN3YFbhdKUDqBDmlEmwSwfpp0/vYE8+EEjdUBHtuT+8+J19DaJOSIE9qUXF4oObGAvni1yW23QzmdKOX8rqexsRHDMDAMg/3792cJUjKZZGFhgb/39/6eI09SKD7uz1g8Tbo6igKObK9nS1Pufu7mKj9dtbLAL2dK8kSpeHFNjLzuihFoL3gtxT8XKNokpEmYJgNzuWtTImly7po+TfrC0XZ8FgIZtB3ciTfnDylOWu883rJruJWr28GNGaWc3/X84R/+IUopfv3Xf53f+Z3fob6+PvO5QCDAzp07eeKJJxx5kkJxsRhPMBaK5vz143MRLt3TC2a/aPE06Zj4v63hdKEkYQ4FIS1G6cWpHk/hE7UiKlLM/2syiDYJafrnIiQszNZduDPFTChOXZWfz+1rzvn7qnxe9okd3BpOnig51cCT9x4rcLtQihEjqZJ4jcI1KXL+6frVX/1VAHbt2sWTTz6ZSWUSyo8ei7NJb1wdRSk41FXHtpZgzt+3o76Kxkr5ObOE09Y7J+wNIkYrSIsRaEGqCBQ+Fr9UrHeiTUIaKwFDSVPx+lU9N3vmaDt+X+7NiKOttWIHt4qTJ0qONPCgmDtFbjfx3JpRAogSJUju7yU3S04/XXNzc5nbJ06cIBwOEw6v/ma5rk48uw8zOsQhdzGaWohy4c4koJf45YrPY/BIS/HbfooOp+LBxXpXULxeL4ZhoJSSQmkdRJuENDORONOR3Lvcl+5OMbUQo6bSxxMHWnL+vuaqAFvFDm4dR06UnNzvV9yU64wSaG0qukKpoaFhQ/tTepA2mXSooy0UBSOLUSKJ3N+Mv3FtFFPBvs5adrblblU41FxDpU/835YR652tuCVGhmHg8/qIJ+Kude7Cqvh3KYk2CWmsnCaZpuK11GnSc0faCFg4TXq0rU7s4PngZOqdY4VS8f5/dvtEydX5WRUu6P+anH66zp075/TzEEqEHguJQjOLMc7fTp0mHc/9NKnG72VPY7Xl5yZQAOtdeRVKbuL3+Ykn4mWVLmQV0SYBIGEq+i2EOFzpmWZ8LkqwwsuTB1tz/r6d9UEaxA6eH45Y71KP6ZT1rogLYrcLJTetd4XWppx+up599tmcHuzKlSubeS5CkROKJxlZzD3E4dz1UZKmYnd7DXs7crfRHW2rw1PEL1BFjaTe2YpbYgTuC1IpFEqiTQLA4HyYuJlbiIOpVGan37OH26jMMbnO7zF4pEUCHPKmFMMchBUUw4lSobVp01FKs7Oz/Mmf/AknT57k1KlTdjwnoUixMps0H47z/q0JwNpsUnt1BZ014v/OGyfESClnO3dFXBS7WSilveCxRMyV67ux2M9ORJvKByu2u2u9M4zMRKj0e/j8odxPkw4211AhdvD8cTQeXKx3hSKtS4lkAmUhYdJOSqZQeuONN/jlX/5lOjs7+eM//mN+5md+ho8++sjO5yYUEUopS2L05vVREknF9tYg+7fkdppkAMdkgd/mcNLeAOB1wnZSvGLkJm6fKLmxr8IORJvKi7lonMlwbt1ttew06enDbVRV5PYGuyYgdvBN4+SJkqTeFYwHE1ndoNDzs5Z+ugYGBvjud7/Ld77zHRYXF/nqV79KPB7nhz/8IYcPH3bqOQpFwOhilHCOIQ6LkQTvfpo+TerMefB1T2M1tTkKl7AGTg7MQtlZHIrBeiczShsj2lS+WFlXcWNgjsGpMBU+D88cbsv5+46JHXzzlOKJkvwvX4FvWVGaSCQI+AMFfw5Fe6L0Mz/zMxw+fJgbN27wx3/8xwwNDfHHf/zHTj43oYi4b+E06ac3xoglTLY2VXG4K7cTooDXw8Fm8X9vGie7dlB2YQ7FUCi5daIUJYrpVNy8jYg2lS9JU9GXozYppXj1yjAATx5spboyt9eyjuoKOqrFDr4plHK2iScnSoW7biqRFcqniZfzT9crr7zCb/3Wb/Hf/rf/Lfv27XPyOQlFRjiRZGQhtxCHcDTB2zfGAD2blOtp0iMttQS8mx6ZE5zs2hkGeBz4f1TEndpimFGKJ90bmo0SpYoq166fC6JN5cvQQoRYjiEOt4fm6ZsI4fcaPHckt9MkAx0uJGwSpxoujoc5iDatht/vJ5FMuFcoFXh+Nud3PW+//Tbz8/M89thjnD59mv/z//w/GR8fd/K5CUVC72yYtaTo5ctDvJLq0gG8enWESNykta6C4ZkIL18e2vDx6yt87Kwv7jdjJYOdhdLFH8ClHy0t9TO8+r7QtL7/4g/su1aR4oYYnb96ngvXLmROlBbDi5y/ep7F8CIXrl3g/NXzBXsupTCnJNpUvtxfZ13Fcm1SSvHXlwYBOLm7ifdvTeSkTXsbq6kNlJfd2BHsbuCltSndxFOq7LSp0KR1CZbcDvOhec5fPc+7l959qHUp50LpiSee4Fvf+hbDw8P8N//Nf8Nf/MVfsHXrVkzT5NVXX2V+ft7J5ym4xEYhDh7D4OXLw7xyZZhIPMkHqaS7hmo/P7k8nJOvWxb42YidgmR44OL34dpf6797vHDphykh+r7+vD0XsulxHg48hofzV88zOaN3kIXDYS5cu8CFq7pI8tj2774xpTCnJNpUnszHEkyE106EXK5Nd0cW6J/Qb64SpsnLOWhThdjB7cPuQimtTT2pkBZlOqNNRfy+pNBNvLQuXbh2IWO9W1hc4MK1C1y+ebngulTIxD3L/2XBYJBf//Vf55133uHatWv843/8j/nn//yf09bWxt/5O3/HiecouMhYKEYovvaL3Nnjnbx4opOXLw/z3TfuEYnrI/bPhhd48UQnZ493rvv4W2sraQlW2Pqcyxo7BenkS3DqF+GTl/XfPalo3Juv6ftPvmTThUSMltN9tJvTx04zMqHTuZJJ/f/0+p3rnD52mu6j3QV7LqUUES7aVF5stPx8uTb9xTu9mfsv3p3OSZseaanFL3Zwe7C7UEprU/9l/XfRJsdJ69L5q+eJxvQoxr3+ewAc2XukoLpkYhKncLa/Tb0KHDhwgP/9f//fGRgY4Hvf+55dz0koInKJBH98fwun9zVze2ipc/vItnoOd9UzMBFiLrT6D7THgKOtuS+iFXLAbi/4wTOw83P6diz1s7DjFGw/ARP3tdVhsxSvFrnmAz+89zDtze0A3Om/A8CurbvYsXUHY1NjLIYXC/I8SuFEaTVEmx5ukqaid25j+83j+1s4ur2eqYWlk6dctKmhwscOsYPbhxOzswfPQOtefXvgY/3Rbm0qYtxq4p04dCKjP/0j/QC0NrcyNjX20GqTLeZbr9fLl7/8Zb785S/b8XBCETER2njZ5Xu3xjn/2WTWfZ/0z/JJ/ywAZ4938OKJLSu+r6WqgqBf/N+2oVR2lLcd3Hwdej7Mvq/3ov4DcPIrcOoXNnmRIu7aulTEXf/sOqOTo1n33R+8z/3B+8BSd89pSrVQSiPa9HAyH0sQS27cFHrv1jjX+maz7stFm7bVVYkd3E6cKJRuvg7jd7Lvs1ubCmgnKxXSIUPLOXf+XOZ2IbWpjsIErci7VGFdmqsCDC2s/2bpyQOtzIcSvH97InPfI9vq+VLK2lAXXH1J6XgoSjiRpEq2nduDSgI2nygdeh7G7ix17EB37U5+Rd8ONmz+GkW8m8mtzeNH9h2hf7g/Y78DfaLUfUzbG6qrCrP8MunEGxxB2CR1FT78HoP4Bol3Tx5oZXQmwsc9M5n7ctGmvrkwexurpViyCzO31FxLHHoe7p2HmQF0R0vZr01GEWvTmhFbzrLauoozp8/Q2tQKFFCbKJw2SbksrEt79cbzQx/cnuD92xPsbF36Bfmkf5YbA7N0tQTXFCPFxj5zwQLmxqd/lvn03FKR1JayOfRehL7L0LILgo2bv4Zn9Z+PYsAtMbpx50amSNrathXQJ0q9g720NbU9lGIkCLniMQzacpht/eD2BB/3zFCzbGdSLto0G00wFXEvlv+hwyltmhnQt4+8qD+WkTa5QTq4obFO/9t2tuqGw/jkOG1NbYXVpgI28aRQEtZlo0LplSvDvHx5mBdPdPLzj3dl7v/c3uZM4tB63J8JYbrUtX/osFuM0glCXcf03wOpF8BDL+j7L/3InusYIkbLSUeA7+raBZBZ+npk75GsiNZCIIWSUKxY0aZnDi/tTXriQEtO2nRvujCzFmVB0iFtqtVznASC+qPd2lTEhVKhm3hpXTp97DTNDc0AdLR0ADpoqJC6BIXVpuI9VxSKgqDfS23Ax3xs9dkXU6lMgpBSiqaaAFMLMbqaq2iq7dywCIokTYbmI3TVyeDspknabG9Qpk4QSsZg4Kru0J38irY8BBvtC44QMcrCVCanj52mOljN/YH7eDweuo92c2TfEaqD1ZnCqRAksHnmTRBsom2DQmm5Nk3OR/nrS3pv0pMHWqgP+jfUpoH5CEcTSSrFGr557G7ipbWp9yOYB2rbnNGmIm7iFVqb0rrUfbSbn7zzEwAC/gDdR7tJJBIF1SWQQkkoMtqrK9YslJYPwhqGwWN7m3jlygg3B+f4xhf35vT4d2dCUijZgd1ilB6Effvb+mNN89J9tsWvUtwzSi4USulB2Jv3bgLg9Xgz9xUyghV0DKsgFCNBv5e6gI+5HLSpubaCHa3V9I4vcndkYcNocEhZw2dDHGyWZNZN45Q23X5Lf6zvgP3P6NuiTY6wPKAhPbvn9/k5fuh4QZ9HGplREoqKXOaU0pzY1QTArcE5FiK5daMnwzFmxQ++eZzwgQNEF/THSofeMEjXblXS8a9uBUqAnCgJxY0VbTq5W89VXLo/lfP33BNruD04pU2R1EqSCgcWAxveok69c1WbUoVSoU+RliOF0hp885vfxDAM/rv/7r9z+6mUFS1VAbw5hv+0N1SytakKU8HVntz3GNyVUIfNU4piBGK9W4O0GLlZKMmMUm6INrmDlULp+K5GDAP6xkNMzOVmU44kTIY3SH0VcsBuWzjoVRjx1C6tSge0qYh1CUSbCtnEK5lC6cKFC/yrf/WvOHbsmNtPpezwegxackgYSnNytz5VunQv90Kpfy6c014MYR3sHphNkz5RkkKpoHhS3cxy6dqVKqJN7tFsoYlXW+VnX6c+Fb98z9qpkrBJnGjiRVK6hAEBJ06UileXoDi0qVyaeCVRKC0sLPC1r32Nb33rWzQ22hD5KFjGkv1udyMGcG90gemF3F4gk0rRN7vxpnVhHZzYVQHLrHdOFUriA18Nw2Okn4RryB6l9RFtcpfNNPFyfZM3HooxFxVreN4oBaYD/36ZBl4QPA68lS3iBp7bFMOJkhRKD/Cbv/mb/O2//bd54YUXNvzaaDTK3Nxc1h9h81gplBqqA+xq12+qr9zP/VTp3syiq794JY/j1jsnZpQ82gsurKDcfOCliGiT+3RY0KajOxrweQ1GZyMMTefemJNTpU1gxnGk25M+UXJElyjqBh6I9U72KC3jL/7iL7h06RLf/OY3c/r6b37zm9TX12f+bNu2zeFnWB7U+L0E/bm/oc0MzlqwOCzEk4yFHHqzXw44USglopBMdQPFB15Qys3eUGqINhUHVpp4VQEvh7rqAbhswRreNxsmLtbw/HAsZCjVwHPM6SDatBZFUSjJiZKmv7+ff/gP/yF//ud/TmVlZU7f80/+yT9hdnY286e/v9/hZ1keGIZBuwWLw6M7G/EYMDgVZnQm92HYu7LkLz+UcmZGKd21M7zgdyDCXcRo4+dQJmJUSog2FQ/VeTbxLt+bzjnRLqEUfXNiDc8Lx5wODs/OyozSmpSb26GoC6WLFy8yNjbGqVOn8Pl8+Hw+3nrrLf7oj/4In89HMrnyH6qiooK6urqsP4I9WOncVVf6OLhV/9tfthDHOrIYZXGNvRjCOqgkOLHzZnnXzshxatoKUiitiZwoFS+iTcWDYRiWtOlQVz0Vfg/TizF6xnJvzIk1PE8cm5110hKOaNM6yIlSEfH8889z7do1rly5kvnz2GOP8bWvfY0rV67g9cpsQyFpDQaw8lb5RHpw9m7ug7MA92fFD26Zku3aiQ98LdJhDm4+BymUVke0qbiwUigFfB6Obm8ArKXfzceSjIs13DpOa1MZhgyBFEqF1Kai/kmora3lyJEjWfdVV1fT3Ny84n7BefxeD81VASbCub3wHdlej99rMDEfZWAyxLaW6py+r2c2xKHmWrweB04wHlac6tqlgxycWjYrXbs1ydgbTPfsDbJwdnVEm4qLdBMv19/Wk3ua+OjuFFfuz/Dl09ty1pp7M4u0WSjKBEp3bYVY79akGNwOskdJKFqsdO4q/F6OpDp3VnYqxZKKgXnxg1uiVMVICqU1KYaunemEnVMQbMbv0U28XNnXWUtNpY/FaILbQ7mnDw4tRAnF5ZTVEk6nsZZpmIOblJs2lVyh9Oabb/KHf/iHbj+NssVKoQR6pxLA5fvTmGbuv1R3p0PiB7eCY8lCaXtDeUawuomB+2KUICG/hzki2uQuVrTJ6zF4dOdSqIMV7s9I4JAlnNYmmVEqOMUQ5iAnSkLRUl/ho8Kb+4/Nwa11VAW8zIXi3B1d2PgbUsxE40xHZMlfzpTsjJKI0Vpk7A0uJ+/JqZJQClht4qXT7671zhBL5P4z3jMbJmmh6Vf2OO12kBmlgpMulMplGboUSoIlrCYM+bweju1sAKztVAJZ8mcJ2VXhCEUR5uDyiY4EOgilgNUm3s62ahprAkQTJjf6Z3P+vmjSZFCs4bnj2PysNPHcohhOlCT1TihqrHfudPrd1Z4ZEhaW9g3Mh4kk5E1aTiSdFiOxNxSajA/c5e61FEpCKWC1iWcYBid2WV+MDnBXmni540QTT6llTTzRpkJTDGEOUigJRU1bMPehWYA97TXUVfkJx5J8Opj74KypoHdWOnc54fiMktgbCk0xdO1ACiWhdMjXfndzYI5wNPeZh+lInOmIRIVviFJgOmChj0fATL0uOXKiZOgl60VMMWiTFEqCsAYVPi+Nlbl3WzweYynUweLg7L2ZxZy3p5c1TicLOXWiVOT2Bjcphq4dSKEklA5Wo7s7G6voaKgkaSqu9s5Y+t6703KqtCFmHEcGWdINPK8ffA7EtXt8zixYt5FiKJTKxXpX3O1coWhpq67IOWzh5ctDxFIWuut9M0TjSaJxk/dujRNLmAR8Hl48sWXV7w0nTEYWomyprbTtuT+U2FkoXfwBGB44+dKSIN19F+rb4dNzoEw49Qv2XKvI7Q1uBBmcv3oej+FhV9cuQAviYniR659dJ5FI4PP5OH3sdMGejxRKQqlQ4fXQWOnPWZt+cmWY2io/IzMRLt2b5lBXPe/dGufJA618cHsCU6k1tWlgPszRtjpLc1Flh90NvLQ2bTuu/x4IwqUfwqHn7dUmaeCtSlqbfD5dOiTiCc5fPc+RfUe4cecGpjILpk1SKAlFT0ewgluTuaXYeQyD929NEgx4CcWSXO+bpb2+kleujADw4onOdb//7syiFErroZS9yUKGBy5+P+UDT0Xh3nxt6eOpX7TvWkVeKLmBx/Bw/up5QhHdsVZKF0oXrl0AKGiRBFIoCaVFu4Umnscw+GxYn5rfGZlnaCrMK1dGmA8neP/WxLraZCronQmxv9khW/LDgN2FUlqb5vR7B/yVulAKz9qrTSWgS2408dLatH3LdgBiiRgXrl0gHA5z/c71h7aBJ4WSkBeNVX78HoN4DoPmZ49rsXn58jAAl+9NUV+t55yeONCS+fxajIdizEXj1FUU/4uXK6gk2PmiefIl/fHi97PvTwtR+vN2YBT3S5Ab9obuo92A7t6BLpRufHYDgCN7j2Q+XygKua9CEDZLe3UFn+bYxFuuTUqRWT6bLpI20qZ7syH2NVUvxSUL2didePegNgWq9Ee7takECiU3WKFNKX1MF0mF1CaZURKKHo9h0BrM3Rt89ngnn9ur0+9uDMzx/q0JALa1BBmYCDEwEWIutHYXUKLC18GJ+NWDZ2D3E9n37TgF20/AxH0IWZs1WxVDfOBr0X20m0N7DgEQjUW5fuc6AK3NrYxNjTE2NcZiuDCLLwu5r0IQNktjpW7i5crj+1vY2VYNwJufjAHwyLZ6DnfVb6hLoXiSkUWHEkcfBpzYoXTwDLQf0LcnevRHu7WpyEOGwD1tOrz3MJ2tuoEwMDIAwK6tu9ixdUdBdamQy9CL/6dBKFoaKv0MLURy//qalWl5//7dvszts8c71vSDixitgxNidPN1uPd+9n29F/UfgJNf2bwXvAS6dm4uW/V5V748nzt/LnO7+2h3QawObi+8FQQreAyD+go/E+HcXhffuzVOz1j2m7tP+mf5JLVbaT1dAhheiNJZI9bwVXGiiXfzdRi9lX2f3dpUAjNKbgUpXP/sOsPjw1n33R+8z/3B+0DhdKmQSKEk5E3StPaLutr2868+tZ2upiAAdcG1X5ysdAjLjqQDEeqHnoeR2zB0bem+Hae0CAEEGzZ/DW/xv7mIKweibXMkFl/5Ru/M6TO0NrUCUF1VXZDn4S3ymFxBeJCEhU7zkwdaGZ2J8HHPTOa+R7bV86WU7W49XQLRpnVJ5t5IzZlDz8Pd92B2GDAAVZ7ahDvadGTfEfqG+hidHM3ct2vrLrqPadtdwXQJb8Esr2K9E/Iml/mkNK9cGebN62OkNeXErgYA+idCdLUE6WoJblAoyY/qmjhRKH16bqlI6jqmP/ZehL7L0LILgo2bv4bHgVhXm3FLjC5cu8Ct+7prWl9bz5G9RwAYnxynramNtqa2ggmSn+LvrgrCcqwsNv/g9kSmSGpIadAn/bPcGJjdUJcAApJ6tzZOadNs6kTjxM/rj3Zrk1e0aS1u3LmRKZL2btsL6BOl3sHeguqSr4DnPPIbLuRNIsdC6ZUrw7x8eZizxztIf8sTB1oAPTT7ypXhdb5bI2K0DnaL0aUf6WHZtn3675X1+uOhF/T9l35kz3VEjFblwrULnL96ngO7tA/f7/NzeN9hQA/NptPvCkUhBUkQ7CDXJl5am9KLZysC+vT0iQMtvHx5WLRpsyQc0qbKOv33Koe0SZp4q5LWpo6WDgC8Xv37cmTvEc5fPV9QbSqkLokCCnkTz9F6p3dRdPL4/hZeuTKCAbTUVXL2eAexhJnTQlkRo3Ww296gTJ0gNN0PY5/p/Uknv6ItD8FG/Xk7kEJpVdK7KJrqm7h1/xZ+n5/qqmq6j3aTSCQK7k2XQkkoNaxqU2NNgEv3pqmu8HL2eAdPHmilPujPUZvEercqSjmnTdf+Wv+9sUu0qYCktWkhtMDIxAhVVVV0H+3myL4jVAerC6pNUigJJUE8mVvXLj0IOzqju0uVAS8N1YF1B2QfRMRoHezu2qUHYX/8v+qPDV2wOzWcaWc0uHTtViU9CPvpvU8B8Pl8VFdVuzYgK4WSUEqYSpGrKzytQT9Npd3VVfkz920UDZ5GmnhrYMawdW0FaG2KR5biwVt2whZ92m6rNhX5jJJSylVtevXdVwE9j3Ti0AmAgq+tEOudUBLk2rVLE47pmOGqgPXhcBGjdXDCBw6wOKU/Vjc58/hFLkYAMeVAomCOJBJ6f5Hf5+6MkBRKQikRtzCflCajTRXWf9YDMj+7Oo7pUir+218J/ipnruFZmdBbTLg1n5S5flJf3+91T5ukUBJKAithDgChqBajYIUUSrZhxkE5sBBUmUuC5FShJCdK6xJL6CLN7ULJi6TeCaWDVV0CCMX0a6g08WzEsUJpUn+sbnJmD58nAEZx/z91vVCKpwolv4uFUgGX1Rf3T4NQ1CTyPlHKo2snYrQ6TsSvAoTnQCW1EAXrnbmG+MDXpRhOlLx48RT5mwZBWE4+hVI4Km4H27HbEp4m7XQISgPPtesn9PV9PvfcBnKiJBQ9SqmcZ5TShKKb6NqJvWF1nLbdVTU4tKXcKHp7A7grSOUmRoJgB1YbeLDUxAtatN55DfDKHqXVcaqJF3LaEi6F0obXT2mTm008KZSEoiepwGrfLpLxgefTtRMxWhWnu3aO2e4CztgmbKYYCqVyESNBsAOrDTzIf35WTpPWoWRnZ6VQ2ohicDtIoSQUPVaDHABC6a6d2Bvswykxkq4dSZXEtDu1yQJSKAmCdfLSppTbwer8rOjSOjgd5uBYE6/4Q4biSk6UpFASip7Eprp2MqNkG0537ezYcr4aJZB453bXrtzESBDsIK8ZJTlRsh+nrHfLwxycoASaeMWiTeViC5ffciEvNtO1s2q983kMPCVg03IFx8QofaLU7Mzjy8DshpSbvUEQ7GAzM0pWm3gyO7sGZiK1R8kBnD5RkkJpXZRSZdfEk99yIS8207Wzar2Trt06OO4Dd+pEqfjFKIZ7O5SgSLp2BYxgFQQ7sDqjlEiaxBK6uLLaxBNtWgOnGnhmAsKz+rasrXCFZDKZue1qoSTx4EKxs6muncVkIRGjNVCmgydK6a6dQydKJVAouX2iVG5dO0Gwg3wXoQNU+a0WSuJ0WBXHZmdnAKWTWCtrnblGCdjC3WzipXUJwOcV650grEleyUJ57qoISPzq6iSjzjyuUs77wGVgduPrS6EkCJax6nZIF0qVfg8ei1ojTbw1cNoSHmx0bilsKZwouahNGaeD14fHReupFEpC0ZNf6l1+e5REjNbAqa5dLASJVBEmPnDXkBklQbCO9f1++TkdQLRpTZzSpgWHG3iGDzzWU3kLTTGsrXDTEg5SKAklgNWuXdJUROO6uJIIVptwej6pogZ8Di2FLYWuXZFY78olWUgQ7MCqLTycauDJ2gobcWq/X0iCHKA4CiU3G3gghZJQAiQsFkqR5T5wq8lCIkarU6pBDlASgiTJQuCl+LurgrCcvK13+RRKknq3Oo5pk9OW8OLXJXBXm4rB6QBSKAklQDxprWuXtt0FfB684gO3B8e6dk5Hg/ud85fbiJtiZJomSuk3fGK9E4TcsRzmEJVF6LbjeMiQnCi5du0iaOCBpN4JJYDlrp2Ikf0UYmDWCUqkaxdT7iULxRJL13ZTkPyGu2IoCFaxugw9Mzub14ySBA2tQKkCuB2cKpSKP2QIiiTMQWaUBGF98o1gtbqnAiT1bk0cEyOnu3YlIkZFYG/weDxlkywkCJtFKUVC5We9y6eJ55cm3krMKGA9FTcnnC6USqSJJydKhdUmUUEhL3KZUXr58hAew+Ds8c6MGPm9Hl6+PEQsYRLweXjxxJYNH0dOlFbB7q7dxR9oO9zJl5Z84BP39fDsp+f0zqZTv2DPtUSM1uT81fN4DA97tu8BtBgthhe5/tl1EokEPp+P08dOF+z5SKEklBK5Oh2ytCnldjAMLGmT32PgMaSJtwK7G3hpbTrx5SVb+L0PoLbVfm0S692qpHWp+2h3polnYHD+6nlXdAmkUBJKgFxmlDyGwcuXhwGoqdQ/aj6vh1eujADw4onOnK4lhdIqqDio5MZflyuGBy5+X99Od+36LsGlH8HN1+DUL9p3LRGjNfEYHs5fPc9CaAFYKpQuXLsA8FCLkSBsllwT75ZrUygdNGQYlrRJdGkN7J6dTWtTPAJm6v/V9b+BZFy0qUCkdQnASDcHDFzTJZBCSSgBcuncnT2uxebly8Ps36K3aM+H9S/4EwdaMp/fCBGkVUjYPJ908iX98eL3wbssEjwtROnP24GI0Zp0H+0GyIiS3+fnxmc3ADiy90jm84VCCiWhlMh1h9JybWqq0a93/eOLQO7aJLq0BnbPzi7XJoDKGogsOKNNJbAIXSlVcG1arktbWvVJ6+z8LOCOLoEUSkIJkOuM0tnjnUTiSd68PgbA+JxeZLqtJcjARAiAuqCfuuDafle/zCitxIn5pINnYGECbp1bum/HKdh+Qtvwgg32BDyUgBiBewOz3Ue7GZ8a597APabnppme0zNjrc2tjE3p36Pqqmqqq6odfy5SKAmlhJWQoQe16c6IPsXNVZv8Eg2+Ok5p0+gtGLiqiyRwRptKoImXIIFyagZsHbqPdhOLx7h88zIAU7PaeeKGLkFhV1eICgqWMZXCSuhdwLdSUP79u32Z22ePd6zpBw94jKWjXmEJJ8To5uvZRRJA70X9B+DkV+zxgpdImEOUqGvXXk0Iz51f+n/TfbS7IHaHgOHQwmFBcACrIUOb0iZJvFsdp7Rp4Gr2fXZrk+GFAkZO54uburRa0p0rukSgoO8Li/+nQig6rC6bjSVWitdXn9pOV1MQYN3TJJ/YG1bHCTE69DyM3YWBK0v37TilRQh0184OfIXpOG0GpRTzzLt2/XB45f/fM6fP0NrUClCwrl0ttQW5jiDYQbKA2iQnSmvgxH6/Q8/D/Q9huh8wAGW/NvmqdaJHkTPHnGvXTgc5LKccdEl+0wXLWCmUXrkyzJvXx2it00fauztqAOifCNHVEqSrJSi2u3xwQow+PbdUJHUe1h97L0LfZWjZZZPtzp89A1WkhAiRxMawDAtcuHaBkUk9VP74o49zZO8RAMYnx2lraqOtqa1gtrtKSuP0TxAgP21Kvzc+uVu/vuWsTXKitDpONPE+PZcqkoBHf05/tFubSqCBBzCv3GngXbh2gcs3L2diwXd37QYKr0sAtYYUSkKRk2uy0CtXhnn58jAvnujMCM7BVKjD+7cmeOXK8IaPIV27NbBbjC79SA/Ltu3Tf0/vqTj0gr7/0o/suU6JiJFbXbsL1y5w/up5aqv170ltdS2H9+mi9fqd65mUoUJQS63YXoWSItcdSmltOnu8g/S3PL6/Gchdm3zSxFuJGQe18tRhU6S1qTL15rha/38qW21ShdemtC51H+nO7FE6uv8oUHhdgsKfKIn1TrBMrl07UylePNHJ2eOdXO+bAaChOsDZ4x3EEiZmDqImYrQGdhdKytQJQuN39d8bu7St4dDzulunrHn/16RExMitrp2pTE4fO82NOzrprq6mjuqq6sz+CtOu/w85UOiunSBsllybeGlteupgayYSvLm20pI2SRNvFZw4TUrvSbryl/rvLTsd0qYaex7HYdywhKd1ae+OvVy4fgG/z09jfaMrugSF1yYplATL5FooLR+CjcT0L1JTbQWP7W3O+Vqy+XwVVBLMmL2PmR6E/f5v648tu6DrmL5tZ/xqiYiRWydKp4+dJmkm+fDah8BSoeTGnooaSuP/lSCksapNk/N6MN7vNWisCeS0AD2NNPFWwQlL+Klf0Lv90otnW3dD+379OVu1SZp4a5HWn96hXkDrUk2wxhVdAplREkqAXO0Ny4km9LxHhd/aj5zMKK2CE2IEujM3r2M+qWt35hoiRhuysLiAUgqv10uwMuja85ATJaHUsBo0FI2ndcl61LCcKK2CEydKAHOj+mNNC3gc6u+XiDa5GeYwt6CvnbaGu4XMKAlFj9VkIYBoXJ8oVVoUJOnarYJTYhSa0dvODQ/U5H7qZ4lSESMXfOCZa6fEqK66ztUZIUm8E0oN64WS1qW8CiUJc1iJ04WSUw08T4VzBZiNJFSCECHXrp/Rppo6154DFN7tIIWSYBmrYpQ0VSaG1aogSdduFUq6a+feCYkV3IwGn1ssDjGSEyWh1LCqTZHUiVKlRacDgE+0aSVOuR2cLpRKxBLupi5BcWhTgAAVRmEXA8tvumCZXAdm08TiSzHLVgVJrHerUKpi5A3qpX5FTkIlWGTRtesvP1FyEzlREkqNgp4oiTatxKkm3rzD2uQXp0MuzC/oQs1NbXJDl6RQEixjvWunxcjrMSwvkJWFs6tQqvaGErHdLbDg6vUzPvAa9woV2aEklCJJi+lbmzlRkkJpFRzTptTsbG15a5OcKLnjdJB3oYJl8h2YFTGyiVLt2pWIGLndtSsKMZIdSkIJkneYQ8D6iZJY7x7AiTTWNJkmXpszjy/atCGxeIxINAK4r02FRn7TBcvke6Ik9gabkK6do7jdtSsKe4PMJwklSN7a5LOmTR5DOySEZThlCY8uQjR1yl/mTTxXZ2dTToeKQAUBf8C15yEnSkJJYDUefDMRrNK1ewBlQjLizGM73bUTH/iGJBIJQhGdauRm1052KAmlSN5uh4DV2VnRpRU4bQmvqge/E3ZgQ8/PlgBuatP8YqqB53bIkJwoCaWA1TAH8YHbiFNFknTtMri6pyJluwv4A1QECpvssxw5URJKEcsnSrH83A6ytmIVSnl2tgRsxkqpojhRcr1QkhMloRQo7K4K+RHNwrH5pJTtzqmuneEFT2mEA7i5bHb5Qj/ZoSQIuaOUImnV7ZDIr4knDbxVcFqbytwSHiFCnLhr1y+WNFY33A7yLlSwTCHDHKRz9wBOd+1qHRyWla7dhpRz104QNoNVSzjkbwuXBt4qOL62oryDHNyenS2GkCE3diiBFEpCHiQLdKLkNQw8JfDmuqCU6g6lEhGjKFFiOJTclAPFIEYgJ0pC6WG1gQdL2lQp1rvNU8rWuxLA9TTWIjhRckuXpFASLJPv9nPxgduAiJGjuN21K4bEO9mhJJQi+RRKkVhamyTMYdM4bb0TbXLt2kqponA7uOV0kN92wTJWwxzyThbySqG0AimUHMX1rl0RnCjJDiWhFJETJRdxKo01GYeFSX3bMVt4aSR8uqlNkViEeELPR9VWu+c2kBMloWSwHg+e364K6dqtglPWO8e7dqUhRm6fKC0Pc3ALmU8SSpGkxQYeLIU5WD9RkkIpC6fSWOfHAQW+Ch00ZDeGH7zu7QSygqtprCldClYG8fl8rj0POVESSgJTKaw27pasdyJGm0KpEu7ayYnSRkRjUaKxKCA7lATBKpuz3kkTb1MUwungxCl3iez2A3fTWDOW8DKdnZXfdsESm7I3BKzaG+THMwszBljvmm6I0107TwV43OtCWcHNE6X0Qr/Kisqy23wuCJvFqjYlTUU8qb/HsvVObOHZiCXcUZIqyQILrl2/GCzh4J42lca7F6FoyFWMXr48hMcwOHu8M3Oi9EnfLHs7avng9gSmUrx4Ysu6jyEnSg9gpxhd/AEYHjj50pIY1bTApR9CIqqLplO/YM+1SkSMoPAnSuevnsdjeOg+2p2xN1QHqzl/9TyJRAKfz8fpY6cL+pwk8U4oRaxq09OHWjP3vfXJKJ8/1GZBm6SJl4WdlvDl2jSf0qbQDISm4dNzeh6qzLRpkUUU1pvUm2E1baoMVLqqTW65HaRQEiyRa5CDxzB4+fIwsBTmcPn+NJUBL+/fmuDFE50bPoZ07R7ATjEyPHDx+/p2IKg/VtXrQgng1C/ad60SESNTmQXv2nkMD+evngfA7/MDUFVRxYVrFwAKLkQgJ0pCaZLr7Gxam8Ip253XA69dHWUxmsxdm6SJl42dTbzl2jSXmp0d+wwu/QhuvmazNpWGzdgNS/hybUoXShWBCte0ya0dSiCFkmCRXLt2Z49rsXn58nDWbFJaiNKfXw/p2j2AnWJ08iX98eL3oW2vvh1NFQmHXlj6vB34S0OMFlnEdMLauA7dR7sB3b1rb9b2kkhEz6Ed2Xsk8/lCIidKQimSaxNvuTYB+L1ekmZStGkzOKVNlctei9JFkp3aVCJNPDcs4cu1qbJCr4sYnx4H3NEmN3VJCiXBElZ84I/vb2E2FOf9WxOZ+x7ZVs/hrnoGJkLUBf3UBf1rfr9Y7x7Abh/4yZcgHoarf6X/PtWnP7bsgon7+nawAYKNm7tOqYiRS8Oy3Ue7icVjXL55GYCJGf370trcytiU7qhWV1VTXeX8v6PsUBJKFavaNDgZ4lrfbMYaLtq0CexOYz14BkJTcPP1pft2nILtJ7Q22aFLAL7g5h+jALgVMtR9tJtoLMqVT68A0DPYA7ijTW46HaRQEixhJRr8vVvjWUUSwCf9s3zSPwvA2eMd63rBJczhARIh+x/Tt8pR9tvfWrp98iub94OXSKE0xZRr1/Z5V74Unzt/LnO7+2h3QawODTTIDiWhJLFSKL13a5xrfbNZ91nSJrGFL+FEGuvN17OLJIDei/oP2KNL3iowrIV4uIWb2pRIJlbc55Y2uYUUSoIlTAti9OSBVmYW4nx4ZzJz3yPb6vlSytqwXscOpGu3gqQDhVJ8FYF7+hv6VAl0525TGFqQSoBBNejatRfDiyvuO3P6DK1NeuC8EB07gE5jY9uRIBQjSQtNvCcPtNI7tsitoaVTZGvaJE28DMkItqexHnoexu9B/+Wl+3ac0gUS2KBLlMx8UlIlGVbDrl1/Zn5mxX3lpk3y2y5YwsqJ0ge3J7KKJNBduxsDs3S1BDcUIxmYXYZS9p8oXfoRXPvP+rbXr8UJtLWhZZf+Y4ftzij+lxlTmQypIVeufeHaBW7cvQHAltYtHNl7BIDxyXHamtpoa2ormBh1GB0FuY4g2E3SQhPvg9sTmSJpR4u2X4k25UlyZZNn03x6bqlIaj+gP/ZehL7L9ugSlIzTYZxx4sRdufaFaxcYGBkAdHiDm9rUbjgUEZ8Dxf8ORigqchWjV64M8/LlYZ45rLsO/pRV4YkDLbx8eZhXrmzcIZGu3TKSYbAzHvTSj/Sw7N6n9d/r2uFgqlC6+Zr+vB2UkBjFiBX8uheuXeD81fM0NzQDsLV9K4f3HQbg+p3rmYShQiEnSkKpkuuJUlqbDm/TO2H8Pq0zuWqT19DJeUIKJxp4F78Pbfv032ta9MdDL+j77dKmElk265bTIa1NPp82nrmpTc00u5Z4B2K9EyySqxjpXRSdHNlez09vjBPwezhztJUnD7RSH/Rj5vA44gNfht1ipEydIBQIwp23oa5D2xlOfkXvUVI2WSlKpFByS4xMZfK5o5/jkzufAFqMqquq6T7aTSKRwLTr/0MONNBAlVEaNklBeJBcm3hpbfJ7PdzonyNY4ePs8Y6ctUlmZx/AKW0av6v/3rQN6r+iHQ/BRhu1qTSsd4Ome9p0dP9Rrt2+hs/ro725nUgs4oo2ud3Ak0JJsESuYpQehL0/qiOnK/2+zH25xK+C2BuysNvekB6Efe+7+mN9pxYhuxb5pSkVMXKpUDp97DQzczN8eO1DPB4PHS0drizyA7HdCaVNrk28tA69fFlbbWuqrGmT6NIDJBzSpn//j/XH1j2wVVu+yi0aPK7ijDLqyrVPHzvNtdvXAOhs7cTr9VJdVV2W2iStEcESVgZmAWIJ3XVYvkspV8R6twwnEu8AZlM2k3qHXohKwN4QV3FG1Ihr1x8c00VaukhyC7fFSBA2g5XUO4BYPKVNPms6IyFDD+CENplJmEsVCE5ok+EDj3tWrlwZVsMF3+23nIFRPZ+0tX2ra88B3NcmeScqWMLKwCxANJGfGIF07rJwrFBKFQj1Dh1tl8CJ0ogacVWMBkd1oeS2GLltbxCEzZCLnXs56SZewG8tIlqsd8tQypk01oUJUEkdMlTdZP/j+6qhBObM3ExiVUotaVObe9pURx3VhrsNV/mNFyxhJfUOIJZa5mdVjDwyMJuN3fYGgGQCFvSmbUe6dp4AeNZPjyoG3BajYujaBQm6uvlcEDZLwmKvI98mnjTwlmFGdUFjN2mnQ12HM6mpJWC7A3e1aWp2ikg0gs/ro625zbXn4fZpEkihJFgk3xOlgGV7g/xoZnCqazc/qh/bXwlVDfY/vojRhszMzxAKh/B6vHS0uCcInUanLJoVShqrtvBouokn1rv8KVmnQ/FrU1iFmWRy4y90iPRpUno+yS2Kwekg70YFS1gXI+nabRrTxhS65WR17Rz49y4RMZpgwrXrp8WovaUdn1fmkwQhX6w28ZbmZy1a77zytilDqc7OloAl3M0GHoglfDnyGy9YwroY6a6d1TAH6dotw/GuXfmKkVtLZtOkxairvcvV51EMYiQI+aKUKlgTT7RpGU4sm4Ulbaor35Ahty3h6ZAhNwulKqqoo86166eRQkmwhOXUu3jaeicDs3njxHwSiL2BIhCjIujaBQjQhAMD04JQICz274ClJl7AYhNP3A7LcKqJN1fe2qSUYkANuHb9yZnJophPKhZLuLwbFSyR94ySiFH+OG1vcKprV+RiBEUwnxTR80ntLe2uPY8Oo6MoxEgQ8sVqAw+WTpSsNvFkfnYZjoQMxZ0NGfJWgeHezE0uzDHHAguuXT99mtTZ1onX496/VbFYwuU3XrBEvgOzYm/YBE4EOYDDXTsDfEEHHtc+5tQcc8y5dv3BkdT+pNYOV+eTxHYnlDpWdyhB/jv+pImXQilnmnhzY6mQoSqoqrf/8aWBt/H1xRKehRRKgiWsRrDKwKwNONG1S0RhcUrfdqJr5ws6E+tqI66LURF4wKF4unaCkC/5nSjl18QTW3gKMw4qYf/jLg9ycCRkqPhnZ8USXlyWcPmNFyxhdanfkr1BTpTywqmuXXo+qaIGKh3YnyNitC7FsszPi5dWWl27viDYgVVLuGkq4kn9PVZ3/Ik2pXDc6VCelnCllKvaNDkzSTQWxe/z09rknja0G+14iqTZWhzPQigZrFocYrLUb3OYMYe6diJGborR9Ny0nk/yurs/qY02vEXu1xeEjbAcMpRcskZYbeKJNqVwLGQoPTtbnkEOE0wQJera9bP2J8l8EiCFkmCB/CJY80sWkoHZFI6lCpW3GE0xRYSIa9fPiFGLLPMThM1ieW1FyulgGOD3Wit8RJtSlOraiiKPBnfdEl4EtjsoLm2S33ghZ/KLYM1zRkm6dhqn7A1lfqLkZvQqFI8YFVPXThDyZTMhQ1YTH0WbUji+bNaBN8qGFzyV9j+ujbhuCS+C2VkPnqKyhEuhJOTMZiJYxXqXJyW7Q6m4Z5RcF6MiKJQMDNoN92LJBcEu8l9bYf0012fxBOqhxYlls/EIhKb1bSfWVviqnQmIsImESjCiRly7/vL5pLYm9/YntdGGz3AvCfZBpFAScsaqGAFE00v9LIc5yI8mUICunQNi5PGDN2D/49pEUiUZVsOuXX96bppwNIzP66O92b1CpZlmAkbx/n8ShFxJ5LkI3WoDD8BXxG+0C4oj0eDLQ4YcaLYVudNhVI2SwIGZ5BxJN/C2tG3B4+J7sGJzOsi7USFnrJ4omaYikWeykJwopXBCjKKLEEntD3Kka1fcp0mjuCtGAyPa9tfR2uHqfFKxiZEg5Iv1E6X8Gng+jyHLmUFHg5sx+x9XnA6uXn9gVGuTm0msUFzzSQDFc7YlFD25Jt69fHkIj2HwzOGlo9uffjLK5w+18cHtCUylePHElnUfQwqlFHbNKF38gd5rdPKlpa5dZR1c+896p5KvAk79gj3XKvKu3aBZWDE6f/U8HsND99Fuff2UB1wpxbuX3sXn83H62OmCPicoPjEShHzJtYmX1qb2Bj2n4vUYvHx5iCcPtOakTaJLKexs4C3XprTTobpJ319u2lTgQmm5NimlGBobAmBmfsZVbSo2S7gUSkLO5CpGHsPg5cvDRFIDswbw2tVRFqNJ3r81wYsnNn6DJtY77O3aGR64+H19uy71IlTdBJd+qG+f+kV7rgMiRg/gMTycv3oegMeOPJaxNwyODjI4OuiKEIGcKAkPD7meKKW16cj2+szfX7kywnw4kZM2iS6lsDNkaLk2zY3qj5V1DmlT8Z4oRVWUccYLes3l2rRz606isSg+r48bd28AuKJNzTRTYVQU/LrrIYWSkDO5itHZ41psXr6su0N+n0EsoTJClP78esjALPZ27U6+pD9e/D50Hk49fqoIO/TC0uftoIjFKKZijDFW0GumT5LOXz1PKBIiEo1gYKBQHNl7JPP5QlJPPUEjWPDrCoIT5NrEW02bgJy1SU6UUtgZMrRcm6qb9O20Bc92bSre17whNYQij2jhTbBcm4bH9e9EZUUlC6EF17SpGBt4UigJOWNlRunx/S0MTYW52jtDLKG/75Ft9RzuqmdgIkRd0E9d0L/m98vALPYn3p18CeJhuPpX+u+z+pidll0wcV/fDjZAsHFz1yniEyU3xAi0IMXiMS7fvAyQeQ6tza2MTenCrbqqmuqqwvzbie1OeJiwMqP0+P4WbvTP0jcR4rPhBSB3bfJLoaSxe3b2QW0auqY/2qlN3krwFO9bXrfmkx7UpoWQ/p0QbVqieH9qhKIj1xklgPdujXO1dybrvk/6Z/mkfxaAs8c71vSCy8BsCieCHHyrHGm//a2l2ye/sjk/uOEp6q5dj+px7do+78qX23Pnz2Vudx/tLpjVYZexqyDXEYRCYFWb+iayX1tz1yax3gHOrK1YrRFrpzb5avP/XocxlUmv6nXt+mqVf3s3tMmPny6jy/HrWEUKJSFn4qaZ89c+eaCVvvFFPh2cz9z3yLZ6vpSyNqx7miRdO01iwf7HjK9SfD39Dd25A9212wz+Bl0sFSFRFeWuuuva9afnp1fcd+b0GVqb9GK9QnXsmmhim7GtINcShEJgVZuu9swwMhPJ3CfaZBEnCqX5VeZz7NSmik06JRykX/WzgAN6nyMj4yt3N7mhTYeMQ0U3nwQSDy5YIJ7MvWv3we2JTJG0vUWfMHzSP8uNgVm6WoLripHYG1LYXShd+hFc+xt9u6IGDj2vb0/c12LUsmvztrtA8YrRZ+oz12LBL1y7wJ3eOwAc3nuYI3uPADA+OU5bUxttTW0FE6PjnuNyYis8VMQtnCh9cHsiUyQ9fUi/ERRtskAyZn80+KUfQc+H+vaeJ/RsEpSNNt1UN1279vmPzzMyqQulF59+0TVt8uDhmOeY49fJBymUhJzJtWv3ypVhXr48zKGuOmBpV8UTB1p4+fIwr1xZf9mn2BvQNgQ7u3aXfqSHZXec0n9v3gkHU4XSzdf05+0g0GDP49iMUoob5g1Xrn3h2oVMshDAowce5fA+Hahx/c51Lly7ULDnUkste4w9BbueIBSCWNKaNrXW6a51RWq/n2iTBew+TUprU0PKctW8Ew5+Qd+2TZsM8Nfb8Dj2s6AW6FN9rlz7wrULXLiu9ac2WMvurt2uadN+Yz/VRnHON4v1TsiZXE+U9C6KTjyGwc2BOWqq/Jw93sGTB1qpD/oxNwiFEHsDkIyAStr3eMrUMavhGf33lp3aynDyK3pXhcrdurIuRdq1G2WUaVZa3wqBqUw6WzoZnhhmW8c2mhuaWQwv0n20m0QigWnXv30OHPMcw1Ok1khByJdcT5TS2vTZ8Dzjc1Hqgz7RJqvY7XRIa9Nnb+u/N++0X5v8tUUb5HDTvOlKwBCAaZoEK4OEIiGOHjiKx+OhuqraFW161PNowa5lleL8yRGKklxPlNKDsH/1kU5xqavyZ+7LKRpcxMh+MUoPwf7l/6I/Nu/UVga7FvmBTrvzBux7PBtx6zQJ4MShE3z86ccAHDugrQXVVdUF31FRSSUHjAMFvaYgFIJ4jidKaR26lgoaaqqt4KlDejF6Ltok1juc0aZYaGmXUstOvUfJTm0q0gaeqUw+VZ+6dv2tHVu5cP0CPq+Pw3v0SZIb2rTL2EWD0VDQa1pBWotCzsQszCgBRGL6RKQyYO3HTJb64cywrGnCVOqIv3mn/Y9fpGIUURHuqXuuXf/W/VvE4jHqa+vZuXWna8/jqOcofmPt+QtBKEWUUpZmlIDMMvTKlPUuV6SJhzPaNJnSpeomXSTZTZFqU5/qI4QD6bY5cvXTqwAc3H2QyopK157Hcc9x166dC0X9jvSb3/wm3d3d1NbW0tbWxpe//GVu3brl9tMqWxIWkoUAwiJG+eNE4t3csLYy+Cqg3oFdBUU6n3Rb3SaJjTZGCyilsk6T3ApR8OPnEeMRV679MCLaVDwkLOz3S7PUxLOoTd6ifstUGOIOaNNkj/7oRAMPirZQuqHcczrMzs9yb0A3EB894J7tbYuxhTajzbXr50JR/9a/9dZb/OZv/iYffPABr776KolEgrNnz7K46EBHQ9gQKxGsANF8xUgKJWe6dhM9+mPTdnDi1K4IxUgpxU3TvUShvqE+ZuZnCPgDHNp9yLXnUayxq6WKaFPxYCWNFfRrQiSutcxqE6/srXcqCUkHTkDShVLLTvsf21Ohl80WGfNqnn7V79r1r97Wp0nbO7fTWO+edh83jrt27Vwp6hmll19+Oevvf/qnf0pbWxsXL17kmWeecelZlS9WrXfpE6Uqi4WSWO9wuGu3w/7HNnzgq7H/cTfJMMPMMOPa9T++pU+TDu05RMDvzvxWMceuliqiTcWD1QZePKlIpqx6VrWp7FPvnFiCDktNPKcs4UW4DsHNBl4sHuPmXX39Rw+6d5rUQktRLph9kKIulB5kdlZvzm5qalrza6LRKNFoNPP3ubk5x59XuWBVkDL2BrHeWcOMgxnd+Ous4mTXTsRoBVOzU/QN92EYhqvWhmKOXX1YEG1yD6snSmldMoCA31rhU/ba5IQlPBmH6QF924lCqQgXzSZVklvKPavuzXs3icVjNNQ1sL1zu2vPo1R2+pVMe0QpxT/6R/+Iz3/+8xw5cmTNr/vmN79JfX195s+2bbKB3g6SpsLivOySvUGsd9ZwwnanlMNduwb7H3OThFXY1RCHq7e0tWHX1l3U1TgwoJwjxRy7+jAg2uQulht4KadDhd+Dx+KbtLK33sUd0KbpAW3pq6iGmhb7H78ItalX9boW4qCUymjTowceda1QqaOOXcYuV65tlZIplP7+3//7XL16le9973vrft0/+Sf/hNnZ2cyf/n73PKAPE1bFCPI/USp7650TXbvFKYgugOGBRgfeoBXhfNItdQuTwu2BWE4kGuHTezr21U1rQ7HHrj4MiDa5S67R4GnyDXIAaeI5ok3LG3i2v2n3gN+9JtVauBni0DPYw+z8LBWBCg7uPuja83jU82jJ7PQrCevdP/gH/4Af//jH/PSnP6Wra30/Y0VFBRUVMrRsN1bjV/XAbH7x4GUvRk507Sbv64+NW8HnwKxMkXXt3A5xuHHnBolkgpbGFra0bXHteRR77GqpI9rkPoWKBgfwloBNyFGcKJScTLwL1INh/f+zk8yqWQbVoGvXT8/NHt5zGL/PnXURVVSx39jvyrXzoagLJaUU/+Af/AP+w3/4D7z55pvs2lUax3QPI1a7drGESTq1VWaULOJ0185u/HVFt/V8UA0yhzszIKZpZhKF3LQ2lELsaqki2lQ8xAp0ouT3GCUxT+EYSjm0Q6lHf3RqdrbIcLOBNzkzycDIAIZhcHT/UdeexzHPMXxGcb1nWI+ifqa/+Zu/yb/7d/+Ov/zLv6S2tpaRkREA6uvrqaqqcvnZlRdWu3bhlBh5DAj4ZOGsJRwRo179sUzmk24q98ToXv89FkILVFVUsW/nPteeRynErpYqok3FQ8LyiVJ+0eBl38AzI3qWyNbHNMtKm9wOcUjv9Nu9bbdrc7MBAhwy3FuVkQ9F/Y70//q//i9mZ2d57rnn6OzszPz5v//v/9vtp1Z2WPaBZwZmvZa7cD5vGQuSMqVrt0lCKkSP6nHt+lc+vQLAkf1H8Hnd6UWVSuxqqSLaVDzErC5Cz3u/X1G/XXIeJyzhcyN6Cbo3APUOWJSLTJvuq/tEiLhy7XAkzK0eXaS5mcJ62Dhccjv9ivpESeWxcVtwBss+8JgWL6t7KqDMO3eJEGDzz31kHhYm9G2n9lQUEW6GOIxOjjIyMYLH4+HIvrUT0JymVGJXSxXRpuLBcjx4njNKZZ945+h8kgNL0L1B8BbXG3I3nQ6f3PmEZDJJa1Mrna2drjwHL16OeNzTxXwp8xaJkCv5nijllSxUzm/wnLTd1bZBIGjvY3sC4C0eq5HbIQ5pa8O+HfuornJnd1Epxa4KwmbJd79flYQMWaPUZmeLzHY3o2YYUkOuXDtpJrl2+xrg7txsqe70k0JJyAmr9obNLJst6064k127Mlg0O6AGmGfelWsvhBa403cHcNfaUEqxq4KwWfJdOGtdm8r8d8pJS3gZOB3cbODd7bvLYniRYGWQfTvcmZs1MEp2p1+Z/+YLuZJ3BKt07axRcl274hIjN/dTXP/sOqZp0tnaSVuzO2lzpRa7KgibJd+Fs7II3SJxm7VJKWebeBXFo00JlSiKEIcj+4/g9boTl77L2EW9Ue/KtTeLFEpCTuS91E984NZwZIdSj/74kBdKi2qRXtXryrUTyQTXP7sOuLtgttRiVwVhs+RrvcsnHrxsMeNgRu19zMUpPT/rxBJ0wwu+WnsfcxPcU/eIYvO/X46MTIwwOjlaFHOzpYoUSkJO5BsPLslCFlDK/hOlRBRmU75o27t2HggUz9bzT9WnKLuDMHLkds9tItEItcFadnftduU5lGLsqiBsBqWUZetdOM8wh7LWJidtdw0OLEEPNBSVJbwY5mb379xPsNLmGeUc6TK6aDVaXbm2HUjrUciJXE6UXr48hMcwOHu8M9O1M1L3xxImAZ+HF0+sHwFa1vYGMwYqsfnHufgD3aU7+RJM9ukCrLIWbr6uCydfBZz6hc1fx19XNFvPTWXyqflpwa53/up5PIaH7qPdKKUyYlRfV8/7V97H5/Nx+tjpgj0fKM3YVUHYDEmVW2tkNW261jvDjtZqPrg9ganUhtpU1idKdhVKWdrUk7rTgNA0fHpOr8ewQ5uKyOkwpaYYYaQg11quS6DnZj/r/QzQTYXzV88XXJeg9Hf6SaEk5EQuJ0oew+Dly8PAkg/cMOCVK/pF4sUTG0dSlnWhZNdpkuGBi9/XtytT9oO6Drj0Q3371C/ac50i8oD3q34WcGC+aw08hofzV88D0NnWyeTMJF6Pl4GRAQZGBgouRqUauyoImyHX06RsbdJNv4/uTuH3eXj/1oRo00bYNZ+0XJvSs7PTfXDpR3DzNfu0qYgKpUKeJi3Xpe6j3ZmkO4Bb92+5UiS10soWw4EdWQVECiUhJ3LxgZ89rsXm5cvDtNXrzvbgZBiAJw60ZD6/Hv6ytjfYJEYnX9IfL34fWlIx0cm4/njohaXPb5Yiil8t9H6KdMfu/NXzNNQ1AFBXU8f03DRH9h7JfL5QlGrsqiBshlznk5Zrk3dZwZMuknLRJp9XtGnTLNem5asq0kXSQ6ZNcRXntrpdsOst16WkmczMzQKu6BI8HDv9pFASciLXzt3Z451E4knevD4GwP0xfWS/rSXIwEQIgLqgn7qgf9XvL++unY0+8JMvQTwMV/9K/z2TLrQLJu7r28EGCG6i81YkXbsFtUCf6iv4dbuPdjO7MMun97Tlb3puGoDW5lbGpvTPf3VVteP7lEo5dlUQNoOV+aTH97cwuxjn/dsTmfse2VbP4a56BiZC6+oSlLk22TmjdPAMzI3BZ28t3bfjFGw/obVps7rkqwHP2v8fC8k9dY8YsYJes/toN7F4jI+uf5R1f6F1CaCeenYaOx2/jtNIoSRsSMI0SVrYRB/wrey8/ft3l97Inj3esaYfvKKcu3bxWZsfcBVhf/tbS7dPfiV/P7ivBryV+X2vzVwwL7gS4pBIJOgdXJmyd+78uczt7qPdjtsdHjUeLdnYVUHYDJFkMuevfe/WeFaRBPBJ/yyf9OvX3fV0CcpYm8y4vYXSzdeziySA3ov6D2xOlwAqWvL/XhuJqziXzEvuXDsRX3FfoXXJwODzns8/FDv9pFASNmQxnrsYAcQSK+0QX31qO11N+qh9va5d0GIS0UODGYfYjL2POd2/8r6nv7Fkxws25P/YVR35f6+N3DPvFdTasJx3Lr1DOKqtpYZhoFLNhDOnz9DapBN+nO7abTW20u0pvJ1CEIqBkAVtevJAK0OTYa73LzWkHtlWz5dStrv1dAnKWJuiU2BnI+rQ83DnXZgbQTfzlD5ROvkV/fnN6BIUjTa9b77PHHMFv248EedO750V9xdSlwC6Pd10ebocv04hKP1ST3AcK4XSK1eGM7Y7gNP7mgHonwjR1RKkqyUohdJq2C1Gl34E/Vf07eP/hZ5NAm1taNml/2zG3lC1saffaRbVIm+bb7ty7Tu9dzL+7wO7DvCbv/SbHNmrwxTGJ8dpa2qjranNUUGqoYbnPc8/FB07QcgHK9r0we2JTJG0takK0CdKNwZmN9QljwGV5XqiFJ3Y+GuscPONVJEEfP7r+mPvRei7vHld8lQUhSW81+wt+Nxsmh+9+iMisQh+n59ff+nXC65LADuNnSWfdLecMv3NF6yQa9fulSvDvHx5mCcO6KPv2iofTx3UHYz3b03wypXhDR8j6CvXQslGMbr0Iz0s600J//aTcPAL+vbN1/TnN4OvWlvvXEQpxVvmW0SIFPzas/OzvPreqwBsad3CF5/8IgCH9x0G4Pqd61y4dsHR5+DFy1nvWaqMKkevIwjFjFVt2rdFp4Cmi6InDrTw8uXhDbWpyuct+YH0vLFbmy79QN8OBKF5h7596AWtWZvVpqoO1/cnhVWYt8y3Nv5CB/ibt/+G8alxAH7m2Z8hWBUsqC4BNNDAGc+Zh+r3Rax3wobkKkZ6F0Un7Q2VvH9rgqaaCuqCfs4e7yCWMDFzmHOqKtsTJRvFSJmw/1m4/ZaOB2/dC5FZbW1IRPXnN0MRiNENdYN+tYq10GGSySQ/eecnJM0kNcEavvzClzOfq66qpvtoN4lEAnOz/8Yb8HnP50t6gZ8g2EGuJ0ppbZpZjPMZ87TVV7CtpYMnD7RSH/RvqE1l63RIhO2dT1ImdByEkU9h26NQ06x16dDz+iTJDm1yEaUUPzV/Sphwwa89MzfD/X4d1NR9pJttHduAwuqSHz9nvWcJGDYvEHYZKZSEDVmM57YENT0I++b1UQCaagLUBf0bLvJLU+Xz4HmIuhA5Y7cYnfoF+ODf6NvbjoPHo0XIjkV+AJXu2u5m1AwfmB+4cu33rrzH2NQYFYEKvnL2K3iWxdlXV1UXZE/FIeMQBz0HHb+OIBQzSqmcm3hpDfr//UQv3+xsDPK5lC08l2jwsi2U7LbdnfoFuP+hvr39ZLYubTYa3BOAQNPmHmOT3FK36FE9Bb9uuoFnKpMtbVuyYsALpUsAz3meo9Fw3/poN2K9EzbEysAswNSCjsNsrLHWVRAxspG+y/rj9lP2Pq43CP5aex/TAkmV5I3kGyTIrXi3k/sD9/n4048BeOGJF6itLvy/QxttPOV5quDXFYRiI5q0lsYKm9AmsYTbw/y4DhkyDOg6bu9ju+x0mFNzvGe+58q13738LuPT41RWVHL2qbNZDbxCcdw4zm7P7oJftxBIoSSsi1LKcurd1EIU0CdKVhAxsomZYZgdBo8Xuo7a+9gui9Fl8zLjjBf8uvOL87z2/msAPHrwUXZ17Sr4c6iiii96v4jXKNPfE0FYhtUGnqkU04u6ULKsTeXYxFMKopP2PmZfKi67/QBU2jznWume7c5UJueS54izMpbbae723+XqrauAbuDVBAs/P/ywp69KoSSsS9xUJEyLXbv5lBjVVlj6vrKcT3JEjFL7KDoPZW8/twMXPeCjapRLqvB7KZKmtjVEY1Hamtp48viTBX8OBgYveF6gxnA3REMQigWrDbyFcIJEUmEY0FAthdKGxOfAtHlZarpQ2n7S3sf1+KHCPdvdx+pjRhgp+HXnFuZ444M3ADhx6AQ7t+4s+HMoh/TVh/e/TLAFq2KklGJ6Qbp2OeOIGDllu6sCvzuLTeMqzrnkOVcWy3549UNGJkYI+AN86fNfwust/M/p457H2eLJbdZPEMoB65Zw7XRoCAbweqydipel28Fup0MsDEM39O0dNhdKlR3g0hv1CTXBR+ZHBb/u8gZee0s7jx9/vODPoVzSV6VQEtYllGOQQ+bro0miqYWz0rXLAbvFKLqgE4UAtp+w97FdtN19YH7ALLMbf6HN9A71cvETfUL3hdNfoL628IXiHmMPRw2bLZSCUOJYt4TnN58EZep2sFubBq+DmYC6dqi3uenjktMhoRK8kXwDE2fT5FbjgysfMDo5SkWggi899SW8nsL/jJZL+qoUSsK65CtGtVU+Aj5rP17VvjIMYbRbjAau6ojVhq1akOzEJTHqNXu5oW4U/LqL4UVee0/PJR3Zd4S9O/YW/Dk00cSznmcfqp0UgmAHVpt4U3k6HcoyjdVMQnTa3sdMW8K3n7S34Wb4oaLZvsezwHnzPNPY/O+UAz2DPVy+qZ0jX3j8C9TV1BX8OZRT+qoUSsK65GtvaKqxNp8EZdi1Uw6IUa9DHnBvJfgb7H3MHHBreZ9pmrzy7iuEo2GaG5r5/KnPF/w5BAhw1nsWv+Ev+LUFodix3MTLzM6K02FDYlNg5ymJMqE/bQm3WZuq2lyx3Q2YA1xX1wt+3YXQQiZY6NiBY+zZtqfgz6Hc0lelUBLWxaoY5TufVOH14LPoGy95ojaLkZmEgSv6tiMe8ML+/3Fzed9Hn3zE4Oggfp+fF59+EZ+38KedZzxnqDfcmQkThGLGyg6lNNN5NvFkPskGxu9BeA78VXrhrJ1UFX6vX0RFeNN8s+DXNU2TV955hUg0QmtTK0+dKHyxUkll2aWvSqEkrEuhdiiV3WkS2C9Go7chuggVNdC2z97HdsF259byvoHRAS5cuwDAs93P0lhX+AV6J42T7PTsLPh1BaEUCCdMy7Eust/PAhGbtSmddtd1DOxsOhk+V2x375jvsIiNS+Jz5MK1CwyND+H3+fVcUoGDhQwMvuj5Ytmlr0qhJKyJ7tpZ9YHLDqWcsbtQSovRtuN6h5JdeCogUNhiwa3lfeFImFfefQWlFAd3H+Tg7sJ7sLcZ23jM81jBrysIpUJhdyiV2exsMgqJeXsfM20J32FzEmtlGxT4ZOOOeYe76m5BrwnQP9LPheu6gXfm9Bka6hoK/hzKNX1VCiVhTfTmc2vfk+8OpbLr2iWjELdZjJzaUVHgtDu3lvcppXj1vVcJhUM01jXybPezBb0+QB11fMHzBQlvEIR1WLTYwJMdShawu4G3MAlTvVpDtj1q72MX2Ha3oBZ423y7oNcECIVDvPruqwAc3nOY/Tv3F/w5lHP6qhRKwpoUcodStYjR5pgdgZkh3V2zXYwKa7tza3nf5RuX6Rvuw+v18qXPfwm/r7AhCj58nPWepdKoLOh1BaHUKOgOJdGmzZFu4LXth0ob09kML1S2ue6xXgAAU/pJREFU2Pd4G6CU4px5jhg27z3M4bqvvvcqoUiIpvomnn7s6YJeH6CRxrJOX5VCSVgTq2K0mR1KZTej5JQYdR6EQNC+x/UEIFC4jeduLe8bHh/m/Y/fB+CZx56hpbFwApzmac/TNBvuxNwKQilRyB1KZWULV8q5+SS7nQ4Ftt1dU9cYUkMFu16ai59cpH+kH5/Xx4tPv1jwBl6AAF/yfqms01elUBLWJN/Eu3x2KJWfGE3a+5iOiVF7wWx3bi3vi0QjvPKOnkvat2Mfh/ccLuj1AY4YR9jvKbydQhBKEeuJd/mnsVo9gSppEgtgRu17vHgEhj7Rt21fgF44292UmuJD88OCXS/N0NgQ56+eB+CZ7mdoqi9c0zKNpK9KoSSsQ/5BDtZ3KJWVvSGxCGbEvseLhWD4U33b9vmkwonRh+aHBV/ep5Ti9Q9eZz40T31NPWdOnym4vaCDDh73PF7QawpCKZPviZLsUNoAu50OQ9chGYfaNmjssu9xDS9UtNr3eOuQVEneSL5BEms/c5slHAnzk3d+glKKAzsPcGj3oYJeHyR9NY0USsKa5BsNbrVr5/MYBLxl9KNotxj1f6yX19ZvgXob54k8fqgoTAdrwBzgmrpWkGst5+qtq9wfuI/H4+FLT3+JgN+6NWczBAnygveFstpJIQibwVSKcCJfbZIdSutit+0uswD9hL3OhMpWe5Nd1+Ej8yMmsdkBsgFKKV57/zUWw4s01Dbw7OcKPx+0zdjGKY/NKYUlShm9OxWsUigfeNmJke3zSamN57YvmW0vyMbzqIq6srxvdHKUdy+/C8BTJ5+iramtoNf34OGL3i9SbVQX9LqCUMqELeoSLC2blR1K66BMiE3Z+3j9KW2y3RJeGKfDsBrmirpSkGst58qnV+gd6sXr0cFChW7g1VLLFzxfwFMA/S8FymxBgJAruW4+f/nyEB7D4OzxzowPfHg6zFwozge3JzCV4sUT6+ful50YRTfZnbr4A13AnHwJzGViFJ6D8/8WfBVw6hc2/1wLZLt723zb8eV956+ex2N46D7aDUA0FuVvfvo3mKZJfU09kYiNVsgcecLzBB1G4Rf5CkIpk2sDL61NX3y0I9PEu947Q3t9pWjTasRmtDNhMyzXpon7EJrRJz/1nXDpR1r/Nq1NHn2i5DAxFeON5BuOXuNBXQLoGezh3Uu6gdfV0UVrU2Eshml8+PiS90uSvroMKZSEVcl187nHMHj58jCwNKN0c2COn1wZ5v1bE7x4YuM32yJGFjE8cPH7+vaWRyC6AL5K+Oyn+r5Tv7i5x4eCbTwv1PI+j+HJDMU+duQxzp0/x0JoAYDZhVk8nsJ2zvYb+3nEeKSg1xSEh4FcC6W0NkXjSRKphYBv3xwnYSrRptWww+mwXJvSOmcm4eMfw83X7NGmylbwOP/W9V3zXRZYcPQay3Wp+2g30ViUNz5YKs7am9sdvf5qSPrqSqRQElYl1yCHs8e12Lx8eTgrHSgtROnPr4eIkUVOvqQ/Xvw+DF7Vt6vqYT4Ch15Y+vxmqHLedlfI5X3pjt35q+cZnRylZ7An87kje49kdfScpplmnvY8XbY7KQRhM+Q6O7tcmwBqK33MRxLWtKmcbOF2zCct16Zgw9L96SLJFm1y/hT+nnmP2+q249dZrktKKSZnJglFQgAc2n2Izx37nOPPYTmSvro6YkAUVsXKfNLj+1s4tqOBpLl0BvXItnoOd9UzMBFiLhRf9/vLqlCya1j24Beg4yCM3NJ/nx/VH1t2acvDxH0IbSJBrtJZMSrk8j6lFBPTE/h9fmqra7OKJIDW5lbGpsYYmxpjMeysBbCCCs56z+IzpEclCPlgJY318f0tbG/Re+XmI/r7RJtWwYxDfMaex2rbBw1d2naXZscpHeiwWV3Co/cnOciiWixYAy+ZTNLZ1kl7czsfXvuQu/1L7oqO1o6C6RJI+up6iFoLK4glTe5M5/6L+Z8uDHC1dybrvk/6Z/mkfxaAs8c71vSC76yvoqP6IffCKqXnkhbub06MzAT0XYHbb+oAB7XKvqG3v7V0++RXrPnBPX5dIAW3OLJk1lQmI4zQa/bSq3qZZdb2a6SZW5hjYHSA/uF+BkYHCEfCa37tufPnMre7j3Zz+thp256HBw8ttNBpdNJhdNBhdIj3WxDyZCocY3gxtz0/Sin+zVv36ZsIZd2fizZ5DDjWVof/YU9jVUkIDWlt2gzRRbj7Htw6p4uhB+m9qP+AdV0C8FXrmdmqLVqnbCamYgyoAXpVL32qjwjOzKymm3b9I/30j/QzPDZMIrl64e+kLoFeJNtutGd0qY02SV9dAymUhCzipsm7A1PMRnPr2n1we4JL95Y6RIah64JHttXzpZS1oS648oXN5zE42V5PV12VPU+8GFkuQolNeJ1nBuHWm/DZ2xBeVlxUNUB4Ru+USPvBn/6GPlWCbOvDWhg+bbOr2qJnkmy228VUjH7VnxGgKDYuM1xGOBpmcHSQgZEB+kf6mZ3PLsJ8Xh9b2raQSCYYGhvCMAyU0iegZ06fyQzMVldtLoHuQfFppbWsN5oLgl3MRuO8OzBFwtx4ejaRNPn+e33cHVl63c1Vm2oDPj63pYH6iof49zYZhcVeWOwDM89TfWXC0A3duLv/od6XBFpDqltgYUzfVqY+UTr5Ff35XHQJwFu1VBz5a21ffL6gFuhVvfSoHobUkGOLzmfnZ+kf6WdgZICB0QEi0ewiLFgZpCJQwfTctGO6BFBNdVbDrpFGSbXLESmUhAxJU/H+wDTTkfXtCKB3Wfz1xSHeuDaaue/s8Q6ObGvg9//Tp3zSP8u2luCqPvDGSj+f62ygOvCQ/vjZIULxCNx7XxdIo8u80lV1sO8ZSMTgxitLvu93/rX2gU/c17a89TC82r5QtQUqW/TfbWRezdOr9KmRUwKUSCQYGh/KFEbjU+NZnzcMg/bmdrZ1bKOro4uOlg4u3bjE+avnOX3sNN1Hu3nz/Jtcv3Od8clxHtmbX7BCNdUZ4ek0OkV8BMEB5mMJ3umfIp5DkRSOJvjTN+5xZ2QBA1DAiyc6OdxVv6E27ayv4lhbPT7PQzo/GJuDxfsQGoZ8X5cXJuH2W/rP/NjS/Y3b4MBzEJqFqz/W2rT9BPyH/1GfJrXs3nhGyVOhi6PgFvDX21ocKaUYZzzjaHBqN1IoEtJFUUqb5hfnsz7v9/nZ2r6Vro4utnVs427fXT689qGtugTQRFNGmzqMDmqN2s3+p5UtD+k7VcEqplJ8MDTNRHjjN/bxhMn33unlyv2lk6T0cOxAyubwxIGWzBDtckHa31TN4ZZaPA/jIPtmRUgpXRTdelMXSYnU6YvhgW3HtQhtPwFXfgxX/yp7OPbgF3ShdPM1CDauIkipSNXgFqhos3VZn1KKMcYyAjSFjbs4UpimydjUWEZ8RsZHSJrZc3RN9U0Z8dnavjVr98SFaxeyiiSAw/sOc/3Oda7fuU51sDqnQIcHxaeGGgllEAQHCcUTvNM/STS58Wvq1HyUb716l9HZCF6PQdJUOWnTQ+1wUAoiY9rZkO+epGRcFzu3zsHANUhn4vqrYM+TcPCMLoQu/4elIikdEQ46ZCidhvegNnkCOqChagsEGm0tjhIqwaAapEf10Kf6CBHa+JssEovHGB4b1qdGowNMTGfPIXsMDx0tHXR1drGtfRttLW14U/p74dqFrCIJ8tMlDx7aaMvSpgrD2nJlYW2kUBIwleLC0AyjOXi/FyIJvvP6XXrGFvF6DA5traNrWXeuLujn7PEOnjzQSn3Qj5k6Rq7weniss4H26ofsl9cOEQrN6GjvW2/B7NDS/XUdcOAM7Ps8VC+bGVLmygShYIO2NiSiy2aXDF0cVXXqEyQbvd1xFWdQDWZOjsKsPQOUD0opZuZmsiwLsXh2EV8TrMkqjGqCNWs+nqnMLDECbWfoPtpNIpHAXGXe60HxaTfaZb5IEApIOJHk7f4pwomNi6Te8UX+9Wt3WYgkqA/6ObytjvpgYENtemgdDmYCQgOw0APJPAuEyV5trfvsHb2GIk3nYd242/U5vbcvzYPalNalQ8/rBl76ddbwp4qjTqhostXyHVKhjC4NqkES5B7+kQtJM8nY5JjWpuEBRiZHMM3sn8/mhma2dWxjW8c2Ots611wYm48ugQ4FajfaM1a6FlokIMhBDJU2RD6kzM3NUV9fz+zsLHV1dW4/naJDKcXFkVn65jZ+ozs+G+Fbr95lYj5KZcDLr31hN/s6Nz7ObQsGeKyzgcqHKWp1syJkJqD/ij49Wh7M4KuA3Y/D/ueg40B+3bWKlpS3u11362xiUS1mCVCSTe6DeoCF0ELmxGhgZGBF0k/AH8gURl0dXTTUNth6mhMgkNWRa6VVxGeTyOvv2si/zfpEEyY/7Z9kPrbxG92rvTP827fuE08qtjZV8fUX9tBQvfFr30PpcEiEUtbvflB5FAmZYIY3YeLe0v3VTdr2vf9ZqM8jFdXwQWU7BDu1RtlUHCmlmGJKa5PZyxhjG3+T1cefncpo0+DoIPFE9nhCbXVtRpe6OroIVgZtfQ411GTs3en5InEybA4rr7/yLqCMUUrx8dhcTkXSvZEFvvPGXULRJE01Ab7xxT20N6xvUzCAwy217G+qfnh+qTcrQjNDy4IZZpbub9unO3S7H4dAHi+ygaZUcdQBXntO7ZRSTDKpB17NHiawKdo8RTQWZWhsSCcADfczPZcdG+v1eOls7cwUR61NrbYuhhXxEYTiJJ40eXdg4yJJKcVbn4zxny4MooCDW+v4lTO7qNwg1vuhczgopZeZL9yHyEge32/C8E1trVsezODx6iCGA2dg6zGw+vpreHRxVNWp3Q02zcMmVZIhNZRp3Nm9GHZ+cX7JzTAykNltlKYiUJEpjLZ1bKOups5W7WimOdvibaztlhCcRwqlMkUpxScT89yb2fg05OLdKf7inV6SpmJ7S5Cvv7CH2qr1bVxBn5fuLQ00V9l3ouEamxWheATufZAKZri1dH9lHex7WhdIjV3WH9ffoLtzVZ3gtccSllCJLAFaxL79DclkkuGJ4UxnbmxyjAcPtFubWpcsC62d+Hz2vUSl54s6jU7ajXYZbhWEIiRhmrw3OMXMBsmrSVPxH8/38+6nuoHz5MEWfv70tqzF56vxUDkclAnhkdTqiTzWLawZzNCli6O9n9cBQpbwPGD5tuc1PKzCmQTVftVPnI1Dp3IlEo0wODqYKY5m5meyPu/z+uhs68wUR62NrbYVRl68KyzeMl9UXEihVKbcmlrg9tT6b4KVUrx2dYS/uaQHX49ur+drz+4i4Fu/q7S1ppITHfUESn0HxWZESCkY+2wpmCGeigQ1DNh2Qlvrtp8Ar8VfQX9d6uSoE3z2HO+HVZg+1UeP6mFADdjm6V6+M2JgZIChsaEVOyPqa+uXLAvtXVRW2FPwifgIQumRNBUfDE4zGV7/TXA0nuTfvHmfGwNzGMDPdW/l2Ufa1n3z+lA5HMyYdjUs9IJpcedPMg69l/Tp0eBVrVWwFMxw4Dlo3WPR9m08YPne/DysUooZZjKWulFGUdgzKZJIJhgeH9Z79kYGGJvKtusZhkFbU5vWps4uOls68XrtKawrqFhh8Zb9RcWNFEplyJ2pRW5MrH9UnTQV33+vjw8/0xGazz7Sxs89thXPOt06jwGPttWzs76qtIVoMyIUmtG2uttvaptdmroOLUD7ns4OZsgFX81SceTf/BG8UoppprMEyC422hlRVVmVZVmorbbnVEfERxBKG1Mpzg9NMxZaP3l1NhTj26/eZXAqjM9r8LVndvLozsZ1v+ehcTjEF2CxR8/HrjHovyZTfUu276xghkP69OjBYIZcqGhOnRx1gHfz/7amMhlRI5n9RnPMbfoxQaemjk+PZ9wMw2PDK1JTG+sas8KBKgL2NNbqqMvSpgbsna0VnEcKpTLj/kyIq+Prv/iEowm+e+4+nw3PYxjw0ultPHWodd3veSiW9OUrQmbygWCG1AuwrwJ2ndYiZDWYwRtcstX5Nr9sL6mSjKiRTEyqXQIUjoQz4rPWzogtbVvY1qntdE31TbaIRC21WfuLRHwEoXRRSvHR8AwjGySvDk2F+Pard5kJxamp9PHrz+9hZ9v6yzi31lZyor2EHQ5KQXRCBwdFxzf88ixiIbjzrrbWjd9duj/YqEMZ8glmCDQuNe5smIeNqmiWpc6OpeRKKWbmZ7ICGKKx7MetrqrOCgdaLzU1VwyMFfNF1cbml8UK7iKFUhnRPxfm8uj6FrKphSjffvUuIzMRAj4Pv/LcLg5vq1/3e3bWBznWVleaS/o2I0IzQyl/908fCGbYmwpmeMJaMIO3ctkm8rpNF0dRFaVP9WUEKEaey2+XEU/EGRodon9UnxqtuTMiJUDLd0bki4iPIDy8KKW4NDrLwPz6p/efDs7xZ+fuEY2btNVX8I0v7qW5du036iXvcFBJCA1p63fCQliBMmH401Qww/mlYAYjHczwHHQds7ZLz1+/zPK9+V1Tc2ouc2o0okZsWUq+GF7MSk1dCGX/mwX8Aba2b80URo11mw/v8eGjzWijgyWLd8Ao8VNLYQVSKJUJQ/MRPhqeWfdr+icW+fZrd5kPJ6ir8vMbX9xDV/Pab/R9HoOTHfV01Zbgkr58RWjdYIbP69mjpm25P156E3lVJwQaNl0czarZTBDDsBretKc7a2fEyAAjE2vvjOjq6GJL25Y1d0bkioiPIJQHSimujs3RO7t+8ur7tyb44ft9mAr2dNTwa1/YTbBi7bcvdQEf3aXqcEhGYLFP/zEtNLcWJlP7+N7MDmZo2Jrax/e0tWAGX+0yV8PmGlOmMrOWkk8zvfE3bUAsHmNwdDBTHE3NZu8x9Hg8dLYuBTC0NbVtOjW1ksqspNRmmsXiXQZIoVQGjC5G+XB4et23zNd7Z/jzn/YQS5h0NlbyGy/spbFm7TenJbukLx8RWi+Yoeu47tBtP5l7MIPHrz3dwS061nsTxZGpTEYZzQjQDDN5Pxa4szMiLT7pPy20iPgIQhlwY2KBu+skr5pK8Z8/GuLcdT1H+dieJr761HZ869joStbhEJvVzobwEOTa4EomoPeinokd+HjzwQy+6mWuhs1Z0eIqzoAayNi9I1ic932AZDLJyMQIA6MD9A/3Mzo5umpqald7F9s6dWqq37e5Qjk9X5QujOqpL83TSWFTlNi7XMEqE6EYHwxOYa7zuvvTT8b4yw8HUMCBrXX86nO7qAys/Ua1JJf05SNCoRm4844ukGYGl+6v64ADz+rle7kGMxg+nQZUtUUPwG5i2V5MxRhQA/SqXlsEaH5xPsuysNrOiLSVzo6dESI+giDcmlzg1tTap/mxhMn33u7h454ZAL50vJOzxzvWfK0oSYeDUhAZ1doUm9rwyzNM9WtduvM2RJbNhXYcXApm8OeYIOqt0sVRcMum52EX1ELG0TCkhja1lFwpxeTMZEaXBkcHV6am1tRrberUAQxVFfn/vzcwaKElq2kXNOxdHCuUJlIoPcRMR2K8NzhFco26wDQV//HDAd65qWdzHt/fwleeWHsPRckt6ctHhMwk9H+s/d3Lgxm8AdidDmY4mJuYGF69R6JqC1S2bGrZ3ryazxKgzXi60zsj0sXRgzsjvF6vDmBo19Gom9kZsXy+KF0YifgIQnlzd3qRTybm1/z8QiTOd167R8/4Il6PwVef2k733uY1v77kHA5mQocGLfRAcuNdhoAOZrj7ni6QsoIZGpYFM3Tm9lieSr2cPLhFzx/l+fqulGKCiYyjYbNLyecW5jKFUf9I/8rU1IqqrACGuhqrO56W8OGj3WjXRRHa4u03StCqKThOibyqCFaZjcZ5t3+KxBpHSdF4kj9/q4dP+nW4w88+toUzR9rXfENcUkv68hGhmWFtX/jsp/okKU3bXj13tCfXYAaPLo6CnVDRZm1gdhlKKcYZzwjQJJN5PQ48sDNidIDxqfEsy0LWzoiOLjpaO/BZ3e+UIiM+qfmiNqNN5osEQcjQOxvi47G1UzfHZiN869U7TM7HqAp4+bUv7GZv59prBErK4ZAIwWKvXj+hcthXpxSM3IRP30wFM6Ts4plghmeh69HcdMYTWDYP25h3cZRQCQbVYKZxFyJHjV2FcCTMwOhApjCaW8j+uUinpqaLo+aG5rybdlVUrZgv8mzC2SGUD1IoPYQsxBK80z9FbI0iaS4U59uv3WVgMoTPa/BLT+/k+K7V91AYwCMttewrhSV9VkUoHtHic+tNGPl06f7KWj34mnMwg7FsE3l73pvI4yqeEaA+1Ze3AK3YGTE+TDLpzM6ItPikBaiJJpkvEgRhVQbmw1wcWTt59e7IPN95/R7hWJKmmgDf+OIe2htWt1OVjMNBKYhN68ZdZCS371mc0mmqt9+EuWV77jLBDJ+HqvXTaAEw/PrkqKoTKprytnyHVCiToLqZpeTxRJyhsSG9Z29kgPHp7KRZwzCyUlPbm9vzXvTaQEOWja6OzVnGhfJFCqWHjFA8wdv9k0STq1uzhqfDfPvVu0wvxqiu8PH1F3azs231oc2g38vnOhtoKuYlfVZFSCkYu6MF6O77EE+lLRmG7swdeA62n8ohmMFYWrZX1ZH3JvJFtZglQPl4ugu5M6Ke+qzCSMRHEIRcGF6IcGFoZs3PX7w7xV+800vSVGxvDfL15/dQW7X662pJOByUCeFhrU3x9ddyADqYoe+ibtytCGZ4Qjfu2vZufBJk+HTDLtgJFS15FUdKKaaYyiwlH2Ns429aBdM0GZsao39Y79lbLTW1qb6JbZ3b6GrvYmv71rxSUz14VswXVRklNKsmFDVSKD1EhBNJ3u6fIpxYvUi6ldpDEYmbtNbpPRQtdat344p+SZ9VEQrP6o3kK4IZ2rUA7Xsaatb2wGcINC0VR3ks20sLUI/qodfsZRyLu5tS5LozIl0c5bMzQsRHEAQ7GFuMcn5o9eRVpRSvfTzC31weBuDYjgZ+6ZmdBHwrtackHA7JGIT6YKEXzByWp64bzPCcXlq+UTCD4dHFUVWndjfkcaqfVEmG1XDGUjfP2jNka6GUYnpuOiuAIRbPTpetCdZkpaZWV1mPHvfjz5ovajPaZL5IcAwplB4SokmTd/unWIyvfiLxwe0JfvCe3kOxu72GX3t+N9Wr7KEo+iV9VkTITOrO3K03ofdSdjDDrtNw8LlUMMMGxaC/YWmfhDfHJKHlT1klGVJDGQFawMLephSF2Bkh4iMIgt1MhmO8Pzi9avJqImny/ff6uHBHv549d6SNn31s66rzRkXvcIgv6L184UHdyFuPWEg7Gm6dWxnMsO8Z3bxr2CiYwbPM8t2Wl+U7oiJZjoZ8lpIvhBayAhhC4VVSU9u7Mk27+lrrKadBglnzRU00yXyRUDCkUHoIiKeKpLnYSt+wqRR/c2mI169qn/PJ3Y38l5/fseoeirqAj89taaCuGJf0WRGh2WG4/Zb2eIeWLbZr3aM7dHue3DiYwV+3bBO59ZS2sApnCVCc+MbftIxkMsno5Cj9I/2O7YxIi0/6jwy3CoJgJzOROO8NTJFUK6ukcDTBd8/d57PheQwDXnp8G08dbF31cYrW4aAURCe0syG6gTtAKT0Le+sc3HswmOGkLo62bRTMYGg7XTA9D2tdq2fUTMZSN8KI5aXk0ViUwdHBTHE0PZe9PNbr9bKldUvmxKi1sdVy066RxixtqqW2OBu3QlkghVKJkzBN3hucYia68o14PGHyvXd6uXJfv5B98dEOXjzRueoLzq76IEeLbUmfFRFaL5hh79O6QNoomMFXs1QcWVy2p5RihiUBGmXUkgA9uDNiaGxoxaLXzM6IVABDVaU1G1x6uDXdlRPxEQTBKeaicd4ZmCK+ylHS1HyUb712l9GZCBU+D79yZheHulaGExStw0ElITSotSmxgUNgcUqnqd56C+aWzdE2bNW6tPfz+iRpPdLzsJUd2hFhAVOZjDCSSVCdJQer+jISyQQj4yMZbRqbGluRmtra1JrZs2c1NdWDh1ZaswqjSsO6c0MQnEIKpRImaSo+GJxmMryySFqIJPjT1+9yf2wRjwFffWoHn9u3cgbH7zE4UWxL+nIVIaW0beHWufyDGbzBlK1uC/jXjqBdjaRKMqJGMpa6OdaOvF2N5TsjBkYGCEfDWZ9P74xIF0dWdkak54vSRVG70S7zRYIgFITFWIJ3BqaIrRIq1De+yL9+/S7z4QR1QT/feGEPW5tXntoXpcMhGYHFPv3HXMemlkxA3yWtTVnBDJWw+wmdXLdRMEOgcalxZ3EeNqqiWUvJo+QwK5XCNE0mpicyVrqh8aEVqakNdQ2ZPXtb27ZSWZF7YRMgsGTxNjpoow2fIW9FheJFfjpLFFMpPhyeZiy08sV6fDbCt169y8R8lMqAl187s5t9W1YWAUW3pC9XEQrPwmfv6OS66YGl+2vbdHG075n1gxm8lSkB2qItdhY6lVEVpV/1ZwTIiqc7HAlnLAt274x4UHxaaZX5IkEQCk4onuTtgSkiq4QKXeud4c/fuk88qdjSVMVvvLCHhuqVJyRF53CIzerGXXgI1nMKTA/o4uizdyCy7PW9/QAcPLNxMIO/fpnl21pja07NZZp2w2o456XkSilmF2YZGB6gf1Q37h5MTQ1WBrMCGGqrc28qVlOdadh1GB000igWb6GkKJJ3yIIVlFJ8NDzD8MLKLtG90QX+9PW7LEaTNKb2UHSssoeiqJb05SJCmWCGt6D34spghgPPQec6wQyeimXL9hosFUezajYjQCNqJGcBcnJnRDXVWTHdIj6CILhNJJHknYFJQg+ECiml+OmNcX784QAKOLi1jl85s4tKf/brXVE5HJSCyKjWptjU2l8XC8G997Xte+zO0v25BjP4apfCgny5J8AppRhjLGOpm2Kd5/gAoXCIgdGl1NT5xeyEO7/Pz9b2rdpO12ktNbWJpuz5IsOaU0MQig0plEoMpRSXR2cZmI+s+Nzle1P8u7f1HoptLXoPRV0w+1ShaJb05SpCsyP65CifYAaPX3u6g1t0rHeOL/SmMrMEaJrpjb+J7J0RA6MDDI8P27Yz4kHxqaGmuDz7giCUNbGkybsDUyzEsoukpKn4yw8HeOembhQ9eaCFn398G94HTouaKv10b2mg2u/y2xIzDqEBnayaXGPpdyaY4U09G5tINS0NL2w/oa116wUz+KqXuRpyn4eNq3iWpS5MeONvQqemDo0NZQqjyZnJrM97PB46WjqWUlOb2/CuGyqR+j48tNGWpU0VRpEvABYEi0ihVEIopbg2Pk/PbHjF/a9fHeWvLw0BcGR7Pb/87K4VeyiKYklfLiKUiOpUoNtvwvDNpfsravS+owPPQdP21b/X8C3bRN6c87K9uIpnWeoirCxEH8SpnREPik+70S7DrYIgFC1xUxdJs9Hs5NVoPMm/ees+N/q1De3nHtvKc0faVjR5isLhkAjpxl1oANTKBFkgFcyQ2seXFcywRRdH6wUzeKu0LgW36FOkHP9bF9VixtEwqAZzWkqeNJOMToxm5oxGJ0YxH0iLbWlsybgZtrRtySk1NUAgKxCohRaZLxIeeuQnvIS4ObnAnenFrPuSpuIH7/Vx/jPdIXr2kTZ+7rGteJZ164piSd9GIpQJZngT7r63FMyAAV3HtAjtOAneVV7MDe+yZXstOS/bW1ALWQKUi6VuIbSQEZ+1dkZkLAs57oxIi8/y+SIRH0EQSoGEqXh/YJrpSHao0GwoxrdfvcvgVBif1+Brz+zk0Z2NWV/jusNBKYhN69UTkdHVvyaZgL7LunHXf3mVYIbnoG3f6oWPp3LJVuevz6k4UkoxyWRmKfkEE7l9z8zkUgDDKqmpdTV1ujBq1427XFJTa6jJKowasb64XBBKHXk3ViLcnlzg08nsBLhwLMmfnbvH7SG9h+LnT2/j84ey91C4uqQvFxEKz8Gdd/QA7IPBDPuf1X9WDWbw6CV7wU6oaNtg90T66SgmmKDH7KFX9TLJ5Ibfs+HOCI83E8CQ684IER9BEB4GTKU4PzTNRDj7JH1oKsy3X7vDzGKcmkofv/78Hna2ZZ+mu+pwUCaEh3XzLr5GXPb0gG7cffb2ymCGA8/B7sdXD2bwBJbNwzbmVBwlVCJrKfkiixt+z9zCnJ4zGu5ncHSQUCS7aVdZUZnZs9fV3kV97cr49Qdppjnb4m1YW5MhCA8jUiiVAHenF7k+kT1sObUQ5duv3mVkJkLA5+HvPreLR7ZlvxC6tqRvIxEyTR3McPtNHcxgpoMZ/MuCGQ6tYpszlm0ib89pE3lCJRhUgxkBCrGG3S/99RvsjABoa27L2Ok6Wzrx+dZ/Hun5ok6jk3ajXYZbBUEoeUyl+HBohtHF7FChW4NzfPfcPaJxk7b6Cr7xxb001y6dGLnqcEjGINSnrd/mKpHZsRDc+yAVzPDZ0v1VDbD/Gd24a9iy8vsM/zLLd1NOlu+wCmd0aUANkGANu1+KSDTCwOhA5tRodj5bW31eX1Zqaktjy7r/vl68KyzeMl8kCCuRQqnI6Z0N8fFYdox0/0SIb792R++hqPLzGy/soatlKdDAa8AxN5b0bSRCc6OpDt1Ptdc7TcvupWCGigdneIylZXtVHTltIg+pEH2qjx7Vw6AaXFeAlFKMT4/raNSRfobHh0kks7++obZBF0Y57IwQ8REE4WFHKcWlkVmGFrJnOd+/NcEP3+/DVLCno4b/6gu7qa5YepvhmsMhvqCdDeFB3chbjlIwcks37u59sCyYwQPbT2pt2vboysac4dMNu2AnVLRsWBwppZhmOmsp+XokEgmGxocyhdH41MrU1Pbm9kzTrqOlY93U1AoqVli8vTna1AWhnJFCqYgZnA9zcSS7a3S9b4Y/f6uHWMKks7GS33hhL401S6LjypK+9UQoEYX7H2pr3Ypghs/r6NTmHSsfM9CkBaiyY8Nle0opppjKCNAYY+t+7ezCbEZ81toZke7KbbQzQsRHEIRyQinFlbE5+uaWQoVMpfjri0O8cU2/+T+1p4n/x1Pb8S1zM2ytreRkez3+QjkclILohHY2RMdXfj40rdNUHwxmqN+S2sf39MpgBsOrLd9VndrdsMFrfVIlGVbDmZOjeebX/FrTNBmfGs/o0vD4MEkzO7ihqb4po00bpabWUZelTQ00iMVbEPJACqUiZWQhwodDM1n3/fTGGH95Xu+hOLClll89s5vKwNIL9a76IMfa6lbErjrCeiK0YTDDc7Dj1MpgBn/D0uCrd/2Ut7QA9Sg9b7TAwppfa2VnRFdHF031TWsKSi21WfuLRHwEQSgXlFJcH5/n/syShTmeMPne2z1c6ZkB4OzxDr50vDPzulhwh4NKQmhQa1PiAV0wU8EMt96E/itLjT1fhXY0rBrM4Flm+W7b0PIdUZFMgmq/6l9zKblSipm5maXU1LHBFU276qpqtnVuyxRGNcHVZ4YMjBXzRdVG7juZBEFYGymUipDxUJQPhqYzq1dNU/GXFwZ4+4YuSB7f38xXntieKYj8HoOTHfVsLcSSvvVEKDKnN5LfehOm+5fuXy+YwV+3bBP5GvuQ0g+vIvSpvowAxYmv+nV27YwQ8REEQVji08kFPluWvLoQSfCd1+/SM7aI12Pw1Se3071v6TW+oA6HZAQWe2GxT6+hWM70oLbWffZTHSCUpv0AHHhWp9dlBTMY2k4XTM/Drv/800vJe8weRhhBrbE4PZ2amg5hWAxnhzYE/AEdDJQKYWioXb0R58NHm9FGB0sW74DhQmCTIJQBUigVGVPhGO8NTGOmXmej8SR//lYPn/RrC97fPrWFLxxtz7x4FmxJ31oiZJoweFUXR70fPRDM8DltrdtyONu/7atZKo42WLY3o2YyMamjjK4qQHbtjBDxEQRBWJ3Ppha4uSx5dWw2wrdevcvkfJTKgJdf+8Ju9nUu2ZQL5nCIzaas38OwXB9iYbj3/irBDPWw7xldIDVszX6s9DxsZQd4137tN5XJKKOZpeQzzKz6ddFYNKtpNzWbvVzd4/GwpXUpgKG1afXU1Eoqs5JSm2kWi7cgFAgplIqImUicdwemSKZS1uZCcb792l0GJkP4vAa/9PROju9a2kNRkCV9a4mQ1WAGb1Av2qvqBP/aMz+mMhlhJCNAs6xMzctlZ0Rtda22LKyzMyItPuk/LbSI+AiCIDzA/ZkQ18aXLMv3Rhb4zht3CUWTNNUE+MYX99DeoF9jC+JwUEqvnFi4r1dQLL9/9JbWphXBDCdSwQzHs+1zgcalxt0687AxFWNADdCjeuhX/asuJU8mk4xMjGT27I1NrkxNbW1qzezZ62xdPTU1PV+ULozq2XgfnyAIziCFUpEwH03w7sAU8dRR0vB0mG+/epfpxRjVFV5+/fk97GrXpy8VXg/dnQ20ObWkby0RSsTg/nktQsM3lu6vqNEbyQ88lx3M4K2EqnRxVLfmPomoimZ5uqOsTMybX5zX4rOJnREiPoIgCNbomwtzeXSpYXXx7hR/8U4vSVOxvSXI11/YQ22VPqF33OFgxvXS8oUeSC6FSehghre1vW52eOn++i365GjfM9nBDP76ZZbvtQu6eTWfCWIYUkMrlpIrpZiYnsicGA2NDa1ITa2vrc/YvLvau1akphoYtNCS1bQLGuvb0AVBKBxSKBUBi7EEbw9MEk3qF+HbQ3N89417ROImrXUV/MYX99Bap19c24IVPNZZ78ySvtVESCmYuLcUzBBLFygGdB3V1rqdjy0FM3gqli3ba1izOJpTcxkBGlbDKwRoszsjls8XpQsjER9BEITcGZqPcHF4BtBFwWsfj/A3l3UhcnR7PV97dhcBn7aKOepwSIS0LoUGQKUKETMBfVd0ouqDwQy7n9CNu/b9Sxrkr01p05Y152GVUowznllKPsXUiq+ZnZ/NFEYDowNEotknS1WVVVmFUV1NXdbnffhoN9p1UYS2ePuNAqbUCoJgCSmUXCYcT/L2wBSRhH6RP397gu+/p/dQ7G6v4de+sJvqSp9e0tday75GB5b0rSZC6WCG22/C1LJghppWLUD7n4GaFn2fJ5DaJ7FFx3qv8vxMZTLGWMZSN8101udz3RmRLowe3BmREZ/UfFGb0SbzRYIgCHkyuhjlw2EdKpQ0Fd9/r48PP9PBOM890sbPPrYVj8dwzuGglHY0LNzXDoc0M4Mp2/fbEF7WQGvfr7Vp1+MQSJ0S+aqXiqM15mHjKp5ZSt6n+lYsJQ9HwkvrJEYHmFvI3mvo9/nZ0rYl42ZobmjO0ugqqlbMF3lyWEgrCEJxIIWSi0QSSd4ZmCQUT2IqxcuXhnjtqhaEk7sb+S8/vwOf1+PMkr7VRGi9YIadn9MilA5mMHzLNpE3r7psL67iDKiBzMnRck+31Z0RW9q2UBFYEuK0+KQFqIkmmS8SBEGwgYlQjA8GpzAVhKMJvnvuPp8Nz2MY8NLpbTx1qBVwyOGgTD0Tu3Af4qmiJBbWM0e334TR20tfW1WXCmZ4bimYwVulC6NgJ/hqV23cLarFjC4NqkGSLGlPPBHPCmCYmJ7I+l6P4aG9pT0zZ9TWkp2a2kBDlo2ujjqxeAtCCSOFkkvEkibvDkwxH0sST5j8xTu9XL6vT1m++GgHL57Qeyi6ais5YeeSvtVEaG4Ubr+l/2QFM+xaFsxQk1q2155KBWpZddneglqgT/XRo3oYUkMZAVJKMTM/Q/9wfjsj6qnPKoxEfARBEOxnKhzjvcEpkgqmFqJ869W7jM5ECPg8/Mpzuzi8rd4Zh0MyBqE+WOgFM5oKZritrXUPBjNsOw4HzsD24zqYwVO5tIPPX7+iOFJKMclkZin5OEuOhaSZZGxyLHNqNDIxgmlmW8GbG5qzmnbpRa8ePCvmi6qMAqzpEAShYEih5AJx0+S9gSlmowkWIwm+88Zd7o8u4jHgq0/t4HP7mvEa8GhbPTvsWtL3oAglYtDzIXx6bo1ghmeheSd62V6bFqGKNnhg35BSigkmMpa6CZa6b4vhxYz4rLkzor1LC9CynREiPoIgCIVnNhrnvYEpEqaif2KRb792l/lwgrqgn994YQ9dzUH7HQ7xBd24Cw0CJoRmdJrqrbdgdmjp6+o7deNu39MQbNSW78w8bOOK4iipklmWuvRScqUUU7NTGW0aHB1cmZoa1Kmp6TmjYJWeafLjz5ovajPaZL5IEB5ypFAqMElT8f7ANFOROONzEb796l3G56JU+j38V1/Yzf4tdfYu6VsuQiq5djDD1qNahHac0sOwmU3k7Ss2kSdUgiE1RI/qoU/1sYgugPLdGSHiIwiC4C7zsQTv9E8RMxXXe2f4N2/dJ55UdDZW8Y0v7qGhOmCfw0EpiE5obYpOLAUz3H4T+i4/EMzwuD49at+fKo7Slu+mFZbvsApnlpIPqIHMUvL5xfmlOaORgRWpqRWBiowudXV0UV+jE1GDBLPmi5pokvkiQSgzpFAqIKZSfDA0zUQ4xv3RBb7z+l0Wo0kaawJ844U9dDRW2bOk70ERiszDnXd0gTTVt/R1Na365Gj/s/p2etleVceKTeQhFcoSoASJrJ0RAyMDjE6Orrkzoquji87WTvw+f0Z80n9kuFUQBME9QvEE7/Tr5NWffjLGX344gAIObq3jV57bRXWF1x6Hg0rqpt1CDyQWUsEMb+kTpOXBDG37dHG0+3GoqE2FBXVCRUtWcaSUYoYZelUvPWYPo+h520g0wuDYIAPDujiamZ/Jehper1cHMLRvo6uzi9bGVgzDoJHGLG2qpVYs3oJQ5kihVCBMpbgwNMPoYpTL96b43ju9JJKKbS1Bvv78HpprAptf0rdchGJzMHhN+7t7L+qOHaSCGbq1CG05rIUnmN5EvhSWoJRimml6VA+9Zi9jjOW9MyI93Jruyon4CIIgFAfhRJK3+6dYjCX5jx8O8M5NPb/zxIEWXnp8G42V/s07HJIRbfsO9UF0Hu69rwuk0VtLX5MOZtj/HDRt15bvqk7tblg2D5tUSUbUSCaMYY45EskEw+PDWampy5t2hmHQ1tSW0aaO1g4C3gCttGYVRpVG9o4jQRAEKZQKgFKKSyOzDMyHef3aKH99Ufuuj2yv52vP7KSztpLPbWkgmO+SvuUiNDO4LJhhculrWnZpAdr7JNR0LQ2+epeEIamSDKvhjADNM8/s/CwDowM6hGGNnRHLF7021DTQQkumKGo32mW+SBAEoQiJJkze7Z9iKhTjz9/q4ZN+farzs49t5cyRNnY3VnOsdRMOh9hsyvo9BGO39UzsvfdXCWZ4DrafWtKlyrYsy3d6KXmP6qFf9RMxI4xPj+tdRiMDDI0PkUxmp6Y21jVm7HRb27dSG6hdsngbHbTRhs+Qt0CCIKyPvEo4jFKKj8fmuD8T4gfv9XE+tYfimcNt/J3urRxqqeFQvkv60iI036uDGW6dg6FPlj5fUZ0KZngOOo4t20S+tGwvoiJZlrrZyKzuyo3qU6M1d0ak7XQNnXR4ljpyrbTKfJEgCEKRE0+avDswycBMmG+/doeByTA+r8EvPb2T7j1N+TsclNIrJxbuw8x9ve/o9pswsyyYoa5Duxr2PQ1N+1OuhvYsy/esms007YbMIZ2aOtKfCWBYLTV1+ZxRe7A907DrMDpopFEs3oIgWEYKJQdRSvHJxDyfjM3zZ+fucXtI76H48ue6eOFoR35L+tIiNH8Phi5pAbrzHsTSiXIGbD2iRWjPs1C7M7VPojrzEDNqJhOT2p/oZ3BsMKedEV0dXexu3s1W39aMlU7ERxAEobRImCbvDU5xY3ieb792h5nFONUVPr7+wm5Obm/Mz+FgxvXS8rm70POettb1XVolmOE52P4kBLfq4sir0/NMZTKmRugxe/R+o/Bg5sSof6SfhdBC1uUC/gBb27dmiqM9dXvo9CwVRrVGrQ3/UoIglDtSKDnIrakFzvdN861X7zCS2kPxd5/dyZmD7daX9KVFaOIq3Ho9FczQu/T5mhYdynDoRWg/ntonoYXCVCYjaohes5f7yfvcnryd886Iw22H2RHYkenM1VAj80WCIAglStJUfDA4zXt3Jvmzc/eIxE1a6yr4xhf38tTOJusOh0RIz8UOnYdPX9cnSOGZpc+37dPF0cG/BfV7UpZv3SCMqRgD5j16VS93Yne4O3o3Y/VeLTW1s7Uzs+j1SNMRtnq3ZgqjCsNi01EQBCEHpFByiDtTi/zk0zG+/dod5sMJaqt8fOOFvbx4qN3akr5ESHfo7rwMn74GPR+tDGY4dBb2fkl36Px1YBjEVIx+8y49Zg+XZy5zb+TehjsjtnVs40T7CfYG92bmi2S4VRAE4eHAVIoPh6f58ZUhfvBeH6aC3e01/L0v7uW5XS25OxyUgtg0TN2Amz/WjbvlwQyVddpW98jPwdbTKcu3tvHNq3l6zc+4m7jL5YnL9I306dTUiVFMld20a21spauji12duzjZdpId/h10GB200CLzRYIgFAR5pXGA+zMhvnexj3/zVg+xhElHQyX/8Gf286V97bkt6UuL0OB7cP2HcPunsLDMEte8Ew6+AEd/ARoPQqABDEMLkPqEK/NXuDh8MSNAa+2M2Nm+k1NbTvFI7SN0ejpppVXERxAE4SFEKcWHQ9N8+617vH5Vx2if3N3Ib31pP49vbczN4aBMHcxw92/gk/+sgxniqYAfw4BtJ+Dwi3Dw70DNDvAFUUoxzjj3E1f5aPojro1cy6SmPti0q6+pp6uji30d+3is4zH2Ve3LzBeJk0EQBDeQd8U20z8X5o/OfcZ//HAApWD/llr+x587xFPbmzde0qdMmLsP174HN/4Ghq4vfa6iGvY+A49+FXY8C4EmFDDGGDfCb/LO6DvcHL659s6I1i3s6djDqc5TPNb8GFs8W0R8BEEQygCltN3u//ufP+XK/WkAzj7awT8+u5/9TTnYqZMxGL8MV/5c2+tmBpc+V9ehXQ2P/j+h9Rj4a4irOINqkEuzl3h/+H3ujtxlYGSAcDSc9bBVFVV0dXRxsOMgn+v8HEdqj2iLt1Fj9z+BIAhCXkihZCP9s2H+3395nZ/eGAPgif3N/H/+iyPsadrAapeMwf2fwKU/hztvrwxmOPoSHPkqVG8hTpL7ifucG/oBF4YvcH/k/po7I/Z17ONU5ymebHuSbb5tMtwqCIJQZiileKdvkv/lh9e5P7aIx4C/+8wu/uFzezd2OESn4fpfwNUfQN9lvasPUsEMT8Kj/yXs+1vgryNEmGvha7zZ/yZXhq/QP9LP7MJs1sP5vD62tm/lcMdhTnee5lTjKTo9nTJfJAhC0SKFkk30TIf4+9+7xPU+LQwvfa6L//VnDlFfuY4QzfXBxX8N1/8jTPYs3V/TAod/Fk7+CrQfZ85c5K2pt3j77h9xfeT6mjsjDnQc4FTnKZ7peIY9FXtEfARBEMqcV++M8z/++6tMzEepDHj5f/3tg/zdx7av7XBQCoYvwEffhps/yQ5maN+vG3eP/jKqeitDyWFeG/2PvD/0PrdHbjM+PZ71UIZh0NncyeHOwzze+ThPtj7JFu//v717D4uyzPsA/p2BYTiDATKDIATiAQ+ooHKIAFO8zFfz2oOWratGu+Ie0kxbrd5M3fd1yzc3dbPWUqwN081DeZWptAuE4ll0t0VBUfEQqCjKQUBgfu8fxOQAAsNhDvL9XBfX1dw8z3N/b5l7ft0zz/OMD2wURtzIiIjIjLhQ6gRnrpfhVx8fw+Xiu7C1UWDuuL74zWNBzX9Jn64OyN0FnNgE5O//8cYMSlsg6HFg2LPQBU/Ev+6exr7v9+FYzps4f+18s98Z0U/TDyO0IxDnE4cBjgNYfIiISG/7qav47x3/xt3qOjzibIdVTw9FbJBn82c4VN0BTn0EZH8KFOX82G7vCoRMAIbPRLVmKL69mYn0/Pdxsugkrty40uSuqV5uXvqFUZx3HHrZ9eIp3kRktbhQ6qBjl27h1x8fx63ye3BS2+D/poZifIi26Ya3LgDH/lp/CkP5fe+6efYBhk5FUf8J2HfnOPYX7sN3n69C2d0yg93VKjWCvYMRrg3HaO1ohLqFQqnk9xcREVFTHxw4jz99dQZ1OkGAlxOSZ4bjUY9G1/6IAJf2A0c/AHL33ndjBiXgHwEZ9ixO9xqMfdfTcDh3NfK+zcO9mnsGh3B1dMUg7SCM0ozCE9on4O/kb6IREhF1PS6UOmDf6SLM/fQkKu/VwdvNHptmhWOAxu3HDWqqgJwdwPFk4NJRAD9cR6R2RsWA8cgKCMc/qi/ieFEqir76m8GxlUol+nj1QbgmHKN9RiPMMwy2Sv65iIjowUQE/7PnND7MuAAAiOjjgQ9/EQ5n+/vqR/kNIDu5/rrYkvu+j8+tF4oGTUK6JgDpt0/iX7nrUHbS8E07ezt7DPQeiAhtBMb4jEGQaxA/MSKihxb/z7ud/naoAEu++A90IhjYyxUfzxoJD+cfrgkqPFV/fvd3O4Dq+m8TrwFwqvcwZPoEYX/dLZy7eRS6U4cNjtm7R+/6U+m0cRjpPRKOKkcTj4qIiKxVTZ0O8/5+El+dKgQATB3ph/+dPLj+NPC6WuBcav11sef+WX8aOIAylT2OBo1CukdPHCwvQNH3XwHf/3hMW6Ut+vXsh0htJOK18RjoMRA2Sp7mTUTdAxdKRhIRvLknF+9n5AMAEgZ6Y83Tw2Bfcwc4vKn+06Prp6EDcFalwiEvH+z31CK75g6q624C127qj9XTuSdGaEcgVhuLCG0Eetj3MM+giIjIqpVW1SDxo2M4euEWFArg1QkD8PxjgUDxOSD7Y+DkZqDiBu4BOGmvxiGvQOx3ccaZyluQ6gvA9/WfQCmgQKBHICK1kXhc+ziG9RwGe1t+8TgRdU9cKBmhurYOL/39FL78V/27dUmPB+Dl4GtQfp4InPkKVxV1OGxvj4M9vXDIyRm38cOd6arqr0lyVbsiXBuOGG0MIrQR8HXxNddQiIjoIXGl5C5+ufEIzt+ogL1KiXd/3g9P6A4BG5Kgu3wYZ+xUOORgj0M+PjihtkM1dACqgcr6mwT5uPogUhuJGG0MwjXhcFO7tdwhEVE3YRULpXXr1mHlypUoLCzEwIED8c477yAmJqbL+lucPBlKKPE/s3Yg90I2NqUvxU8iXsGbGbVwrFiGsT2rMdc7Ar55LyP1u5s47GCPQ1oPXFap7jtKHdQ2agzXDEe0NhoR2ggE9wiGUsEbMBARPQwsoTY9PuglvLa3CgMd3kaI910s9R6Au1/vxt9tdTjkYI+jvXvhts39p8rp0MOhByI0EYjyiUKENgIaJ02XZSYismYWv1DaunUr5s2bh3Xr1iE6Ohp//etfMX78eOTk5KB3795d0qcSSuxSngWSf4LH+/8MXyrzcXHX1/BR7UGaZzmGVVZhWcUOnHFXQRReP+6nUGKw52BE+kRilGYUQr1CobJRtdATERFZI0upTWf2fIXHXb7BNz2qMaC6GtPu3sD3GneD/RxVjhjhPQIR2ghEaCMQ5M4bMBARtYVCRMTcIVoyatQoDB8+HO+9956+bcCAAZg8eTJWrFjR6v6lpaVwc3PDnTt34Orq2uZ+X03+CXYpz+LxO1741u0GBpU64DvXyibbBbkFIvKHd+XCvMPgbOfczNGIiLqf9r7+WgNz16bokkdwoMct9C91wJlGtclWYYNQr6GI8KlfGA30HAiVkm/aEREBxr3+WvQnSvfu3cPx48exaNEig/aEhARkZWU1u091dTWqq3/8ctY7d+4AqP9HaauzF08hzO9J3DyRgmKUoc6uDrpKgbbaHs5KW/h5ByN60H8h3Dscno6e+v10VTqUVrW9HyKih1nD666Fvx9nNHPXpqvHPkSJ8i7qKuug/KE2edg6ItA3FI8PmoBQr1CDu6ZWlleiEk3f6CMi6o6MqU0WvVAqLi5GXV0dvL29Ddq9vb1RVFTU7D4rVqzA0qVLm7T7+fl1KMtpg0eHsAZ/e8CWRER0v7KyMri5PTw3CLDc2vQt/hdrO3Q8IqLuoi21yaIXSg0an0stIg88v3rx4sWYP3++/rFOp8OtW7fg4eHRrnOyS0tL4efnh8uXL1vtqSPWPgbmNz9rH4O15wescwwigrKyMvj4+Jg7SpdgbWo/a88PWP8YrD0/YP1jsPb8gHWOwZjaZNELJU9PT9jY2DR5h+769etN3slroFaroVarDdrc3d07nMXV1dVqngAPYu1jYH7zs/YxWHt+wPrG8DB9ktSAtanzWHt+wPrHYO35Aesfg7XnB6xvDG2tTRZ9r2o7OzuEhYUhNTXVoD01NRVRUVFmSkVERN0ZaxMRUfdg0Z8oAcD8+fMxffp0hIeHIzIyEuvXr8elS5eQlJRk7mhERNRNsTYRET38LH6hNHXqVNy8eRPLli1DYWEhBg0ahN27d8Pf398k/avVaixZsqTJKRPWxNrHwPzmZ+1jsPb8wMMxhocJa1PHWHt+wPrHYO35Aesfg7XnBx6OMbTE4r9HiYiIiIiIyNQs+holIiIiIiIic+BCiYiIiIiIqBEulIiIiIiIiBrhQomIiIiIiKgRLpQArFu3Do8++ijs7e0RFhaGzMzMFrfPyMhAWFgY7O3tERgYiPfff99ESZtnTP4dO3Zg7Nix8PLygqurKyIjI7F3714Tpm2esX+DBgcOHICtrS2GDh3atQFbYWz+6upqvPrqq/D394darUZQUBA2btxoorTNM3YMKSkpCA0NhaOjI7RaLWbNmoWbN2+aKK2hb7/9FhMnToSPjw8UCgU+//zzVvexpHlsbH5LncfUuVibzP+cZm1ibeoI1ibLmMcdIt3cli1bRKVSyQcffCA5OTkyd+5ccXJykoKCgma3P3/+vDg6OsrcuXMlJydHPvjgA1GpVLJt2zYTJ69nbP65c+fKm2++KUeOHJG8vDxZvHixqFQqOXHihImT/8jYMTS4ffu2BAYGSkJCgoSGhpombDPak3/SpEkyatQoSU1NlQsXLsjhw4flwIEDJkxtyNgxZGZmilKplNWrV8v58+clMzNTBg4cKJMnTzZx8nq7d++WV199VbZv3y4AZOfOnS1ub2nz2Nj8ljiPqXOxNpn/Oc3axNrUUaxN5p/HHdXtF0ojR46UpKQkg7b+/fvLokWLmt3+5Zdflv79+xu0zZ49WyIiIrosY0uMzd+ckJAQWbp0aWdHa7P2jmHq1Kny2muvyZIlS8xajIzN//XXX4ubm5vcvHnTFPHaxNgxrFy5UgIDAw3a1qxZI76+vl2Wsa3a8mJuafP4fm3J3xxzz2PqXKxN5n9OszaZH2sTa5O5detT7+7du4fjx48jISHBoD0hIQFZWVnN7nPw4MEm248bNw7Hjh1DTU1Nl2VtTnvyN6bT6VBWVoZHHnmkKyK2qr1jSE5ORn5+PpYsWdLVEVvUnvy7du1CeHg43nrrLfTq1Qt9+/bFggULUFlZaYrITbRnDFFRUbhy5Qp2794NEcG1a9ewbds2TJgwwRSRO8yS5nFnMPc8ps7F2mT+5zRrE2uTOVjSPO4M5p7HncHW3AHMqbi4GHV1dfD29jZo9/b2RlFRUbP7FBUVNbt9bW0tiouLodVquyxvY+3J39jbb7+NiooKTJkypSsitqo9Yzh79iwWLVqEzMxM2Nqa9yncnvznz5/H/v37YW9vj507d6K4uBi/+c1vcOvWLbOcC96eMURFRSElJQVTp05FVVUVamtrMWnSJKxdu9YUkTvMkuZxZzD3PKbOxdpk/uc0axNrkzlY0jzuDOaex52hW3+i1EChUBg8FpEmba1t31y7qRibv8Gnn36KN954A1u3bkXPnj27Kl6btHUMdXV1mDZtGpYuXYq+ffuaKl6rjPkb6HQ6KBQKpKSkYOTIkXjyySexatUqbNq0yWzv3AHGjSEnJwcvvPACXn/9dRw/fhx79uzBhQsXkJSUZIqoncLS5nF7WdI8ps7F2mT+5zRrE2uTqVnaPG4vS5rHHdGtP1Hy9PSEjY1Nk3cmrl+/3mRF30Cj0TS7va2tLTw8PLosa3Pak7/B1q1bkZiYiM8++wxjxozpypgtMnYMZWVlOHbsGLKzs/G73/0OQP2Lu4jA1tYW+/btw+jRo02SHWjf30Cr1aJXr15wc3PTtw0YMAAigitXriA4OLhLMzfWnjGsWLEC0dHRWLhwIQBgyJAhcHJyQkxMDP74xz9a/LteljSPO8JS5jF1LtYm8z+nWZvqsTaZliXN446wlHncGbr1J0p2dnYICwtDamqqQXtqaiqioqKa3ScyMrLJ9vv27UN4eDhUKlWXZW1Oe/ID9av8mTNnYvPmzWY/b9fYMbi6uuLf//43Tp48qf9JSkpCv379cPLkSYwaNcpU0QG0728QHR2N77//HuXl5fq2vLw8KJVK+Pr6dmne5rRnDHfv3oVSafjyYWNjA+DHd78smSXN4/aypHlMnYu1yfzPadameqxNpmVJ87i9LGkedwpT3jnCEjXcenLDhg2Sk5Mj8+bNEycnJ7l48aKIiCxatEimT5+u377h1o0vvvii5OTkyIYNGyziFqxtzb9582axtbWVd999VwoLC/U/t2/fNkt+EePH0Ji57yxkbP6ysjLx9fWVn/3sZ/Kf//xHMjIyJDg4WJ5//nlzDcHoMSQnJ4utra2sW7dO8vPzZf/+/RIeHi4jR440S/6ysjLJzs6W7OxsASCrVq2S7Oxs/S1kLX0eG5vfEucxdS7WJvM/p1mbWJs6irXJ/PO4o7r9QklE5N133xV/f3+xs7OT4cOHS0ZGhv53M2bMkNjYWIPt09PTZdiwYWJnZycBAQHy3nvvmTixIWPyx8bGCoAmPzNmzDB98PsY+ze4n7mLkYjx+U+fPi1jxowRBwcH8fX1lfnz58vdu3dNnNqQsWNYs2aNhISEiIODg2i1Wnn22WflypUrJk5dLy0trcXntaXPY2PzW+o8ps7F2mT+5zRrE2tTR7A2WcY87giFiBV8FklERERERGRC3foaJSIiIiIiouZwoURERERERNQIF0pERERERESNcKFERERERETUCBdKREREREREjXChRERERERE1AgXSkRERERERI1woURERERERNQIF0pEFiA9PR0KhQK3b9+2yOM1Pq5CocDkyZM79dit2bRpk77vefPmmbRvIqLuiLWpdaxNDzculMhivP/++3BxcUFtba2+rby8HCqVCjExMQbbZmZmQqFQIC8vr9XjdtULMwBcu3YNKpUKn3zySbO/nz17NoYMGdLp/bYmKioKhYWFcHNzA1D/Qu7u7t5px8/NzcWmTZs65VgFBQVQq9UoLS1t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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_velocity_profiles(avg_profile, rms_profile, std_profile, ax):\n", + " alt = avg_profile.index\n", + " mean = avg_profile.values.T\n", + " rms = rms_profile.values.T\n", + " std = std_profile.values.T\n", + "\n", + " ax.plot(mean[0], alt, \"-x\", label=avg_profile.columns[0])\n", + " ax.plot(mean[1], alt, \"-x\", label=avg_profile.columns[1])\n", + " ax.plot(mean[2], alt, \"-x\", label=avg_profile.columns[2])\n", + "\n", + " ax.fill_betweenx(alt, mean[0] - std[0], mean[0] + std[0], facecolor=\"lightblue\")\n", + " ax.fill_betweenx(alt, mean[1] - std[1], mean[1] + std[1], facecolor=\"moccasin\")\n", + " ax.fill_betweenx(alt, mean[2] - std[2], mean[2] + std[2], facecolor=\"palegreen\")\n", + "\n", + " ax.plot(rms[0], alt, \"+\", color=\"C0\")\n", + " ax.plot(rms[1], alt, \"+\", color=\"C1\")\n", + " ax.plot(rms[2], alt, \"+\", color=\"C2\")\n", + " ax.set(xlabel=\"Water Velocity [m/s]\", ylabel=\"Altitude [m]\", ylim=(0, 10))\n", + " ax.legend()\n", + "\n", + "\n", + "fig, ax = plt.subplots(1, 2, figsize=(10, 7))\n", + "plot_velocity_profiles(avg_profile_ebb, rms_profile_ebb, std_profile_ebb, ax[0])\n", + "ax[0].set_title(\"Ebb Tide\")\n", + "plot_velocity_profiles(avg_profile_flood, rms_profile_flood, std_profile_flood, ax[1])\n", + "ax[1].set_title(\"Flood Tide\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Current Energy Converter Efficiency\n", + "\n", + "The CEC efficiency, or device power coefficient, can be found using the `device_efficiency` method." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "efficiency_ebb = performance.device_efficiency(\n", + " power=power_ebb,\n", + " velocity=ebb,\n", + " water_density=ds[\"water_density\"],\n", + " capture_area=np.pi * 1.5**2,\n", + " hub_height=4.2,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + ")\n", + "efficiency_flood = performance.device_efficiency(\n", + " power=power_flood,\n", + " velocity=flood,\n", + " water_density=ds[\"water_density\"],\n", + " capture_area=np.pi * 1.5**2,\n", + " hub_height=4.2,\n", + " sampling_frequency=1,\n", + " window_avg_time=600,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And these efficiency curves can be plotted as profiles:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Flood Tide')" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAIhCAYAAAAGrW0nAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB6JklEQVR4nO3deVyU1f4H8M8wwLCDgCwqIooboeYuZoJrUpm2m7fSsq6ZdjOv1zLrireUrF9mt5JbVqiZZd2ubeaWCu6KW7mvoGQgyg6yzcz5/YHz6Mg2AzPzzDN83q/XvF7OM8/McwaGr98553vOUQkhBIiIiIjIppzkbgARERFRc8QkjIiIiEgGTMKIiIiIZMAkjIiIiEgGTMKIiIiIZMAkjIiIiEgGTMKIiIiIZMAkjIiIiEgGTMKIiIiIZMAkjJps2bJlUKlUdd5SUlKkc1UqFaZNm2bya+7fv9/s9tTXllvbNXHiRLRr187k101ISDC7PURkXfXFoJkzZ0rntWvXDhMnTpSljQ3Fj7i4OJPiVkJCgvR+MzIyGrxuXFwc4uLiLPY+yLKc5W4AOY7k5GR06dKlxvGoqCibtmP37t1G99944w1s3boVW7ZsMToeFRWFsLAwvPjii7ZsHhFZSW0xqFWrVjK1xjxLlixBUVGRdH/t2rV48803a7ynNm3aQKPRYPfu3QgNDZWjqWRBTMLIYqKjo9GnTx+5m4EBAwYY3W/ZsiWcnJxqHAcAHx8fWzWLiKzMXmJQY9z6ZfXkyZMA6n5PLVu2tEm7yLo4HEmy+Pjjj9GpUydoNBpERUXh66+/rvW8/Px8PPXUU/D394enpydGjx6N8+fPW6wdtQ1HFhUV4dlnn0VAQAC8vLwwatQonD59utbnnzlzBuPHj0dQUBA0Gg26du2Kjz76yGLtIyLrunjxIh5//HGjv+F3330Xer3e6Ly8vDw8//zzaN26NVxdXdG+fXvMmTMHFRUVRueZEz8aq7bhSCEE3n77bYSHh8PNzQ29evXCunXran1+UVERZs6ciYiICLi6uqJ169aYPn06SktLLdpOahh7wshidDodtFqt0TGVSgW1Wm107Mcff8TWrVvxr3/9C56enliyZAkee+wxODs746GHHjI6d9KkSRgxYgRWrVqFzMxMvPbaa4iLi8Pvv/8OPz8/i78HIQTGjh2LXbt24Z///Cf69u2LnTt3Ij4+vsa5x48fx8CBA9G2bVu8++67CAkJwYYNG/C3v/0NV69exdy5cy3ePiKqW20xyNm57v/mrly5goEDB6KyshJvvPEG2rVrh59//hkzZ87EuXPnsGTJEgBAeXk5hgwZgnPnzmHevHno3r07tm/fjsTERBw+fBhr164FYF78sLR58+Zh3rx5mDRpEh566CFkZmbi2WefhU6nQ+fOnaXzrl27htjYWPzxxx949dVX0b17dxw7dgz//Oc/ceTIEfz6669QqVRWby9dJ4iaKDk5WQCo9aZWq43OBSDc3d1Fdna2dEyr1YouXbqIyMjIGq95//33Gz1/586dAoB48803TW7fhAkThKenZ52PhYeHS/fXrVsnAIj333/f6Lz58+cLAGLu3LnSsbvuuku0adNGFBYWGp07bdo04ebmJvLy8kxuIxE1Xn0xqKqqSjovPDxcTJgwQbr/yiuvCABi7969Rq83ZcoUoVKpxKlTp4QQQvznP/8RAMQ333xjdN7ChQsFALFx40YhhHnxw9T3lJaWVudj6enpQggh8vPzhZubW53xMjY2VjqWmJgonJycarzuf//7XwFA/PLLLya3kZqOw5FkMStWrEBaWprRbe/evTXOGzZsGIKDg6X7arUajz76KM6ePYs//vjD6Ny//OUvRvcHDhyI8PBwbN261SrvwfC6t153/PjxRvfLy8uxefNm3H///fDw8IBWq5Vud999N8rLy7Fnzx6rtJGIaldbDKqvJ2zLli2IiopCv379jI5PnDgRQghpMs+WLVvg6elZo6feMNNy8+bNAEyPH5a2e/dulJeX1xkvb/bzzz8jOjoat99+u1Hcuuuuu2rMZifr43AkWUzXrl1NKooNCQmp81hubi7atGnT4Lm5ublNaGndcnNz4ezsjICAgFrbd/N5Wq0WH3zwAT744INaX+vq1atWaSMR1c7UGGSQm5tb6xI1hhmVhjiTm5uLkJCQGsN0QUFBcHZ2NjrPlPhhaYbr1xdbDS5fvoyzZ8/CxcWl1tdi3LItJmFkc9nZ2XUeuzV41XVuZGSkVdoWEBAArVaL3Nxco7bc2o4WLVpArVbjiSeewNSpU2t9rYiICKu0kYgsIyAgAFlZWTWO//nnnwCAwMBA6by9e/dCCGGUiOXk5ECr1RqdZ0r8sDTDteqKlzcnmoGBgXB3d8fnn39e62sZ3gvZBocjyeY2b96My5cvS/d1Oh1Wr16NDh06GPWCAcCXX35pdH/Xrl24cOGC1RYfHDJkSK3XXbVqldF9Dw8PDBkyBIcOHUL37t3Rp0+fGrdbE0oisi/Dhg3D8ePHcfDgQaPjK1asgEqlkuLBsGHDUFJSgu+//77GeYbHAdPjh6UNGDAAbm5udcbLm9177704d+4cAgICao1bpi5eTZbBnjCymKNHj9aYmQQAHTp0MFrTJjAwEEOHDsXrr78uzY48efJkrctU7N+/H8888wwefvhhZGZmYs6cOWjdujWef/55q7yHkSNHYvDgwZg1axZKS0vRp08f7Ny5E1988UWNc99//30MGjQId955J6ZMmYJ27dqhuLgYZ8+exU8//VRjcVgisi8vvfQSVqxYgXvuuQf/+te/EB4ejrVr12LJkiWYMmUKOnXqBAB48skn8dFHH2HChAnIyMhAt27dsGPHDixYsAB33303hg8fDsC8+GFJLVq0wMyZM/Hmm28axcuEhIQaw5HTp0/Hd999h8GDB+Oll15C9+7dodfrcfHiRWzcuBF///vf0b9/f6u2l24i98wAUr76ZiYBEEuXLpXOBSCmTp0qlixZIjp06CBcXFxEly5dxJdfflnra27cuFE88cQTws/PT7i7u4u7775bnDlzxqz2mTM7UgghCgoKxNNPPy38/PyEh4eHGDFihDh58mSts5vS09PF008/LVq3bi1cXFxEy5YtxcCBA82avUlETVPfTMKb3To7UgghLly4IMaPHy8CAgKEi4uL6Ny5s3jnnXeETqczOi83N1c899xzIjQ0VDg7O4vw8HAxe/ZsUV5ebnSeOfGjse/p1tmRQgih1+tFYmKiCAsLE66urqJ79+7ip59+ErGxsUazI4UQoqSkRLz22muic+fOwtXVVfj6+opu3bqJl156yWjmOlmfSggh5Ej+iIiIiJoz1oQRERERyYBJGBEREZEMmIQRERERyYBJGBEREZEMmIQRERERyYBJGBEREZEMHH6xVr1ejz///BPe3t419v0iIuUSQqC4uBitWrWCk5Myv08yPhE5JlPjk8MnYX/++SfCwsLkbgYRWUlmZmaN7a6UgvGJyLE1FJ8cPgnz9vYGUP2D8PHxkbk1RGQpRUVFCAsLk/7GlYjxicgxmRqfHD4JM3Tx+/j4MMgROSAlD+MxPhE5tobikzILKYiI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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_efficiency(efficiency, ax):\n", + " means = efficiency.U_avg.values.T\n", + " eta = efficiency.Efficiency.values.T\n", + " ax.plot(means, eta, \"-o\")\n", + " ax.set(xlabel=\"Hub Height Flow Velocity [m/s]\", ylabel=\"Efficiency [%]\")\n", + "\n", + "\n", + "fig, ax = plt.subplots(1, 2, figsize=(7, 6))\n", + "plot_efficiency(efficiency_ebb, ax[0])\n", + "ax[0].set_title(\"Ebb Tide\")\n", + "plot_efficiency(efficiency_flood, ax[1])\n", + "ax[1].set_title(\"Flood Tide\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + }, + "vscode": { + "interpreter": { + "hash": "357206ab7e4935423e95e994af80e27e7e6c0672abcebb9d86ab743298213348" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/examples/upcrossing_example.ipynb b/examples/upcrossing_example.ipynb index 52bbd34f5..cbb67838a 100644 --- a/examples/upcrossing_example.ipynb +++ b/examples/upcrossing_example.ipynb @@ -37,7 +37,7 @@ "outputs": [], "source": [ "# Peak period and significant wave height\n", - "Tp = 10 # s\n", + "Tp = 10 # s\n", "Hs = 2.5 # m\n", "gamma = 3.3\n", "\n", @@ -45,12 +45,12 @@ "Tr = 3600 # s\n", "df = 1.0 / Tr # Hz\n", "f = np.arange(0, 1, df)\n", - " \n", + "\n", "# Calculate spectrum\n", "spec = jonswap_spectrum(f, Tp, Hs, gamma)\n", "\n", "# Calculate surface elevation\n", - "fs = 10.0 # Hz\n", + "fs = 10.0 # Hz\n", "t = np.arange(0, Tr, 1 / fs)\n", "\n", "eta = surface_elevation(spec, t)" @@ -75,8 +75,8 @@ "source": [ "plt.figure()\n", "plt.plot(t, eta)\n", - "plt.xlabel('t [s]')\n", - "plt.ylabel('$\\eta$ [m]')\n", + "plt.xlabel(\"t [s]\")\n", + "plt.ylabel(\"$\\eta$ [m]\")\n", "plt.title(f\"Surface elevation for Tp={Tp}s, Hs={Hs}m\")\n", "plt.grid()" ] @@ -109,9 +109,9 @@ "periods = periods(t, eta.values.squeeze())\n", "\n", "plt.figure()\n", - "plt.plot(periods, heights, 'o')\n", - "plt.xlabel('Zero crossing period [s]')\n", - "plt.ylabel('Wave height [m]')\n", + "plt.plot(periods, heights, \"o\")\n", + "plt.xlabel(\"Zero crossing period [s]\")\n", + "plt.ylabel(\"Wave height [m]\")\n", "plt.grid()" ] }, @@ -150,9 +150,9 @@ "Q = np.arange(N, 0, -1) / N\n", "\n", "plt.figure()\n", - "plt.semilogy(crests_sorted, Q, 'o')\n", - "plt.xlabel('Crest height [m]')\n", - "plt.ylabel('P(exceedance)')\n", + "plt.semilogy(crests_sorted, Q, \"o\")\n", + "plt.xlabel(\"Crest height [m]\")\n", + "plt.ylabel(\"P(exceedance)\")\n", "plt.grid()\n", "plt.show()" ] diff --git a/examples/wave_example.ipynb b/examples/wave_example.ipynb index 728a0b526..02680f530 100644 --- a/examples/wave_example.ipynb +++ b/examples/wave_example.ipynb @@ -236,12 +236,12 @@ } ], "source": [ - "ndbc_data_file = 'data/wave/data.txt'\n", + "ndbc_data_file = \"data/wave/data.txt\"\n", "\n", "# ndbc.read_file outputs the NDBC file data into two variables.\n", - " # raw_ndbc_data is a pandas DataFrame containing the file data. \n", - " # meta contains the meta data, if available. \n", - "[raw_ndbc_data, meta] = wave.io.ndbc.read_file(ndbc_data_file) \n", + "# raw_ndbc_data is a pandas DataFrame containing the file data.\n", + "# meta contains the meta data, if available.\n", + "[raw_ndbc_data, meta] = wave.io.ndbc.read_file(ndbc_data_file)\n", "raw_ndbc_data.head()" ] }, @@ -487,7 +487,7 @@ ], "source": [ "# Transpose raw NDBC data\n", - "ndbc_data = raw_ndbc_data.T \n", + "ndbc_data = raw_ndbc_data.T\n", "ndbc_data.head()" ] }, @@ -568,8 +568,8 @@ } ], "source": [ - "# Compute the enegy periods from the NDBC spectra data \n", - "Te = wave.resource.energy_period(ndbc_data) \n", + "# Compute the enegy periods from the NDBC spectra data\n", + "Te = wave.resource.energy_period(ndbc_data)\n", "Te.head()" ] }, @@ -642,8 +642,8 @@ } ], "source": [ - "# Compute the significant wave height from the NDBC spectra data \n", - "Hm0 = wave.resource.significant_wave_height(ndbc_data) \n", + "# Compute the significant wave height from the NDBC spectra data\n", + "Hm0 = wave.resource.significant_wave_height(ndbc_data)\n", "Hm0.head()" ] }, @@ -717,11 +717,11 @@ ], "source": [ "# Set water depth to 60 m\n", - "h = 60 \n", + "h = 60\n", "\n", "# Compute the energy flux from the NDBC spectra data and water depth\n", - "J = wave.resource.energy_flux(ndbc_data,h) \n", - "J.head() " + "J = wave.resource.energy_flux(ndbc_data, h)\n", + "J.head()" ] }, { @@ -756,8 +756,8 @@ } ], "source": [ - "# Convert the energy period DataFrame to a Series. \n", - "Te = Te.squeeze() \n", + "# Convert the energy period DataFrame to a Series.\n", + "Te = Te.squeeze()\n", "Te.head()" ] }, @@ -799,10 +799,10 @@ ], "source": [ "# Alternatively, convert to Series by calling a specific column in the DataFrame\n", - "Hm0= Hm0['Hm0']\n", + "Hm0 = Hm0[\"Hm0\"]\n", "print(Hm0)\n", "\n", - "J = J['J'] \n", + "J = J[\"J\"]\n", "print(J)" ] }, @@ -822,9 +822,9 @@ "outputs": [], "source": [ "# Set the random seed, to reproduce results\n", - "np.random.seed(1) \n", + "np.random.seed(1)\n", "# Generate random power values\n", - "P = pd.Series(np.random.normal(200, 40, 743),index = J.index) " + "P = pd.Series(np.random.normal(200, 40, 743), index=J.index)" ] }, { @@ -1407,18 +1407,20 @@ ], "source": [ "# Calculate capture length\n", - "L = wave.performance.capture_length(P, J) \n", + "L = wave.performance.capture_length(P, J)\n", "\n", "# Generate bins for Hm0 and Te, input format (start, stop, step_size)\n", - "Hm0_bins = np.arange(0, Hm0.values.max() + .5, .5) \n", + "Hm0_bins = np.arange(0, Hm0.values.max() + 0.5, 0.5)\n", "Te_bins = np.arange(0, Te.values.max() + 1, 1)\n", "\n", "# Create capture length matrices using mean, standard deviation, count, min and max statistics\n", - "LM_mean = wave.performance.capture_length_matrix(Hm0, Te, L, 'mean', Hm0_bins, Te_bins)\n", - "LM_std = wave.performance.capture_length_matrix(Hm0, Te, L, 'std', Hm0_bins, Te_bins)\n", - "LM_count = wave.performance.capture_length_matrix(Hm0, Te, L, 'count', Hm0_bins, Te_bins)\n", - "LM_min = wave.performance.capture_length_matrix(Hm0, Te, L, 'min', Hm0_bins, Te_bins)\n", - "LM_max = wave.performance.capture_length_matrix(Hm0, Te, L, 'max', Hm0_bins, Te_bins)\n", + "LM_mean = wave.performance.capture_length_matrix(Hm0, Te, L, \"mean\", Hm0_bins, Te_bins)\n", + "LM_std = wave.performance.capture_length_matrix(Hm0, Te, L, \"std\", Hm0_bins, Te_bins)\n", + "LM_count = wave.performance.capture_length_matrix(\n", + " Hm0, Te, L, \"count\", Hm0_bins, Te_bins\n", + ")\n", + "LM_min = wave.performance.capture_length_matrix(Hm0, Te, L, \"min\", Hm0_bins, Te_bins)\n", + "LM_max = wave.performance.capture_length_matrix(Hm0, Te, L, \"max\", Hm0_bins, Te_bins)\n", "\n", "# Show mean capture length matrix\n", "LM_mean" @@ -2002,7 +2004,9 @@ ], "source": [ "# Create capture length matrices using frequency\n", - "LM_freq = wave.performance.capture_length_matrix(Hm0, Te, L,'frequency', Hm0_bins, Te_bins)\n", + "LM_freq = wave.performance.capture_length_matrix(\n", + " Hm0, Te, L, \"frequency\", Hm0_bins, Te_bins\n", + ")\n", "\n", "# Show capture length matrix using frequency\n", "LM_freq" @@ -2022,7 +2026,9 @@ "outputs": [], "source": [ "# Demonstration of arbitrary matrix generator\n", - "PM_mean_not_standard = wave.performance.capture_length_matrix(Hm0, Te, P, 'mean', Hm0_bins, Te_bins)" + "PM_mean_not_standard = wave.performance.capture_length_matrix(\n", + " Hm0, Te, P, \"mean\", Hm0_bins, Te_bins\n", + ")" ] }, { @@ -2041,7 +2047,9 @@ "outputs": [], "source": [ "# Demonstration of passing a callable function to the matrix generator\n", - "LM_variance = wave.performance.capture_length_matrix(Hm0, Te, L, np.var, Hm0_bins, Te_bins)" + "LM_variance = wave.performance.capture_length_matrix(\n", + " Hm0, Te, L, np.var, Hm0_bins, Te_bins\n", + ")" ] }, { @@ -2599,7 +2607,7 @@ ], "source": [ "# Create wave energy flux matrix using mean\n", - "JM = wave.performance.wave_energy_flux_matrix(Hm0, Te, J, 'mean', Hm0_bins, Te_bins)\n", + "JM = wave.performance.wave_energy_flux_matrix(Hm0, Te, J, \"mean\", Hm0_bins, Te_bins)\n", "\n", "# Create power matrix using mean\n", "PM_mean = wave.performance.power_matrix(LM_mean, JM)\n", @@ -2639,7 +2647,9 @@ "print(\"MAEP from timeseries = \", maep_timeseries)\n", "\n", "# Calcaulte maep from matrix\n", - "maep_matrix = wave.performance.mean_annual_energy_production_matrix(LM_mean, JM, LM_freq)\n", + "maep_matrix = wave.performance.mean_annual_energy_production_matrix(\n", + " LM_mean, JM, LM_freq\n", + ")\n", "print(\"MAEP from matrices = \", maep_matrix)" ] }, @@ -2671,7 +2681,7 @@ ], "source": [ "# Plot the capture length mean matrix\n", - "ax = wave.graphics.plot_matrix(LM_mean) " + "ax = wave.graphics.plot_matrix(LM_mean)" ] }, { @@ -2715,10 +2725,17 @@ "source": [ "# Customize the matrix plot\n", "import matplotlib.pylab as plt\n", - "plt.figure(figsize=(6,6))\n", + "\n", + "plt.figure(figsize=(6, 6))\n", "ax = plt.gca()\n", - "wave.graphics.plot_matrix(PM_mean, xlabel='Te (s)', ylabel='Hm0 (m)', \\\n", - " zlabel='Mean Power (kW)', show_values=False, ax=ax)" + "wave.graphics.plot_matrix(\n", + " PM_mean,\n", + " xlabel=\"Te (s)\",\n", + " ylabel=\"Hm0 (m)\",\n", + " zlabel=\"Mean Power (kW)\",\n", + " show_values=False,\n", + " ax=ax,\n", + ")" ] } ], diff --git a/examples/wecsim_example.ipynb b/examples/wecsim_example.ipynb index 4106fb52f..3dceda943 100644 --- a/examples/wecsim_example.ipynb +++ b/examples/wecsim_example.ipynb @@ -26,7 +26,7 @@ "metadata": {}, "outputs": [], "source": [ - "from mhkit import wave\n", + "from mhkit import wave\n", "import scipy.io as sio\n", "import matplotlib.pyplot as plt" ] @@ -59,7 +59,7 @@ ], "source": [ "# Relative location and filename of simulated WEC-Sim data (run with mooring)\n", - "filename = './data/wave/RM3MooringMatrix_matlabWorkspace_structure.mat' \n", + "filename = \"./data/wave/RM3MooringMatrix_matlabWorkspace_structure.mat\"\n", "\n", "# Load data using the `wecsim.read_output` function which returns a dictionary of dataFrames\n", "wecsim_data = wave.io.wecsim.read_output(filename)" @@ -226,13 +226,13 @@ ], "source": [ "# Store WEC-Sim output from the Wave Class to a new dataFrame, called `wave_data`\n", - "wave_data = wecsim_data['wave']\n", + "wave_data = wecsim_data[\"wave\"]\n", "\n", "# Display the wave type from the WEC-Sim Wave Class\n", "wave_type = wave_data.name\n", "print(\"WEC-Sim wave type:\", wave_type)\n", "\n", - "# View the WEC-Sim output dataFrame for the Wave Class \n", + "# View the WEC-Sim output dataFrame for the Wave Class\n", "wave_data" ] }, @@ -313,8 +313,8 @@ } ], "source": [ - "# Store WEC-Sim output from the Body Class to a new dictionary of dataFrames, i.e. 'bodies'. \n", - "bodies = wecsim_data['bodies']\n", + "# Store WEC-Sim output from the Body Class to a new dictionary of dataFrames, i.e. 'bodies'.\n", + "bodies = wecsim_data[\"bodies\"]\n", "\n", "# Data fron each body is stored as its own dataFrame, i.e. 'body1' and 'body2'.\n", "bodies.keys()" @@ -343,8 +343,8 @@ } ], "source": [ - "# Store Body Class dataFrame for Body 1 as `body1`. \n", - "body1 = bodies['body1']\n", + "# Store Body Class dataFrame for Body 1 as `body1`.\n", + "body1 = bodies[\"body1\"]\n", "\n", "# Display the name of Body 1 from the WEC-Sim Body Class\n", "print(\"Name of Body 1:\", body1.name)" @@ -384,7 +384,7 @@ ], "source": [ "# Print a list of Body 1 columns that end with 'dof1'\n", - "[col for col in body1 if col.endswith('dof1')]" + "[col for col in body1 if col.endswith(\"dof1\")]" ] }, { @@ -427,11 +427,11 @@ "body1.position_dof3.plot()\n", "plt.xlabel(\"Time [s]\")\n", "plt.ylabel(\"Heave Position [m]\")\n", - "plt.title('Body 1')\n", + "plt.title(\"Body 1\")\n", "\n", - "# Use Pandas to calculate the maximum and minimum heave position of Body 1 \n", - "print(\"Body 1 max heave position =\", body1.position_dof3.max(),\"[m]\")\n", - "print(\"Body 1 min heave position =\", body1.position_dof3.min(),\"[m]\")" + "# Use Pandas to calculate the maximum and minimum heave position of Body 1\n", + "print(\"Body 1 max heave position =\", body1.position_dof3.max(), \"[m]\")\n", + "print(\"Body 1 min heave position =\", body1.position_dof3.min(), \"[m]\")" ] }, { @@ -472,14 +472,14 @@ ], "source": [ "# Create a list of Body 1 data columns that start with 'position'\n", - "filter_col = [col for col in body1 if col.startswith('position')]\n", + "filter_col = [col for col in body1 if col.startswith(\"position\")]\n", "\n", "# Plot filtered 'position' data for Body 1\n", "body1[filter_col].plot()\n", - "plt.xlabel('Time [s]')\n", - "plt.ylabel('Position [m or rad]')\n", - "plt.title('Body 1')\n", - "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))" + "plt.xlabel(\"Time [s]\")\n", + "plt.ylabel(\"Position [m or rad]\")\n", + "plt.title(\"Body 1\")\n", + "plt.legend(loc=\"center left\", bbox_to_anchor=(1, 0.5))" ] }, { @@ -763,8 +763,8 @@ } ], "source": [ - "# Store Body Class dataFrame for Body 2 as `body2` \n", - "body2 = bodies['body2']\n", + "# Store Body Class dataFrame for Body 2 as `body2`\n", + "body2 = bodies[\"body2\"]\n", "\n", "# Display the name of Body 2 from the WEC-Sim Body Class\n", "print(\"Name of Body 2:\", body2.name)\n", @@ -814,13 +814,13 @@ ], "source": [ "# Store WEC-Sim output from the PTO Class to a DataFrame, called `ptos`\n", - "ptos = wecsim_data['ptos']\n", + "ptos = wecsim_data[\"ptos\"]\n", "\n", "# Display the name of the PTO from the WEC-Sim PTO Class\n", "print(\"Name of PTO:\", ptos.name)\n", "\n", "# Print a list of available columns that end with 'dof1'\n", - "[col for col in ptos if col.endswith('dof1')]" + "[col for col in ptos if col.endswith(\"dof1\")]" ] }, { @@ -854,10 +854,10 @@ "source": [ "# Use Pandas to plot pto internal power in heave (DOF 3)\n", "# NOTE: WEC-Sim requires a negative sign to convert internal power to generated power\n", - "(-1*ptos.powerInternalMechanics_dof3/1000).plot()\n", + "(-1 * ptos.powerInternalMechanics_dof3 / 1000).plot()\n", "plt.xlabel(\"Time [s]\")\n", "plt.ylabel(\"Power Generated [kW]\")\n", - "plt.title('PTO')" + "plt.title(\"PTO\")" ] }, { @@ -1133,7 +1133,7 @@ ], "source": [ "# Store WEC-Sim output from the Constraint Class to a new dataFrame, called `constraints`\n", - "constraints = wecsim_data['constraints']\n", + "constraints = wecsim_data[\"constraints\"]\n", "\n", "# Display the name of the Constraint from the WEC-Sim Constraint Class\n", "print(\"Name of Constraint:\", constraints.name)\n", @@ -1376,7 +1376,7 @@ ], "source": [ "# Store WEC-Sim output from the Mooring Class to a new dataFrame, called `mooring`\n", - "mooring = wecsim_data['mooring']\n", + "mooring = wecsim_data[\"mooring\"]\n", "\n", "# View the PTO Class dataFrame\n", "mooring.head()" @@ -1411,8 +1411,8 @@ ], "source": [ "# Use the MHKiT Wave Module to calculate the wave spectrum from the WEC-Sim Wave Class Data\n", - "sample_rate=60\n", - "nnft=1000 # Number of bins in the Fast Fourier Transform\n", + "sample_rate = 60\n", + "nnft = 1000 # Number of bins in the Fast Fourier Transform\n", "ws_spectrum = wave.resource.elevation_spectrum(wave_data, sample_rate, nnft)\n", "\n", "# Plot calculated wave spectrum\n", @@ -1514,7 +1514,7 @@ "Hm0 = wave.resource.significant_wave_height(ws_spectrum)\n", "\n", "# Display calculated Peak Wave Period (Tp) and Significant Wave Height (Hm0)\n", - "display(Tp,Hm0)" + "display(Tp, Hm0)" ] } ], diff --git a/mhkit/__init__.py b/mhkit/__init__.py index 49c1b44b9..05a04dcf1 100644 --- a/mhkit/__init__.py +++ b/mhkit/__init__.py @@ -11,12 +11,13 @@ # Register datetime converter for a matplotlib plotting methods from pandas.plotting import register_matplotlib_converters as _rmc + _rmc() # Ignore future warnings -_warn.simplefilter(action='ignore', category=FutureWarning) +_warn.simplefilter(action="ignore", category=FutureWarning) -__version__ = 'v0.7.0' +__version__ = "v0.7.0" __copyright__ = """ Copyright 2019, Alliance for Sustainable Energy, LLC under the terms of diff --git a/mhkit/dolfyn/__init__.py b/mhkit/dolfyn/__init__.py index 307a6932f..cb459e50f 100644 --- a/mhkit/dolfyn/__init__.py +++ b/mhkit/dolfyn/__init__.py @@ -1,5 +1,10 @@ from mhkit.dolfyn.io.api import read, read_example, save, load, save_mat, load_mat -from mhkit.dolfyn.rotate.api import rotate2, calc_principal_heading, set_declination, set_inst2head_rotmat +from mhkit.dolfyn.rotate.api import ( + rotate2, + calc_principal_heading, + set_declination, + set_inst2head_rotmat, +) from .rotate.base import euler2orient, orient2euler, quaternion2orient from .velocity import VelBinner from mhkit.dolfyn import adv diff --git a/mhkit/dolfyn/adp/__init__.py b/mhkit/dolfyn/adp/__init__.py index f1d1e0517..4dc7607ef 100644 --- a/mhkit/dolfyn/adp/__init__.py +++ b/mhkit/dolfyn/adp/__init__.py @@ -1,2 +1 @@ from . import api - diff --git a/mhkit/dolfyn/adp/clean.py b/mhkit/dolfyn/adp/clean.py index f4cc896b0..25d3b2df5 100644 --- a/mhkit/dolfyn/adp/clean.py +++ b/mhkit/dolfyn/adp/clean.py @@ -40,15 +40,15 @@ def set_range_offset(ds, h_deploy): the surface and downward-facing ADCP's transducers. """ - r = [s for s in ds.dims if 'range' in s] + r = [s for s in ds.dims if "range" in s] for val in r: ds[val] = ds[val].values + h_deploy - ds[val].attrs['units'] = 'm' + ds[val].attrs["units"] = "m" - if hasattr(ds, 'h_deploy'): - ds.attrs['h_deploy'] += h_deploy + if hasattr(ds, "h_deploy"): + ds.attrs["h_deploy"] += h_deploy else: - ds.attrs['h_deploy'] = h_deploy + ds.attrs["h_deploy"] = h_deploy def find_surface(ds, thresh=10, nfilt=None): @@ -78,9 +78,13 @@ def find_surface(ds, thresh=10, nfilt=None): # This finds the first point that increases (away from the profiler) in # the echo profile edf = np.diff(ds.amp.values.astype(np.int16), axis=1) - inds2 = np.max((edf < 0) * - np.arange(ds.vel.shape[1] - 1, - dtype=np.uint8)[None, :, None], axis=1) + 1 + inds2 = ( + np.max( + (edf < 0) * np.arange(ds.vel.shape[1] - 1, dtype=np.uint8)[None, :, None], + axis=1, + ) + + 1 + ) # Calculate the depth of these quantities d1 = ds.range.values[inds] @@ -101,12 +105,17 @@ def find_surface(ds, thresh=10, nfilt=None): dfilt[dfilt == 0] = np.NaN d = dfilt - ds['depth'] = xr.DataArray(d.astype('float32'), - dims=['time'], - attrs={'units': 'm', - 'long_name': 'Depth', - 'standard_name': 'depth', - 'positive': 'down'}) + ds["depth"] = xr.DataArray( + d.astype("float32"), + dims=["time"], + attrs={ + "units": "m", + "long_name": "Depth", + "standard_name": "depth", + "positive": "down", + }, + ) + def find_surface_from_P(ds, salinity=35): """ @@ -137,9 +146,9 @@ def find_surface_from_P(ds, salinity=35): .. math:: \\rho - \\rho_0 = -\\alpha (T-T_0) + \\beta (S-S_0) + \\kappa P Where :math:`\\rho` is water density, :math:`T` is water temperature, - :math:`P` is water pressure, :math:`S` is practical salinity, - :math:`\\alpha` is the thermal expansion coefficient, :math:`\\beta` is - the haline contraction coefficient, and :math:`\\kappa` is adiabatic + :math:`P` is water pressure, :math:`S` is practical salinity, + :math:`\\alpha` is the thermal expansion coefficient, :math:`\\beta` is + the haline contraction coefficient, and :math:`\\kappa` is adiabatic compressibility. """ @@ -153,31 +162,37 @@ def find_surface_from_P(ds, salinity=35): a = 0.15 # thermal expansion coefficient, kg/m^3/degC b = 0.78 # haline contraction coefficient, kg/m^3/ppt k = 4.5e-3 # adiabatic compressibility, kg/m^3/dbar - rho = rho0 - a*(T-T0) + b*(S-S0) + k*P + rho = rho0 - a * (T - T0) + b * (S - S0) + k * P # Depth = pressure (conversion from dbar to MPa) / water weight - d = (ds.pressure*10000)/(9.81*rho) + d = (ds.pressure * 10000) / (9.81 * rho) - if hasattr(ds, 'h_deploy'): + if hasattr(ds, "h_deploy"): d += ds.h_deploy description = "Depth to Seafloor" else: description = "Depth to Instrument" - ds['water_density'] = xr.DataArray( - rho.astype('float32'), - dims=['time'], - attrs={'units': 'kg m-3', - 'long_name': 'Water Density', - 'standard_name': 'sea_water_density', - 'description': 'Water density from linear approximation of sea water equation of state'}) - ds['depth'] = xr.DataArray( - d.astype('float32'), - dims=['time'], - attrs={'units': 'm', - 'long_name': description, - 'standard_name': 'depth', - 'positive': 'down'}) + ds["water_density"] = xr.DataArray( + rho.astype("float32"), + dims=["time"], + attrs={ + "units": "kg m-3", + "long_name": "Water Density", + "standard_name": "sea_water_density", + "description": "Water density from linear approximation of sea water equation of state", + }, + ) + ds["depth"] = xr.DataArray( + d.astype("float32"), + dims=["time"], + attrs={ + "units": "m", + "long_name": description, + "standard_name": "depth", + "positive": "down", + }, + ) def nan_beyond_surface(ds, val=np.nan, beam_angle=None, inplace=False): @@ -204,7 +219,7 @@ def nan_beyond_surface(ds, val=np.nan, beam_angle=None, inplace=False): Notes ----- - Surface interference expected to happen at + Surface interference expected to happen at `distance > range * cos(beam angle) - cell size` """ @@ -212,29 +227,32 @@ def nan_beyond_surface(ds, val=np.nan, beam_angle=None, inplace=False): ds = ds.copy(deep=True) # Get all variables with 'range' coordinate - var = [h for h in ds.keys() if any(s for s in ds[h].dims if 'range' in s)] + var = [h for h in ds.keys() if any(s for s in ds[h].dims if "range" in s)] if beam_angle is None: - if hasattr(ds, 'beam_angle'): - beam_angle = ds.beam_angle * (np.pi/180) + if hasattr(ds, "beam_angle"): + beam_angle = ds.beam_angle * (np.pi / 180) else: - raise Exception("'beam_angle` not found in dataset attributes. "\ - "Please supply the ADCP's beam angle.") + raise Exception( + "'beam_angle` not found in dataset attributes. " + "Please supply the ADCP's beam angle." + ) # Surface interference distance calculated from distance of transducers to surface - if hasattr(ds, 'h_deploy'): - range_limit = ((ds.depth-ds.h_deploy) * np.cos(beam_angle) - - ds.cell_size) + ds.h_deploy + if hasattr(ds, "h_deploy"): + range_limit = ( + (ds.depth - ds.h_deploy) * np.cos(beam_angle) - ds.cell_size + ) + ds.h_deploy else: range_limit = ds.depth * np.cos(beam_angle) - ds.cell_size bds = ds.range > range_limit # Echosounder data needs only be trimmed at water surface - if 'echo' in var: + if "echo" in var: bds_echo = ds.range_echo > ds.depth - ds['echo'].values[..., bds_echo] = val - var.remove('echo') + ds["echo"].values[..., bds_echo] = val + var.remove("echo") # Correct rest of "range" data for surface interference for nm in var: @@ -251,7 +269,7 @@ def nan_beyond_surface(ds, val=np.nan, beam_angle=None, inplace=False): def correlation_filter(ds, thresh=50, inplace=False): """ - Filters out data where correlation is below a threshold in the + Filters out data where correlation is below a threshold in the along-beam correlation data. Parameters @@ -268,7 +286,7 @@ def correlation_filter(ds, thresh=50, inplace=False): Returns ------- ds : xarray.Dataset - Elements in velocity, correlation, and amplitude are removed if below the + Elements in velocity, correlation, and amplitude are removed if below the correlation threshold Notes @@ -280,27 +298,30 @@ def correlation_filter(ds, thresh=50, inplace=False): ds = ds.copy(deep=True) # 4 or 5 beam - if hasattr(ds, 'vel_b5'): - tag = ['', '_b5'] + if hasattr(ds, "vel_b5"): + tag = ["", "_b5"] else: - tag = [''] + tag = [""] # copy original ref frame coord_sys_orig = ds.coord_sys # correlation is always in beam coordinates - rotate2(ds, 'beam', inplace=True) + rotate2(ds, "beam", inplace=True) # correlation is always in beam coordinates for tg in tag: - mask = ds['corr'+tg].values <= thresh + mask = ds["corr" + tg].values <= thresh - for var in ['vel', 'corr', 'amp']: + for var in ["vel", "corr", "amp"]: try: - ds[var+tg].values[mask] = np.nan + ds[var + tg].values[mask] = np.nan except: - ds[var+tg].values[mask] = 0 - ds[var+tg].attrs['Comments'] = 'Filtered of data with a correlation value below ' + \ - str(thresh) + ds.corr.units + ds[var + tg].values[mask] = 0 + ds[var + tg].attrs["Comments"] = ( + "Filtered of data with a correlation value below " + + str(thresh) + + ds.corr.units + ) rotate2(ds, coord_sys_orig, inplace=True) @@ -332,22 +353,22 @@ def medfilt_orient(ds, nfilt=7): ds = ds.copy(deep=True) - if getattr(ds, 'has_imu'): + if getattr(ds, "has_imu"): q_filt = np.zeros(ds.quaternions.shape) for i in range(ds.quaternions.q.size): q_filt[i] = medfilt(ds.quaternions[i].values, nfilt) ds.quaternions.values = q_filt - ds['orientmat'] = quaternion2orient(ds.quaternions) + ds["orientmat"] = quaternion2orient(ds.quaternions) return ds else: # non Nortek AHRS-equipped instruments - do_these = ['pitch', 'roll', 'heading'] + do_these = ["pitch", "roll", "heading"] for nm in do_these: ds[nm].values = medfilt(ds[nm].values, nfilt) - return ds.drop_vars('orientmat') + return ds.drop_vars("orientmat") def val_exceeds_thresh(var, thresh=5, val=np.nan): @@ -373,15 +394,15 @@ def val_exceeds_thresh(var, thresh=5, val=np.nan): var = var.copy(deep=True) - bd = np.zeros(var.shape, dtype='bool') - bd |= (np.abs(var.values) > thresh) + bd = np.zeros(var.shape, dtype="bool") + bd |= np.abs(var.values) > thresh var.values[bd] = val return var -def fillgaps_time(var, method='cubic', maxgap=None): +def fillgaps_time(var, method="cubic", maxgap=None): """ Fill gaps (nan values) in var across time using the specified method @@ -404,14 +425,14 @@ def fillgaps_time(var, method='cubic', maxgap=None): xarray.DataArray.interpolate_na() """ - time_dim = [t for t in var.dims if 'time' in t][0] + time_dim = [t for t in var.dims if "time" in t][0] - return var.interpolate_na(dim=time_dim, method=method, - use_coordinate=True, - limit=maxgap) + return var.interpolate_na( + dim=time_dim, method=method, use_coordinate=True, limit=maxgap + ) -def fillgaps_depth(var, method='cubic', maxgap=None): +def fillgaps_depth(var, method="cubic", maxgap=None): """ Fill gaps (nan values) in var along the depth profile using the specified method @@ -434,8 +455,8 @@ def fillgaps_depth(var, method='cubic', maxgap=None): xarray.DataArray.interpolate_na() """ - range_dim = [t for t in var.dims if 'range' in t][0] + range_dim = [t for t in var.dims if "range" in t][0] - return var.interpolate_na(dim=range_dim, method=method, - use_coordinate=False, - limit=maxgap) + return var.interpolate_na( + dim=range_dim, method=method, use_coordinate=False, limit=maxgap + ) diff --git a/mhkit/dolfyn/adp/turbulence.py b/mhkit/dolfyn/adp/turbulence.py index 72c4704ae..504de30f7 100644 --- a/mhkit/dolfyn/adp/turbulence.py +++ b/mhkit/dolfyn/adp/turbulence.py @@ -16,7 +16,7 @@ def _diffz_first(dat, z): 1 dimensional vector to be differentiated z : array-like Vertical dimension to differentiate across - + Returns ------- out : array-like @@ -36,7 +36,7 @@ def _diffz_centered(dat, z): 1 dimensional vector to be differentiated z : array-like Vertical dimension to differentiate across - + Returns ------- out : array-like @@ -48,7 +48,7 @@ def _diffz_centered(dat, z): Can use 2*np.diff b/c depth bin size never changes """ - return (dat[2:]-dat[:-2]) / (2*np.diff(z)[1:, None]) + return (dat[2:] - dat[:-2]) / (2 * np.diff(z)[1:, None]) def _diffz_centered_extended(dat, z): @@ -61,7 +61,7 @@ def _diffz_centered_extended(dat, z): 1 dimensional vector to be differentiated z : array-like Vertical dimension to differentiate across - + Returns ------- out : array-like @@ -70,19 +70,31 @@ def _diffz_centered_extended(dat, z): Notes ----- Top - bottom centered difference with endpoints determined - with a first difference. Ensures the output array is the + with a first difference. Ensures the output array is the same size as the input array. """ - out = np.concatenate((_diffz_first(dat[:2], z[:2]), - _diffz_centered(dat, z), - _diffz_first(dat[-2:], z[-2:]))) + out = np.concatenate( + ( + _diffz_first(dat[:2], z[:2]), + _diffz_centered(dat, z), + _diffz_first(dat[-2:], z[-2:]), + ) + ) return out class ADPBinner(VelBinner): - def __init__(self, n_bin, fs, n_fft=None, n_fft_coh=None, - noise=None, orientation='up', diff_style='centered_extended'): + def __init__( + self, + n_bin, + fs, + n_fft=None, + n_fft_coh=None, + noise=None, + orientation="up", + diff_style="centered_extended", + ): """ A class for calculating turbulence statistics from ADCP data @@ -104,7 +116,7 @@ def __init__(self, n_bin, fs, n_fft=None, n_fft_coh=None, orientation : str, default='up' Instrument's orientation, either 'up' or 'down' diff_style : str, default='centered_extended' - Style of numerical differentiation using Newton's Method. + Style of numerical differentiation using Newton's Method. Either 'first' (first difference), 'centered' (centered difference), or 'centered_extended' (centered difference with first and last points extended using a first difference). @@ -115,11 +127,11 @@ def __init__(self, n_bin, fs, n_fft=None, n_fft_coh=None, self.orientation = orientation def _diff_func(self, vel, u): - """ Applies the chosen style of numerical differentiation to velocity data. + """Applies the chosen style of numerical differentiation to velocity data. - This method calculates the derivative of the velocity data 'vel' with respect to the 'range' - using the differentiation style specified in 'self.diff_style'. The styles can be 'first' - for first difference, 'centered' for centered difference, and 'centered_extended' for + This method calculates the derivative of the velocity data 'vel' with respect to the 'range' + using the differentiation style specified in 'self.diff_style'. The styles can be 'first' + for first difference, 'centered' for centered difference, and 'centered_extended' for centered difference with first and last points extended using a first difference. Parameters @@ -135,14 +147,14 @@ def _diff_func(self, vel, u): The calculated derivative of the velocity data. """ - if self.diff_style == 'first': - out = _diffz_first(vel[u].values, vel['range'].values) + if self.diff_style == "first": + out = _diffz_first(vel[u].values, vel["range"].values) return out, vel.range[1:] - elif self.diff_style == 'centered': - out = _diffz_centered(vel[u].values, vel['range'].values) + elif self.diff_style == "centered": + out = _diffz_centered(vel[u].values, vel["range"].values) return out, vel.range[1:-1] - elif self.diff_style == 'centered_extended': - out = _diffz_centered_extended(vel[u].values, vel['range'].values) + elif self.diff_style == "centered_extended": + out = _diffz_centered_extended(vel[u].values, vel["range"].values) return out, vel.range def dudz(self, vel, orientation=None): @@ -171,16 +183,16 @@ def dudz(self, vel, orientation=None): if not orientation: orientation = self.orientation sign = 1 - if orientation == 'down': + if orientation == "down": sign *= -1 - dudz, rng = sign*self._diff_func(vel, 0) - return xr.DataArray(dudz, - coords=[rng, vel.time], - dims=['range', 'time'], - attrs={'units': 's-1', - 'long_name': 'Shear in X-direction'} - ) + dudz, rng = sign * self._diff_func(vel, 0) + return xr.DataArray( + dudz, + coords=[rng, vel.time], + dims=["range", "time"], + attrs={"units": "s-1", "long_name": "Shear in X-direction"}, + ) def dvdz(self, vel): """ @@ -204,12 +216,12 @@ def dvdz(self, vel): """ dvdz, rng = self._diff_func(vel, 1) - return xr.DataArray(dvdz, - coords=[rng, vel.time], - dims=['range', 'time'], - attrs={'units': 's-1', - 'long_name': 'Shear in Y-direction'} - ) + return xr.DataArray( + dvdz, + coords=[rng, vel.time], + dims=["range", "time"], + attrs={"units": "s-1", "long_name": "Shear in Y-direction"}, + ) def dwdz(self, vel): """ @@ -233,12 +245,12 @@ def dwdz(self, vel): """ dwdz, rng = self._diff_func(vel, 2) - return xr.DataArray(dwdz, - coords=[rng, vel.time], - dims=['range', 'time'], - attrs={'units': 's-1', - 'long_name': 'Shear in Z-direction'} - ) + return xr.DataArray( + dwdz, + coords=[rng, vel.time], + dims=["range", "time"], + attrs={"units": "s-1", "long_name": "Shear in Z-direction"}, + ) def shear_squared(self, vel): """ @@ -266,8 +278,8 @@ def shear_squared(self, vel): """ shear2 = self.dudz(vel) ** 2 + self.dvdz(vel) ** 2 - shear2.attrs['units'] = 's-2' - shear2.attrs['long_name'] = 'Horizontal Shear Squared' + shear2.attrs["units"] = "s-2" + shear2.attrs["long_name"] = "Horizontal Shear Squared" return shear2 @@ -286,7 +298,7 @@ def doppler_noise_level(self, psd, pct_fN=0.8): Returns ------- - doppler_noise (xarray.DataArray): + doppler_noise (xarray.DataArray): Doppler noise level in units of m/s Notes @@ -299,19 +311,19 @@ def doppler_noise_level(self, psd, pct_fN=0.8): `N` is the constant variance or spectral density, and `f_{c}` is the characteristic frequency. - The characteristic frequency is then found as + The characteristic frequency is then found as .. :math: f_{c} = pct_fN * (f_{s}/2) where `f_{s}/2` is the Nyquist frequency. - Richard, Jean-Baptiste, et al. "Method for identification of Doppler noise - levels in turbulent flow measurements dedicated to tidal energy." International + Richard, Jean-Baptiste, et al. "Method for identification of Doppler noise + levels in turbulent flow measurements dedicated to tidal energy." International Journal of Marine Energy 3 (2013): 52-64. - Thiébaut, Maxime, et al. "Investigating the flow dynamics and turbulence at a - tidal-stream energy site in a highly energetic estuary." Renewable Energy 195 + Thiébaut, Maxime, et al. "Investigating the flow dynamics and turbulence at a + tidal-stream energy site in a highly energetic estuary." Renewable Energy 195 (2022): 252-262. """ @@ -320,38 +332,40 @@ def doppler_noise_level(self, psd, pct_fN=0.8): if not isinstance(pct_fN, float) or not 0 <= pct_fN <= 1: raise ValueError("`pct_fN` must be a float within the range [0, 1].") if len(psd.shape) != 2: - raise Exception('PSD should be 2-dimensional (time, frequency)') + raise Exception("PSD should be 2-dimensional (time, frequency)") # Characteristic frequency set to 80% of Nyquist frequency - fN = self.fs/2 + fN = self.fs / 2 fc = pct_fN * fN # Get units right if psd.freq.units == "Hz": f_range = slice(fc, fN) else: - f_range = slice(2*np.pi*fc, 2*np.pi*fN) + f_range = slice(2 * np.pi * fc, 2 * np.pi * fN) # Noise floor N2 = psd.sel(freq=f_range) * psd.freq.sel(freq=f_range) - noise_level = np.sqrt(N2.mean(dim='freq')) + noise_level = np.sqrt(N2.mean(dim="freq")) return xr.DataArray( - noise_level.values.astype('float32'), - dims=['time'], - attrs={'units': 'm s-1', - 'long_name': 'Doppler Noise Level', - 'description': 'Doppler noise level calculated ' - 'from PSD white noise'}) + noise_level.values.astype("float32"), + dims=["time"], + attrs={ + "units": "m s-1", + "long_name": "Doppler Noise Level", + "description": "Doppler noise level calculated " "from PSD white noise", + }, + ) def _stress_func_warnings(self, ds, beam_angle, noise, tilt_thresh): """ Performs a series of checks and raises warnings for ADCP stress calculations. - This method checks several conditions relevant for ADCP stress calculations and raises - warnings if these conditions are not met. It checks if the beam angle is defined, - if the instrument's coordinate system is aligned with the principal flow directions, - if the tilt is above a threshold, if the noise level is specified, and if the data + This method checks several conditions relevant for ADCP stress calculations and raises + warnings if these conditions are not met. It checks if the beam angle is defined, + if the instrument's coordinate system is aligned with the principal flow directions, + if the tilt is above a threshold, if the noise level is specified, and if the data set is in the 'beam' coordinate system. Parameters @@ -374,41 +388,50 @@ def _stress_func_warnings(self, ds, beam_angle, noise, tilt_thresh): """ # Error 1. Beam Angle - b_angle = getattr(ds, 'beam_angle', beam_angle) + b_angle = getattr(ds, "beam_angle", beam_angle) if b_angle is None: raise Exception( - " Beam angle not found in dataset and no beam angle supplied.") + " Beam angle not found in dataset and no beam angle supplied." + ) # Warning 1. Memo - warnings.warn(" The beam-variance algorithms assume the instrument's " - "(XYZ) coordinate system is aligned with the principal " - "flow directions.") + warnings.warn( + " The beam-variance algorithms assume the instrument's " + "(XYZ) coordinate system is aligned with the principal " + "flow directions." + ) # Warning 2. Check tilt - tilt_mask = calc_tilt(ds['pitch'], ds['roll']) > tilt_thresh + tilt_mask = calc_tilt(ds["pitch"], ds["roll"]) > tilt_thresh if sum(tilt_mask): pct_above_thresh = round(sum(tilt_mask) / len(tilt_mask) * 100, 2) - warnings.warn(f" {pct_above_thresh} % of measurements have a tilt " - f"greater than {tilt_thresh} degrees.") + warnings.warn( + f" {pct_above_thresh} % of measurements have a tilt " + f"greater than {tilt_thresh} degrees." + ) # Warning 3. Noise level of instrument is important considering 50 % of variance # in ADCP data can be noise if noise is None: - warnings.warn(' No "noise" input supplied. Consider calculating "noise" ' - 'using `calc_doppler_noise`') + warnings.warn( + ' No "noise" input supplied. Consider calculating "noise" ' + "using `calc_doppler_noise`" + ) noise = 0 # Warning 4. Likely not in beam coordinates after running a typical analysis workflow - if 'beam' not in ds.coord_sys: - warnings.warn(" Raw dataset must be in the 'beam' coordinate system. " - "Rotating raw dataset...") - ds.velds.rotate2('beam') + if "beam" not in ds.coord_sys: + warnings.warn( + " Raw dataset must be in the 'beam' coordinate system. " + "Rotating raw dataset..." + ) + ds.velds.rotate2("beam") return b_angle, noise - + def _check_orientation(self, ds, orientation, beam5=False): """ - Determines the beam order for the beam-stress rotation algorithm based on + Determines the beam order for the beam-stress rotation algorithm based on the instrument orientation. Note: Stacey defines the beams for down-looking Workhorse ADCPs. @@ -424,11 +447,11 @@ def _check_orientation(self, ds, orientation, beam5=False): ds : xarray.Dataset Raw dataset in beam coordinates orientation : str - The orientation of the instrument, either 'up' or 'down'. - If None, the orientation will be retrieved from the dataset or the + The orientation of the instrument, either 'up' or 'down'. + If None, the orientation will be retrieved from the dataset or the instance's default orientation. beam5 : bool, default=False - A flag indicating whether a fifth beam is present. + A flag indicating whether a fifth beam is present. If True, the number 4 will be appended to the beam order. Returns @@ -438,36 +461,38 @@ def _check_orientation(self, ds, orientation, beam5=False): phi2 : float, optional The mean of the roll values in radians. Only returned if 'beam5' is True. phi3 : float, optional - The mean of the pitch values in radians, negated for Nortek instruments. + The mean of the pitch values in radians, negated for Nortek instruments. Only returned if 'beam5' is True. """ if orientation is None: - orientation = getattr(ds, 'orientation', self.orientation) + orientation = getattr(ds, "orientation", self.orientation) - if 'TRDI' in ds.inst_make: - phi2 = np.deg2rad(self.mean(ds['pitch'].values)) - phi3 = np.deg2rad(self.mean(ds['roll'].values)) - if 'down' in orientation.lower(): + if "TRDI" in ds.inst_make: + phi2 = np.deg2rad(self.mean(ds["pitch"].values)) + phi3 = np.deg2rad(self.mean(ds["roll"].values)) + if "down" in orientation.lower(): # this order is correct given the note above beams = [0, 1, 2, 3] # for down-facing RDIs - elif 'up' in orientation.lower(): + elif "up" in orientation.lower(): beams = [0, 1, 3, 2] # for up-facing RDIs else: raise Exception( - "Please provide instrument orientation ['up' or 'down']") + "Please provide instrument orientation ['up' or 'down']" + ) # For Nortek Signatures - elif ('Signature' in ds.inst_model) or ('AD2CP' in ds.inst_model): - phi2 = np.deg2rad(self.mean(ds['roll'].values)) - phi3 = -np.deg2rad(self.mean(ds['pitch'].values)) - if 'down' in orientation.lower(): + elif ("Signature" in ds.inst_model) or ("AD2CP" in ds.inst_model): + phi2 = np.deg2rad(self.mean(ds["roll"].values)) + phi3 = -np.deg2rad(self.mean(ds["pitch"].values)) + if "down" in orientation.lower(): beams = [2, 0, 3, 1] # for down-facing Norteks - elif 'up' in orientation.lower(): + elif "up" in orientation.lower(): beams = [0, 2, 3, 1] # for up-facing Norteks else: raise Exception( - "Please provide instrument orientation ['up' or 'down']") + "Please provide instrument orientation ['up' or 'down']" + ) if beam5: beams.append(4) @@ -477,7 +502,7 @@ def _check_orientation(self, ds, orientation, beam5=False): def _beam_variance(self, ds, time, noise, beam_order, n_beams): """ - Calculates the variance of the along-beam velocities and then subtracts + Calculates the variance of the along-beam velocities and then subtracts noise from the result. Parameters @@ -496,19 +521,20 @@ def _beam_variance(self, ds, time, noise, beam_order, n_beams): Returns ------- bp2_ : xarray.DataArray - Enxemble-averaged along-beam velocity variance, + Enxemble-averaged along-beam velocity variance, written "beam-velocity prime squared bar" in units of m^2/s^2 """ # Concatenate 5th beam velocity if need be if n_beams == 4: - beam_vel = ds['vel'].values + beam_vel = ds["vel"].values elif n_beams == 5: - beam_vel = np.concatenate((ds['vel'].values, - ds['vel_b5'].values[None, ...])) + beam_vel = np.concatenate( + (ds["vel"].values, ds["vel_b5"].values[None, ...]) + ) # Calculate along-beam velocity prime squared bar - bp2_ = np.empty((n_beams, len(ds.range), len(time)))*np.nan + bp2_ = np.empty((n_beams, len(ds.range), len(time))) * np.nan for i, beam in enumerate(beam_order): bp2_[i] = np.nanvar(self.reshape(beam_vel[beam]), axis=-1) @@ -521,7 +547,7 @@ def _beam_variance(self, ds, time, noise, beam_order, n_beams): def reynolds_stress_4beam(self, ds, noise=None, orientation=None, beam_angle=None): """ - Calculate the stresses from the covariance of along-beam + Calculate the stresses from the covariance of along-beam velocity measurements Parameters @@ -547,20 +573,21 @@ def reynolds_stress_4beam(self, ds, noise=None, orientation=None, beam_angle=Non Assumes ADCP instrument coordinate system is aligned with principal flow directions. - Stacey, Mark T., Stephen G. Monismith, and Jon R. Burau. "Measurements - of Reynolds stress profiles in unstratified tidal flow." Journal of + Stacey, Mark T., Stephen G. Monismith, and Jon R. Burau. "Measurements + of Reynolds stress profiles in unstratified tidal flow." Journal of Geophysical Research: Oceans 104.C5 (1999): 10933-10949. """ # Run through warnings b_angle, noise = self._stress_func_warnings( - ds, beam_angle, noise, tilt_thresh=5) + ds, beam_angle, noise, tilt_thresh=5 + ) # Fetch beam order beam_order = self._check_orientation(ds, orientation, beam5=False) # Calculate beam variance and subtract noise - time = self.mean(ds['time'].values) + time = self.mean(ds["time"].values) bp2_ = self._beam_variance(ds, time, noise, beam_order, n_beams=4) # Run stress calculations @@ -569,16 +596,20 @@ def reynolds_stress_4beam(self, ds, noise=None, orientation=None, beam_angle=Non vpwp_ = (bp2_[2] - bp2_[3]) / denm return xr.DataArray( - np.stack([upwp_*np.nan, upwp_, vpwp_]).astype('float32'), - coords={'tau': ["upvp_", "upwp_", "vpwp_"], - 'range': ds.range, - 'time': time}, - attrs={'units': 'm2 s-2', - 'long_name': 'Specific Reynolds Stress Vector'}) - - def stress_tensor_5beam(self, ds, noise=None, orientation=None, beam_angle=None, tke_only=False): + np.stack([upwp_ * np.nan, upwp_, vpwp_]).astype("float32"), + coords={ + "tau": ["upvp_", "upwp_", "vpwp_"], + "range": ds.range, + "time": time, + }, + attrs={"units": "m2 s-2", "long_name": "Specific Reynolds Stress Vector"}, + ) + + def stress_tensor_5beam( + self, ds, noise=None, orientation=None, beam_angle=None, tke_only=False + ): """ - Calculate the stresses from the covariance of along-beam + Calculate the stresses from the covariance of along-beam velocity measurements Parameters @@ -605,7 +636,7 @@ def stress_tensor_5beam(self, ds, noise=None, orientation=None, beam_angle=None, Assumes small-angle approximation is applicable. Assumes ADCP instrument coordinate system is aligned with principal flow - directions, i.e. u', v' and w' are aligned to the instrument's (XYZ) + directions, i.e. u', v' and w' are aligned to the instrument's (XYZ) frame of reference. The stress equations here utilize u'v'_ to account for small variations @@ -618,91 +649,122 @@ def stress_tensor_5beam(self, ds, noise=None, orientation=None, beam_angle=None, energy estimates from various ADCP beam configurations: Theory." J. of Phys. Ocean (2007): 1-35. - Guerra, Maricarmen, and Jim Thomson. "Turbulence measurements from - five-beam acoustic Doppler current profilers." Journal of Atmospheric + Guerra, Maricarmen, and Jim Thomson. "Turbulence measurements from + five-beam acoustic Doppler current profilers." Journal of Atmospheric and Oceanic Technology 34.6 (2017): 1267-1284. """ # Check that beam 5 velocity exists - if 'vel_b5' not in ds.data_vars: + if "vel_b5" not in ds.data_vars: raise Exception("Must have 5th beam data to use this function.") # Run through warnings b_angle, noise = self._stress_func_warnings( - ds, beam_angle, noise, tilt_thresh=10) + ds, beam_angle, noise, tilt_thresh=10 + ) # Fetch beam order - beam_order, phi2, phi3 = self._check_orientation( - ds, orientation, beam5=True) + beam_order, phi2, phi3 = self._check_orientation(ds, orientation, beam5=True) # Calculate beam variance and subtract noise - time = self.mean(ds['time'].values) + time = self.mean(ds["time"].values) bp2_ = self._beam_variance(ds, time, noise, beam_order, n_beams=5) # Run tke and stress calculations th = np.deg2rad(b_angle) sin = np.sin cos = np.cos - denm = -4 * sin(th)**6 * cos(th)**2 - - upup_ = (-2*sin(th)**4*cos(th)**2*(bp2_[1]+bp2_[0]-2*cos(th)**2*bp2_[4]) + - 2*sin(th)**5*cos(th)*phi3*(bp2_[1]-bp2_[0])) / denm - - vpvp_ = (-2*sin(th)**4*cos(th)**2*(bp2_[3]+bp2_[0]-2*cos(th)**2*bp2_[4]) - - 2*sin(th)**4*cos(th)**2*phi3*(bp2_[1]-bp2_[0]) + - 2*sin(th)**3*cos(th)**3*phi3*(bp2_[1]-bp2_[0]) - - 2*sin(th)**5*cos(th)*phi2*(bp2_[3]-bp2_[2])) / denm - - wpwp_ = (-2*sin(th)**5*cos(th) * - (bp2_[1]-bp2_[0] + 2*sin(th)**5*cos(th)*phi2*(bp2_[3]-bp2_[2]) - - 4*sin(th)**6*cos(th)**2*bp2_[4])) / denm + denm = -4 * sin(th) ** 6 * cos(th) ** 2 + + upup_ = ( + -2 + * sin(th) ** 4 + * cos(th) ** 2 + * (bp2_[1] + bp2_[0] - 2 * cos(th) ** 2 * bp2_[4]) + + 2 * sin(th) ** 5 * cos(th) * phi3 * (bp2_[1] - bp2_[0]) + ) / denm + + vpvp_ = ( + -2 + * sin(th) ** 4 + * cos(th) ** 2 + * (bp2_[3] + bp2_[0] - 2 * cos(th) ** 2 * bp2_[4]) + - 2 * sin(th) ** 4 * cos(th) ** 2 * phi3 * (bp2_[1] - bp2_[0]) + + 2 * sin(th) ** 3 * cos(th) ** 3 * phi3 * (bp2_[1] - bp2_[0]) + - 2 * sin(th) ** 5 * cos(th) * phi2 * (bp2_[3] - bp2_[2]) + ) / denm + + wpwp_ = ( + -2 + * sin(th) ** 5 + * cos(th) + * ( + bp2_[1] + - bp2_[0] + + 2 * sin(th) ** 5 * cos(th) * phi2 * (bp2_[3] - bp2_[2]) + - 4 * sin(th) ** 6 * cos(th) ** 2 * bp2_[4] + ) + ) / denm tke_vec = xr.DataArray( - np.stack([upup_, vpvp_, wpwp_]).astype('float32'), - coords={'tke': ["upup_", "vpvp_", "wpwp_"], - 'range': ds.range, - 'time': time}, - attrs={'units': 'm2 s-2', - 'long_name': 'TKE Vector', - 'standard_name': 'specific_turbulent_kinetic_energy_of_sea_water'}) + np.stack([upup_, vpvp_, wpwp_]).astype("float32"), + coords={ + "tke": ["upup_", "vpvp_", "wpwp_"], + "range": ds.range, + "time": time, + }, + attrs={ + "units": "m2 s-2", + "long_name": "TKE Vector", + "standard_name": "specific_turbulent_kinetic_energy_of_sea_water", + }, + ) if tke_only: return tke_vec else: # Guerra Thomson calculate u'v' bar from from the covariance of u' and v' - ds.velds.rotate2('inst') + ds.velds.rotate2("inst") vel = self.detrend(ds.vel.values) - upvp_ = np.nanmean(vel[0] * vel[1], axis=-1, - dtype=np.float64).astype(np.float32) - - upwp_ = (sin(th)**5*cos(th)*(bp2_[1]-bp2_[0]) + - 2*sin(th)**4*cos(th)*2*phi3*(bp2_[1]+bp2_[0]) - - 4*sin(th)**4*cos(th)*2*phi3*bp2_[4] - - 4*sin(th)**6*cos(th)*2*phi2*upvp_) / denm - - vpwp_ = (sin(th)**5*cos(th)*(bp2_[3]-bp2_[2]) - - 2*sin(th)**4*cos(th)*2*phi2*(bp2_[3]+bp2_[2]) + - 4*sin(th)**4*cos(th)*2*phi2*bp2_[4] + - 4*sin(th)**6*cos(th)*2*phi3*upvp_) / denm + upvp_ = np.nanmean(vel[0] * vel[1], axis=-1, dtype=np.float64).astype( + np.float32 + ) + + upwp_ = ( + sin(th) ** 5 * cos(th) * (bp2_[1] - bp2_[0]) + + 2 * sin(th) ** 4 * cos(th) * 2 * phi3 * (bp2_[1] + bp2_[0]) + - 4 * sin(th) ** 4 * cos(th) * 2 * phi3 * bp2_[4] + - 4 * sin(th) ** 6 * cos(th) * 2 * phi2 * upvp_ + ) / denm + + vpwp_ = ( + sin(th) ** 5 * cos(th) * (bp2_[3] - bp2_[2]) + - 2 * sin(th) ** 4 * cos(th) * 2 * phi2 * (bp2_[3] + bp2_[2]) + + 4 * sin(th) ** 4 * cos(th) * 2 * phi2 * bp2_[4] + + 4 * sin(th) ** 6 * cos(th) * 2 * phi3 * upvp_ + ) / denm stress_vec = xr.DataArray( - np.stack([upvp_, upwp_, vpwp_]).astype('float32'), - coords={'tau': ["upvp_", "upwp_", "vpwp_"], - 'range': ds.range, - 'time': time}, - attrs={'units': 'm2 s-2', - 'long_name': 'Specific Reynolds Stress Vector'}) + np.stack([upvp_, upwp_, vpwp_]).astype("float32"), + coords={ + "tau": ["upvp_", "upwp_", "vpwp_"], + "range": ds.range, + "time": time, + }, + attrs={ + "units": "m2 s-2", + "long_name": "Specific Reynolds Stress Vector", + }, + ) return tke_vec, stress_vec - def total_turbulent_kinetic_energy(self, - ds, - noise=None, - orientation=None, - beam_angle=None): + def total_turbulent_kinetic_energy( + self, ds, noise=None, orientation=None, beam_angle=None + ): """ - Calculate magnitude of turbulent kinetic energy from 5-beam ADCP. + Calculate magnitude of turbulent kinetic energy from 5-beam ADCP. Parameters ---------- @@ -726,25 +788,26 @@ def total_turbulent_kinetic_energy(self, combines the TKE components. Warning: the integral length scale of turbulence captured by the - ADCP measurements (i.e. the size of turbulent structures) increases + ADCP measurements (i.e. the size of turbulent structures) increases with increasing range from the instrument. """ tke_vec = self.stress_tensor_5beam( - ds, noise, orientation, beam_angle, tke_only=True) + ds, noise, orientation, beam_angle, tke_only=True + ) - tke = tke_vec.sum('tke') / 2 - tke.attrs['units'] = 'm2 s-2' - tke.attrs['long_name'] = 'TKE Magnitude', - tke.attrs['standard_name'] = 'specific_turbulent_kinetic_energy_of_sea_water' + tke = tke_vec.sum("tke") / 2 + tke.attrs["units"] = "m2 s-2" + tke.attrs["long_name"] = ("TKE Magnitude",) + tke.attrs["standard_name"] = "specific_turbulent_kinetic_energy_of_sea_water" - return tke.astype('float32') + return tke.astype("float32") def check_turbulence_cascade_slope(self, psd, freq_range=[0.2, 0.4]): """ - This function calculates the slope of the PSD, the power spectra + This function calculates the slope of the PSD, the power spectra of velocity, within the given frequency range. The purpose of this - function is to check that the region of the PSD containing the + function is to check that the region of the PSD containing the isotropic turbulence cascade decreases at a rate of :math:`f^{-5/3}`. Parameters @@ -752,13 +815,13 @@ def check_turbulence_cascade_slope(self, psd, freq_range=[0.2, 0.4]): psd : xarray.DataArray ([[range,] time,] freq) The power spectral density (1D, 2D or 3D) freq_range : iterable(2) (default: [6.28, 12.57]) - The range over which the isotropic turbulence cascade occurs, in + The range over which the isotropic turbulence cascade occurs, in units of the psd frequency vector (Hz or rad/s) Returns ------- (m, b): tuple (slope, y-intercept) - A tuple containing the coefficients of the log-adjusted linear + A tuple containing the coefficients of the log-adjusted linear regression between PSD and frequency Notes @@ -767,9 +830,9 @@ def check_turbulence_cascade_slope(self, psd, freq_range=[0.2, 0.4]): .. math:: S(k) = \\alpha \\epsilon^{2/3} k^{-5/3} + N - The slope of the isotropic turbulence cascade, which should be - equal to :math:`k^{-5/3}` or :math:`f^{-5/3}`, where k and f are - the wavenumber and frequency vectors, is estimated using linear + The slope of the isotropic turbulence cascade, which should be + equal to :math:`k^{-5/3}` or :math:`f^{-5/3}`, where k and f are + the wavenumber and frequency vectors, is estimated using linear regression with a log transformation: .. math:: log10(y) = m*log10(x) + b @@ -778,31 +841,31 @@ def check_turbulence_cascade_slope(self, psd, freq_range=[0.2, 0.4]): .. math:: y = 10^{b} x^{m} - Where :math:`y` is S(k) or S(f), :math:`x` is k or f, :math:`m` - is the slope (ideally -5/3), and :math:`10^{b}` is the intercept of + Where :math:`y` is S(k) or S(f), :math:`x` is k or f, :math:`m` + is the slope (ideally -5/3), and :math:`10^{b}` is the intercept of y at x^m=1. """ if not isinstance(psd, xr.DataArray): raise TypeError("`psd` must be an instance of `xarray.DataArray`.") - if not hasattr(freq_range, '__iter__') or len(freq_range) != 2: + if not hasattr(freq_range, "__iter__") or len(freq_range) != 2: raise ValueError("`freq_range` must be an iterable of length 2.") - + idx = np.where((freq_range[0] < psd.freq) & (psd.freq < freq_range[1])) idx = idx[0] - x = np.log10(psd['freq'].isel(freq=idx)) + x = np.log10(psd["freq"].isel(freq=idx)) y = np.log10(psd.isel(freq=idx)) - y_bar = y.mean('freq') - x_bar = x.mean('freq') + y_bar = y.mean("freq") + x_bar = x.mean("freq") # using the formula to calculate the slope and intercept n = np.sum((x - x_bar) * (y - y_bar), axis=0) - d = np.sum((x - x_bar)**2, axis=0) + d = np.sum((x - x_bar) ** 2, axis=0) - m = n/d - b = y_bar - m*x_bar + m = n / d + b = y_bar - m * x_bar return m, b @@ -817,7 +880,7 @@ def dissipation_rate_LT83(self, psd, U_mag, freq_range=[0.2, 0.4]): U_mag : xarray.DataArray (time) The bin-averaged horizontal velocity (a.k.a. speed) from a single depth bin (range) f_range : iterable(2) - The range over which to integrate/average the spectrum, in units + The range over which to integrate/average the spectrum, in units of the psd frequency vector (Hz or rad/s) Returns @@ -850,33 +913,36 @@ def dissipation_rate_LT83(self, psd, U_mag, freq_range=[0.2, 0.4]): """ if len(psd.shape) != 2: - raise Exception('PSD should be 2-dimensional (time, frequency)') + raise Exception("PSD should be 2-dimensional (time, frequency)") if len(U_mag.shape) != 1: - raise Exception('U_mag should be 1-dimensional (time)') - if not hasattr(freq_range, '__iter__') or len(freq_range) != 2: + raise Exception("U_mag should be 1-dimensional (time)") + if not hasattr(freq_range, "__iter__") or len(freq_range) != 2: raise ValueError("`freq_range` must be an iterable of length 2.") - + freq = psd.freq idx = np.where((freq_range[0] < freq) & (freq < freq_range[1])) idx = idx[0] - if freq.units == 'Hz': - U = U_mag/(2*np.pi) + if freq.units == "Hz": + U = U_mag / (2 * np.pi) else: U = U_mag a = 0.5 - out = (psd[:, idx] * freq[idx]**(5/3) / - a).mean(axis=-1)**(3/2) / U.values + out = (psd[:, idx] * freq[idx] ** (5 / 3) / a).mean(axis=-1) ** ( + 3 / 2 + ) / U.values return xr.DataArray( - out.astype('float32'), - attrs={'units': 'm2 s-3', - 'long_name': 'TKE Dissipation Rate', - 'standard_name': 'specific_turbulent_kinetic_energy_dissipation_in_sea_water', - 'description': 'TKE dissipation rate calculated using ' - 'the method from Lumley and Terray, 1983', - }) + out.astype("float32"), + attrs={ + "units": "m2 s-3", + "long_name": "TKE Dissipation Rate", + "standard_name": "specific_turbulent_kinetic_energy_dissipation_in_sea_water", + "description": "TKE dissipation rate calculated using " + "the method from Lumley and Terray, 1983", + }, + ) def dissipation_rate_SF(self, vel_raw, r_range=[1, 5]): """ @@ -904,18 +970,18 @@ def dissipation_rate_SF(self, vel_raw, r_range=[1, 5]): Notes ----- - Dissipation rate outputted by this function is only valid if the isotropic - turbulence cascade can be seen in the TKE spectra. + Dissipation rate outputted by this function is only valid if the isotropic + turbulence cascade can be seen in the TKE spectra. - Velocity data must be in beam coordinates and should be cleaned of surface + Velocity data must be in beam coordinates and should be cleaned of surface interference. This method calculates the 2nd order structure function: .. math:: D(z,r) = [(u'(z) - u`(z+r))^2] - where `u'` is the velocity fluctuation `z` is the depth bin, - `r` is the separation between depth bins, and [] denotes a time average + where `u'` is the velocity fluctuation `z` is the depth bin, + `r` is the separation between depth bins, and [] denotes a time average (size 'ADPBinner.n_bin'). The stucture function can then be used to estimate the dissipation rate: @@ -934,14 +1000,15 @@ def dissipation_rate_SF(self, vel_raw, r_range=[1, 5]): if not isinstance(vel_raw, xr.DataArray): raise TypeError("`vel_raw` must be an instance of `xarray.DataArray`.") - if not hasattr(r_range, '__iter__') or len(r_range) != 2: + if not hasattr(r_range, "__iter__") or len(r_range) != 2: raise ValueError("`r_range` must be an iterable of length 2.") if len(vel_raw.shape) != 2: raise Exception( - "Function input must be single beam and in 'beam' coordinate system") + "Function input must be single beam and in 'beam' coordinate system" + ) - if 'range_b5' in vel_raw.dims: + if "range_b5" in vel_raw.dims: rng = vel_raw.range_b5 time = self.mean(vel_raw.time_b5.values) else: @@ -951,28 +1018,27 @@ def dissipation_rate_SF(self, vel_raw, r_range=[1, 5]): # bm shape is [range, ensemble time, 'data within ensemble'] bm = self.demean(vel_raw.values) # take out the ensemble mean - e = np.empty(bm.shape[:2], dtype='float32')*np.nan - n = np.empty(bm.shape[:2], dtype='float32')*np.nan + e = np.empty(bm.shape[:2], dtype="float32") * np.nan + n = np.empty(bm.shape[:2], dtype="float32") * np.nan bin_size = round(np.diff(rng)[0], 3) - R = int(r_range[0]/bin_size) - r = np.arange(bin_size, r_range[1]+bin_size, bin_size) + R = int(r_range[0] / bin_size) + r = np.arange(bin_size, r_range[1] + bin_size, bin_size) # D(z,r,time) D = np.zeros((bm.shape[0], r.size, bm.shape[1])) for r_value in r: # the i in d is the index based on r and bin size # bin size index, > 1 - i = int(r_value/bin_size) + i = int(r_value / bin_size) for idx in range(bm.shape[1]): # for each ensemble # subtract the variance of adjacent depth cells - d = np.nanmean( - (bm[:-i, idx, :] - bm[i:, idx, :]) ** 2, axis=-1) + d = np.nanmean((bm[:-i, idx, :] - bm[i:, idx, :]) ** 2, axis=-1) # have to insert 0/nan in first bin to match length spaces = np.empty((i,)) spaces[:] = np.NaN - D[:, i-1, idx] = np.concatenate((spaces, d)) + D[:, i - 1, idx] = np.concatenate((spaces, d)) # find best fit line y = mx + b (aka D(z,r) = A*r^2/3 + N) to solve # epsilon for each depth and ensemble @@ -981,50 +1047,52 @@ def dissipation_rate_SF(self, vel_raw, r_range=[1, 5]): for i in range(D.shape[1], D.shape[0]): # average ensembles together if not all(np.isnan(D[i, R:, idx])): # if no nan's - e[i, idx], n[i, idx] = np.polyfit(r[R:] ** 2/3, - D[i, R:, idx], - deg=1) + e[i, idx], n[i, idx] = np.polyfit( + r[R:] ** 2 / 3, D[i, R:, idx], deg=1 + ) else: e[i, idx], n[i, idx] = np.nan, np.nan # A taken as 2.1, n = y-intercept - epsilon = (e/2.1)**(3/2) - noise = np.sqrt(n/2) + epsilon = (e / 2.1) ** (3 / 2) + noise = np.sqrt(n / 2) epsilon = xr.DataArray( - epsilon.astype('float32'), - coords={vel_raw.dims[0]: rng, - vel_raw.dims[1]: time}, + epsilon.astype("float32"), + coords={vel_raw.dims[0]: rng, vel_raw.dims[1]: time}, dims=vel_raw.dims, - attrs={'units': 'm2 s-3', - 'long_name': 'TKE Dissipation Rate', - 'standard_name': 'specific_turbulent_kinetic_energy_dissipation_in_sea_water', - 'description': 'TKE dissipation rate calculated from the ' - '"structure function" method from Wiles et al, 2006.' - }) + attrs={ + "units": "m2 s-3", + "long_name": "TKE Dissipation Rate", + "standard_name": "specific_turbulent_kinetic_energy_dissipation_in_sea_water", + "description": "TKE dissipation rate calculated from the " + '"structure function" method from Wiles et al, 2006.', + }, + ) noise = xr.DataArray( - noise.astype('float32'), - coords={vel_raw.dims[0]: rng, - vel_raw.dims[1]: time}, - attrs={'units': 'm s-1', - 'long_name': 'Structure Function Noise Offset', - }) + noise.astype("float32"), + coords={vel_raw.dims[0]: rng, vel_raw.dims[1]: time}, + attrs={ + "units": "m s-1", + "long_name": "Structure Function Noise Offset", + }, + ) SF = xr.DataArray( - D.astype('float32'), - coords={vel_raw.dims[0]: rng, - 'range_SF': r, - vel_raw.dims[1]: time}, - attrs={'units': 'm2 s-2', - 'long_name': 'Structure Function D(z,r)', - 'description': '"Structure function" from Wiles et al, 2006.' - }) + D.astype("float32"), + coords={vel_raw.dims[0]: rng, "range_SF": r, vel_raw.dims[1]: time}, + attrs={ + "units": "m2 s-2", + "long_name": "Structure Function D(z,r)", + "description": '"Structure function" from Wiles et al, 2006.', + }, + ) return epsilon, noise, SF def friction_velocity(self, ds_avg, upwp_, z_inds=slice(1, 5), H=None): """ - Approximate friction velocity from shear stress using a + Approximate friction velocity from shear stress using a logarithmic profile. Parameters @@ -1051,18 +1119,20 @@ def friction_velocity(self, ds_avg, upwp_, z_inds=slice(1, 5), H=None): raise TypeError("`upwp_` must be an instance of `xarray.DataArray`.") if not isinstance(z_inds, slice): raise TypeError("`z_inds` must be an instance of `slice(int,int)`.") - + if not H: H = ds_avg.depth.values - z = ds_avg['range'].values + z = ds_avg["range"].values upwp_ = upwp_.values sign = np.nanmean(np.sign(upwp_[z_inds, :]), axis=0) - u_star = np.nanmean(sign * upwp_[z_inds, :] / - (1 - z[z_inds, None] / H), axis=0) ** 0.5 + u_star = ( + np.nanmean(sign * upwp_[z_inds, :] / (1 - z[z_inds, None] / H), axis=0) + ** 0.5 + ) return xr.DataArray( - u_star.astype('float32'), - coords={'time': ds_avg.time}, - attrs={'units': 'm s-1', - 'long_name': 'Friction Velocity'}) + u_star.astype("float32"), + coords={"time": ds_avg.time}, + attrs={"units": "m s-1", "long_name": "Friction Velocity"}, + ) diff --git a/mhkit/dolfyn/adv/__init__.py b/mhkit/dolfyn/adv/__init__.py index 9468875d3..4dc7607ef 100644 --- a/mhkit/dolfyn/adv/__init__.py +++ b/mhkit/dolfyn/adv/__init__.py @@ -1 +1 @@ -from . import api \ No newline at end of file +from . import api diff --git a/mhkit/dolfyn/adv/clean.py b/mhkit/dolfyn/adv/clean.py index e33c95043..5843a7ed5 100644 --- a/mhkit/dolfyn/adv/clean.py +++ b/mhkit/dolfyn/adv/clean.py @@ -4,13 +4,14 @@ import warnings from ..velocity import VelBinner from ..tools.misc import group, slice1d_along_axis -warnings.filterwarnings('ignore', category=np.RankWarning) + +warnings.filterwarnings("ignore", category=np.RankWarning) sin = np.sin cos = np.cos -def clean_fill(u, mask, npt=12, method='cubic', maxgap=6): +def clean_fill(u, mask, npt=12, method="cubic", maxgap=6): """ Interpolate over mask values in timeseries data using the specified method @@ -22,7 +23,7 @@ def clean_fill(u, mask, npt=12, method='cubic', maxgap=6): Logical tensor of elements to "nan" out (from `spikeThresh`, `rangeLimit`, or `GN2002`) and replace npt : int - The number of points on either side of the bad values that + The number of points on either side of the bad values that interpolation occurs over method : string Interpolation method to use (linear, cubic, pchip, etc). Default is 'cubic' @@ -43,7 +44,7 @@ def clean_fill(u, mask, npt=12, method='cubic', maxgap=6): u.values[..., mask] = np.nan # Remove bad data for 2D+ and 1D timeseries variables - if 'dir' in u.dims: + if "dir" in u.dims: for i in range(u.shape[0]): u[i] = _interp_nan(u[i], npt, method, maxgap) else: @@ -101,13 +102,12 @@ def _interp_nan(da, npt, method, maxgap): ntail += 1 pos += 1 - if (ntail == npt or pos == len(da)): + if ntail == npt or pos == len(da): # This is the block we are interpolating over i_int = i[start:pos] - da[i_int] = da[i_int].interpolate_na(dim=da.dims[-1], - method=method, - use_coordinate=True, - limit=maxgap) + da[i_int] = da[i_int].interpolate_na( + dim=da.dims[-1], method=method, use_coordinate=True, limit=maxgap + ) # Reset searching = True ntail = 0 @@ -141,7 +141,7 @@ def fill_nan_ensemble_mean(u, mask, fs, window): """ u = u.where(~mask) - bnr = VelBinner(n_bin=window*fs, fs=fs) + bnr = VelBinner(n_bin=window * fs, fs=fs) if len(u.shape) == 1: var = u.values[None, :] @@ -158,12 +158,11 @@ def fill_nan_ensemble_mean(u, mask, fs, window): # diff = number of extra points extra_nans = vel_reshaped.shape[-1] - diff if diff: - vel = np.empty((var.shape[0], var.shape[-1]+extra_nans)) + vel = np.empty((var.shape[0], var.shape[-1] + extra_nans)) extra = var[:, -diff:] - empty = np.empty((vel.shape[0], extra_nans))*np.nan + empty = np.empty((vel.shape[0], extra_nans)) * np.nan extra = np.concatenate((extra, empty), axis=-1) - vel_reshaped = np.concatenate( - (vel_reshaped, extra[:, None, :]), axis=1) + vel_reshaped = np.concatenate((vel_reshaped, extra[:, None, :]), axis=1) extra_mean = np.nanmean(extra, axis=-1) vel_mean = np.concatenate((vel_mean, extra_mean[:, None]), axis=-1) @@ -172,11 +171,12 @@ def fill_nan_ensemble_mean(u, mask, fs, window): vel_mean_matrix = np.tile(vel_mean[..., None], (1, 1, bnr.n_bin)) vel_missing = np.isnan(vel_reshaped) vel_mask = np.ma.masked_array(vel_mean_matrix, ~vel_missing).filled(np.nan) - vel_filled = np.where(np.isnan(vel_reshaped), vel_mask, - vel_reshaped + np.nan_to_num(vel_mask)) + vel_filled = np.where( + np.isnan(vel_reshaped), vel_mask, vel_reshaped + np.nan_to_num(vel_mask) + ) # "Unshape" the data for i in range(var.shape[0]): - vel[i] = np.ravel(vel_filled[i], 'C') + vel[i] = np.ravel(vel_filled[i], "C") if diff: # Trim off the extra means u.values = np.squeeze(vel[:, :-extra_nans]) @@ -212,7 +212,7 @@ def spike_thresh(u, thresh=10): def range_limit(u, range=[-5, 5]): """ - Returns a logical vector that is True where the values of `u` are + Returns a logical vector that is True where the values of `u` are outside of `range`. Parameters @@ -232,12 +232,13 @@ def range_limit(u, range=[-5, 5]): def _calcab(al, Lu_std_u, Lu_std_d2u): - """Solve equations 10 and 11 of Goring+Nikora2002 - """ - return tuple(np.linalg.solve( - np.array([[cos(al) ** 2, sin(al) ** 2], - [sin(al) ** 2, cos(al) ** 2]]), - np.array([(Lu_std_u) ** 2, (Lu_std_d2u) ** 2]))) + """Solve equations 10 and 11 of Goring+Nikora2002""" + return tuple( + np.linalg.solve( + np.array([[cos(al) ** 2, sin(al) ** 2], [sin(al) ** 2, cos(al) ** 2]]), + np.array([(Lu_std_u) ** 2, (Lu_std_d2u) ** 2]), + ) + ) def _phaseSpaceThresh(u): @@ -252,27 +253,28 @@ def _phaseSpaceThresh(u): du[1:-1] = (u[2:] - u[:-2]) / 2 # And again. d2u[2:-2] = (du[1:-1][2:] - du[1:-1][:-2]) / 2 - p = (u ** 2 + du ** 2 + d2u ** 2) + p = u**2 + du**2 + d2u**2 std_u = np.std(u, axis=0) std_du = np.std(du, axis=0) std_d2u = np.std(d2u, axis=0) - alpha = np.arctan2(np.sum(u * d2u, axis=0), np.sum(u ** 2, axis=0)) + alpha = np.arctan2(np.sum(u * d2u, axis=0), np.sum(u**2, axis=0)) a = np.empty_like(alpha) b = np.empty_like(alpha) with warnings.catch_warnings() as w: warnings.filterwarnings( - 'ignore', category=RuntimeWarning, message='invalid value encountered in ') + "ignore", category=RuntimeWarning, message="invalid value encountered in " + ) for idx, al in enumerate(alpha): a[idx], b[idx] = _calcab(al, Lu * std_u[idx], Lu * std_d2u[idx]) theta = np.arctan2(du, u) - phi = np.arctan2((du ** 2 + u ** 2) ** 0.5, d2u) - pe = (((sin(phi) * cos(theta) * cos(alpha) + - cos(phi) * sin(alpha)) ** 2) / a + - ((sin(phi) * cos(theta) * sin(alpha) - - cos(phi) * cos(alpha)) ** 2) / b + - ((sin(phi) * sin(theta)) ** 2) / (Lu * std_du) ** 2) ** -1 + phi = np.arctan2((du**2 + u**2) ** 0.5, d2u) + pe = ( + ((sin(phi) * cos(theta) * cos(alpha) + cos(phi) * sin(alpha)) ** 2) / a + + ((sin(phi) * cos(theta) * sin(alpha) - cos(phi) * cos(alpha)) ** 2) / b + + ((sin(phi) * sin(theta)) ** 2) / (Lu * std_du) ** 2 + ) ** -1 pe[:, np.isnan(pe[0, :])] = 0 - return (p > pe).flatten('F') + return (p > pe).flatten("F") def GN2002(u, npt=5000): @@ -297,16 +299,16 @@ def GN2002(u, npt=5000): return GN2002(u.values, npt=npt) if u.ndim > 1: - mask = np.zeros(u.shape, dtype='bool') + mask = np.zeros(u.shape, dtype="bool") for slc in slice1d_along_axis(u.shape, -1): mask[slc] = GN2002(u[slc], npt=npt) return mask - mask = np.zeros(len(u), dtype='bool') + mask = np.zeros(len(u), dtype="bool") # Find large bad segments (>npt/10): # group returns a vector of slice objects. - bad_segs = group(np.isnan(u), min_length=int(npt//10)) + bad_segs = group(np.isnan(u), min_length=int(npt // 10)) if bad_segs.size > 2: # Break them up into separate regions: sp = 0 @@ -323,7 +325,7 @@ def GN2002(u, npt=5000): for ind in range(len(bad_segs)): bs = bad_segs[ind] # bs is a slice object. # Clean the good region: - mask[sp:bs.start] = GN2002(u[sp:bs.start], npt=npt) + mask[sp : bs.start] = GN2002(u[sp : bs.start], npt=npt) sp = bs.stop # Clean the last good region. mask[sp:ep] = GN2002(u[sp:ep], npt=npt) @@ -335,12 +337,13 @@ def GN2002(u, npt=5000): mask_last = np.zeros_like(mask) + np.inf mask[0] = True # make sure we start. while mask.any(): - mask[:nbins * npt] = _phaseSpaceThresh( - np.array(np.reshape(u[:(nbins * npt)], (npt, nbins), order='F'))) + mask[: nbins * npt] = _phaseSpaceThresh( + np.array(np.reshape(u[: (nbins * npt)], (npt, nbins), order="F")) + ) mask[-npt:] = _phaseSpaceThresh(u[-npt:]) c += 1 if c >= 100: - raise Exception('GN2002 loop-limit exceeded.') + raise Exception("GN2002 loop-limit exceeded.") if mask.sum() >= mask_last.sum(): break mask_last = mask.copy() diff --git a/mhkit/dolfyn/adv/motion.py b/mhkit/dolfyn/adv/motion.py index 43ac8c3d4..7db6f2797 100644 --- a/mhkit/dolfyn/adv/motion.py +++ b/mhkit/dolfyn/adv/motion.py @@ -11,21 +11,24 @@ class MissingDataError(ValueError): pass + class DataAlreadyProcessedError(Exception): pass + class MissingRequiredDataError(Exception): pass + def _get_body2imu(make_model): - if make_model == 'nortek vector': + if make_model == "nortek vector": # In inches it is: (0.25, 0.25, 5.9) return np.array([0.00635, 0.00635, 0.14986]) else: raise Exception("The imu->body vector is unknown for this instrument.") -class CalcMotion(): +class CalcMotion: """ A 'calculator' for computing the velocity of points that are rigidly connected to an ADV-body with an IMU. @@ -44,22 +47,17 @@ class CalcMotion(): _default_accel_filtfreq = 0.03 - def __init__(self, ds, - accel_filtfreq=None, - vel_filtfreq=None, - to_earth=True): - + def __init__(self, ds, accel_filtfreq=None, vel_filtfreq=None, to_earth=True): self.ds = ds - self._check_filtfreqs(accel_filtfreq, - vel_filtfreq) + self._check_filtfreqs(accel_filtfreq, vel_filtfreq) self.to_earth = to_earth self._set_accel() self._set_acclow() - self.angrt = ds['angrt'].values # No copy because not modified. + self.angrt = ds["angrt"].values # No copy because not modified. def _check_filtfreqs(self, accel_filtfreq, vel_filtfreq): - datval = self.ds.attrs.get('motion accel_filtfreq Hz', None) + datval = self.ds.attrs.get("motion accel_filtfreq Hz", None) if datval is None: if accel_filtfreq is None: accel_filtfreq = self._default_accel_filtfreq @@ -72,48 +70,58 @@ def _check_filtfreqs(self, accel_filtfreq, vel_filtfreq): warnings.warn( f"The default accel_filtfreq is {datval} Hz. " "Overriding this with the user-specified " - "value: {accel_filtfreq} Hz.") + "value: {accel_filtfreq} Hz." + ) if vel_filtfreq is None: - vel_filtfreq = self.ds.attrs.get('motion vel_filtfreq Hz', None) + vel_filtfreq = self.ds.attrs.get("motion vel_filtfreq Hz", None) if vel_filtfreq is None: vel_filtfreq = accel_filtfreq / 3.0 self.accel_filtfreq = accel_filtfreq self.accelvel_filtfreq = vel_filtfreq - def _set_accel(self, ): + def _set_accel( + self, + ): ds = self.ds - if ds.coord_sys == 'inst': - self.accel = np.einsum('ij...,i...->j...', - ds['orientmat'].values, - ds['accel'].values) - elif self.ds.coord_sys == 'earth': - self.accel = ds['accel'].values.copy() + if ds.coord_sys == "inst": + self.accel = np.einsum( + "ij...,i...->j...", ds["orientmat"].values, ds["accel"].values + ) + elif self.ds.coord_sys == "earth": + self.accel = ds["accel"].values.copy() else: - raise Exception(("Invalid coordinate system '%s'. The coordinate " - "system must either be 'earth' or 'inst' to " - "perform motion correction.") - % (self.ds.coord_sys)) - - def _check_duty_cycle(self, ): + raise Exception( + ( + "Invalid coordinate system '%s'. The coordinate " + "system must either be 'earth' or 'inst' to " + "perform motion correction." + ) + % (self.ds.coord_sys) + ) + + def _check_duty_cycle( + self, + ): """ Function to check if duty cycle exists and if it is followed consistently in the datafile """ - n_burst = self.ds.attrs.get('duty_cycle_n_burst') + n_burst = self.ds.attrs.get("duty_cycle_n_burst") if not n_burst: return # duty cycle interval in seconds - interval = self.ds.attrs.get('duty_cycle_interval') + interval = self.ds.attrs.get("duty_cycle_interval") actual_interval = ( - self.ds.time[n_burst:].values - self.ds.time[:-n_burst].values)/1e9 + self.ds.time[n_burst:].values - self.ds.time[:-n_burst].values + ) / 1e9 rng = actual_interval.max() - actual_interval.min() mean = actual_interval.mean() # Range will vary depending on how datetime64 rounds the timestamp # But isn't an issue if it does - if rng > 2 or (mean > interval+1 and mean < interval-1): + if rng > 2 or (mean > interval + 1 and mean < interval - 1): raise Exception("Bad duty cycle detected") # If this passes, it means we're safe to blindly skip n_burst for every integral @@ -121,17 +129,21 @@ def _check_duty_cycle(self, ): def reshape(self, dat, n_bin): # Assumes shape is (3, time) - length = dat.shape[-1]//n_bin - return np.reshape(dat[..., :length*n_bin], (dat.shape[0], length, n_bin)) + length = dat.shape[-1] // n_bin + return np.reshape(dat[..., : length * n_bin], (dat.shape[0], length, n_bin)) - def _set_acclow(self, ): + def _set_acclow( + self, + ): # Check if file is duty cycled n = self._check_duty_cycle() if n: - warnings.warn(" Duty Cycle detected. " - "Motion corrected data may contain edge effects " - "at the beginning and end of each duty cycle.") + warnings.warn( + " Duty Cycle detected. " + "Motion corrected data may contain edge effects " + "at the beginning and end of each duty cycle." + ) self.accel = self.reshape(self.accel, n_bin=n) self.acclow = acc = self.accel.copy() @@ -146,10 +158,13 @@ def _set_acclow(self, ): if np.isnan(acc).any(): warnings.warn( "Error filtering acceleration data. " - "Please decrease `accel_filtfreq`.") + "Please decrease `accel_filtfreq`." + ) acc = np.nan_to_num(acc) - def calc_velacc(self, ): + def calc_velacc( + self, + ): """ Calculates the translational velocity from the high-pass filtered acceleration signal. @@ -170,8 +185,13 @@ def calc_velacc(self, ): hp = self.accel - self.acclow # Integrate in time to get velocities - dat = np.concatenate((np.zeros(list(hp.shape[:-1]) + [1]), - cumtrapz(hp, dx=1 / samp_freq, axis=-1)), axis=-1) + dat = np.concatenate( + ( + np.zeros(list(hp.shape[:-1]) + [1]), + cumtrapz(hp, dx=1 / samp_freq, axis=-1), + ), + axis=-1, + ) if self.accelvel_filtfreq > 0: filt_freq = self.accelvel_filtfreq @@ -179,14 +199,15 @@ def calc_velacc(self, ): # Applied twice by 'filtfilt' = 4th order butterworth filt = ss.butter(2, float(filt_freq) / (samp_freq / 2)) for idx in range(hp.shape[0]): - dat[idx] = dat[idx] - \ - ss.filtfilt(filt[0], filt[1], dat[idx], axis=-1) + dat[idx] = dat[idx] - ss.filtfilt(filt[0], filt[1], dat[idx], axis=-1) # Fill nan with zeros - happens for some filter frequencies if np.isnan(dat).any(): - warnings.warn("Error filtering acceleration data. " - "Please decrease `vel_filtfreq`. " - "(default is 1/3 `accel_filtfreq`)") + warnings.warn( + "Error filtering acceleration data. " + "Please decrease `vel_filtfreq`. " + "(default is 1/3 `accel_filtfreq`)" + ) dat = np.nan_to_num(dat) if n: @@ -195,9 +216,9 @@ def calc_velacc(self, ): acclow_shaped = np.empty(self.angrt.shape) accel_shaped = np.empty(self.angrt.shape) for idx in range(hp.shape[0]): - velacc_shaped[idx] = np.ravel(dat[idx], 'C') - acclow_shaped[idx] = np.ravel(self.acclow[idx], 'C') - accel_shaped[idx] = np.ravel(self.accel[idx], 'C') + velacc_shaped[idx] = np.ravel(dat[idx], "C") + acclow_shaped[idx] = np.ravel(self.acclow[idx], "C") + accel_shaped[idx] = np.ravel(self.accel[idx], "C") # return acclow and velacc self.acclow = acclow_shaped @@ -209,7 +230,7 @@ def calc_velacc(self, ): def calc_velrot(self, vec, to_earth=None): """ - Calculate the induced velocity due to rotations of the + Calculate the induced velocity due to rotations of the instrument about the IMU center. Parameters @@ -245,17 +266,16 @@ def calc_velrot(self, vec, to_earth=None): # cross-product of omega (rotation vector) and the vector. # u=dz*omegaY-dy*omegaZ,v=dx*omegaZ-dz*omegaX,w=dy*omegaX-dx*omegaY # where vec=[dx,dy,dz], and angrt=[omegaX,omegaY,omegaZ] - velrot = np.array([(vec[2][:, None] * self.angrt[1] - - vec[1][:, None] * self.angrt[2]), - (vec[0][:, None] * self.angrt[2] - - vec[2][:, None] * self.angrt[0]), - (vec[1][:, None] * self.angrt[0] - - vec[0][:, None] * self.angrt[1]), - ]) + velrot = np.array( + [ + (vec[2][:, None] * self.angrt[1] - vec[1][:, None] * self.angrt[2]), + (vec[0][:, None] * self.angrt[2] - vec[2][:, None] * self.angrt[0]), + (vec[1][:, None] * self.angrt[0] - vec[0][:, None] * self.angrt[1]), + ] + ) if to_earth: - velrot = np.einsum('ji...,j...->i...', - self.ds['orientmat'].values, velrot) + velrot = np.einsum("ji...,j...->i...", self.ds["orientmat"].values, velrot) if dimflag: return velrot[:, 0, :] @@ -271,16 +291,16 @@ def _calc_probe_pos(ds, separate_probes=False): ----------- ds : xarray.Dataset ADV dataset - separate_probes : bool - If a Nortek Vector ADV, this function returns the - transformation matrix of positions of the probe's + separate_probes : bool + If a Nortek Vector ADV, this function returns the + transformation matrix of positions of the probe's acoustic recievers to the ADV's instrument frame of reference. Optional, default = False Returns ------- vec : 3x3 numpy.ndarray - Transformation matrix to convert from ADV probe to + Transformation matrix to convert from ADV probe to instrument frame of reference """ @@ -294,26 +314,28 @@ def _calc_probe_pos(ds, separate_probes=False): # In the coordinate system of the center of the probe (origin at # the acoustic transmitter) then, the positions of the centers of # the receivers is: - if separate_probes and _make_model(ds) == 'nortek vector': + if separate_probes and _make_model(ds) == "nortek vector": r = 0.076 # The angle between the x-y plane and the probes phi = np.deg2rad(-30) # The angles of the probes from the x-axis: - theta = np.deg2rad(np.array([0., 120., 240.])) - return (np.dot(ds['inst2head_rotmat'].values.T, - np.array([r * np.cos(theta), - r * np.sin(theta), - r * np.tan(phi) * np.ones(3)])) + - vec[:, None]) + theta = np.deg2rad(np.array([0.0, 120.0, 240.0])) + return ( + np.dot( + ds["inst2head_rotmat"].values.T, + np.array( + [r * np.cos(theta), r * np.sin(theta), r * np.tan(phi) * np.ones(3)] + ), + ) + + vec[:, None] + ) else: return vec -def correct_motion(ds, - accel_filtfreq=None, - vel_filtfreq=None, - to_earth=True, - separate_probes=False): +def correct_motion( + ds, accel_filtfreq=None, vel_filtfreq=None, to_earth=True, separate_probes=False +): """ This function performs motion correction on an IMU-ADV data object. The IMU and ADV data should be tightly synchronized and @@ -332,7 +354,7 @@ def correct_motion(ds, a second frequency to high-pass filter the integrated acceleration. Optional, default = 1/3 of `accel_filtfreq` - to_earth : bool + to_earth : bool All variables in the ds.props['rotate_vars'] list will be rotated into either the earth frame (to_earth=True) or the instrument frame (to_earth=False). Optional, default = True @@ -357,7 +379,7 @@ def correct_motion(ds, ``velacc`` is the translational component of the head motion (from accel, the high-pass filtered accel sigal) - ``acclow`` is the low-pass filtered accel sigal (i.e., + ``acclow`` is the low-pass filtered accel sigal (i.e., The primary velocity vector attribute, ``vel``, is motion corrected such that: @@ -408,44 +430,44 @@ def correct_motion(ds, ds = ds.copy(deep=True) # Check that no nan's exist - if ds['accel'].isnull().sum(): + if ds["accel"].isnull().sum(): raise MissingDataError("There should be no missing data in `accel` variable") - if ds['angrt'].isnull().sum(): + if ds["angrt"].isnull().sum(): raise MissingDataError("There should be no missing data in `angrt` variable") - if hasattr(ds, 'velrot') or ds.attrs.get('motion corrected', False): - raise DataAlreadyProcessedError('The data appears to already have been ' - 'motion corrected.') + if hasattr(ds, "velrot") or ds.attrs.get("motion corrected", False): + raise DataAlreadyProcessedError( + "The data appears to already have been " "motion corrected." + ) - if not hasattr(ds, 'has_imu') or ('accel' not in ds): - raise MissingRequiredDataError('The instrument does not appear to have an IMU.') + if not hasattr(ds, "has_imu") or ("accel" not in ds): + raise MissingRequiredDataError("The instrument does not appear to have an IMU.") - if ds.coord_sys != 'inst': - rotate2(ds, 'inst', inplace=True) + if ds.coord_sys != "inst": + rotate2(ds, "inst", inplace=True) # Returns True/False if head2inst_rotmat has been set/not-set. # Bad configs raises errors (this is to check for those) rot._check_inst2head_rotmat(ds) # Create the motion 'calculator': - calcobj = CalcMotion(ds, - accel_filtfreq=accel_filtfreq, - vel_filtfreq=vel_filtfreq, - to_earth=to_earth) + calcobj = CalcMotion( + ds, accel_filtfreq=accel_filtfreq, vel_filtfreq=vel_filtfreq, to_earth=to_earth + ) ########## # Calculate the translational velocity (from the accel): - ds['velacc'] = xr.DataArray(calcobj.calc_velacc(), - dims=['dirIMU', 'time'], - attrs={'units': 'm s-1', - 'long_name': 'Velocity from IMU Accelerometer'} - ).astype('float32') + ds["velacc"] = xr.DataArray( + calcobj.calc_velacc(), + dims=["dirIMU", "time"], + attrs={"units": "m s-1", "long_name": "Velocity from IMU Accelerometer"}, + ).astype("float32") # Copy acclow to the adv-object. - ds['acclow'] = xr.DataArray(calcobj.acclow, - dims=['dirIMU', 'time'], - attrs={'units': 'm s-2', - 'long_name': 'Low-Frequency Acceleration from IMU'} - ).astype('float32') + ds["acclow"] = xr.DataArray( + calcobj.acclow, + dims=["dirIMU", "time"], + attrs={"units": "m s-2", "long_name": "Low-Frequency Acceleration from IMU"}, + ).astype("float32") ########## # Calculate rotational velocity (from angrt): @@ -454,60 +476,65 @@ def correct_motion(ds, velrot = calcobj.calc_velrot(pos, to_earth=False) if separate_probes: # The head->beam transformation matrix - transMat = ds.get('beam2inst_orientmat', None) + transMat = ds.get("beam2inst_orientmat", None) # The inst->head transformation matrix - rmat = ds['inst2head_rotmat'] + rmat = ds["inst2head_rotmat"] # 1) Rotate body-coordinate velocities to head-coord. velrot = np.dot(rmat, velrot) # 2) Rotate body-coord to beam-coord (einsum), # 3) Take along beam-component (diagonal), # 4) Rotate back to head-coord (einsum), - velrot = np.einsum('ij,kj->ik', - transMat, - np.diagonal(np.einsum('ij,j...->i...', - np.linalg.inv(transMat), - velrot))) + velrot = np.einsum( + "ij,kj->ik", + transMat, + np.diagonal(np.einsum("ij,j...->i...", np.linalg.inv(transMat), velrot)), + ) # 5) Rotate back to body-coord. velrot = np.dot(rmat.T, velrot) - ds['velrot'] = xr.DataArray(velrot, - dims=['dirIMU', 'time'], - attrs={'units': 'm s-1', - 'long_name': 'Velocity from IMU Gyroscope'} - ).astype('float32') + ds["velrot"] = xr.DataArray( + velrot, + dims=["dirIMU", "time"], + attrs={"units": "m s-1", "long_name": "Velocity from IMU Gyroscope"}, + ).astype("float32") ########## # Rotate the data into the correct coordinate system. # inst2earth expects a 'rotate_vars' property. # Add velrot, velacc, acclow, to it. - if 'rotate_vars' not in ds.attrs: - ds.attrs['rotate_vars'] = ['vel', 'velrot', 'velacc', 'accel', - 'acclow', 'angrt', 'mag'] + if "rotate_vars" not in ds.attrs: + ds.attrs["rotate_vars"] = [ + "vel", + "velrot", + "velacc", + "accel", + "acclow", + "angrt", + "mag", + ] else: - ds.attrs['rotate_vars'].extend(['velrot', 'velacc', 'acclow']) + ds.attrs["rotate_vars"].extend(["velrot", "velacc", "acclow"]) # NOTE: accel, acclow, and velacc are in the earth-frame after # calc_velacc() call. inst2earth = rot._inst2earth if to_earth: # accel was converted to earth coordinates - ds['accel'].values = calcobj.accel - to_remove = ['accel', 'acclow', 'velacc'] - ds = inst2earth(ds, rotate_vars=[e for e in - ds.attrs['rotate_vars'] - if e not in to_remove]) + ds["accel"].values = calcobj.accel + to_remove = ["accel", "acclow", "velacc"] + ds = inst2earth( + ds, rotate_vars=[e for e in ds.attrs["rotate_vars"] if e not in to_remove] + ) else: # rotate these variables back to the instrument frame. - ds = inst2earth(ds, reverse=True, - rotate_vars=['acclow', 'velacc'], - force=True) + ds = inst2earth(ds, reverse=True, rotate_vars=["acclow", "velacc"], force=True) ########## # Copy vel -> velraw prior to motion correction: - ds['vel_raw'] = ds.vel.copy(deep=True) + ds["vel_raw"] = ds.vel.copy(deep=True) # Add it to rotate_vars: - ds.attrs['rotate_vars'].append('vel_raw') + ds.attrs["rotate_vars"].append("vel_raw") ########## # Remove motion from measured velocity @@ -517,10 +544,10 @@ def correct_motion(ds, # measures a velocity in the opposite direction. # use xarray to keep dimensions consistent - velmot = ds['velrot'] + ds['velacc'] - ds['vel'].values += velmot.values + velmot = ds["velrot"] + ds["velacc"] + ds["vel"].values += velmot.values - ds.attrs['motion corrected'] = 1 - ds.attrs['motion accel_filtfreq Hz'] = calcobj.accel_filtfreq + ds.attrs["motion corrected"] = 1 + ds.attrs["motion accel_filtfreq Hz"] = calcobj.accel_filtfreq return ds diff --git a/mhkit/dolfyn/adv/turbulence.py b/mhkit/dolfyn/adv/turbulence.py index 022012928..bfc3e6d75 100644 --- a/mhkit/dolfyn/adv/turbulence.py +++ b/mhkit/dolfyn/adv/turbulence.py @@ -8,7 +8,7 @@ class ADVBinner(VelBinner): """ - A class that builds upon `VelBinner` for calculating turbulence + A class that builds upon `VelBinner` for calculating turbulence statistics and velocity spectra from ADV data Parameters @@ -28,31 +28,30 @@ class ADVBinner(VelBinner): Instrument's doppler noise in same units as velocity """ - def __call__(self, ds, freq_units='rad/s', window='hann'): + def __call__(self, ds, freq_units="rad/s", window="hann"): out = type(ds)() out = self.bin_average(ds, out) - noise = ds.get('doppler_noise', [0, 0, 0]) - out['tke_vec'] = self.turbulent_kinetic_energy(ds['vel'], noise=noise) - out['stress_vec'] = self.reynolds_stress(ds['vel']) + noise = ds.get("doppler_noise", [0, 0, 0]) + out["tke_vec"] = self.turbulent_kinetic_energy(ds["vel"], noise=noise) + out["stress_vec"] = self.reynolds_stress(ds["vel"]) - out['psd'] = self.power_spectral_density(ds['vel'], - window=window, - freq_units=freq_units, - noise=noise) + out["psd"] = self.power_spectral_density( + ds["vel"], window=window, freq_units=freq_units, noise=noise + ) for key in list(ds.attrs.keys()): - if 'config' in key: + if "config" in key: ds.attrs.pop(key) out.attrs = ds.attrs - out.attrs['n_bin'] = self.n_bin - out.attrs['n_fft'] = self.n_fft - out.attrs['n_fft_coh'] = self.n_fft_coh + out.attrs["n_bin"] = self.n_bin + out.attrs["n_fft"] = self.n_fft + out.attrs["n_fft_coh"] = self.n_fft_coh return out def reynolds_stress(self, veldat, detrend=True): """ - Calculate the specific Reynolds stresses + Calculate the specific Reynolds stresses (cross-covariances of u,v,w in m^2/s^2) Parameters @@ -78,8 +77,7 @@ def reynolds_stress(self, veldat, detrend=True): time = self.mean(veldat.time.values) vel = veldat.values - out = np.empty(self._outshape(vel[:3].shape)[:-1], - dtype=np.float32) + out = np.empty(self._outshape(vel[:3].shape)[:-1], dtype=np.float32) if detrend: vel = self.detrend(vel) @@ -87,25 +85,29 @@ def reynolds_stress(self, veldat, detrend=True): vel = self.demean(vel) for idx, p in enumerate(self._cross_pairs): - out[idx] = np.nanmean(vel[p[0]] * vel[p[1]], - -1, dtype=np.float64 - ).astype(np.float32) - - da = xr.DataArray(out.astype('float32'), - dims=veldat.dims, - attrs={'units': 'm2 s-2', - 'long_name': 'Specific Reynolds Stress Vector'}) - da = da.rename({'dir': 'tau'}) - da = da.assign_coords({'tau': self.tau, 'time': time}) - + out[idx] = np.nanmean(vel[p[0]] * vel[p[1]], -1, dtype=np.float64).astype( + np.float32 + ) + + da = xr.DataArray( + out.astype("float32"), + dims=veldat.dims, + attrs={"units": "m2 s-2", "long_name": "Specific Reynolds Stress Vector"}, + ) + da = da.rename({"dir": "tau"}) + da = da.assign_coords({"tau": self.tau, "time": time}) + return da - def cross_spectral_density(self, veldat, - freq_units='rad/s', - fs=None, - window='hann', - n_bin=None, - n_fft_coh=None): + def cross_spectral_density( + self, + veldat, + freq_units="rad/s", + fs=None, + window="hann", + n_bin=None, + n_fft_coh=None, + ): """ Calculate the cross-spectral density of velocity components. @@ -114,7 +116,7 @@ def cross_spectral_density(self, veldat, veldat : xarray.DataArray The raw 3D velocity data. freq_units : string - Frequency units of the returned spectra in either Hz or rad/s + Frequency units of the returned spectra in either Hz or rad/s (`f` or :math:`\\omega`) fs : float (optional) The sample rate. Default = `binner.fs` @@ -135,7 +137,7 @@ def cross_spectral_density(self, veldat, if not isinstance(veldat, xr.DataArray): raise TypeError("`veldat` must be an instance of `xarray.DataArray`.") - if ('rad' not in freq_units) and ('Hz' not in freq_units): + if ("rad" not in freq_units) and ("Hz" not in freq_units): raise ValueError("`freq_units` should be one of 'Hz' or 'rad/s'") fs_in = self._parse_fs(fs) @@ -143,46 +145,57 @@ def cross_spectral_density(self, veldat, time = self.mean(veldat.time.values) veldat = veldat.values if len(np.shape(veldat)) != 2: - raise Exception("This function is only valid for calculating TKE using " - "the 3D velocity vector from an ADV.") + raise Exception( + "This function is only valid for calculating TKE using " + "the 3D velocity vector from an ADV." + ) - out = np.empty(self._outshape_fft(veldat[:3].shape, n_fft=n_fft, n_bin=n_bin), - dtype='complex') + out = np.empty( + self._outshape_fft(veldat[:3].shape, n_fft=n_fft, n_bin=n_bin), + dtype="complex", + ) # Create frequency vector, also checks whether using f or omega - if 'rad' in freq_units: - fs = 2*np.pi*fs_in - freq_units = 'rad s-1' - units = 'm2 s-1 rad-1' + if "rad" in freq_units: + fs = 2 * np.pi * fs_in + freq_units = "rad s-1" + units = "m2 s-1 rad-1" else: fs = fs_in - freq_units = 'Hz' - units = 'm2 s-2 Hz-1' - coh_freq = xr.DataArray(self._fft_freq(fs=fs_in, units=freq_units, n_fft=n_fft, coh=True), - dims=['coh_freq'], - name='coh_freq', - attrs={'units': freq_units, - 'long_name': 'FFT Frequency Vector', - 'coverage_content_type': 'coordinate'} - ).astype('float32') + freq_units = "Hz" + units = "m2 s-2 Hz-1" + coh_freq = xr.DataArray( + self._fft_freq(fs=fs_in, units=freq_units, n_fft=n_fft, coh=True), + dims=["coh_freq"], + name="coh_freq", + attrs={ + "units": freq_units, + "long_name": "FFT Frequency Vector", + "coverage_content_type": "coordinate", + }, + ).astype("float32") for ip, ipair in enumerate(self._cross_pairs): - out[ip] = self._csd_base(veldat[ipair[0]], - veldat[ipair[1]], - fs=fs, - window=window, - n_bin=n_bin, - n_fft=n_fft) - - csd = xr.DataArray(out.astype('complex64'), - coords={'C': self.C, - 'time': time, - 'coh_freq': coh_freq}, - dims=['C', 'time', 'coh_freq'], - attrs={'units': units, - 'n_fft_coh': n_fft, - 'long_name': 'Cross Spectral Density'}) - csd['coh_freq'].attrs['units'] = freq_units + out[ip] = self._csd_base( + veldat[ipair[0]], + veldat[ipair[1]], + fs=fs, + window=window, + n_bin=n_bin, + n_fft=n_fft, + ) + + csd = xr.DataArray( + out.astype("complex64"), + coords={"C": self.C, "time": time, "coh_freq": coh_freq}, + dims=["C", "time", "coh_freq"], + attrs={ + "units": units, + "n_fft_coh": n_fft, + "long_name": "Cross Spectral Density", + }, + ) + csd["coh_freq"].attrs["units"] = freq_units return csd @@ -200,7 +213,7 @@ def doppler_noise_level(self, psd, pct_fN=0.8): Returns ------- - doppler_noise (xarray.DataArray): + doppler_noise (xarray.DataArray): Doppler noise level in units of m/s Notes @@ -213,54 +226,56 @@ def doppler_noise_level(self, psd, pct_fN=0.8): `N` is the constant variance or spectral density, and `f_{c}` is the characteristic frequency. - The characteristic frequency is then found as + The characteristic frequency is then found as .. :math: f_{c} = pct_fN * (f_{s}/2) where `f_{s}/2` is the Nyquist frequency. - Richard, Jean-Baptiste, et al. "Method for identification of Doppler noise - levels in turbulent flow measurements dedicated to tidal energy." International + Richard, Jean-Baptiste, et al. "Method for identification of Doppler noise + levels in turbulent flow measurements dedicated to tidal energy." International Journal of Marine Energy 3 (2013): 52-64. - Thiébaut, Maxime, et al. "Investigating the flow dynamics and turbulence at a - tidal-stream energy site in a highly energetic estuary." Renewable Energy 195 + Thiébaut, Maxime, et al. "Investigating the flow dynamics and turbulence at a + tidal-stream energy site in a highly energetic estuary." Renewable Energy 195 (2022): 252-262. """ - + if not isinstance(psd, xr.DataArray): raise TypeError("`psd` must be an instance of `xarray.DataArray`.") if not isinstance(pct_fN, float) or not 0 <= pct_fN <= 1: raise ValueError("`pct_fN` must be a float within the range [0, 1].") # Characteristic frequency set to 80% of Nyquist frequency - fN = self.fs/2 + fN = self.fs / 2 fc = pct_fN * fN # Get units right if psd.freq.units == "Hz": f_range = slice(fc, fN) else: - f_range = slice(2*np.pi*fc, 2*np.pi*fN) + f_range = slice(2 * np.pi * fc, 2 * np.pi * fN) # Noise floor N2 = psd.sel(freq=f_range) * psd.freq.sel(freq=f_range) - noise_level = np.sqrt(N2.mean(dim='freq')) + noise_level = np.sqrt(N2.mean(dim="freq")) return xr.DataArray( - noise_level.values.astype('float32'), - dims=['dir', 'time'], - attrs={'units': 'm/s', - 'long_name': 'Doppler Noise Level', - 'description': 'Doppler noise level calculated ' - 'from PSD white noise'}) + noise_level.values.astype("float32"), + dims=["dir", "time"], + attrs={ + "units": "m/s", + "long_name": "Doppler Noise Level", + "description": "Doppler noise level calculated " "from PSD white noise", + }, + ) def check_turbulence_cascade_slope(self, psd, freq_range=[6.28, 12.57]): """ - This function calculates the slope of the PSD, the power spectra + This function calculates the slope of the PSD, the power spectra of velocity, within the given frequency range. The purpose of this - function is to check that the region of the PSD containing the + function is to check that the region of the PSD containing the isotropic turbulence cascade decreases at a rate of :math:`f^{-5/3}`. Parameters @@ -268,14 +283,14 @@ def check_turbulence_cascade_slope(self, psd, freq_range=[6.28, 12.57]): psd : xarray.DataArray ([time,] freq) The power spectral density (1D or 2D) freq_range : iterable(2) (default: [6.28, 12.57]) - The range over which the isotropic turbulence cascade occurs, in + The range over which the isotropic turbulence cascade occurs, in units of the psd frequency vector (Hz or rad/s) Returns ------- (m, b): tuple (slope, y-intercept) - A tuple containing the coefficients of the log-adjusted linear - regression between PSD and frequency + A tuple containing the coefficients of the log-adjusted linear + regression between PSD and frequency Notes ----- @@ -283,9 +298,9 @@ def check_turbulence_cascade_slope(self, psd, freq_range=[6.28, 12.57]): .. math:: S(k) = \\alpha \\epsilon^{2/3} k^{-5/3} + N - The slope of the isotropic turbulence cascade, which should be - equal to :math:`k^{-5/3}` or :math:`f^{-5/3}`, where k and f are - the wavenumber and frequency vectors, is estimated using linear + The slope of the isotropic turbulence cascade, which should be + equal to :math:`k^{-5/3}` or :math:`f^{-5/3}`, where k and f are + the wavenumber and frequency vectors, is estimated using linear regression with a log transformation: .. math:: log10(y) = m*log10(x) + b @@ -293,32 +308,32 @@ def check_turbulence_cascade_slope(self, psd, freq_range=[6.28, 12.57]): Which is equivalent to .. math:: y = 10^{b} x^{m} - - Where :math:`y` is S(k) or S(f), :math:`x` is k or f, :math:`m` - is the slope (ideally -5/3), and :math:`10^{b}` is the intercept of + + Where :math:`y` is S(k) or S(f), :math:`x` is k or f, :math:`m` + is the slope (ideally -5/3), and :math:`10^{b}` is the intercept of y at x^m=1. """ if not isinstance(psd, xr.DataArray): raise TypeError("`psd` must be an instance of `xarray.DataArray`.") - if not hasattr(freq_range, '__iter__') or len(freq_range) != 2: + if not hasattr(freq_range, "__iter__") or len(freq_range) != 2: raise ValueError("`freq_range` must be an iterable of length 2.") - + idx = np.where((freq_range[0] < psd.freq) & (psd.freq < freq_range[1])) idx = idx[0] - x = np.log10(psd['freq'].isel(freq=idx)) + x = np.log10(psd["freq"].isel(freq=idx)) y = np.log10(psd.isel(freq=idx)) - y_bar = y.mean('freq') - x_bar = x.mean('freq') + y_bar = y.mean("freq") + x_bar = x.mean("freq") # using the formula to calculate the slope and intercept n = np.sum((x - x_bar) * (y - y_bar), axis=0) - d = np.sum((x - x_bar)**2, axis=0) + d = np.sum((x - x_bar) ** 2, axis=0) - m = n/d - b = y_bar - m*x_bar + m = n / d + b = y_bar - m * x_bar return m, b @@ -333,8 +348,8 @@ def dissipation_rate_LT83(self, psd, U_mag, freq_range=[6.28, 12.57]): U_mag : xarray.DataArray (...,time) The bin-averaged horizontal velocity [m/s] (from dataset shortcut) freq_range : iterable(2) - The range over which to integrate/average the spectrum, in units - of the psd frequency vector (Hz or rad/s). + The range over which to integrate/average the spectrum, in units + of the psd frequency vector (Hz or rad/s). Default = [6.28, 12.57] rad/s Returns @@ -369,49 +384,52 @@ def dissipation_rate_LT83(self, psd, U_mag, freq_range=[6.28, 12.57]): if not isinstance(psd, xr.DataArray): raise TypeError("`psd` must be an instance of `xarray.DataArray`.") if len(U_mag.shape) != 1: - raise Exception('U_mag should be 1-dimensional (time)') - if len(psd.time)!=len(U_mag.time): + raise Exception("U_mag should be 1-dimensional (time)") + if len(psd.time) != len(U_mag.time): raise Exception("`U_mag` should be from ensembled-averaged dataset") - if not hasattr(freq_range, '__iter__') or len(freq_range) != 2: + if not hasattr(freq_range, "__iter__") or len(freq_range) != 2: raise ValueError("`freq_range` must be an iterable of length 2.") freq = psd.freq idx = np.where((freq_range[0] < freq) & (freq < freq_range[1])) idx = idx[0] - if freq.units == 'Hz': - U = U_mag/(2*np.pi) + if freq.units == "Hz": + U = U_mag / (2 * np.pi) else: U = U_mag a = 0.5 - out = (psd.isel(freq=idx) * - freq.isel(freq=idx)**(5/3) / a).mean(axis=-1)**(3/2) / U + out = (psd.isel(freq=idx) * freq.isel(freq=idx) ** (5 / 3) / a).mean( + axis=-1 + ) ** (3 / 2) / U return xr.DataArray( - out.astype('float32'), - attrs={'units': 'm2 s-3', - 'long_name': 'TKE Dissipation Rate', - 'standard_name': 'specific_turbulent_kinetic_energy_dissipation_in_sea_water', - 'description': 'TKE dissipation rate calculated using ' - 'the method from Lumley and Terray, 1983', - }) - - def dissipation_rate_SF(self, vel_raw, U_mag, fs=None, freq_range=[2., 4.]): + out.astype("float32"), + attrs={ + "units": "m2 s-3", + "long_name": "TKE Dissipation Rate", + "standard_name": "specific_turbulent_kinetic_energy_dissipation_in_sea_water", + "description": "TKE dissipation rate calculated using " + "the method from Lumley and Terray, 1983", + }, + ) + + def dissipation_rate_SF(self, vel_raw, U_mag, fs=None, freq_range=[2.0, 4.0]): """ Calculate dissipation rate using the "structure function" (SF) method Parameters ---------- vel_raw : xarray.DataArray (time) - The raw velocity data upon which to perform the SF technique. + The raw velocity data upon which to perform the SF technique. U_mag : xarray.DataArray The bin-averaged horizontal velocity (from dataset shortcut) fs : float The sample rate of `vel_raw` [Hz] freq_range : iterable(2) The frequency range over which to compute the SF [Hz] - (i.e. the frequency range within which the isotropic + (i.e. the frequency range within which the isotropic turbulence cascade falls). Default = [2., 4.] Hz @@ -423,9 +441,9 @@ def dissipation_rate_SF(self, vel_raw, U_mag, fs=None, freq_range=[2., 4.]): if not isinstance(vel_raw, xr.DataArray): raise TypeError("`vel_raw` must be an instance of `xarray.DataArray`.") - if len(vel_raw.time)==len(U_mag.time): + if len(vel_raw.time) == len(U_mag.time): raise Exception("`U_mag` should be from ensembled-averaged dataset") - if not hasattr(freq_range, '__iter__') or len(freq_range) != 2: + if not hasattr(freq_range, "__iter__") or len(freq_range) != 2: raise ValueError("`freq_range` must be an iterable of length 2.") veldat = vel_raw.values @@ -434,7 +452,7 @@ def dissipation_rate_SF(self, vel_raw, U_mag, fs=None, freq_range=[2., 4.]): fs = self._parse_fs(fs) if freq_range[1] > fs: - warnings.warn('Max freq_range cannot be greater than fs') + warnings.warn("Max freq_range cannot be greater than fs") dt = self.reshape(veldat) out = np.empty(dt.shape[:-1], dtype=dt.dtype) @@ -449,15 +467,17 @@ def dissipation_rate_SF(self, vel_raw, U_mag, fs=None, freq_range=[2., 4.]): out[slc[:-1]] = (cv2m / 2.1) ** (3 / 2) return xr.DataArray( - out.astype('float32'), + out.astype("float32"), coords=U_mag.coords, dims=U_mag.dims, - attrs={'units': 'm2 s-3', - 'long_name': 'TKE Dissipation Rate', - 'standard_name': 'specific_turbulent_kinetic_energy_dissipation_in_sea_water', - 'description': 'TKE dissipation rate calculated using the ' - '"structure function" method', - }) + attrs={ + "units": "m2 s-3", + "long_name": "TKE Dissipation Rate", + "standard_name": "specific_turbulent_kinetic_energy_dissipation_in_sea_water", + "description": "TKE dissipation rate calculated using the " + '"structure function" method', + }, + ) def _up_angle(self, U_complex): """ @@ -498,11 +518,12 @@ 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), x) + cbrt(x**2 - 2 / b * np.cos(t) * x + b ** (-2)) + * np.exp(-0.5 * x**2), + x, + ) - return out.reshape(I_tke.shape) * \ - (2 * np.pi) ** (-0.5) * I_tke ** (2 / 3) + return out.reshape(I_tke.shape) * (2 * np.pi) ** (-0.5) * I_tke ** (2 / 3) def dissipation_rate_TE01(self, dat_raw, dat_avg, freq_range=[6.28, 12.57]): """ @@ -514,10 +535,10 @@ def dissipation_rate_TE01(self, dat_raw, dat_avg, freq_range=[6.28, 12.57]): The raw (off the instrument) adv dataset dat_avg : xarray.Dataset The bin-averaged adv dataset (calc'd from 'calc_turbulence' or - 'do_avg'). The spectra (psd) and basic turbulence statistics + 'do_avg'). The spectra (psd) and basic turbulence statistics ('tke_vec' and 'stress_vec') must already be computed. freq_range : iterable(2) - The range over which to integrate/average the spectrum, in units + The range over which to integrate/average the spectrum, in units of the psd frequency vector (Hz or rad/s). Default = [6.28, 12.57] rad/s @@ -531,15 +552,16 @@ def dissipation_rate_TE01(self, dat_raw, dat_avg, freq_range=[6.28, 12.57]): raise TypeError("`dat_raw` must be an instance of `xarray.Dataset`.") if not isinstance(dat_avg, xr.Dataset): raise TypeError("`dat_avg` must be an instance of `xarray.Dataset`.") - if not hasattr(freq_range, '__iter__') or len(freq_range) != 2: + if not hasattr(freq_range, "__iter__") or len(freq_range) != 2: raise ValueError("`freq_range` must be an iterable of length 2.") # Assign local names U_mag = dat_avg.velds.U_mag.values I_tke = dat_avg.velds.I_tke.values - theta = np.angle(dat_avg.velds.U.values) - \ - self._up_angle(dat_raw.velds.U.values) - freq = dat_avg['psd'].freq.values + theta = np.angle(dat_avg.velds.U.values) - self._up_angle( + dat_raw.velds.U.values + ) + freq = dat_avg["psd"].freq.values # Calculate constants alpha = 1.5 @@ -552,26 +574,31 @@ def dissipation_rate_TE01(self, dat_raw, dat_avg, freq_range=[6.28, 12.57]): # Estimate values # u & v components (equation 6) - out = (np.nanmean((psd[0] + psd[1]) * freq**(5/3), -1) / - (21/55 * alpha * intgrl))**(3/2) / U_mag + out = ( + np.nanmean((psd[0] + psd[1]) * freq ** (5 / 3), -1) + / (21 / 55 * alpha * intgrl) + ) ** (3 / 2) / U_mag # Add w component - out += (np.nanmean(psd[2] * freq**(5/3), -1) / - (12/55 * alpha * intgrl))**(3/2) / U_mag + out += ( + np.nanmean(psd[2] * freq ** (5 / 3), -1) / (12 / 55 * alpha * intgrl) + ) ** (3 / 2) / U_mag # Average the two estimates out *= 0.5 return xr.DataArray( - out.astype('float32'), - coords={'time': dat_avg.psd.time}, - dims='time', - attrs={'units': 'm2 s-3', - 'long_name': 'TKE Dissipation Rate', - 'standard_name': 'specific_turbulent_kinetic_energy_dissipation_in_sea_water', - 'description': 'TKE dissipation rate calculated using the ' - 'method from Trowbridge and Elgar, 2001' - }) + out.astype("float32"), + coords={"time": dat_avg.psd.time}, + dims="time", + attrs={ + "units": "m2 s-3", + "long_name": "TKE Dissipation Rate", + "standard_name": "specific_turbulent_kinetic_energy_dissipation_in_sea_water", + "description": "TKE dissipation rate calculated using the " + "method from Trowbridge and Elgar, 2001", + }, + ) def integral_length_scales(self, a_cov, U_mag, fs=None): """ @@ -601,26 +628,31 @@ def integral_length_scales(self, a_cov, U_mag, fs=None): if not isinstance(a_cov, xr.DataArray): raise TypeError("`a_cov` must be an instance of `xarray.DataArray`.") - if len(a_cov.time)!=len(U_mag.time): + if len(a_cov.time) != len(U_mag.time): raise Exception("`U_mag` should be from ensembled-averaged dataset") acov = a_cov.values fs = self._parse_fs(fs) - scale = np.argmin((acov/acov[..., :1]) > (1/np.e), axis=-1) + scale = np.argmin((acov / acov[..., :1]) > (1 / np.e), axis=-1) L_int = U_mag.values / fs * scale return xr.DataArray( - L_int.astype('float32'), - coords={'dir': a_cov.dir, 'time': a_cov.time}, - attrs={'units': 'm', - 'long_name': 'Integral Length Scale', - 'standard_name': 'turbulent_mixing_length_of_sea_water'}) - - -def turbulence_statistics(ds_raw, n_bin, fs, n_fft=None, freq_units='rad/s', window='hann'): + L_int.astype("float32"), + coords={"dir": a_cov.dir, "time": a_cov.time}, + attrs={ + "units": "m", + "long_name": "Integral Length Scale", + "standard_name": "turbulent_mixing_length_of_sea_water", + }, + ) + + +def turbulence_statistics( + ds_raw, n_bin, fs, n_fft=None, freq_units="rad/s", window="hann" +): """ - Functional version of `ADVBinner` that computes a suite of turbulence + Functional version of `ADVBinner` that computes a suite of turbulence statistics for the input dataset, and returns a `binned` data object. Parameters @@ -629,7 +661,7 @@ def turbulence_statistics(ds_raw, n_bin, fs, n_fft=None, freq_units='rad/s', win The raw adv datset to `bin`, average and compute turbulence statistics of. freq_units : string - Frequency units of the returned spectra in either Hz or rad/s + Frequency units of the returned spectra in either Hz or rad/s (`f` or :math:`\\omega`). Default is 'rad/s' window : string or array The window to use for calculating spectra. diff --git a/mhkit/dolfyn/binned.py b/mhkit/dolfyn/binned.py index 1db825dc2..0be5a771d 100644 --- a/mhkit/dolfyn/binned.py +++ b/mhkit/dolfyn/binned.py @@ -3,19 +3,19 @@ from .tools.fft import fft_frequency, psd_1D, cpsd_1D, cpsd_quasisync_1D from .tools.misc import slice1d_along_axis, detrend_array from .time import epoch2dt64, dt642epoch -warnings.simplefilter('ignore', RuntimeWarning) + +warnings.simplefilter("ignore", RuntimeWarning) class TimeBinner: - def __init__(self, n_bin, fs, n_fft=None, n_fft_coh=None, - noise=[0, 0, 0]): + def __init__(self, n_bin, fs, n_fft=None, n_fft_coh=None, noise=[0, 0, 0]): """ Initialize an averaging object Parameters ---------- n_bin : int - Number of data points to include in a 'bin' (ensemble), not the + Number of data points to include in a 'bin' (ensemble), not the number of bins fs : int Instrument sampling frequency in Hz @@ -38,14 +38,15 @@ def __init__(self, n_bin, fs, n_fft=None, n_fft_coh=None, self.n_fft = n_bin elif n_fft > n_bin: self.n_fft = n_bin - warnings.warn( - "n_fft must be smaller than n_bin, setting n_fft = n_bin") + warnings.warn("n_fft must be smaller than n_bin, setting n_fft = n_bin") if n_fft_coh is None: self.n_fft_coh = int(self.n_fft) elif n_fft_coh > n_bin: self.n_fft_coh = int(n_bin) - warnings.warn("n_fft_coh must be smaller than or equal to n_bin, " - "setting n_fft_coh = n_bin") + warnings.warn( + "n_fft_coh must be smaller than or equal to n_bin, " + "setting n_fft_coh = n_bin" + ) def _outshape(self, inshape, n_pad=0, n_bin=None): """ @@ -77,8 +78,7 @@ def _parse_nfft(self, n_fft=None): return self.n_fft if n_fft > self.n_bin: n_fft = self.n_bin - warnings.warn( - "n_fft must be smaller than n_bin, setting n_fft = n_bin") + warnings.warn("n_fft must be smaller than n_bin, setting n_fft = n_bin") return n_fft def _parse_nfft_coh(self, n_fft_coh=None): @@ -86,8 +86,10 @@ def _parse_nfft_coh(self, n_fft_coh=None): return self.n_fft_coh if n_fft_coh > self.n_bin: n_fft_coh = int(self.n_bin) - warnings.warn("n_fft_coh must be smaller than or equal to n_bin, " - "setting n_fft_coh = n_bin") + warnings.warn( + "n_fft_coh must be smaller than or equal to n_bin, " + "setting n_fft_coh = n_bin" + ) return n_fft_coh def _check_ds(self, raw_ds, out_ds): @@ -109,17 +111,22 @@ def _check_ds(self, raw_ds, out_ds): for v in raw_ds.data_vars: if np.any(np.array(raw_ds[v].shape) == 0): - raise RuntimeError(f"{v} cannot be averaged " - "because it is empty.") - if 'DutyCycle_NBurst' in raw_ds.attrs and \ - raw_ds.attrs['DutyCycle_NBurst'] < self.n_bin: - warnings.warn(f"The averaging interval (n_bin = {self.n_bin})" - "is larger than the burst interval " - "(NBurst = {dat.attrs['DutyCycle_NBurst']})") + raise RuntimeError(f"{v} cannot be averaged " "because it is empty.") + if ( + "DutyCycle_NBurst" in raw_ds.attrs + and raw_ds.attrs["DutyCycle_NBurst"] < self.n_bin + ): + warnings.warn( + f"The averaging interval (n_bin = {self.n_bin})" + "is larger than the burst interval " + "(NBurst = {dat.attrs['DutyCycle_NBurst']})" + ) if raw_ds.fs != self.fs: - raise Exception(f"The input data sample rate ({raw_ds.fs}) does not " - "match the sample rate of this binning-object " - "({self.fs})") + raise Exception( + f"The input data sample rate ({raw_ds.fs}) does not " + "match the sample rate of this binning-object " + "({self.fs})" + ) if out_ds is None: out_ds = type(raw_ds)() @@ -127,11 +134,12 @@ def _check_ds(self, raw_ds, out_ds): o_attrs = out_ds.attrs props = {} - props['fs'] = self.fs - props['n_bin'] = self.n_bin - props['n_fft'] = self.n_fft - props['description'] = 'Binned averages calculated from ' \ - 'ensembles of size "n_bin"' + props["fs"] = self.fs + props["n_bin"] = self.n_bin + props["n_fft"] = self.n_fft + props["description"] = ( + "Binned averages calculated from " 'ensembles of size "n_bin"' + ) props.update(raw_ds.attrs) for ky in props: @@ -140,24 +148,25 @@ def _check_ds(self, raw_ds, out_ds): # plus those defined above) raise AttributeError( "The attribute '{}' of `out_ds` is inconsistent " - "with this `VelBinner` or the input data (`raw_ds`)".format(ky)) + "with this `VelBinner` or the input data (`raw_ds`)".format(ky) + ) else: o_attrs[ky] = props[ky] return out_ds def _new_coords(self, array): """ - Function for setting up a new xarray.DataArray regardless of how + Function for setting up a new xarray.DataArray regardless of how many dimensions the input data-array has """ dims = array.dims dims_list = [] coords_dict = {} - if len(array.shape) == 1 & ('dir' in array.coords): - array = array.drop_vars('dir') + if len(array.shape) == 1 & ("dir" in array.coords): + array = array.drop_vars("dir") for ky in dims: dims_list.append(ky) - if 'time' in ky: + if "time" in ky: coords_dict[ky] = self.mean(array.time.values) else: coords_dict[ky] = array.coords[ky].values @@ -198,34 +207,33 @@ def reshape(self, arr, n_pad=0, n_bin=None): n_bin = self._parse_nbin(n_bin) if arr.shape[-1] < n_bin: - raise Exception('n_bin is larger than length of input array') + raise Exception("n_bin is larger than length of input array") npd0 = int(n_pad // 2) npd1 = int((n_pad + 1) // 2) shp = self._outshape(arr.shape, n_pad=0, n_bin=n_bin) out = np.zeros( - self._outshape(arr.shape, n_pad=n_pad, n_bin=n_bin), - dtype=arr.dtype) + self._outshape(arr.shape, n_pad=n_pad, n_bin=n_bin), dtype=arr.dtype + ) if np.mod(n_bin, 1) == 0: # n_bin needs to be int n_bin = int(n_bin) # If n_bin is an integer, we can do this simply. - out[..., npd0: n_bin + npd0] = ( - arr[..., :(shp[-2] * shp[-1])]).reshape(shp, order='C') + out[..., npd0 : n_bin + npd0] = (arr[..., : (shp[-2] * shp[-1])]).reshape( + shp, order="C" + ) else: - inds = (np.arange(np.prod(shp[-2:])) * n_bin // int(n_bin) - ).astype(int) + inds = (np.arange(np.prod(shp[-2:])) * n_bin // int(n_bin)).astype(int) # If there are too many indices, drop one bin if inds[-1] >= arr.shape[-1]: - inds = inds[:-int(n_bin)] + inds = inds[: -int(n_bin)] shp[-2] -= 1 out = out[..., 1:, :] n_bin = int(n_bin) - out[..., npd0:n_bin + npd0] = (arr[..., inds] - ).reshape(shp, order='C') + out[..., npd0 : n_bin + npd0] = (arr[..., inds]).reshape(shp, order="C") n_bin = int(n_bin) if n_pad != 0: - out[..., 1:, :npd0] = out[..., :-1, n_bin:n_bin + npd0] - out[..., :-1, -npd1:] = out[..., 1:, npd0:npd0 + npd1] + out[..., 1:, :npd0] = out[..., :-1, n_bin : n_bin + npd0] + out[..., :-1, -npd1:] = out[..., 1:, npd0 : npd0 + npd1] return out @@ -336,7 +344,7 @@ def variance(self, arr, axis=-1, n_bin=None): def standard_deviation(self, arr, axis=-1, n_bin=None): """ Reshape the array `arr` to shape (...,n,n_bin+n_pad) - and take the standard deviation of each bin along the + and take the standard deviation of each bin along the specified `axis`. Parameters @@ -354,8 +362,17 @@ def standard_deviation(self, arr, axis=-1, n_bin=None): return np.nanstd(self.reshape(arr, n_bin=n_bin), axis=axis, dtype=np.float32) - def _psd_base(self, dat, fs=None, window='hann', noise=0, - n_bin=None, n_fft=None, n_pad=None, step=None): + def _psd_base( + self, + dat, + fs=None, + window="hann", + noise=0, + n_bin=None, + n_fft=None, + n_pad=None, + step=None, + ): """ Calculate power spectral density of `dat` @@ -371,10 +388,10 @@ def _psd_base(self, dat, fs=None, window='hann', noise=0, The white-noise level of the measurement (in the same units as `dat`). n_bin : int - n_bin of veldat2, number of elements per bin if 'None' is taken + n_bin of veldat2, number of elements per bin if 'None' is taken from VelBinner n_fft : int - n_fft of veldat2, number of elements per bin if 'None' is taken + n_fft of veldat2, number of elements per bin if 'None' is taken from VelBinner n_pad : int (optional) The number of values to pad with zero. Default = 0 @@ -403,36 +420,34 @@ def _psd_base(self, dat, fs=None, window='hann', noise=0, dat = self.reshape(dat, n_pad=n_pad) for slc in slice1d_along_axis(dat.shape, -1): - out[slc] = psd_1D(dat[slc], n_fft, fs, - window=window, step=step) + out[slc] = psd_1D(dat[slc], n_fft, fs, window=window, step=step) if noise != 0: - out -= noise**2 / (fs/2) + out -= noise**2 / (fs / 2) # Make sure all values of the PSD are >0 (but still small): out[out < 0] = np.min(np.abs(out)) / 100 return out - def _csd_base(self, dat1, dat2, fs=None, window='hann', - n_fft=None, n_bin=None): + def _csd_base(self, dat1, dat2, fs=None, window="hann", n_fft=None, n_bin=None): """ Calculate the cross power spectral density of `dat`. Parameters ---------- dat1 : numpy.ndarray - The first (shorter, if applicable) raw dataArray of which to + The first (shorter, if applicable) raw dataArray of which to calculate the cpsd. dat2 : numpy.ndarray - The second (the shorter, if applicable) raw dataArray of which to + The second (the shorter, if applicable) raw dataArray of which to calculate the cpsd. fs : float (optional) The sample rate (Hz). window : str String indicating the window function to use. Default is 'hanning' n_fft : int - n_fft of veldat2, number of elements per bin if 'None' is taken + n_fft of veldat2, number of elements per bin if 'None' is taken from VelBinner n_bin : int - n_bin of veldat2, number of elements per bin if 'None' is taken + n_bin of veldat2, number of elements per bin if 'None' is taken from VelBinner Returns @@ -444,7 +459,7 @@ def _csd_base(self, dat1, dat2, fs=None, window='hann', ----- PSD's are calculated based on sample rate units - The two velocity inputs do not have to be perfectly synchronized, but + The two velocity inputs do not have to be perfectly synchronized, but they should have the same start and end timestamps """ @@ -453,7 +468,7 @@ def _csd_base(self, dat1, dat2, fs=None, window='hann', n_fft = self.n_fft_coh # want each slice to carry the same timespan n_bin2 = self._parse_nbin(n_bin) # bins for shorter array - n_bin1 = int(dat1.shape[-1]/(dat2.shape[-1]/n_bin2)) + n_bin1 = int(dat1.shape[-1] / (dat2.shape[-1] / n_bin2)) oshp = self._outshape_fft(dat1.shape, n_fft=n_fft, n_bin=n_bin1) oshp[-2] = np.min([oshp[-2], int(dat2.shape[-1] // n_bin2)]) @@ -461,17 +476,16 @@ def _csd_base(self, dat1, dat2, fs=None, window='hann', # The data is detrended in psd, so we don't need to do it here: dat1 = self.reshape(dat1, n_pad=n_fft) dat2 = self.reshape(dat2, n_pad=n_fft) - out = np.empty(oshp, dtype='c{}'.format(dat1.dtype.itemsize * 2)) + out = np.empty(oshp, dtype="c{}".format(dat1.dtype.itemsize * 2)) if dat1.shape == dat2.shape: cross = cpsd_1D else: cross = cpsd_quasisync_1D for slc in slice1d_along_axis(out.shape, -1): - out[slc] = cross(dat1[slc], dat2[slc], n_fft, - fs, window=window) + out[slc] = cross(dat1[slc], dat2[slc], n_fft, fs, window=window) return out - def _fft_freq(self, fs=None, units='Hz', n_fft=None, coh=False): + def _fft_freq(self, fs=None, units="Hz", n_fft=None, coh=False): """ Wrapper to calculate the ordinary or radial frequency vector @@ -486,7 +500,7 @@ def _fft_freq(self, fs=None, units='Hz', n_fft=None, coh=False): (default: False) i.e. use self.n_fft_coh instead of self.n_fft. n_fft : int - n_fft of veldat2, number of elements per bin if 'None' is taken + n_fft of veldat2, number of elements per bin if 'None' is taken from VelBinner Returns @@ -502,11 +516,13 @@ def _fft_freq(self, fs=None, units='Hz', n_fft=None, coh=False): fs = self._parse_fs(fs) - if ('Hz' not in units) and ('rad' not in units): - raise Exception('Valid fft frequency vector units are Hz \ - or rad/s') + if ("Hz" not in units) and ("rad" not in units): + raise Exception( + "Valid fft frequency vector units are Hz \ + or rad/s" + ) - if 'rad' in units: - return fft_frequency(n_fft, 2*np.pi*fs) + if "rad" in units: + return fft_frequency(n_fft, 2 * np.pi * fs) else: return fft_frequency(n_fft, fs) diff --git a/mhkit/dolfyn/io/api.py b/mhkit/dolfyn/io/api.py index e540d53d0..b51b6d328 100644 --- a/mhkit/dolfyn/io/api.py +++ b/mhkit/dolfyn/io/api.py @@ -7,20 +7,27 @@ from .rdi import read_rdi from .base import _create_dataset, _get_filetype from ..rotate.base import _set_coords -from ..time import date2matlab, matlab2date, date2dt64, dt642date, date2epoch, epoch2date +from ..time import ( + date2matlab, + matlab2date, + date2dt64, + dt642date, + date2epoch, + epoch2date, +) def _check_file_ext(path, ext): filename = path.replace("\\", "/").rsplit("/")[-1] # windows/linux # for a filename like mcrl.water_velocity-1s.b1.20200813.150000.nc file_ext = filename.rsplit(".")[-1] - if '.' in filename: + if "." in filename: if file_ext != ext: raise IOError("File extension must be of the type {}".format(ext)) if file_ext == ext: return path - return path + '.' + ext + return path + "." + ext def _decode_cf(dataset: xr.Dataset) -> xr.Dataset: @@ -76,7 +83,7 @@ def read(fname, userdata=True, nens=None, **kwargs): userdata : True, False, or string of userdata.json filename (default ``True``) Whether to read the '.userdata.json' file. nens : None, int or 2-element tuple (start, stop) - Number of pings or ensembles to read from the file. + Number of pings or ensembles to read from the file. Default is None, read entire file **kwargs : dict Passed to instrument-specific parser. @@ -88,19 +95,21 @@ def read(fname, userdata=True, nens=None, **kwargs): """ file_type = _get_filetype(fname) - if file_type == '': - raise IOError("File '{}' looks like a git-lfs pointer. You may need to " - "install and initialize git-lfs. See https://git-lfs.github.com" - " for details.".format(fname)) + if file_type == "": + raise IOError( + "File '{}' looks like a git-lfs pointer. You may need to " + "install and initialize git-lfs. See https://git-lfs.github.com" + " for details.".format(fname) + ) elif file_type is None: - raise IOError("File '{}' is not recognized as a file-type that is readable by " - "DOLfYN. If you think it should be readable, try using the " - "appropriate read function (`read_rdi`, `read_nortek`, or " - "`read_signature`) found in dolfyn.io.api.".format(fname)) + raise IOError( + "File '{}' is not recognized as a file-type that is readable by " + "DOLfYN. If you think it should be readable, try using the " + "appropriate read function (`read_rdi`, `read_nortek`, or " + "`read_signature`) found in dolfyn.io.api.".format(fname) + ) else: - func_map = dict(RDI=read_rdi, - nortek=read_nortek, - signature=read_signature) + func_map = dict(RDI=read_rdi, nortek=read_nortek, signature=read_signature) func = func_map[file_type] return func(fname, userdata=userdata, nens=nens, **kwargs) @@ -130,16 +139,13 @@ def read_example(name, **kwargs): """ testdir = dirname(abspath(__file__)) - exdir = normpath(join(testdir, relpath('../../../examples/data/dolfyn/'))) - filename = exdir + '/' + name + exdir = normpath(join(testdir, relpath("../../../examples/data/dolfyn/"))) + filename = exdir + "/" + name return read(filename, **kwargs) -def save(ds, filename, - format='NETCDF4', engine='netcdf4', - compression=False, - **kwargs): +def save(ds, filename, format="NETCDF4", engine="netcdf4", compression=False, **kwargs): """ Save xarray dataset as netCDF (.nc). @@ -167,31 +173,31 @@ def save(ds, filename, See the xarray.to_netcdf documentation for more details. """ - filename = _check_file_ext(filename, 'nc') + filename = _check_file_ext(filename, "nc") # Handling complex values for netCDF4 - ds.attrs['complex_vars'] = [] + ds.attrs["complex_vars"] = [] for var in ds.data_vars: if np.iscomplexobj(ds[var]): - ds[var+'_real'] = ds[var].real - ds[var+'_imag'] = ds[var].imag + ds[var + "_real"] = ds[var].real + ds[var + "_imag"] = ds[var].imag ds = ds.drop_vars(var) - ds.attrs['complex_vars'].append(var) + ds.attrs["complex_vars"].append(var) # For variables that get rewritten to float64 elif ds[var].dtype == np.float64: - ds[var] = ds[var].astype('float32') + ds[var] = ds[var].astype("float32") if compression: enc = dict() for ky in ds.variables: enc[ky] = dict(zlib=True, complevel=1) - if 'encoding' in kwargs: + if "encoding" in kwargs: # Overwrite ('update') values in enc with whatever is in kwargs['encoding'] - enc.update(kwargs['encoding']) + enc.update(kwargs["encoding"]) else: - kwargs['encoding'] = enc + kwargs["encoding"] = enc # Fix encoding on datetime64 variables. ds = _decode_cf(ds) @@ -214,25 +220,25 @@ def load(filename): An xarray dataset from the binary instrument data. """ - filename = _check_file_ext(filename, 'nc') + filename = _check_file_ext(filename, "nc") - ds = xr.load_dataset(filename, engine='netcdf4') + ds = xr.load_dataset(filename, engine="netcdf4") # Convert numpy arrays and strings back to lists for nm in ds.attrs: if type(ds.attrs[nm]) == np.ndarray and ds.attrs[nm].size > 1: ds.attrs[nm] = list(ds.attrs[nm]) - elif type(ds.attrs[nm]) == str and nm in ['rotate_vars']: + elif type(ds.attrs[nm]) == str and nm in ["rotate_vars"]: ds.attrs[nm] = [ds.attrs[nm]] # Rejoin complex numbers - if hasattr(ds, 'complex_vars') and len(ds.complex_vars): + if hasattr(ds, "complex_vars") and len(ds.complex_vars): if len(ds.complex_vars[0]) == 1: - ds.attrs['complex_vars'] = [ds.complex_vars] + ds.attrs["complex_vars"] = [ds.complex_vars] for var in ds.complex_vars: - ds[var] = ds[var+'_real'] + ds[var+'_imag'] * 1j - ds = ds.drop_vars([var+'_real', var+'_imag']) - ds.attrs.pop('complex_vars') + ds[var] = ds[var + "_real"] + ds[var + "_imag"] * 1j + ds = ds.drop_vars([var + "_real", var + "_imag"]) + ds.attrs.pop("complex_vars") return ds @@ -262,20 +268,18 @@ def save_mat(ds, filename, datenum=True): """ def copy_attrs(matfile, ds, key): - if hasattr(ds[key], 'units'): - matfile['units'][key] = ds[key].units - if hasattr(ds[key], 'long_name'): - matfile['long_name'][key] = ds[key].long_name - if hasattr(ds[key], 'standard_name'): - matfile['standard_name'][key] = ds[key].standard_name + if hasattr(ds[key], "units"): + matfile["units"][key] = ds[key].units + if hasattr(ds[key], "long_name"): + matfile["long_name"][key] = ds[key].long_name + if hasattr(ds[key], "standard_name"): + matfile["standard_name"][key] = ds[key].standard_name - filename = _check_file_ext(filename, 'mat') + filename = _check_file_ext(filename, "mat") # Convert time to datenum - t_coords = [t for t in ds.coords if np.issubdtype( - ds[t].dtype, np.datetime64)] - t_data = [t for t in ds.data_vars if np.issubdtype( - ds[t].dtype, np.datetime64)] + t_coords = [t for t in ds.coords if np.issubdtype(ds[t].dtype, np.datetime64)] + t_data = [t for t in ds.data_vars if np.issubdtype(ds[t].dtype, np.datetime64)] if datenum: func = date2matlab @@ -289,19 +293,25 @@ def copy_attrs(matfile, ds, key): dt = func(dt642date(ds[ky])) ds[ky].data = dt - ds.attrs['time_coords'] = t_coords - ds.attrs['time_data_vars'] = t_data + ds.attrs["time_coords"] = t_coords + ds.attrs["time_data_vars"] = t_data # Save xarray structure with more descriptive structure names - matfile = {'vars': {}, 'coords': {}, 'config': {}, - 'units': {}, 'long_name': {}, 'standard_name': {}} + matfile = { + "vars": {}, + "coords": {}, + "config": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + } for ky in ds.data_vars: - matfile['vars'][ky] = ds[ky].values + matfile["vars"][ky] = ds[ky].values copy_attrs(matfile, ds, ky) for ky in ds.coords: - matfile['coords'][ky] = ds[ky].values + matfile["coords"][ky] = ds[ky].values copy_attrs(matfile, ds, ky) - matfile['config'] = ds.attrs + matfile["config"] = ds.attrs sio.savemat(filename, matfile) @@ -318,7 +328,7 @@ def load_mat(filename, datenum=True): filename : str Filename and/or path with the '.mat' extension datenum : bool - If true, converts time from datenum. If false, converts time from + If true, converts time from datenum. If false, converts time from "epoch time". Returns @@ -331,19 +341,25 @@ def load_mat(filename, datenum=True): scipy.io.loadmat() """ - filename = _check_file_ext(filename, 'mat') + filename = _check_file_ext(filename, "mat") data = sio.loadmat(filename, struct_as_record=False, squeeze_me=True) - ds_dict = {'vars': {}, 'coords': {}, 'config': {}, - 'units': {}, 'long_name': {}, 'standard_name': {}} + ds_dict = { + "vars": {}, + "coords": {}, + "config": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + } for nm in ds_dict: key_list = data[nm]._fieldnames for ky in key_list: ds_dict[nm][ky] = getattr(data[nm], ky) - ds_dict['data_vars'] = ds_dict.pop('vars') - ds_dict['attrs'] = ds_dict.pop('config') + ds_dict["data_vars"] = ds_dict.pop("vars") + ds_dict["attrs"] = ds_dict.pop("config") # Recreate dataset ds = _create_dataset(ds_dict) @@ -353,14 +369,18 @@ def load_mat(filename, datenum=True): for nm in ds.attrs: if type(ds.attrs[nm]) == np.ndarray and ds.attrs[nm].size > 1: try: - ds.attrs[nm] = [x.strip(' ') for x in list(ds.attrs[nm])] + ds.attrs[nm] = [x.strip(" ") for x in list(ds.attrs[nm])] except: ds.attrs[nm] = list(ds.attrs[nm]) - elif type(ds.attrs[nm]) == str and nm in ['time_coords', 'time_data_vars', 'rotate_vars']: + elif type(ds.attrs[nm]) == str and nm in [ + "time_coords", + "time_data_vars", + "rotate_vars", + ]: ds.attrs[nm] = [ds.attrs[nm]] - if hasattr(ds, 'orientation_down'): - ds['orientation_down'] = ds['orientation_down'].astype(bool) + if hasattr(ds, "orientation_down"): + ds["orientation_down"] = ds["orientation_down"].astype(bool) if datenum: func = matlab2date @@ -368,15 +388,15 @@ def load_mat(filename, datenum=True): func = epoch2date # Restore datnum to np.dt64 - if hasattr(ds, 'time_coords'): - for ky in ds.attrs['time_coords']: + if hasattr(ds, "time_coords"): + for ky in ds.attrs["time_coords"]: dt = date2dt64(func(ds[ky].values)) ds = ds.assign_coords({ky: dt}) - ds.attrs.pop('time_coords') - if hasattr(ds, 'time_data_vars'): - for ky in ds.attrs['time_data_vars']: + ds.attrs.pop("time_coords") + if hasattr(ds, "time_data_vars"): + for ky in ds.attrs["time_data_vars"]: dt = date2dt64(func(ds[ky].values)) ds[ky].data = dt - ds.attrs.pop('time_data_vars') + ds.attrs.pop("time_data_vars") return ds diff --git a/mhkit/dolfyn/io/base.py b/mhkit/dolfyn/io/base.py index 8f3b4469a..b949220aa 100644 --- a/mhkit/dolfyn/io/base.py +++ b/mhkit/dolfyn/io/base.py @@ -23,18 +23,18 @@ def _get_filetype(fname): ' - if the file looks like a GIT-LFS pointer. """ - with open(fname, 'rb') as rdr: + with open(fname, "rb") as rdr: bytes = rdr.read(40) code = bytes[:2].hex() - if code in ['7f79', '7f7f']: - return 'RDI' - elif code in ['a50a']: - return 'signature' - elif code in ['a505']: + if code in ["7f79", "7f7f"]: + return "RDI" + elif code in ["a50a"]: + return "signature" + elif code in ["a505"]: # AWAC - return 'nortek' - elif bytes == b'version https://git-lfs.github.com/spec/': - return '' + return "nortek" + elif bytes == b"version https://git-lfs.github.com/spec/": + return "" else: return None @@ -42,13 +42,12 @@ def _get_filetype(fname): def _find_userdata(filename, userdata=True): # This function finds the file to read if userdata: - for basefile in [filename.rsplit('.', 1)[0], - filename]: - jsonfile = basefile + '.userdata.json' + for basefile in [filename.rsplit(".", 1)[0], filename]: + jsonfile = basefile + ".userdata.json" if os.path.isfile(jsonfile): return _read_userdata(jsonfile) - elif isinstance(userdata, (str, )) or hasattr(userdata, 'read'): + elif isinstance(userdata, (str,)) or hasattr(userdata, "read"): return _read_userdata(userdata) return {} @@ -60,54 +59,55 @@ def _read_userdata(fname): """ with open(fname) as data_file: data = json.load(data_file) - for nm in ['body2head_rotmat', 'body2head_vec']: + for nm in ["body2head_rotmat", "body2head_vec"]: if nm in data: - new_name = 'inst' + nm[4:] + new_name = "inst" + nm[4:] warnings.warn( - f'{nm} has been deprecated, please change this to {new_name} \ - in {fname}.') + f"{nm} has been deprecated, please change this to {new_name} \ + in {fname}." + ) data[new_name] = data.pop(nm) - if 'inst2head_rotmat' in data: - if data['inst2head_rotmat'] in ['identity', 'eye', 1, 1.]: - data['inst2head_rotmat'] = np.eye(3) + if "inst2head_rotmat" in data: + if data["inst2head_rotmat"] in ["identity", "eye", 1, 1.0]: + data["inst2head_rotmat"] = np.eye(3) else: - data['inst2head_rotmat'] = np.array(data['inst2head_rotmat']) - if 'inst2head_vec' in data and type(data['inst2head_vec']) != list: - data['inst2head_vec'] = list(data['inst2head_vec']) + data["inst2head_rotmat"] = np.array(data["inst2head_rotmat"]) + if "inst2head_vec" in data and type(data["inst2head_vec"]) != list: + data["inst2head_vec"] = list(data["inst2head_vec"]) return data def _handle_nan(data): """ - Finds trailing nan's that cause issues in running the rotation + Finds trailing nan's that cause issues in running the rotation algorithms and deletes them. """ - nan = np.zeros(data['coords']['time'].shape, dtype=bool) - l = data['coords']['time'].size + nan = np.zeros(data["coords"]["time"].shape, dtype=bool) + l = data["coords"]["time"].size - if any(np.isnan(data['coords']['time'])): - nan += np.isnan(data['coords']['time']) + if any(np.isnan(data["coords"]["time"])): + nan += np.isnan(data["coords"]["time"]) # Required for motion-correction algorithm - var = ['accel', 'angrt', 'mag'] - for key in data['data_vars']: + var = ["accel", "angrt", "mag"] + for key in data["data_vars"]: if any(val in key for val in var): - shp = data['data_vars'][key].shape + shp = data["data_vars"][key].shape if shp[-1] == l: if len(shp) == 1: - if any(np.isnan(data['data_vars'][key])): - nan += np.isnan(data['data_vars'][key]) + if any(np.isnan(data["data_vars"][key])): + nan += np.isnan(data["data_vars"][key]) elif len(shp) == 2: - if any(np.isnan(data['data_vars'][key][-1])): - nan += np.isnan(data['data_vars'][key][-1]) + if any(np.isnan(data["data_vars"][key][-1])): + nan += np.isnan(data["data_vars"][key][-1]) trailing = np.cumsum(nan)[-1] if trailing > 0: - data['coords']['time'] = data['coords']['time'][:-trailing] - for key in data['data_vars']: - if data['data_vars'][key].shape[-1] == l: - data['data_vars'][key] = data['data_vars'][key][..., :-trailing] + data["coords"]["time"] = data["coords"]["time"][:-trailing] + for key in data["data_vars"]: + if data["data_vars"][key].shape[-1] == l: + data["data_vars"][key] = data["data_vars"][key][..., :-trailing] return data @@ -118,174 +118,225 @@ def _create_dataset(data): Direction 'dir' coordinates are set in `set_coords` """ ds = xr.Dataset() - tag = ['_avg', '_b5', '_echo', '_bt', '_gps', '_ast', '_sl'] + tag = ["_avg", "_b5", "_echo", "_bt", "_gps", "_ast", "_sl"] FoR = {} try: - beams = data['attrs']['n_beams'] + beams = data["attrs"]["n_beams"] except: - beams = data['attrs']['n_beams_avg'] + beams = data["attrs"]["n_beams_avg"] n_beams = max(min(beams, 4), 3) - beams = np.arange(1, n_beams+1, dtype=np.int32) - FoR['beam'] = xr.DataArray(beams, dims=['beam'], name='beam', attrs={ - 'units': '1', 'long_name': 'Beam Reference Frame'}) - FoR['dir'] = xr.DataArray(beams, dims=['dir'], name='dir', attrs={ - 'units': '1', 'long_name': 'Reference Frame'}) - - for key in data['data_vars']: + beams = np.arange(1, n_beams + 1, dtype=np.int32) + FoR["beam"] = xr.DataArray( + beams, + dims=["beam"], + name="beam", + attrs={"units": "1", "long_name": "Beam Reference Frame"}, + ) + FoR["dir"] = xr.DataArray( + beams, + dims=["dir"], + name="dir", + attrs={"units": "1", "long_name": "Reference Frame"}, + ) + + for key in data["data_vars"]: # orientation matrices - if 'mat' in key: - if 'inst' in key: # beam2inst & inst2head orientation matrices - ds[key] = xr.DataArray(data['data_vars'][key], - coords={'x1': beams, 'x2': beams}, - dims=['x1', 'x2'], - attrs={'units': '1', - 'long_name': 'Rotation Matrix'}) - elif 'orientmat' in key: # earth2inst orientation matrix + if "mat" in key: + if "inst" in key: # beam2inst & inst2head orientation matrices + ds[key] = xr.DataArray( + data["data_vars"][key], + coords={"x1": beams, "x2": beams}, + dims=["x1", "x2"], + attrs={"units": "1", "long_name": "Rotation 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 = '' - earth = xr.DataArray(['E', 'N', 'U'], dims=['earth'], name='earth', attrs={ - 'units': '1', 'long_name': 'Earth Reference Frame'}) - inst = xr.DataArray(['X', 'Y', 'Z'], dims=['inst'], name='inst', attrs={ - 'units': '1', 'long_name': 'Instrument Reference Frame'}) - time = data['coords']['time'+tg] - ds[key] = xr.DataArray(data['data_vars'][key], - coords={'earth': earth, - 'inst': inst, 'time'+tg: time}, - dims=['earth', 'inst', 'time'+tg], - attrs={'units': data['units']['orientmat'], - 'long_name': data['long_name']['orientmat']}) + tg = "" + earth = xr.DataArray( + ["E", "N", "U"], + dims=["earth"], + name="earth", + attrs={"units": "1", "long_name": "Earth Reference Frame"}, + ) + inst = xr.DataArray( + ["X", "Y", "Z"], + dims=["inst"], + name="inst", + attrs={"units": "1", "long_name": "Instrument Reference Frame"}, + ) + time = data["coords"]["time" + tg] + ds[key] = xr.DataArray( + data["data_vars"][key], + coords={"earth": earth, "inst": inst, "time" + tg: time}, + dims=["earth", "inst", "time" + tg], + attrs={ + "units": data["units"]["orientmat"], + "long_name": 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 = '' - q = xr.DataArray(['w', 'x', 'y', 'z'], dims=['q'], name='q', attrs={ - 'units': '1', 'long_name': 'Quaternion Vector Components'}) - time = data['coords']['time'+tg] - ds[key] = xr.DataArray(data['data_vars'][key], - coords={'q': q, - 'time'+tg: time}, - dims=['q', 'time'+tg], - attrs={'units': data['units']['quaternions'], - 'long_name': data['long_name']['quaternions']}) + tg = "" + q = xr.DataArray( + ["w", "x", "y", "z"], + dims=["q"], + name="q", + attrs={"units": "1", "long_name": "Quaternion Vector Components"}, + ) + time = data["coords"]["time" + tg] + ds[key] = xr.DataArray( + data["data_vars"][key], + coords={"q": q, "time" + tg: time}, + dims=["q", "time" + tg], + attrs={ + "units": data["units"]["quaternions"], + "long_name": data["long_name"]["quaternions"], + }, + ) else: # Assign each variable to a dataArray - ds[key] = xr.DataArray(data['data_vars'][key]) + ds[key] = xr.DataArray(data["data_vars"][key]) # Assign metadata to each dataArray - 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] 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 # Fill in dimensions and coordinates for each dataArray - shp = data['data_vars'][key].shape + shp = data["data_vars"][key].shape l = len(shp) if l == 1: # 1D variables if any(val in key for val in tag): - tg = '_' + key.rsplit('_')[-1] + tg = "_" + key.rsplit("_")[-1] else: - tg = '' - ds[key] = ds[key].rename({'dim_0': 'time'+tg}) + tg = "" + ds[key] = ds[key].rename({"dim_0": "time" + tg}) ds[key] = ds[key].assign_coords( - {'time'+tg: data['coords']['time'+tg]}) + {"time" + tg: data["coords"]["time" + tg]} + ) elif l == 2: # 2D variables - if key == 'echo': - ds[key] = ds[key].rename({'dim_0': 'range_echo', - 'dim_1': 'time_echo'}) - ds[key] = ds[key].assign_coords({'range_echo': data['coords']['range_echo'], - 'time_echo': data['coords']['time_echo']}) + if key == "echo": + ds[key] = ds[key].rename( + {"dim_0": "range_echo", "dim_1": "time_echo"} + ) + ds[key] = ds[key].assign_coords( + { + "range_echo": data["coords"]["range_echo"], + "time_echo": data["coords"]["time_echo"], + } + ) # 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[key] = ds[key].rename({'dim_0': dim0, - 'dim_1': 'time'+tg}) - ds[key] = ds[key].assign_coords({dim0: FoR[dim0], - 'time'+tg: data['coords']['time'+tg]}) + dim0 = "dir" + ds[key] = ds[key].rename({"dim_0": dim0, "dim_1": "time" + tg}) + ds[key] = ds[key].assign_coords( + {dim0: FoR[dim0], "time" + tg: data["coords"]["time" + tg]} + ) # 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] - dirIMU = xr.DataArray([1, 2, 3], dims=['dirIMU'], name='dirIMU', attrs={ - 'units': '1', 'long_name': 'Reference Frame'}) - ds[key] = ds[key].rename({'dim_0': 'dirIMU', - 'dim_1': 'time'+tg}) - ds[key] = ds[key].assign_coords({'dirIMU': dirIMU, - 'time'+tg: data['coords']['time'+tg]}) - - ds[key].attrs['coverage_content_type'] = 'physicalMeasurement' + dirIMU = xr.DataArray( + [1, 2, 3], + dims=["dirIMU"], + name="dirIMU", + attrs={"units": "1", "long_name": "Reference Frame"}, + ) + ds[key] = ds[key].rename({"dim_0": "dirIMU", "dim_1": "time" + tg}) + ds[key] = ds[key].assign_coords( + {"dirIMU": dirIMU, "time" + tg: data["coords"]["time" + tg]} + ) + + ds[key].attrs["coverage_content_type"] = "physicalMeasurement" elif l == 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[key] = ds[key].rename({'dim_0': dim0, - 'dim_1': 'range'+tg, - 'dim_2': 'time'+tg}) - ds[key] = ds[key].assign_coords({dim0: FoR[dim0], - 'range'+tg: data['coords']['range'+tg], - 'time'+tg: data['coords']['time'+tg]}) - elif 'b5' in key: + tg = "" + ds[key] = ds[key].rename( + {"dim_0": dim0, "dim_1": "range" + tg, "dim_2": "time" + tg} + ) + ds[key] = ds[key].assign_coords( + { + dim0: FoR[dim0], + "range" + tg: data["coords"]["range" + tg], + "time" + tg: data["coords"]["time" + tg], + } + ) + elif "b5" in key: # xarray can't handle coords of length 1 ds[key] = ds[key][0] - ds[key] = ds[key].rename({'dim_1': 'range_b5', - 'dim_2': 'time_b5'}) - ds[key] = ds[key].assign_coords({'range_b5': data['coords']['range_b5'], - 'time_b5': data['coords']['time_b5']}) - elif 'sl' in key: - ds[key] = ds[key].rename({'dim_0': dim0, - 'dim_1': 'range_sl', - 'dim_2': 'time'}) - ds[key] = ds[key].assign_coords({'range_sl': data['coords']['range_sl'], - 'time': data['coords']['time']}) + ds[key] = ds[key].rename({"dim_1": "range_b5", "dim_2": "time_b5"}) + ds[key] = ds[key].assign_coords( + { + "range_b5": data["coords"]["range_b5"], + "time_b5": data["coords"]["time_b5"], + } + ) + elif "sl" in key: + ds[key] = ds[key].rename( + {"dim_0": dim0, "dim_1": "range_sl", "dim_2": "time"} + ) + ds[key] = ds[key].assign_coords( + { + "range_sl": data["coords"]["range_sl"], + "time": data["coords"]["time"], + } + ) else: ds = ds.drop_vars(key) - warnings.warn(f'Variable not included in dataset: {key}') + warnings.warn(f"Variable not included in dataset: {key}") - ds[key].attrs['coverage_content_type'] = 'physicalMeasurement' + ds[key].attrs["coverage_content_type"] = "physicalMeasurement" # 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" # dataset metadata - ds.attrs = data['attrs'] + ds.attrs = data["attrs"] return ds diff --git a/mhkit/dolfyn/io/nortek.py b/mhkit/dolfyn/io/nortek.py index 4709df7aa..457a3b031 100644 --- a/mhkit/dolfyn/io/nortek.py +++ b/mhkit/dolfyn/io/nortek.py @@ -14,8 +14,9 @@ from ..rotate import api as rot -def read_nortek(filename, userdata=True, debug=False, do_checksum=False, - nens=None, **kwargs): +def read_nortek( + filename, userdata=True, debug=False, do_checksum=False, nens=None, **kwargs +): """ Read a classic Nortek (AWAC and Vector) datafile @@ -31,7 +32,7 @@ def read_nortek(filename, userdata=True, debug=False, do_checksum=False, do_checksum : bool Whether to perform the checksum of each data block. Default = False nens : None, int or 2-element tuple (start, stop) - Number of pings or ensembles to read from the file. + Number of pings or ensembles to read from the file. Default is None, read entire file Returns @@ -45,16 +46,19 @@ def read_nortek(filename, userdata=True, debug=False, do_checksum=False, for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) filepath = Path(filename) - logfile = filepath.with_suffix('.dolfyn.log') - logging.basicConfig(filename=str(logfile), - filemode='w', - level=logging.NOTSET, - format='%(name)s - %(levelname)s - %(message)s') + logfile = filepath.with_suffix(".dolfyn.log") + logging.basicConfig( + filename=str(logfile), + filemode="w", + level=logging.NOTSET, + format="%(name)s - %(levelname)s - %(message)s", + ) userdata = _find_userdata(filename, userdata) - with _NortekReader(filename, debug=debug, do_checksum=do_checksum, - nens=nens) as rdr: + with _NortekReader( + filename, debug=debug, do_checksum=do_checksum, nens=nens + ) as rdr: rdr.readfile() rdr.dat2sci() dat = rdr.data @@ -63,41 +67,44 @@ def read_nortek(filename, userdata=True, debug=False, do_checksum=False, dat = _handle_nan(dat) # Search for missing timestamps and interpolate them - coords = dat['coords'] - t_list = [t for t in coords if 'time' in t] + coords = dat["coords"] + t_list = [t for t in coords if "time" in t] for ky in t_list: tdat = coords[ky] tdat[tdat == 0] = np.NaN if np.isnan(tdat).any(): - tag = ky.lstrip('time') - warnings.warn("Zero/NaN values found in '{}'. Interpolating and " - "extrapolating them. To identify which values were filled later, " - "look for 0 values in 'status{}'".format(ky, tag)) - tdat = time._fill_time_gaps( - tdat, sample_rate_hz=dat['attrs']['fs']) - coords[ky] = time.epoch2dt64(tdat).astype('datetime64[ns]') + tag = ky.lstrip("time") + warnings.warn( + "Zero/NaN values found in '{}'. Interpolating and " + "extrapolating them. To identify which values were filled later, " + "look for 0 values in 'status{}'".format(ky, tag) + ) + tdat = time._fill_time_gaps(tdat, sample_rate_hz=dat["attrs"]["fs"]) + coords[ky] = time.epoch2dt64(tdat).astype("datetime64[ns]") # Apply rotation matrix and declination rotmat = None declin = None for nm in userdata: - if 'rotmat' in nm: + if "rotmat" in nm: rotmat = userdata[nm] - elif 'dec' in nm: + elif "dec" in nm: declin = userdata[nm] else: - dat['attrs'][nm] = userdata[nm] + dat["attrs"][nm] = userdata[nm] # Create xarray dataset from upper level dictionary ds = _create_dataset(dat) ds = _set_coords(ds, ref_frame=ds.coord_sys) - if 'orientmat' not in ds: - ds['orientmat'] = _calc_omat(ds['time'], - ds['heading'], - ds['pitch'], - ds['roll'], - ds.get('orientation_down', None)) + if "orientmat" not in ds: + ds["orientmat"] = _calc_omat( + ds["time"], + ds["heading"], + ds["pitch"], + ds["roll"], + ds.get("orientation_down", None), + ) if rotmat is not None: rot.set_inst2head_rotmat(ds, rotmat, inplace=True) @@ -114,11 +121,11 @@ def read_nortek(filename, userdata=True, debug=False, do_checksum=False, def _bcd2char(cBCD): - """Taken from the Nortek System Integrator Manual + """Taken from the Nortek System Integrator Manual "Example Program" Chapter. """ cBCD = min(cBCD, 153) - c = (cBCD & 15) + c = cBCD & 15 c += 10 * (cBCD >> 4) return c @@ -128,13 +135,13 @@ def _bitshift8(val): def _int2binarray(val, n): - out = np.zeros(n, dtype='bool') + out = np.zeros(n, dtype="bool") for idx, n in enumerate(range(n)): - out[idx] = val & (2 ** n) + out[idx] = val & (2**n) return out -class _NortekReader(): +class _NortekReader: """ A class for reading reading nortek binary files. This reader currently only supports AWAC and Vector data formats. @@ -153,27 +160,35 @@ class _NortekReader(): bufsize : int The size of the read buffer to use. Default = 100000 nens : None, int or 2-element tuple (start, stop) - Number of pings or ensembles to read from the file. + Number of pings or ensembles to read from the file. Default is None, read entire file """ _lastread = [None, None, None, None, None] - fun_map = {'0x00': 'read_user_cfg', - '0x04': 'read_head_cfg', - '0x05': 'read_hw_cfg', - '0x07': 'read_vec_checkdata', - '0x10': 'read_vec_data', - '0x11': 'read_vec_sysdata', - '0x12': 'read_vec_hdr', - '0x71': 'read_microstrain', - '0x20': 'read_awac_profile', - } - - def __init__(self, fname, endian=None, debug=False, - do_checksum=True, bufsize=100000, nens=None): + fun_map = { + "0x00": "read_user_cfg", + "0x04": "read_head_cfg", + "0x05": "read_hw_cfg", + "0x07": "read_vec_checkdata", + "0x10": "read_vec_data", + "0x11": "read_vec_sysdata", + "0x12": "read_vec_hdr", + "0x71": "read_microstrain", + "0x20": "read_awac_profile", + } + + def __init__( + self, + fname, + endian=None, + debug=False, + do_checksum=True, + bufsize=100000, + nens=None, + ): self.fname = fname self._bufsize = bufsize - self.f = open(_abspath(fname), 'rb', 1000) + self.f = open(_abspath(fname), "rb", 1000) self.do_checksum = do_checksum self.filesize # initialize the filesize. self.debug = debug @@ -187,29 +202,32 @@ def __init__(self, fname, endian=None, debug=False, self._npings = nens else: if len(nens) != 2: - raise TypeError('nens must be: None (), int, or len 2') - warnings.warn("A 'start ensemble' is not yet supported " - "for the Nortek reader. This function will read " - "the entire file, then crop the beginning at " - "nens[0].") + raise TypeError("nens must be: None (), int, or len 2") + warnings.warn( + "A 'start ensemble' is not yet supported " + "for the Nortek reader. This function will read " + "the entire file, then crop the beginning at " + "nens[0]." + ) self._npings = nens[1] self._n_start = nens[0] if endian is None: - if unpack('HH', self.read(4)) == (1445, 24): - endian = '>' + if unpack("HH", self.read(4)) == (1445, 24): + endian = ">" else: - raise Exception("I/O error: could not determine the " - "'endianness' of the file. Are you sure this is a Nortek " - "file?") + raise Exception( + "I/O error: could not determine the " + "'endianness' of the file. Are you sure this is a Nortek " + "file?" + ) self.endian = endian self.f.seek(0, 0) # This is the configuration data: self.config = {} - err_msg = ("I/O error: The file does not " - "appear to be a Nortek data file.") + err_msg = "I/O error: The file does not " "appear to be a Nortek data file." # Read the header: if self.read_id() == 5: self.read_hw_cfg() @@ -223,49 +241,54 @@ def __init__(self, fname, endian=None, debug=False, self.read_user_cfg() else: raise Exception(err_msg) - if self.config['hdw']['serial_number'][0:3].upper() == 'WPR': - self.config['config_type'] = 'AWAC' - elif self.config['hdw']['serial_number'][0:3].upper() == 'VEC': - self.config['config_type'] = 'ADV' + if self.config["hdw"]["serial_number"][0:3].upper() == "WPR": + self.config["config_type"] = "AWAC" + elif self.config["hdw"]["serial_number"][0:3].upper() == "VEC": + self.config["config_type"] = "ADV" # Initialize the instrument type: - self._inst = self.config.pop('config_type') + self._inst = self.config.pop("config_type") # This is the position after reading the 'hardware', # 'head', and 'user' configuration. pnow = self.pos # Run the appropriate initialization routine (e.g. init_ADV). - getattr(self, 'init_' + self._inst)() + getattr(self, "init_" + self._inst)() self.f.close() # This has a small buffer, so close it. # This has a large buffer... - self.f = open(_abspath(fname), 'rb', bufsize) + self.f = open(_abspath(fname), "rb", bufsize) self.close = self.f.close if self._npings is not None: self.n_samp_guess = self._npings self.f.seek(pnow, 0) # Seek to the previous position. - da = self.data['attrs'] - if self.config['n_burst'] > 0: - fs = round(self.config['fs'], 7) - da['duty_cycle_n_burst'] = self.config['n_burst'] - da['duty_cycle_interval'] = self.config['burst_interval'] + da = self.data["attrs"] + if self.config["n_burst"] > 0: + fs = round(self.config["fs"], 7) + da["duty_cycle_n_burst"] = self.config["n_burst"] + da["duty_cycle_interval"] = self.config["burst_interval"] if fs > 1: - burst_seconds = self.config['n_burst']/fs + 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) - self.burst_start = np.zeros(self.n_samp_guess, dtype='bool') - da['fs'] = self.config['fs'] - da['coord_sys'] = {'XYZ': 'inst', - 'ENU': 'earth', - 'beam': 'beam'}[self.config['coord_sys_axes']] - da['has_imu'] = 0 # Initiate attribute + 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 + ) + self.burst_start = np.zeros(self.n_samp_guess, dtype="bool") + da["fs"] = self.config["fs"] + da["coord_sys"] = {"XYZ": "inst", "ENU": "earth", "beam": "beam"}[ + self.config["coord_sys_axes"] + ] + da["has_imu"] = 0 # Initiate attribute if self.debug: - logging.info('Init completed') + logging.info("Init completed") @property - def filesize(self,): - if not hasattr(self, '_filesz'): + def filesize( + self, + ): + if not hasattr(self, "_filesz"): pos = self.pos self.f.seek(0, 2) # Seek to the end of the file to determine the filesize. @@ -274,49 +297,67 @@ def filesize(self,): return self._filesz @property - def pos(self,): + def pos( + self, + ): return self.f.tell() - def init_ADV(self,): - dat = self.data = {'data_vars': {}, 'coords': {}, 'attrs': {}, - 'units': {}, 'long_name': {}, 'standard_name': {}, - 'sys': {}} - da = dat['attrs'] - dv = dat['data_vars'] - da['inst_make'] = 'Nortek' - da['inst_model'] = 'Vector' - da['inst_type'] = 'ADV' - da['rotate_vars'] = ['vel'] - dv['beam2inst_orientmat'] = self.config.pop('beam2inst_orientmat') - self.config['fs'] = 512 / self.config['awac']['avg_interval'] - da.update(self.config['usr']) - da.update(self.config['adv']) - da.update(self.config['head']) - da.update(self.config['hdw']) + def init_ADV( + self, + ): + dat = self.data = { + "data_vars": {}, + "coords": {}, + "attrs": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + "sys": {}, + } + da = dat["attrs"] + dv = dat["data_vars"] + da["inst_make"] = "Nortek" + da["inst_model"] = "Vector" + da["inst_type"] = "ADV" + da["rotate_vars"] = ["vel"] + dv["beam2inst_orientmat"] = self.config.pop("beam2inst_orientmat") + self.config["fs"] = 512 / self.config["awac"]["avg_interval"] + da.update(self.config["usr"]) + da.update(self.config["adv"]) + da.update(self.config["head"]) + da.update(self.config["hdw"]) # No apparent way to determine how many samples are in a file - dlta = self.code_spacing('0x11') + dlta = self.code_spacing("0x11") self.n_samp_guess = int(self.filesize / dlta + 1) - self.n_samp_guess *= int(self.config['fs']) - - def init_AWAC(self,): - dat = self.data = {'data_vars': {}, 'coords': {}, 'attrs': {}, - 'units': {}, 'long_name': {}, 'standard_name': {}, - 'sys': {}} - da = dat['attrs'] - dv = dat['data_vars'] - da['inst_make'] = 'Nortek' - da['inst_model'] = 'AWAC' - da['inst_type'] = 'ADCP' - dv['beam2inst_orientmat'] = self.config.pop('beam2inst_orientmat') - da['rotate_vars'] = ['vel'] - self.config['fs'] = 1. / self.config['awac']['avg_interval'] - da.update(self.config['usr']) - da.update(self.config['awac']) - da.update(self.config['head']) - da.update(self.config['hdw']) - - space = self.code_spacing('0x20') + self.n_samp_guess *= int(self.config["fs"]) + + def init_AWAC( + self, + ): + dat = self.data = { + "data_vars": {}, + "coords": {}, + "attrs": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + "sys": {}, + } + da = dat["attrs"] + dv = dat["data_vars"] + da["inst_make"] = "Nortek" + da["inst_model"] = "AWAC" + da["inst_type"] = "ADCP" + dv["beam2inst_orientmat"] = self.config.pop("beam2inst_orientmat") + da["rotate_vars"] = ["vel"] + self.config["fs"] = 1.0 / self.config["awac"]["avg_interval"] + da.update(self.config["usr"]) + da.update(self.config["awac"]) + da.update(self.config["head"]) + da.update(self.config["hdw"]) + + space = self.code_spacing("0x20") if space == 0: # code spacing is zero if there's only 1 profile self.n_samp_guess = 1 @@ -326,62 +367,66 @@ def init_AWAC(self,): def read(self, nbyte): byts = self.f.read(nbyte) if not (len(byts) == nbyte): - raise EOFError('Reached the end of the file') + raise EOFError("Reached the end of the file") return byts def findnext(self, do_cs=True): """Find the next data block by checking the checksum and the sync byte(0xa5) """ - sum = np.uint16(int('0xb58c', 0)) # Initialize the sum + sum = np.uint16(int("0xb58c", 0)) # Initialize the sum cs = 0 func = _bitshift8 func2 = np.uint8 - if self.endian == '<': + if self.endian == "<": func = np.uint8 func2 = _bitshift8 while True: - val = unpack(self.endian + 'H', self.read(2))[0] + val = unpack(self.endian + "H", self.read(2))[0] if func(val) == 165 and (not do_cs or cs == np.uint16(sum)): self.f.seek(-2, 1) return hex(func2(val)) sum += cs cs = val - def read_id(self,): - """Read the next 'ID' from the file. - """ + def read_id( + self, + ): + """Read the next 'ID' from the file.""" self._thisid_bytes = bts = self.read(2) - tmp = unpack(self.endian + 'BB', bts) + tmp = unpack(self.endian + "BB", bts) if self.debug: - logging.info('Position: {}, codes: {}'.format(self.f.tell(), tmp)) + logging.info("Position: {}, codes: {}".format(self.f.tell(), tmp)) if tmp[0] != 165: # This catches a corrupted data block. if self.debug: - logging.warning("Corrupted data block sync code (%d, %d) found " - "in ping %d. Searching for next valid code..." % - (tmp[0], tmp[1], self.c)) + logging.warning( + "Corrupted data block sync code (%d, %d) found " + "in ping %d. Searching for next valid code..." + % (tmp[0], tmp[1], self.c) + ) val = int(self.findnext(do_cs=False), 0) self.f.seek(2, 1) if self.debug: - logging.debug( - ' ...FOUND {} at position: {}.'.format(val, self.pos)) + logging.debug(" ...FOUND {} at position: {}.".format(val, self.pos)) return val return tmp[1] - def readnext(self,): - id = '0x%02x' % self.read_id() + def readnext( + self, + ): + id = "0x%02x" % self.read_id() if id in self.fun_map: func_name = self.fun_map[id] out = getattr(self, func_name)() # Should return None self._lastread = [func_name[5:]] + self._lastread[:-1] return out else: - logging.warning('Unrecognized identifier: ' + id) + logging.warning("Unrecognized identifier: " + id) self.f.seek(-2, 1) return 10 def readfile(self, nlines=None): - print('Reading file %s ...' % self.fname) + print("Reading file %s ..." % self.fname) retval = None try: while not retval: @@ -392,7 +437,7 @@ def readfile(self, nlines=None): self.findnext() retval = None if self._npings is not None and self.c >= self._npings: - if 'microstrain' in self._dtypes: + if "microstrain" in self._dtypes: try: self.readnext() except: @@ -400,10 +445,10 @@ def readfile(self, nlines=None): break except EOFError: if self.debug: - logging.info(' end of file at {} bytes.'.format(self.pos)) + logging.info(" end of file at {} bytes.".format(self.pos)) else: if self.debug: - logging.info(' stopped at {} bytes.'.format(self.pos)) + logging.info(" stopped at {} bytes.".format(self.pos)) self.c -= 1 _crop_data(self.data, slice(0, self.c), self.n_samp_guess) @@ -416,7 +461,7 @@ def findnextid(self, id): if nowid == 16: shift = 22 else: - sz = 2 * unpack(self.endian + 'H', self.read(2))[0] + sz = 2 * unpack(self.endian + "H", self.read(2))[0] shift = sz - 4 self.f.seek(shift, 1) return self.pos @@ -434,161 +479,195 @@ def code_spacing(self, searchcode, iternum=50): except EOFError: break if self.debug: - logging.info('p0={}, pos={}, i={}'.format(p0, self.pos, i)) + logging.info("p0={}, pos={}, i={}".format(p0, self.pos, i)) # Compute the average of the data size: return (self.pos - p0) / (i + 1) def checksum(self, byts): - """Perform a checksum on `byts` and read the checksum value. - """ + """Perform a checksum on `byts` and read the checksum value.""" if self.do_checksum: - if not np.sum(unpack(self.endian + str(int(1 + len(byts) / 2)) + 'H', - self._thisid_bytes + byts)) + \ - 46476 - unpack(self.endian + 'H', self.read(2)): - + if ( + not np.sum( + unpack( + self.endian + str(int(1 + len(byts) / 2)) + "H", + self._thisid_bytes + byts, + ) + ) + + 46476 + - unpack(self.endian + "H", self.read(2)) + ): raise Exception("CheckSum Failed at {}".format(self.pos)) else: self.f.seek(2, 1) - def read_user_cfg(self,): + def read_user_cfg( + self, + ): # ID: '0x00 = 00 if self.debug: - logging.info('Reading user configuration (0x00) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading user configuration (0x00) ping #{} @ {}...".format( + self.c, self.pos + ) + ) cfg_u = self.config byts = self.read(508) # the first two bytes are the size. - tmp = unpack(self.endian + - '2x18H6s4HI9H90H80s48xH50x6H4xH2x2H2xH30x8H', - byts) - cfg_u['usr'] = {} - cfg_u['adv'] = {} - cfg_u['awac'] = {} - - cfg_u['transmit_pulse_length_m'] = tmp[0] # counts - cfg_u['blank_dist'] = tmp[1] # overridden below - cfg_u['receive_length_m'] = tmp[2] # counts - cfg_u['time_between_pings'] = tmp[3] # counts - cfg_u['time_between_bursts'] = tmp[4] # counts - cfg_u['adv']['n_pings_per_burst'] = tmp[5] - cfg_u['awac']['avg_interval'] = tmp[6] - cfg_u['usr']['n_beams'] = tmp[7] + tmp = unpack(self.endian + "2x18H6s4HI9H90H80s48xH50x6H4xH2x2H2xH30x8H", byts) + cfg_u["usr"] = {} + cfg_u["adv"] = {} + cfg_u["awac"] = {} + + cfg_u["transmit_pulse_length_m"] = tmp[0] # counts + cfg_u["blank_dist"] = tmp[1] # overridden below + cfg_u["receive_length_m"] = tmp[2] # counts + cfg_u["time_between_pings"] = tmp[3] # counts + cfg_u["time_between_bursts"] = tmp[4] # counts + cfg_u["adv"]["n_pings_per_burst"] = tmp[5] + cfg_u["awac"]["avg_interval"] = tmp[6] + cfg_u["usr"]["n_beams"] = tmp[7] TimCtrlReg = _int2binarray(tmp[8], 16).astype(int) # From the nortek system integrator manual # (note: bit numbering is zero-based) - cfg_u['usr']['profile_mode'] = [ - 'single', 'continuous'][TimCtrlReg[1]] - cfg_u['usr']['burst_mode'] = str(bool(~TimCtrlReg[2])) - cfg_u['usr']['power_level'] = TimCtrlReg[5] + 2 * TimCtrlReg[6] + 1 - cfg_u['usr']['sync_out_pos'] = ['middle', 'end', ][TimCtrlReg[7]] - cfg_u['usr']['sample_on_sync'] = str(bool(TimCtrlReg[8])) - cfg_u['usr']['start_on_sync'] = str(bool(TimCtrlReg[9])) - cfg_u['PwrCtrlReg'] = _int2binarray(tmp[9], 16) - cfg_u['A1'] = tmp[10] - cfg_u['B0'] = tmp[11] - cfg_u['B1'] = tmp[12] - cfg_u['usr']['compass_update_rate'] = tmp[13] - cfg_u['coord_sys_axes'] = ['ENU', 'XYZ', 'beam'][tmp[14]] - cfg_u['usr']['n_bins'] = tmp[15] - cfg_u['bin_length'] = tmp[16] - cfg_u['burst_interval'] = tmp[17] - cfg_u['usr']['deployment_name'] = tmp[18].partition(b'\x00')[ - 0].decode('utf-8') - cfg_u['usr']['wrap_mode'] = str(bool(tmp[19])) - cfg_u['deployment_time'] = np.array(tmp[20:23]) - cfg_u['diagnotics_interval'] = tmp[23] + cfg_u["usr"]["profile_mode"] = ["single", "continuous"][TimCtrlReg[1]] + cfg_u["usr"]["burst_mode"] = str(bool(~TimCtrlReg[2])) + cfg_u["usr"]["power_level"] = TimCtrlReg[5] + 2 * TimCtrlReg[6] + 1 + cfg_u["usr"]["sync_out_pos"] = [ + "middle", + "end", + ][TimCtrlReg[7]] + cfg_u["usr"]["sample_on_sync"] = str(bool(TimCtrlReg[8])) + cfg_u["usr"]["start_on_sync"] = str(bool(TimCtrlReg[9])) + cfg_u["PwrCtrlReg"] = _int2binarray(tmp[9], 16) + cfg_u["A1"] = tmp[10] + cfg_u["B0"] = tmp[11] + cfg_u["B1"] = tmp[12] + cfg_u["usr"]["compass_update_rate"] = tmp[13] + cfg_u["coord_sys_axes"] = ["ENU", "XYZ", "beam"][tmp[14]] + cfg_u["usr"]["n_bins"] = tmp[15] + cfg_u["bin_length"] = tmp[16] + cfg_u["burst_interval"] = tmp[17] + cfg_u["usr"]["deployment_name"] = tmp[18].partition(b"\x00")[0].decode("utf-8") + cfg_u["usr"]["wrap_mode"] = str(bool(tmp[19])) + cfg_u["deployment_time"] = np.array(tmp[20:23]) + cfg_u["diagnotics_interval"] = tmp[23] Mode0 = _int2binarray(tmp[24], 16) - cfg_u['user_soundspeed_adj_factor'] = tmp[25] - cfg_u['n_samples_diag'] = tmp[26] - cfg_u['n_beams_cells_diag'] = tmp[27] - cfg_u['n_pings_diag_wave'] = tmp[28] + cfg_u["user_soundspeed_adj_factor"] = tmp[25] + cfg_u["n_samples_diag"] = tmp[26] + cfg_u["n_beams_cells_diag"] = tmp[27] + cfg_u["n_pings_diag_wave"] = tmp[28] ModeTest = _int2binarray(tmp[29], 16) - cfg_u['usr']['analog_in'] = tmp[30] + cfg_u["usr"]["analog_in"] = tmp[30] sfw_ver = str(tmp[31]) - cfg_u['usr']['software_version'] = sfw_ver[0] + \ - '.'+sfw_ver[1:3]+'.'+sfw_ver[3:] - cfg_u['usr']['salinity'] = tmp[32]/10 - cfg_u['VelAdjTable'] = np.array(tmp[33:123]) - cfg_u['usr']['comments'] = tmp[123].partition(b'\x00')[ - 0].decode('utf-8') - cfg_u['awac']['wave_processing_method'] = [ - 'PUV', 'SUV', 'MLM', 'MLMST', 'None'][tmp[124]] + cfg_u["usr"]["software_version"] = ( + sfw_ver[0] + "." + sfw_ver[1:3] + "." + sfw_ver[3:] + ) + cfg_u["usr"]["salinity"] = tmp[32] / 10 + cfg_u["VelAdjTable"] = np.array(tmp[33:123]) + cfg_u["usr"]["comments"] = tmp[123].partition(b"\x00")[0].decode("utf-8") + cfg_u["awac"]["wave_processing_method"] = [ + "PUV", + "SUV", + "MLM", + "MLMST", + "None", + ][tmp[124]] Mode1 = _int2binarray(tmp[125], 16) - cfg_u['awac']['prc_dyn_wave_cell_pos'] = int(tmp[126]/32767 * 100) - cfg_u['wave_transmit_pulse'] = tmp[127] - cfg_u['wave_blank_dist'] = tmp[128] - cfg_u['awac']['wave_cell_size'] = tmp[129] - cfg_u['awac']['n_samples_wave'] = tmp[130] - cfg_u['n_burst'] = tmp[131] - cfg_u['analog_out_scale'] = tmp[132] - cfg_u['corr_thresh'] = tmp[133] - cfg_u['transmit_pulse_lag2'] = tmp[134] # counts - cfg_u['QualConst'] = np.array(tmp[135:143]) + cfg_u["awac"]["prc_dyn_wave_cell_pos"] = int(tmp[126] / 32767 * 100) + cfg_u["wave_transmit_pulse"] = tmp[127] + cfg_u["wave_blank_dist"] = tmp[128] + cfg_u["awac"]["wave_cell_size"] = tmp[129] + cfg_u["awac"]["n_samples_wave"] = tmp[130] + cfg_u["n_burst"] = tmp[131] + cfg_u["analog_out_scale"] = tmp[132] + cfg_u["corr_thresh"] = tmp[133] + cfg_u["transmit_pulse_lag2"] = tmp[134] # counts + cfg_u["QualConst"] = np.array(tmp[135:143]) self.checksum(byts) - cfg_u['usr']['user_specified_sound_speed'] = str(Mode0[0]) - cfg_u['awac']['wave_mode'] = ['Disabled', 'Enabled'][int(Mode0[1])] - cfg_u['usr']['analog_output'] = str(Mode0[2]) - cfg_u['usr']['output_format'] = ['Vector', 'ADV'][int(Mode0[3])] # noqa - cfg_u['vel_scale_mm'] = [1, 0.1][int(Mode0[4])] - cfg_u['usr']['serial_output'] = str(Mode0[5]) - cfg_u['reserved_EasyQ'] = str(Mode0[6]) - cfg_u['usr']['power_output_analog'] = str(Mode0[8]) - cfg_u['mode_test_use_DSP'] = str(ModeTest[0]) - cfg_u['mode_test_filter_output'] = ['total', 'correction_only'][int(ModeTest[1])] # noqa - cfg_u['awac']['wave_fs'] = ['1 Hz', '2 Hz'][int(Mode1[0])] - cfg_u['awac']['wave_cell_position'] = ['fixed', 'dynamic'][int(Mode1[1])] # noqa - cfg_u['awac']['type_wave_cell_pos'] = ['pct_of_mean_pressure', 'pct_of_min_re'][int(Mode1[2])] # noqa - - def read_head_cfg(self,): + cfg_u["usr"]["user_specified_sound_speed"] = str(Mode0[0]) + cfg_u["awac"]["wave_mode"] = ["Disabled", "Enabled"][int(Mode0[1])] + cfg_u["usr"]["analog_output"] = str(Mode0[2]) + cfg_u["usr"]["output_format"] = ["Vector", "ADV"][int(Mode0[3])] # noqa + cfg_u["vel_scale_mm"] = [1, 0.1][int(Mode0[4])] + cfg_u["usr"]["serial_output"] = str(Mode0[5]) + cfg_u["reserved_EasyQ"] = str(Mode0[6]) + cfg_u["usr"]["power_output_analog"] = str(Mode0[8]) + cfg_u["mode_test_use_DSP"] = str(ModeTest[0]) + cfg_u["mode_test_filter_output"] = ["total", "correction_only"][ + int(ModeTest[1]) + ] # noqa + cfg_u["awac"]["wave_fs"] = ["1 Hz", "2 Hz"][int(Mode1[0])] + cfg_u["awac"]["wave_cell_position"] = ["fixed", "dynamic"][ + int(Mode1[1]) + ] # noqa + cfg_u["awac"]["type_wave_cell_pos"] = ["pct_of_mean_pressure", "pct_of_min_re"][ + int(Mode1[2]) + ] # noqa + + def read_head_cfg( + self, + ): # ID: '0x04 = 04 if self.debug: - logging.info('Reading head configuration (0x04) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading head configuration (0x04) ping #{} @ {}...".format( + self.c, self.pos + ) + ) cfg = self.config - cfg['head'] = {} + cfg["head"] = {} byts = self.read(220) - tmp = unpack(self.endian + '2x3H12s176s22sH', byts) + tmp = unpack(self.endian + "2x3H12s176s22sH", byts) head_config = _int2binarray(tmp[0], 16).astype(int) - cfg['head']['pressure_sensor'] = ['no', 'yes'][head_config[0]] - cfg['head']['compass'] = ['no', 'yes'][head_config[1]] - cfg['head']['tilt_sensor'] = ['no', 'yes'][head_config[2]] - cfg['head']['carrier_freq_kHz'] = tmp[1] - cfg['beam2inst_orientmat'] = np.array( - unpack(self.endian + '9h', tmp[4][8:26])).reshape(3, 3) / 4096. + cfg["head"]["pressure_sensor"] = ["no", "yes"][head_config[0]] + cfg["head"]["compass"] = ["no", "yes"][head_config[1]] + cfg["head"]["tilt_sensor"] = ["no", "yes"][head_config[2]] + cfg["head"]["carrier_freq_kHz"] = tmp[1] + cfg["beam2inst_orientmat"] = ( + np.array(unpack(self.endian + "9h", tmp[4][8:26])).reshape(3, 3) / 4096.0 + ) self.checksum(byts) - def read_hw_cfg(self,): + def read_hw_cfg( + self, + ): # ID 0x05 = 05 if self.debug: - logging.info('Reading hardware configuration (0x05) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading hardware configuration (0x05) ping #{} @ {}...".format( + self.c, self.pos + ) + ) cfg_hw = self.config - cfg_hw['hdw'] = {} + cfg_hw["hdw"] = {} byts = self.read(44) - tmp = unpack(self.endian + '2x14s6H12x4s', byts) - cfg_hw['hdw']['serial_number'] = tmp[0][:8].decode('utf-8') - cfg_hw['ProLogID'] = unpack('B', tmp[0][8:9])[0] - cfg_hw['hdw']['ProLogFWver'] = tmp[0][10:].decode('utf-8') - cfg_hw['board_config'] = tmp[1] - cfg_hw['board_freq'] = tmp[2] - cfg_hw['hdw']['PIC_version'] = tmp[3] - cfg_hw['hdw']['hardware_rev'] = tmp[4] - cfg_hw['hdw']['recorder_size_bytes'] = tmp[5] * 65536 + tmp = unpack(self.endian + "2x14s6H12x4s", byts) + cfg_hw["hdw"]["serial_number"] = tmp[0][:8].decode("utf-8") + cfg_hw["ProLogID"] = unpack("B", tmp[0][8:9])[0] + cfg_hw["hdw"]["ProLogFWver"] = tmp[0][10:].decode("utf-8") + cfg_hw["board_config"] = tmp[1] + cfg_hw["board_freq"] = tmp[2] + cfg_hw["hdw"]["PIC_version"] = tmp[3] + cfg_hw["hdw"]["hardware_rev"] = tmp[4] + cfg_hw["hdw"]["recorder_size_bytes"] = tmp[5] * 65536 status = _int2binarray(tmp[6], 16).astype(int) - cfg_hw['hdw']['vel_range'] = ['normal', 'high'][status[0]] - cfg_hw['hdw']['firmware_version'] = tmp[7].decode('utf-8') + cfg_hw["hdw"]["vel_range"] = ["normal", "high"][status[0]] + cfg_hw["hdw"]["firmware_version"] = tmp[7].decode("utf-8") self.checksum(byts) def rd_time(self, strng): - """Read the time from the first 6bytes of the input string. - """ - min, sec, day, hour, year, month = unpack('BBBBBB', strng[:6]) - return time.date2epoch(datetime(time._fullyear(_bcd2char(year)), - _bcd2char(month), - _bcd2char(day), - _bcd2char(hour), - _bcd2char(min), - _bcd2char(sec)))[0] + """Read the time from the first 6bytes of the input string.""" + min, sec, day, hour, year, month = unpack("BBBBBB", strng[:6]) + return time.date2epoch( + datetime( + time._fullyear(_bcd2char(year)), + _bcd2char(month), + _bcd2char(day), + _bcd2char(hour), + _bcd2char(min), + _bcd2char(sec), + ) + )[0] def _init_data(self, vardict): """Initialize the data object according to vardict. @@ -600,9 +679,9 @@ def _init_data(self, vardict): how to initialize each data variable. """ - shape_args = {'n': self.n_samp_guess} + shape_args = {"n": self.n_samp_guess} try: - shape_args['nbins'] = self.config['usr']['n_bins'] + shape_args["nbins"] = self.config["usr"]["n_bins"] except KeyError: pass for nm, va in list(vardict.items()): @@ -613,70 +692,82 @@ def _init_data(self, vardict): else: if nm not in self.data[va.group]: self.data[va.group][nm] = va._empty_array(**shape_args) - self.data['units'][nm] = va.units - self.data['long_name'][nm] = va.long_name + self.data["units"][nm] = va.units + self.data["long_name"][nm] = va.long_name if va.standard_name: - self.data['standard_name'][nm] = va.standard_name + self.data["standard_name"][nm] = va.standard_name - def read_vec_data(self,): + def read_vec_data( + self, + ): # ID: 0x10 = 16 c = self.c dat = self.data if self.debug: - logging.info('Reading vector velocity data (0x10) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading vector velocity data (0x10) ping #{} @ {}...".format( + self.c, self.pos + ) + ) - if 'vel' not in dat['data_vars']: + if "vel" not in dat["data_vars"]: self._init_data(nortek_defs.vec_data) - self._dtypes += ['vec_data'] + self._dtypes += ["vec_data"] byts = self.read(20) - ds = dat['sys'] - dv = dat['data_vars'] - (ds['AnaIn2LSB'][c], - ds['Count'][c], - dv['PressureMSB'][c], - ds['AnaIn2MSB'][c], - dv['PressureLSW'][c], - ds['AnaIn1'][c], - dv['vel'][0, c], - dv['vel'][1, c], - dv['vel'][2, c], - dv['amp'][0, c], - dv['amp'][1, c], - dv['amp'][2, c], - dv['corr'][0, c], - dv['corr'][1, c], - dv['corr'][2, c]) = unpack(self.endian + '4B2H3h6B', byts) + ds = dat["sys"] + dv = dat["data_vars"] + ( + ds["AnaIn2LSB"][c], + ds["Count"][c], + dv["PressureMSB"][c], + ds["AnaIn2MSB"][c], + dv["PressureLSW"][c], + ds["AnaIn1"][c], + dv["vel"][0, c], + dv["vel"][1, c], + dv["vel"][2, c], + dv["amp"][0, c], + dv["amp"][1, c], + dv["amp"][2, c], + dv["corr"][0, c], + dv["corr"][1, c], + dv["corr"][2, c], + ) = unpack(self.endian + "4B2H3h6B", byts) self.checksum(byts) self.c += 1 - def read_vec_checkdata(self,): + def read_vec_checkdata( + self, + ): # ID: 0x07 = 07 if self.debug: - logging.info('Reading vector check data (0x07) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading vector check data (0x07) ping #{} @ {}...".format( + self.c, self.pos + ) + ) byts0 = self.read(6) checknow = {} - tmp = unpack(self.endian + '2x2H', byts0) # The first two are size. - checknow['Samples'] = tmp[0] - n = checknow['Samples'] - checknow['First_samp'] = tmp[1] - checknow['Amp1'] = tbx._nans(n, dtype=np.uint8) + 8 - checknow['Amp2'] = tbx._nans(n, dtype=np.uint8) + 8 - checknow['Amp3'] = tbx._nans(n, dtype=np.uint8) + 8 + tmp = unpack(self.endian + "2x2H", byts0) # The first two are size. + checknow["Samples"] = tmp[0] + n = checknow["Samples"] + checknow["First_samp"] = tmp[1] + checknow["Amp1"] = tbx._nans(n, dtype=np.uint8) + 8 + checknow["Amp2"] = tbx._nans(n, dtype=np.uint8) + 8 + checknow["Amp3"] = tbx._nans(n, dtype=np.uint8) + 8 byts1 = self.read(3 * n) - tmp = unpack(self.endian + (3 * n * 'B'), byts1) - for idx, nm in enumerate(['Amp1', 'Amp2', 'Amp3']): - checknow[nm] = np.array(tmp[idx * n:(idx + 1) * n], dtype=np.uint8) + tmp = unpack(self.endian + (3 * n * "B"), byts1) + for idx, nm in enumerate(["Amp1", "Amp2", "Amp3"]): + checknow[nm] = np.array(tmp[idx * n : (idx + 1) * n], dtype=np.uint8) self.checksum(byts0 + byts1) - if 'checkdata' not in self.config: - self.config['checkdata'] = checknow + if "checkdata" not in self.config: + self.config["checkdata"] = checknow else: - if not isinstance(self.config['checkdata'], list): - self.config['checkdata'] = [self.config['checkdata']] - self.config['checkdata'] += [checknow] + if not isinstance(self.config["checkdata"], list): + self.config["checkdata"] = [self.config["checkdata"]] + self.config["checkdata"] += [checknow] def _sci_data(self, vardict): """ @@ -700,92 +791,112 @@ def _sci_data(self, vardict): if retval is not None: dat[nm] = retval - def sci_vec_data(self,): + def sci_vec_data( + self, + ): self._sci_data(nortek_defs.vec_data) dat = self.data - dat['data_vars']['pressure'] = ( - dat['data_vars']['PressureMSB'].astype('float32') * 65536 + - dat['data_vars']['PressureLSW'].astype('float32')) / 1000. - dat['units']['pressure'] = 'dbar' - dat['long_name']['pressure'] = 'Pressure' - dat['standard_name']['pressure'] = 'sea_water_pressure' + dat["data_vars"]["pressure"] = ( + dat["data_vars"]["PressureMSB"].astype("float32") * 65536 + + dat["data_vars"]["PressureLSW"].astype("float32") + ) / 1000.0 + dat["units"]["pressure"] = "dbar" + dat["long_name"]["pressure"] = "Pressure" + dat["standard_name"]["pressure"] = "sea_water_pressure" - dat['data_vars'].pop('PressureMSB') - dat['data_vars'].pop('PressureLSW') + dat["data_vars"].pop("PressureMSB") + dat["data_vars"].pop("PressureLSW") # Apply velocity scaling (1 or 0.1) - dat['data_vars']['vel'] *= self.config['vel_scale_mm'] + dat["data_vars"]["vel"] *= self.config["vel_scale_mm"] - def read_vec_hdr(self,): + def read_vec_hdr( + self, + ): # ID: '0x12 = 18 if self.debug: - logging.info('Reading vector header data (0x12) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading vector header data (0x12) ping #{} @ {}...".format( + self.c, self.pos + ) + ) byts = self.read(38) # The first two are size, the next 6 are time. - tmp = unpack(self.endian + '8xH7B21x', byts) + tmp = unpack(self.endian + "8xH7B21x", byts) hdrnow = {} - hdrnow['time'] = self.rd_time(byts[2:8]) - hdrnow['NRecords'] = tmp[0] - hdrnow['Noise1'] = tmp[1] - hdrnow['Noise2'] = tmp[2] - hdrnow['Noise3'] = tmp[3] - hdrnow['Spare0'] = byts[13:14].decode('utf-8') - hdrnow['Corr1'] = tmp[5] - hdrnow['Corr2'] = tmp[6] - hdrnow['Corr3'] = tmp[7] - hdrnow['Spare1'] = byts[17:].decode('utf-8') + hdrnow["time"] = self.rd_time(byts[2:8]) + hdrnow["NRecords"] = tmp[0] + hdrnow["Noise1"] = tmp[1] + hdrnow["Noise2"] = tmp[2] + hdrnow["Noise3"] = tmp[3] + hdrnow["Spare0"] = byts[13:14].decode("utf-8") + hdrnow["Corr1"] = tmp[5] + hdrnow["Corr2"] = tmp[6] + hdrnow["Corr3"] = tmp[7] + hdrnow["Spare1"] = byts[17:].decode("utf-8") self.checksum(byts) - if 'data_header' not in self.config: - self.config['data_header'] = hdrnow + if "data_header" not in self.config: + self.config["data_header"] = hdrnow else: - if not isinstance(self.config['data_header'], list): - self.config['data_header'] = [self.config['data_header']] - self.config['data_header'] += [hdrnow] + if not isinstance(self.config["data_header"], list): + self.config["data_header"] = [self.config["data_header"]] + self.config["data_header"] += [hdrnow] - def read_vec_sysdata(self,): + def read_vec_sysdata( + self, + ): # ID: 0x11 = 17 c = self.c if self.debug: - logging.info('Reading vector system data (0x11) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading vector system data (0x11) ping #{} @ {}...".format( + self.c, self.pos + ) + ) dat = self.data - if self._lastread[:2] == ['vec_checkdata', 'vec_hdr', ]: + if self._lastread[:2] == [ + "vec_checkdata", + "vec_hdr", + ]: self.burst_start[c] = True - if 'time' not in dat['coords']: + if "time" not in dat["coords"]: self._init_data(nortek_defs.vec_sysdata) - self._dtypes += ['vec_sysdata'] + self._dtypes += ["vec_sysdata"] byts = self.read(24) # The first two are size (skip them). - dat['coords']['time'][c] = self.rd_time(byts[2:8]) - ds = dat['sys'] - dv = dat['data_vars'] - (dv['batt'][c], - dv['c_sound'][c], - dv['heading'][c], - dv['pitch'][c], - dv['roll'][c], - dv['temp'][c], - dv['error'][c], - dv['status'][c], - ds['AnaIn'][c]) = unpack(self.endian + '2H3hH2BH', byts[8:]) + dat["coords"]["time"][c] = self.rd_time(byts[2:8]) + ds = dat["sys"] + dv = dat["data_vars"] + ( + dv["batt"][c], + dv["c_sound"][c], + dv["heading"][c], + dv["pitch"][c], + dv["roll"][c], + dv["temp"][c], + dv["error"][c], + dv["status"][c], + ds["AnaIn"][c], + ) = unpack(self.endian + "2H3hH2BH", byts[8:]) self.checksum(byts) - def sci_vec_sysdata(self,): + def sci_vec_sysdata( + self, + ): """Translate the data in the vec_sysdata structure into scientific units. """ dat = self.data - fs = dat['attrs']['fs'] + fs = dat["attrs"]["fs"] self._sci_data(nortek_defs.vec_sysdata) - t = dat['coords']['time'] - dv = dat['data_vars'] - dat['sys']['_sysi'] = ~np.isnan(t) + t = dat["coords"]["time"] + dv = dat["data_vars"] + dat["sys"]["_sysi"] = ~np.isnan(t) # These are the indices in the sysdata variables # that are not interpolated. - nburst = self.config['n_burst'] - dv['orientation_down'] = tbx._nans(len(t), dtype='bool') + nburst = self.config["n_burst"] + dv["orientation_down"] = tbx._nans(len(t), dtype="bool") if nburst == 0: num_bursts = 1 nburst = len(t) @@ -793,7 +904,7 @@ def sci_vec_sysdata(self,): num_bursts = int(len(t) // nburst + 1) for nb in range(num_bursts): iburst = slice(nb * nburst, (nb + 1) * nburst) - sysi = dat['sys']['_sysi'][iburst] + sysi = dat["sys"]["_sysi"][iburst] if len(sysi) == 0: break # Skip the first entry for the interpolation process @@ -803,233 +914,253 @@ def sci_vec_sysdata(self,): p = np.poly1d(np.polyfit(inds, t[iburst][inds], 1)) t[iburst] = p(arng) elif len(inds) == 1: - t[iburst] = ((arng - inds[0]) / (fs * 3600 * 24) + - t[iburst][inds[0]]) + t[iburst] = (arng - inds[0]) / (fs * 3600 * 24) + t[iburst][inds[0]] else: - t[iburst] = (t[iburst][0] + arng / (fs * 24 * 3600)) + t[iburst] = t[iburst][0] + arng / (fs * 24 * 3600) - tmpd = tbx._nans_like(dv['heading'][iburst]) + tmpd = tbx._nans_like(dv["heading"][iburst]) # The first status bit should be the orientation. - tmpd[sysi] = dv['status'][iburst][sysi] & 1 + tmpd[sysi] = dv["status"][iburst][sysi] & 1 tbx.fillgaps(tmpd, extrapFlg=True) tmpd = np.nan_to_num(tmpd, nan=0) # nans in pitch roll heading slope = np.diff(tmpd) tmpd[1:][slope < 0] = 1 tmpd[:-1][slope > 0] = 0 - dv['orientation_down'][iburst] = tmpd.astype('bool') - tbx.interpgaps(dv['batt'], t) - tbx.interpgaps(dv['c_sound'], t) - tbx.interpgaps(dv['heading'], t) - tbx.interpgaps(dv['pitch'], t) - tbx.interpgaps(dv['roll'], t) - tbx.interpgaps(dv['temp'], t) - - def read_microstrain(self,): - """Read ADV microstrain sensor (IMU) data - """ + dv["orientation_down"][iburst] = tmpd.astype("bool") + tbx.interpgaps(dv["batt"], t) + tbx.interpgaps(dv["c_sound"], t) + tbx.interpgaps(dv["heading"], t) + tbx.interpgaps(dv["pitch"], t) + tbx.interpgaps(dv["roll"], t) + tbx.interpgaps(dv["temp"], t) + + def read_microstrain( + self, + ): + """Read ADV microstrain sensor (IMU) data""" + def update_defs(dat, mag=False, orientmat=False): - imu_data = {'accel': ['m s-2', 'Acceleration'], - 'angrt': ['rad s-1', 'Angular Velocity'], - 'mag': ['gauss', 'Compass'], - 'orientmat': ['1', 'Orientation Matrix']} + imu_data = { + "accel": ["m s-2", "Acceleration"], + "angrt": ["rad s-1", "Angular Velocity"], + "mag": ["gauss", "Compass"], + "orientmat": ["1", "Orientation Matrix"], + } for ky in imu_data: - dat['units'].update({ky: imu_data[ky][0]}) - dat['long_name'].update({ky: imu_data[ky][1]}) + dat["units"].update({ky: imu_data[ky][0]}) + dat["long_name"].update({ky: imu_data[ky][1]}) if not mag: - dat['units'].pop('mag') - dat['long_name'].pop('mag') + dat["units"].pop("mag") + dat["long_name"].pop("mag") if not orientmat: - dat['units'].pop('orientmat') - dat['long_name'].pop('orientmat') + dat["units"].pop("orientmat") + dat["long_name"].pop("orientmat") # 0x71 = 113 if self.c == 0: - logging.warning('First "microstrain data" block ' - 'is before first "vector system data" block.') + logging.warning( + 'First "microstrain data" block ' + 'is before first "vector system data" block.' + ) else: self.c -= 1 if self.debug: - logging.info('Reading vector microstrain data (0x71) ping #{} @ {}...' - .format(self.c, self.pos)) + logging.info( + "Reading vector microstrain data (0x71) ping #{} @ {}...".format( + self.c, self.pos + ) + ) byts0 = self.read(4) # The first 2 are the size, 3rd is count, 4th is the id. - ahrsid = unpack(self.endian + '3xB', byts0)[0] - if hasattr(self, '_ahrsid') and self._ahrsid != ahrsid: - logging.warning('AHRS_ID changes mid-file!') + ahrsid = unpack(self.endian + "3xB", byts0)[0] + if hasattr(self, "_ahrsid") and self._ahrsid != ahrsid: + logging.warning("AHRS_ID changes mid-file!") if ahrsid in [195, 204, 210, 211]: self._ahrsid = ahrsid c = self.c dat = self.data - dv = dat['data_vars'] - da = dat['attrs'] - da['has_imu'] = 1 # logical - if 'accel' not in dv: - self._dtypes += ['microstrain'] + dv = dat["data_vars"] + da = dat["attrs"] + da["has_imu"] = 1 # logical + if "accel" not in dv: + self._dtypes += ["microstrain"] if ahrsid == 195: - self._orient_dnames = ['accel', 'angrt', 'orientmat'] - dv['accel'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - dv['angrt'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - dv['orientmat'] = tbx._nans((3, 3, self.n_samp_guess), - dtype=np.float32) - rv = ['accel', 'angrt'] - if not all(x in da['rotate_vars'] for x in rv): - da['rotate_vars'].extend(rv) + self._orient_dnames = ["accel", "angrt", "orientmat"] + dv["accel"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + dv["angrt"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + dv["orientmat"] = tbx._nans((3, 3, self.n_samp_guess), dtype=np.float32) + rv = ["accel", "angrt"] + if not all(x in da["rotate_vars"] for x in rv): + da["rotate_vars"].extend(rv) update_defs(dat, mag=False, orientmat=True) if ahrsid in [204, 210]: - self._orient_dnames = ['accel', 'angrt', 'mag', 'orientmat'] - dv['accel'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - dv['angrt'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - dv['mag'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - rv = ['accel', 'angrt', 'mag'] - if not all(x in da['rotate_vars'] for x in rv): - da['rotate_vars'].extend(rv) + self._orient_dnames = ["accel", "angrt", "mag", "orientmat"] + dv["accel"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + dv["angrt"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + dv["mag"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + rv = ["accel", "angrt", "mag"] + if not all(x in da["rotate_vars"] for x in rv): + da["rotate_vars"].extend(rv) if ahrsid == 204: - dv['orientmat'] = tbx._nans((3, 3, self.n_samp_guess), - dtype=np.float32) + dv["orientmat"] = tbx._nans( + (3, 3, self.n_samp_guess), dtype=np.float32 + ) update_defs(dat, mag=True, orientmat=True) if ahrsid == 211: - self._orient_dnames = ['angrt', 'accel', 'mag'] - dv['angrt'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - dv['accel'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - dv['mag'] = tbx._nans((3, self.n_samp_guess), - dtype=np.float32) - rv = ['angrt', 'accel', 'mag'] - if not all(x in da['rotate_vars'] for x in rv): - da['rotate_vars'].extend(rv) + self._orient_dnames = ["angrt", "accel", "mag"] + dv["angrt"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + dv["accel"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + dv["mag"] = tbx._nans((3, self.n_samp_guess), dtype=np.float32) + rv = ["angrt", "accel", "mag"] + if not all(x in da["rotate_vars"] for x in rv): + da["rotate_vars"].extend(rv) update_defs(dat, mag=True, orientmat=False) - byts = '' + byts = "" if ahrsid == 195: # 0xc3 byts = self.read(64) - dt = unpack(self.endian + '6f9f4x', byts) - (dv['angrt'][:, c], - dv['accel'][:, c]) = (dt[0:3], dt[3:6],) - dv['orientmat'][:, :, c] = ((dt[6:9], dt[9:12], dt[12:15])) + dt = unpack(self.endian + "6f9f4x", byts) + (dv["angrt"][:, c], dv["accel"][:, c]) = ( + dt[0:3], + dt[3:6], + ) + dv["orientmat"][:, :, c] = (dt[6:9], dt[9:12], dt[12:15]) elif ahrsid == 204: # 0xcc byts = self.read(78) # This skips the "DWORD" (4 bytes) and the AHRS checksum # (2 bytes) - dt = unpack(self.endian + '18f6x', byts) - (dv['accel'][:, c], - dv['angrt'][:, c], - dv['mag'][:, c]) = (dt[0:3], dt[3:6], dt[6:9],) - dv['orientmat'][:, :, c] = ((dt[9:12], dt[12:15], dt[15:18])) + dt = unpack(self.endian + "18f6x", byts) + (dv["accel"][:, c], dv["angrt"][:, c], dv["mag"][:, c]) = ( + dt[0:3], + dt[3:6], + dt[6:9], + ) + dv["orientmat"][:, :, c] = (dt[9:12], dt[12:15], dt[15:18]) elif ahrsid == 211: byts = self.read(42) - dt = unpack(self.endian + '9f6x', byts) - (dv['angrt'][:, c], - dv['accel'][:, c], - dv['mag'][:, c]) = (dt[0:3], dt[3:6], dt[6:9],) + dt = unpack(self.endian + "9f6x", byts) + (dv["angrt"][:, c], dv["accel"][:, c], dv["mag"][:, c]) = ( + dt[0:3], + dt[3:6], + dt[6:9], + ) else: - logging.warning('Unrecognized IMU identifier: ' + str(ahrsid)) + logging.warning("Unrecognized IMU identifier: " + str(ahrsid)) self.f.seek(-2, 1) return 10 self.checksum(byts0 + byts) self.c += 1 # reset the increment - def sci_microstrain(self,): - """Rotate orientation data into ADV coordinate system. - """ + def sci_microstrain( + self, + ): + """Rotate orientation data into ADV coordinate system.""" # MS = MicroStrain - dv = self.data['data_vars'] + dv = self.data["data_vars"] for nm in self._orient_dnames: # Rotate the MS orientation data (in MS coordinate system) # to be consistent with the ADV coordinate system. # (x,y,-z)_ms = (z,y,x)_adv - (dv[nm][2], - dv[nm][0]) = (dv[nm][0], - -dv[nm][2].copy()) - if 'orientmat' in self._orient_dnames: + (dv[nm][2], dv[nm][0]) = (dv[nm][0], -dv[nm][2].copy()) + if "orientmat" in self._orient_dnames: # MS coordinate system is in North-East-Down (NED), # we want East-North-Up (ENU) - dv['orientmat'][:, 2] *= -1 - (dv['orientmat'][:, 0], - dv['orientmat'][:, 1]) = (dv['orientmat'][:, 1], - dv['orientmat'][:, 0].copy()) - if 'accel' in dv: + dv["orientmat"][:, 2] *= -1 + (dv["orientmat"][:, 0], dv["orientmat"][:, 1]) = ( + dv["orientmat"][:, 1], + dv["orientmat"][:, 0].copy(), + ) + if "accel" in dv: # This value comes from the MS 3DM-GX3 MIP manual - dv['accel'] *= 9.80665 + dv["accel"] *= 9.80665 if self._ahrsid in [195, 211]: # These are DAng and DVel, so we convert them to angrt, accel here - dv['angrt'] *= self.config['fs'] - dv['accel'] *= self.config['fs'] + dv["angrt"] *= self.config["fs"] + dv["accel"] *= self.config["fs"] - def read_awac_profile(self,): + def read_awac_profile( + self, + ): # ID: '0x20' = 32 dat = self.data if self.debug: - logging.info('Reading AWAC velocity data (0x20) ping #{} @ {}...' - .format(self.c, self.pos)) - nbins = self.config['usr']['n_bins'] - if 'temp' not in dat['data_vars']: + logging.info( + "Reading AWAC velocity data (0x20) ping #{} @ {}...".format( + self.c, self.pos + ) + ) + nbins = self.config["usr"]["n_bins"] + if "temp" not in dat["data_vars"]: self._init_data(nortek_defs.awac_profile) - self._dtypes += ['awac_profile'] + self._dtypes += ["awac_profile"] # Note: docs state there is 'fill' byte at the end, if nbins is odd, # but doesn't appear to be the case - n = self.config['usr']['n_beams'] - byts = self.read(116 + n*3 * nbins) + n = self.config["usr"]["n_beams"] + byts = self.read(116 + n * 3 * nbins) c = self.c - dat['coords']['time'][c] = self.rd_time(byts[2:8]) - ds = dat['sys'] - dv = dat['data_vars'] - (dv['error'][c], - ds['AnaIn1'][c], - dv['batt'][c], - dv['c_sound'][c], - dv['heading'][c], - dv['pitch'][c], - dv['roll'][c], - p_msb, - dv['status'][c], - p_lsw, - dv['temp'][c],) = unpack(self.endian + '7HBB2H', byts[8:28]) - dv['pressure'][c] = (65536 * p_msb + p_lsw) + dat["coords"]["time"][c] = self.rd_time(byts[2:8]) + ds = dat["sys"] + dv = dat["data_vars"] + ( + dv["error"][c], + ds["AnaIn1"][c], + dv["batt"][c], + dv["c_sound"][c], + dv["heading"][c], + dv["pitch"][c], + dv["roll"][c], + p_msb, + dv["status"][c], + p_lsw, + dv["temp"][c], + ) = unpack(self.endian + "7HBB2H", byts[8:28]) + dv["pressure"][c] = 65536 * p_msb + p_lsw # The nortek system integrator manual specifies an 88byte 'spare' # field, therefore we start at 116. - tmp = unpack(self.endian + str(n * nbins) + 'h' + - str(n * nbins) + 'B', byts[116:116 + n*3 * nbins]) + tmp = unpack( + self.endian + str(n * nbins) + "h" + str(n * nbins) + "B", + byts[116 : 116 + n * 3 * nbins], + ) for idx in range(n): - dv['vel'][idx, :, c] = tmp[idx * nbins: (idx + 1) * nbins] - dv['amp'][idx, :, c] = tmp[(idx + n) * nbins: (idx + n+1) * nbins] + dv["vel"][idx, :, c] = tmp[idx * nbins : (idx + 1) * nbins] + dv["amp"][idx, :, c] = tmp[(idx + n) * nbins : (idx + n + 1) * nbins] self.checksum(byts) self.c += 1 - def sci_awac_profile(self,): + def sci_awac_profile( + self, + ): self._sci_data(nortek_defs.awac_profile) # Calculate the ranges. - cs_coefs = {2000: 0.0239, - 1000: 0.0478, - 600: 0.0797, - 400: 0.1195} + cs_coefs = {2000: 0.0239, 1000: 0.0478, 600: 0.0797, 400: 0.1195} h_ang = 25 * (np.pi / 180) # Head angle is 25 degrees for all awacs. # Cell size - cs = round(float(self.config['bin_length']) / 256. * - cs_coefs[self.config['head']['carrier_freq_kHz']] * np.cos(h_ang), ndigits=2) + cs = round( + float(self.config["bin_length"]) + / 256.0 + * cs_coefs[self.config["head"]["carrier_freq_kHz"]] + * np.cos(h_ang), + ndigits=2, + ) # Blanking distance - bd = round(self.config['blank_dist'] * - 0.0229 * np.cos(h_ang) - cs, ndigits=2) + bd = round(self.config["blank_dist"] * 0.0229 * np.cos(h_ang) - cs, ndigits=2) - r = (np.float32(np.arange(self.config['usr']['n_bins']))+1)*cs + bd - self.data['coords']['range'] = r - self.data['attrs']['cell_size'] = cs - self.data['attrs']['blank_dist'] = bd + r = (np.float32(np.arange(self.config["usr"]["n_bins"])) + 1) * cs + bd + self.data["coords"]["range"] = r + self.data["attrs"]["cell_size"] = cs + self.data["attrs"]["blank_dist"] = bd - def dat2sci(self,): + def dat2sci( + self, + ): for nm in self._dtypes: - getattr(self, 'sci_' + nm)() - for nm in ['data_header', 'checkdata']: + getattr(self, "sci_" + nm)() + for nm in ["data_header", "checkdata"]: if nm in self.config and isinstance(self.config[nm], list): self.config[nm] = _recatenate(self.config[nm]) @@ -1049,12 +1180,11 @@ def _crop_data(obj, range, n_lastdim): def _recatenate(obj): out = type(obj[0])() for ky in list(obj[0].keys()): - if ky in ['__data_groups__', '_type']: + if ky in ["__data_groups__", "_type"]: continue val0 = obj[0][ky] if isinstance(val0, np.ndarray) and val0.size > 1: - out[ky] = np.concatenate([val[ky][..., None] for val in obj], - axis=-1) + out[ky] = np.concatenate([val[ky][..., None] for val in obj], axis=-1) else: out[ky] = np.array([val[ky] for val in obj]) return out diff --git a/mhkit/dolfyn/io/nortek2.py b/mhkit/dolfyn/io/nortek2.py index fe4e3c9e7..f00b7b460 100644 --- a/mhkit/dolfyn/io/nortek2.py +++ b/mhkit/dolfyn/io/nortek2.py @@ -14,8 +14,9 @@ from ..time import epoch2dt64, _fill_time_gaps -def read_signature(filename, userdata=True, nens=None, rebuild_index=False, - debug=False, **kwargs): +def read_signature( + filename, userdata=True, nens=None, rebuild_index=False, debug=False, **kwargs +): """ Read a Nortek Signature (.ad2cp) datafile @@ -26,7 +27,7 @@ def read_signature(filename, userdata=True, nens=None, rebuild_index=False, userdata : bool To search for and use a .userdata.json or not nens : None, int or 2-element tuple (start, stop) - Number of pings or ensembles to read from the file. + Number of pings or ensembles to read from the file. Default is None, read entire file rebuild_index : bool Force rebuild of dolfyn-written datafile index. Useful for code updates. @@ -45,11 +46,13 @@ def read_signature(filename, userdata=True, nens=None, rebuild_index=False, for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) filepath = Path(filename) - logfile = filepath.with_suffix('.dolfyn.log') - logging.basicConfig(filename=str(logfile), - filemode='w', - level=logging.NOTSET, - format='%(name)s - %(levelname)s - %(message)s') + logfile = filepath.with_suffix(".dolfyn.log") + logging.basicConfig( + filename=str(logfile), + filemode="w", + level=logging.NOTSET, + format="%(name)s - %(levelname)s - %(message)s", + ) if nens is None: nens = [0, None] @@ -61,7 +64,7 @@ def read_signature(filename, userdata=True, nens=None, rebuild_index=False, else: # passes: it's a list/tuple/array if n != 2: - raise TypeError('nens must be: None (), int, or len 2') + raise TypeError("nens must be: None (), int, or len 2") userdata = _find_userdata(filename, userdata) @@ -72,40 +75,43 @@ def read_signature(filename, userdata=True, nens=None, rebuild_index=False, _reduce(out) # Convert time to dt64 and fill gaps - coords = out['coords'] - t_list = [t for t in coords if 'time' in t] + coords = out["coords"] + t_list = [t for t in coords if "time" in t] for ky in t_list: tdat = coords[ky] tdat[tdat == 0] = np.NaN if np.isnan(tdat).any(): - tag = ky.lstrip('time') - warnings.warn("Zero/NaN values found in '{}'. Interpolating and " - "extrapolating them. To identify which values were filled later, " - "look for 0 values in 'status{}'".format(ky, tag)) - tdat = _fill_time_gaps(tdat, sample_rate_hz=out['attrs']['fs']) - coords[ky] = epoch2dt64(tdat).astype('datetime64[ns]') + tag = ky.lstrip("time") + warnings.warn( + "Zero/NaN values found in '{}'. Interpolating and " + "extrapolating them. To identify which values were filled later, " + "look for 0 values in 'status{}'".format(ky, tag) + ) + tdat = _fill_time_gaps(tdat, sample_rate_hz=out["attrs"]["fs"]) + coords[ky] = epoch2dt64(tdat).astype("datetime64[ns]") declin = None for nm in userdata: - if 'dec' in nm: + if "dec" in nm: declin = userdata[nm] else: - out['attrs'][nm] = userdata[nm] + out["attrs"][nm] = userdata[nm] # Create xarray dataset from upper level dictionary ds = _create_dataset(out) ds = _set_coords(ds, ref_frame=ds.coord_sys) - if 'orientmat' not in ds: - ds['orientmat'] = _euler2orient( - ds['time'], ds['heading'], ds['pitch'], ds['roll']) + if "orientmat" not in ds: + ds["orientmat"] = _euler2orient( + ds["time"], ds["heading"], ds["pitch"], ds["roll"] + ) if declin is not None: set_declination(ds, declin, inplace=True) # Convert config dictionary to json string for key in list(ds.attrs.keys()): - if 'config' in key: + if "config" in key: ds.attrs[key] = json.dumps(ds.attrs[key]) # Close handler @@ -117,29 +123,32 @@ def read_signature(filename, userdata=True, nens=None, rebuild_index=False, return ds -class _Ad2cpReader(): - def __init__(self, fname, endian=None, bufsize=None, rebuild_index=False, - debug=False): +class _Ad2cpReader: + def __init__( + self, fname, endian=None, bufsize=None, rebuild_index=False, debug=False + ): self.fname = fname self.debug = debug self._check_nortek(endian) self.f.seek(0, 2) # Seek to end self._eof = self.f.tell() - self._index = lib.get_index(fname, - reload=rebuild_index, - debug=debug) + self._index = lib.get_index(fname, reload=rebuild_index, debug=debug) self._reopen(bufsize) self.filehead_config = self._read_filehead_config_string() - self._ens_pos = self._index['pos'][lib._boolarray_firstensemble_ping( - self._index)] + self._ens_pos = self._index["pos"][ + lib._boolarray_firstensemble_ping(self._index) + ] self._lastblock_iswhole = self._calc_lastblock_iswhole() self._config = lib._calc_config(self._index) self._init_burst_readers() self.unknown_ID_count = {} - def _calc_lastblock_iswhole(self, ): - blocksize, blocksize_count = np.unique(np.diff(self._ens_pos), - return_counts=True) + def _calc_lastblock_iswhole( + self, + ): + blocksize, blocksize_count = np.unique( + np.diff(self._ens_pos), return_counts=True + ) standard_blocksize = blocksize[blocksize_count.argmax()] return (self._eof - self._ens_pos[-1]) == standard_blocksize @@ -147,15 +156,16 @@ def _check_nortek(self, endian): self._reopen(10) byts = self.f.read(2) if endian is None: - if unpack('<' + 'BB', byts) == (165, 10): - endian = '<' - elif unpack('>' + 'BB', byts) == (165, 10): - endian = '>' + if unpack("<" + "BB", byts) == (165, 10): + endian = "<" + elif unpack(">" + "BB", byts) == (165, 10): + endian = ">" else: raise Exception( "I/O error: could not determine the 'endianness' " "of the file. Are you sure this is a Nortek " - "AD2CP file?") + "AD2CP file?" + ) self.endian = endian def _reopen(self, bufsize=None): @@ -165,15 +175,17 @@ def _reopen(self, bufsize=None): self.f.close() except AttributeError: pass - self.f = open(_abspath(self.fname), 'rb', bufsize) + self.f = open(_abspath(self.fname), "rb", bufsize) - def _read_filehead_config_string(self, ): + def _read_filehead_config_string( + self, + ): hdr = self._read_hdr() out = {} - s_id, string = self._read_str(hdr['sz']) - string = string.decode('utf-8') + s_id, string = self._read_str(hdr["sz"]) + string = string.decode("utf-8") for ln in string.splitlines(): - ky, val = ln.split(',', 1) + ky, val = ln.split(",", 1) if ky in out: # There are more than one of this key if not isinstance(out[ky], list): @@ -185,11 +197,11 @@ def _read_filehead_config_string(self, ): out[ky] = val out2 = {} for ky in out: - if ky.startswith('GET'): + if ky.startswith("GET"): dat = out[ky] - d = out2[ky.lstrip('GET')] = dict() - for itm in dat.split(','): - k, val = itm.split('=') + d = out2[ky.lstrip("GET")] = dict() + for itm in dat.split(","): + k, val = itm.split("=") try: val = int(val) except ValueError: @@ -202,43 +214,49 @@ def _read_filehead_config_string(self, ): out2[ky] = out[ky] return out2 - def _init_burst_readers(self, ): + def _init_burst_readers( + self, + ): self._burst_readers = {} for rdr_id, cfg in self._config.items(): if rdr_id == 28: self._burst_readers[rdr_id] = defs._calc_echo_struct( - cfg['_config'], cfg['n_cells']) + cfg["_config"], cfg["n_cells"] + ) elif rdr_id == 23: self._burst_readers[rdr_id] = defs._calc_bt_struct( - cfg['_config'], cfg['n_beams']) + cfg["_config"], cfg["n_beams"] + ) else: self._burst_readers[rdr_id] = defs._calc_burst_struct( - cfg['_config'], cfg['n_beams'], cfg['n_cells']) + cfg["_config"], cfg["n_beams"], cfg["n_cells"] + ) def init_data(self, ens_start, ens_stop): outdat = {} nens = int(ens_stop - ens_start) - n26 = ((self._index['ID'] == 26) & - (self._index['ens'] >= ens_start) & - (self._index['ens'] < ens_stop)).sum() + n26 = ( + (self._index["ID"] == 26) + & (self._index["ens"] >= ens_start) + & (self._index["ens"] < ens_stop) + ).sum() for ky in self._burst_readers: if ky == 26: n = n26 - ens = np.zeros(n, dtype='uint32') + ens = np.zeros(n, dtype="uint32") else: - ens = np.arange(ens_start, - ens_stop).astype('uint32') + ens = np.arange(ens_start, ens_stop).astype("uint32") n = nens outdat[ky] = self._burst_readers[ky].init_data(n) - outdat[ky]['ensemble'] = ens - outdat[ky]['units'] = self._burst_readers[ky].data_units() - outdat[ky]['long_name'] = self._burst_readers[ky].data_longnames() - outdat[ky]['standard_name'] = self._burst_readers[ky].data_stdnames() + outdat[ky]["ensemble"] = ens + outdat[ky]["units"] = self._burst_readers[ky].data_units() + outdat[ky]["long_name"] = self._burst_readers[ky].data_longnames() + outdat[ky]["standard_name"] = self._burst_readers[ky].data_stdnames() return outdat def _read_hdr(self, do_cs=False): res = defs.header.read2dict(self.f, cs=do_cs) - if res['sync'] != 165: + if res["sync"] != 165: raise Exception("Out of sync!") return res @@ -262,8 +280,8 @@ def readfile(self, ens_start=0, ens_stop=None): ens_stop = int(ens_stop) nens = ens_stop - ens_start outdat = self.init_data(ens_start, ens_stop) - outdat['filehead_config'] = self.filehead_config - print('Reading file %s ...' % self.fname) + outdat["filehead_config"] = self.filehead_config + print("Reading file %s ..." % self.fname) c = 0 c26 = 0 self.f.seek(self._ens_pos[ens_start], 0) @@ -272,17 +290,19 @@ def readfile(self, ens_start=0, ens_stop=None): hdr = self._read_hdr() except IOError: return outdat - id = hdr['id'] + id = hdr["id"] if id in [21, 22, 23, 24, 28]: # vel, bt, vel_b5, echo self._read_burst(id, outdat[id], c) elif id in [26]: # alt_raw (altimeter burst) rdr = self._burst_readers[26] - if not hasattr(rdr, '_nsamp_index'): + if not hasattr(rdr, "_nsamp_index"): first_pass = True - tmp_idx = rdr._nsamp_index = rdr._names.index('altraw_nsamp') # noqa + tmp_idx = rdr._nsamp_index = rdr._names.index( + "altraw_nsamp" + ) # noqa shift = rdr._nsamp_shift = calcsize( - defs._format(rdr._format[:tmp_idx], - rdr._N[:tmp_idx])) + defs._format(rdr._format[:tmp_idx], rdr._N[:tmp_idx]) + ) else: first_pass = False tmp_idx = rdr._nsamp_index @@ -290,50 +310,53 @@ def readfile(self, ens_start=0, ens_stop=None): tmp_idx = tmp_idx + 2 # Don't add in-place self.f.seek(shift, 1) # Now read the num_samples - sz = unpack('= _posnow): + while self.f.tell() >= _posnow: c += 1 if c + ens_start + 1 >= nens_total: # Again check end of count list @@ -375,14 +397,22 @@ def sci_data(self, dat): continue rdr = self._burst_readers[id] rdr.sci_data(dnow) - if 'vel' in dnow and 'vel_scale' in dnow: - dnow['vel'] = (dnow['vel'] * - 10.0 ** dnow['vel_scale']).astype('float32') - - def __exit__(self, type, value, trace,): + if "vel" in dnow and "vel_scale" in dnow: + dnow["vel"] = (dnow["vel"] * 10.0 ** dnow["vel_scale"]).astype( + "float32" + ) + + def __exit__( + self, + type, + value, + trace, + ): self.f.close() - def __enter__(self,): + def __enter__( + self, + ): return self @@ -392,17 +422,30 @@ def _reorg(dat): (organized by ID), and combines them into a single dictionary. """ - outdat = {'data_vars': {}, 'coords': {}, 'attrs': {}, - 'units': {}, 'long_name': {}, 'standard_name': {}, - 'sys': {}, 'altraw': {}} - cfg = outdat['attrs'] - cfh = cfg['filehead_config'] = dat['filehead_config'] - cfg['inst_model'] = (cfh['ID'].split(',')[0][5:-1]) - cfg['inst_make'] = 'Nortek' - cfg['inst_type'] = 'ADCP' - - for id, tag in [(21, ''), (22, '_avg'), (23, '_bt'), - (24, '_b5'), (26, '_ast'), (28, '_echo')]: + outdat = { + "data_vars": {}, + "coords": {}, + "attrs": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + "sys": {}, + "altraw": {}, + } + cfg = outdat["attrs"] + cfh = cfg["filehead_config"] = dat["filehead_config"] + cfg["inst_model"] = cfh["ID"].split(",")[0][5:-1] + cfg["inst_make"] = "Nortek" + cfg["inst_type"] = "ADCP" + + for id, tag in [ + (21, ""), + (22, "_avg"), + (23, "_bt"), + (24, "_b5"), + (26, "_ast"), + (28, "_echo"), + ]: if id in [24, 26]: collapse_exclude = [0] else: @@ -410,141 +453,188 @@ def _reorg(dat): if id not in dat: continue dnow = dat[id] - outdat['units'].update(dnow['units']) - outdat['long_name'].update(dnow['long_name']) - for ky in dnow['units']: - if not dnow['standard_name'][ky]: - dnow['standard_name'].pop(ky) - outdat['standard_name'].update(dnow['standard_name']) - cfg['burst_config' + tag] = lib._headconfig_int2dict( - lib._collapse(dnow['config'], exclude=collapse_exclude, - name='config')) - outdat['coords']['time' + tag] = lib._calc_time( - dnow['year'] + 1900, - dnow['month'], - dnow['day'], - dnow['hour'], - dnow['minute'], - dnow['second'], - dnow['usec100'].astype('uint32') * 100) + outdat["units"].update(dnow["units"]) + outdat["long_name"].update(dnow["long_name"]) + for ky in dnow["units"]: + if not dnow["standard_name"][ky]: + dnow["standard_name"].pop(ky) + outdat["standard_name"].update(dnow["standard_name"]) + cfg["burst_config" + tag] = lib._headconfig_int2dict( + lib._collapse(dnow["config"], exclude=collapse_exclude, name="config") + ) + outdat["coords"]["time" + tag] = lib._calc_time( + dnow["year"] + 1900, + dnow["month"], + dnow["day"], + dnow["hour"], + dnow["minute"], + dnow["second"], + dnow["usec100"].astype("uint32") * 100, + ) tmp = lib._beams_cy_int2dict( - lib._collapse(dnow['beam_config'], exclude=collapse_exclude, - name='beam_config'), 21) - cfg['n_cells' + tag] = tmp['n_cells'] - cfg['coord_sys_axes' + tag] = tmp['cy'] - cfg['n_beams' + tag] = tmp['n_beams'] - cfg['ambig_vel' + - tag] = lib._collapse(dnow['ambig_vel'], name='ambig_vel') - - for ky in ['SerialNum', 'cell_size', 'blank_dist', 'nominal_corr', - 'power_level_dB']: - cfg[ky + tag] = lib._collapse(dnow[ky], - exclude=collapse_exclude, - name=ky) - - for ky in ['c_sound', 'temp', 'pressure', 'heading', 'pitch', 'roll', - 'mag', 'accel', 'batt', 'temp_clock', 'error', - 'status', 'ensemble', - ]: - outdat['data_vars'][ky + tag] = dnow[ky] - if 'ensemble' in ky: - outdat['data_vars'][ky + tag] += 1 - outdat['units'][ky + tag] = '#' - outdat['long_name'][ky + tag] = 'Ensemble Number' - outdat['standard_name'][ky + tag] = 'number_of_observations' - - for ky in ['vel', 'amp', 'corr', 'prcnt_gd', 'echo', 'dist', - 'orientmat', 'angrt', 'quaternions', 'ast_pressure', - 'alt_dist', 'alt_quality', 'alt_status', - 'ast_dist', 'ast_quality', 'ast_offset_time', - 'altraw_nsamp', 'altraw_dsamp', 'altraw_samp', - 'status0', 'fom', 'temp_press', 'press_std', - 'pitch_std', 'roll_std', 'heading_std', 'xmit_energy', - ]: + lib._collapse( + dnow["beam_config"], exclude=collapse_exclude, name="beam_config" + ), + 21, + ) + cfg["n_cells" + tag] = tmp["n_cells"] + cfg["coord_sys_axes" + tag] = tmp["cy"] + cfg["n_beams" + tag] = tmp["n_beams"] + cfg["ambig_vel" + tag] = lib._collapse(dnow["ambig_vel"], name="ambig_vel") + + for ky in [ + "SerialNum", + "cell_size", + "blank_dist", + "nominal_corr", + "power_level_dB", + ]: + cfg[ky + tag] = lib._collapse(dnow[ky], exclude=collapse_exclude, name=ky) + + for ky in [ + "c_sound", + "temp", + "pressure", + "heading", + "pitch", + "roll", + "mag", + "accel", + "batt", + "temp_clock", + "error", + "status", + "ensemble", + ]: + outdat["data_vars"][ky + tag] = dnow[ky] + if "ensemble" in ky: + outdat["data_vars"][ky + tag] += 1 + outdat["units"][ky + tag] = "#" + outdat["long_name"][ky + tag] = "Ensemble Number" + outdat["standard_name"][ky + tag] = "number_of_observations" + + for ky in [ + "vel", + "amp", + "corr", + "prcnt_gd", + "echo", + "dist", + "orientmat", + "angrt", + "quaternions", + "ast_pressure", + "alt_dist", + "alt_quality", + "alt_status", + "ast_dist", + "ast_quality", + "ast_offset_time", + "altraw_nsamp", + "altraw_dsamp", + "altraw_samp", + "status0", + "fom", + "temp_press", + "press_std", + "pitch_std", + "roll_std", + "heading_std", + "xmit_energy", + ]: if ky in dnow: - outdat['data_vars'][ky + tag] = dnow[ky] + outdat["data_vars"][ky + tag] = dnow[ky] # Move 'altimeter raw' data to its own down-sampled structure if 26 in dat: - ard = outdat['altraw'] - for ky in list(outdat['data_vars']): - if ky.endswith('_ast'): - grp = ky.split('.')[0] - if '.' in ky and grp not in ard: + ard = outdat["altraw"] + for ky in list(outdat["data_vars"]): + if ky.endswith("_ast"): + grp = ky.split(".")[0] + if "." in ky and grp not in ard: ard[grp] = {} - ard[ky.rstrip('_ast')] = outdat['data_vars'].pop(ky) + ard[ky.rstrip("_ast")] = outdat["data_vars"].pop(ky) # Read altimeter status - alt_status = lib._alt_status2data(outdat['data_vars']['alt_status']) + alt_status = lib._alt_status2data(outdat["data_vars"]["alt_status"]) for ky in alt_status: - outdat['attrs'][ky] = lib._collapse( - alt_status[ky].astype('uint8'), name=ky) - outdat['data_vars'].pop('alt_status') + outdat["attrs"][ky] = lib._collapse(alt_status[ky].astype("uint8"), name=ky) + outdat["data_vars"].pop("alt_status") # Power level index - power = {0: 'high', 1: 'med-high', 2: 'med-low', 3: 'low'} - outdat['attrs']['power_level_alt'] = power[outdat['attrs'].pop( - 'power_level_idx_alt')] + power = {0: "high", 1: "med-high", 2: "med-low", 3: "low"} + outdat["attrs"]["power_level_alt"] = power[ + outdat["attrs"].pop("power_level_idx_alt") + ] # Read status data - status0_vars = [x for x in outdat['data_vars'] if 'status0' in x] + status0_vars = [x for x in outdat["data_vars"] if "status0" in x] # Status data is the same across all tags, and there is always a 'status' and 'status0' status0_key = status0_vars[0] - status0_data = lib._status02data(outdat['data_vars'][status0_key]) - status_key = status0_key.replace('0', '') - status_data = lib._status2data(outdat['data_vars'][status_key]) + status0_data = lib._status02data(outdat["data_vars"][status0_key]) + status_key = status0_key.replace("0", "") + status_data = lib._status2data(outdat["data_vars"][status_key]) # Individual status codes # Wake up state - wake = {0: 'bad power', 1: 'power on', 2: 'break', 3: 'clock'} - outdat['attrs']['wakeup_state'] = wake[lib._collapse( - status_data.pop('wakeup_state'), name=ky)] + wake = {0: "bad power", 1: "power on", 2: "break", 3: "clock"} + outdat["attrs"]["wakeup_state"] = wake[ + lib._collapse(status_data.pop("wakeup_state"), name=ky) + ] # Instrument direction # 0: XUP, 1: XDOWN, 2: YUP, 3: YDOWN, 4: ZUP, 5: ZDOWN, # 7: AHRS, handle as ZUP - nortek_orient = {0: 'horizontal', 1: 'horizontal', 2: 'horizontal', - 3: 'horizontal', 4: 'up', 5: 'down', 7: 'AHRS'} - outdat['attrs']['orientation'] = nortek_orient[lib._collapse( - status_data.pop('orient_up'), name='orientation')] + nortek_orient = { + 0: "horizontal", + 1: "horizontal", + 2: "horizontal", + 3: "horizontal", + 4: "up", + 5: "down", + 7: "AHRS", + } + outdat["attrs"]["orientation"] = nortek_orient[ + lib._collapse(status_data.pop("orient_up"), name="orientation") + ] # Orientation detection - orient_status = {0: 'fixed', 1: 'auto_UD', 3: 'AHRS-3D'} - outdat['attrs']['orient_status'] = orient_status[lib._collapse( - status_data.pop('auto_orientation'), name='orient_status')] + orient_status = {0: "fixed", 1: "auto_UD", 3: "AHRS-3D"} + outdat["attrs"]["orient_status"] = orient_status[ + lib._collapse(status_data.pop("auto_orientation"), name="orient_status") + ] # Status variables - for ky in ['low_volt_skip', 'active_config', 'telemetry_data', 'boost_running']: - outdat['data_vars'][ky] = status_data[ky].astype('uint8') + for ky in ["low_volt_skip", "active_config", "telemetry_data", "boost_running"]: + outdat["data_vars"][ky] = status_data[ky].astype("uint8") # Processor idle state - need to save as 1/0 per netcdf attribute limitations for ky in status0_data: - outdat['attrs'][ky] = lib._collapse( - status0_data[ky].astype('uint8'), name=ky) + outdat["attrs"][ky] = lib._collapse(status0_data[ky].astype("uint8"), name=ky) # Remove status0 variables - keep status variables as they useful for finding missing pings - [outdat['data_vars'].pop(var) for var in status0_vars] + [outdat["data_vars"].pop(var) for var in status0_vars] # Set coordinate system if 21 not in dat: - cfg['rotate_vars'] = [] - cy = cfg['coord_sys_axes_avg'] + cfg["rotate_vars"] = [] + cy = cfg["coord_sys_axes_avg"] else: - cfg['rotate_vars'] = ['vel', ] - cy = cfg['coord_sys_axes'] - outdat['attrs']['coord_sys'] = {'XYZ': 'inst', - 'ENU': 'earth', - 'beam': 'beam'}[cy] + cfg["rotate_vars"] = [ + "vel", + ] + cy = cfg["coord_sys_axes"] + outdat["attrs"]["coord_sys"] = {"XYZ": "inst", "ENU": "earth", "beam": "beam"}[cy] # Copy appropriate vars to rotate_vars - for ky in ['accel', 'angrt', 'mag']: - for dky in outdat['data_vars'].keys(): - if dky == ky or dky.startswith(ky + '_'): - outdat['attrs']['rotate_vars'].append(dky) - if 'vel_bt' in outdat['data_vars']: - outdat['attrs']['rotate_vars'].append('vel_bt') - if 'vel_avg' in outdat['data_vars']: - outdat['attrs']['rotate_vars'].append('vel_avg') + for ky in ["accel", "angrt", "mag"]: + for dky in outdat["data_vars"].keys(): + if dky == ky or dky.startswith(ky + "_"): + outdat["attrs"]["rotate_vars"].append(dky) + if "vel_bt" in outdat["data_vars"]: + outdat["attrs"]["rotate_vars"].append("vel_bt") + if "vel_avg" in outdat["data_vars"]: + outdat["attrs"]["rotate_vars"].append("vel_avg") return outdat @@ -555,66 +645,65 @@ def _reduce(data): --- from different data structures within the same ensemble --- by averaging. """ - - dv = data['data_vars'] - dc = data['coords'] - da = data['attrs'] + + dv = data["data_vars"] + dc = data["coords"] + da = data["attrs"] # Average these fields - for ky in ['c_sound', 'temp', 'pressure', - 'temp_press', 'temp_clock', 'batt']: - lib._reduce_by_average(dv, ky, ky + '_b5') + for ky in ["c_sound", "temp", "pressure", "temp_press", "temp_clock", "batt"]: + lib._reduce_by_average(dv, ky, ky + "_b5") # Angle-averaging is treated separately - for ky in ['heading', 'pitch', 'roll']: - lib._reduce_by_average_angle(dv, ky, ky + '_b5') - - if 'vel' in dv: - dc['range'] = ((np.arange(dv['vel'].shape[1])+1) * - da['cell_size'] + - da['blank_dist']) - da['fs'] = da['filehead_config']['BURST']['SR'] - tmat = da['filehead_config']['XFBURST'] - if 'vel_avg' in dv: - dc['range_avg'] = ((np.arange(dv['vel_avg'].shape[1])+1) * - da['cell_size_avg'] + - da['blank_dist_avg']) - dv['orientmat'] = dv.pop('orientmat_avg') - tmat = da['filehead_config']['XFAVG'] - da['fs'] = da['filehead_config']['PLAN']['MIAVG'] - da['avg_interval_sec'] = da['filehead_config']['AVG']['AI'] - da['bandwidth'] = da['filehead_config']['AVG']['BW'] - if 'vel_b5' in dv: - dc['range_b5'] = ((np.arange(dv['vel_b5'].shape[1])+1) * - da['cell_size_b5'] + - da['blank_dist_b5']) - if 'echo_echo' in dv: - dv['echo'] = dv.pop('echo_echo') - dc['range_echo'] = ((np.arange(dv['echo'].shape[0])+1) * - da['cell_size_echo'] + - da['blank_dist_echo']) - - if 'orientmat' in data['data_vars']: - da['has_imu'] = 1 # logical + for ky in ["heading", "pitch", "roll"]: + lib._reduce_by_average_angle(dv, ky, ky + "_b5") + + if "vel" in dv: + dc["range"] = (np.arange(dv["vel"].shape[1]) + 1) * da["cell_size"] + da[ + "blank_dist" + ] + da["fs"] = da["filehead_config"]["BURST"]["SR"] + tmat = da["filehead_config"]["XFBURST"] + if "vel_avg" in dv: + dc["range_avg"] = (np.arange(dv["vel_avg"].shape[1]) + 1) * da[ + "cell_size_avg" + ] + da["blank_dist_avg"] + dv["orientmat"] = dv.pop("orientmat_avg") + tmat = da["filehead_config"]["XFAVG"] + da["fs"] = da["filehead_config"]["PLAN"]["MIAVG"] + da["avg_interval_sec"] = da["filehead_config"]["AVG"]["AI"] + da["bandwidth"] = da["filehead_config"]["AVG"]["BW"] + if "vel_b5" in dv: + dc["range_b5"] = (np.arange(dv["vel_b5"].shape[1]) + 1) * da[ + "cell_size_b5" + ] + da["blank_dist_b5"] + if "echo_echo" in dv: + dv["echo"] = dv.pop("echo_echo") + dc["range_echo"] = (np.arange(dv["echo"].shape[0]) + 1) * da[ + "cell_size_echo" + ] + da["blank_dist_echo"] + + if "orientmat" in data["data_vars"]: + da["has_imu"] = 1 # logical # Signature AHRS rotation matrix returned in "inst->earth" # Change to dolfyn's "earth->inst" - dv['orientmat'] = np.rollaxis(dv['orientmat'], 1) + dv["orientmat"] = np.rollaxis(dv["orientmat"], 1) else: - da['has_imu'] = 0 - - theta = da['filehead_config']['BEAMCFGLIST'][0] - if 'THETA=' in theta: - da['beam_angle'] = int(theta[13:15]) - - tm = np.zeros((tmat['ROWS'], tmat['COLS']), dtype=np.float32) - for irow in range(tmat['ROWS']): - for icol in range(tmat['COLS']): - tm[irow, icol] = tmat['M' + str(irow + 1) + str(icol + 1)] - dv['beam2inst_orientmat'] = tm + da["has_imu"] = 0 + + theta = da["filehead_config"]["BEAMCFGLIST"][0] + if "THETA=" in theta: + da["beam_angle"] = int(theta[13:15]) + + tm = np.zeros((tmat["ROWS"], tmat["COLS"]), dtype=np.float32) + for irow in range(tmat["ROWS"]): + for icol in range(tmat["COLS"]): + tm[irow, icol] = tmat["M" + str(irow + 1) + str(icol + 1)] + dv["beam2inst_orientmat"] = tm # If burst velocity isn't used, need to copy one for 'time' - if 'time' not in dc: + if "time" not in dc: for val in dc: - if 'time' in val: + if "time" in val: time = val - dc['time'] = dc[time] + dc["time"] = dc[time] diff --git a/mhkit/dolfyn/io/nortek2_defs.py b/mhkit/dolfyn/io/nortek2_defs.py index 6b9b1d8f2..4cc3560be 100644 --- a/mhkit/dolfyn/io/nortek2_defs.py +++ b/mhkit/dolfyn/io/nortek2_defs.py @@ -4,15 +4,15 @@ from . import nortek2_lib as lib -dt32 = 'float32' +dt32 = "float32" grav = 9.81 # The starting value for the checksum: -cs0 = int('0xb58c', 0) +cs0 = int("0xb58c", 0) def _nans(*args, **kwargs): out = np.empty(*args, **kwargs) - if out.dtype.kind == 'f': + if out.dtype.kind == "f": out[:] = np.NaN else: out[:] = 0 @@ -20,15 +20,15 @@ def _nans(*args, **kwargs): def _format(form, N): - out = '' + out = "" for f, n in zip(form, N): if n > 1: - out += '{}'.format(n) + out += "{}".format(n) out += f return out -class _DataDef(): +class _DataDef: def __init__(self, list_of_defs): self._names = [] self._format = [] @@ -46,22 +46,22 @@ def __init__(self, list_of_defs): if len(itm) > 4: self._units.append(itm[4]) else: - self._units.append('1') + self._units.append("1") if len(itm) > 5: self._long_name.append(itm[5]) else: - self._long_name.append('') + self._long_name.append("") if len(itm) > 6: self._standard_name.append(itm[6]) else: - self._standard_name.append('') + self._standard_name.append("") if itm[2] == []: self._N.append(1) else: self._N.append(int(np.prod(itm[2]))) - self._struct = Struct('<' + self.format) + self._struct = Struct("<" + self.format) self.nbyte = self._struct.size - self._cs_struct = Struct('<' + '{}H'.format(int(self.nbyte // 2))) + self._cs_struct = Struct("<" + "{}H".format(int(self.nbyte // 2))) def init_data(self, npings): out = {} @@ -80,7 +80,9 @@ def read_into(self, fobj, data, ens, cs=None): data[nm][..., ens] = np.asarray(d).reshape(shp) @property - def format(self, ): + def format( + self, + ): return _format(self._format, self._N) def read(self, fobj, cs=None): @@ -99,24 +101,22 @@ def read(self, fobj, cs=None): off = cs0 cs_res = sum(self._cs_struct.unpack(bytes)) + off if csval is not False and (cs_res % 65536) != csval: - raise Exception('Checksum failed!') + raise Exception("Checksum failed!") out = [] c = 0 for idx, n in enumerate(self._N): if n == 1: out.append(data[c]) else: - out.append(data[c:(c + n)]) + out.append(data[c : (c + n)]) c += n return out def read2dict(self, fobj, cs=False): - return {self._names[idx]: dat - for idx, dat in enumerate(self.read(fobj, cs=cs))} + return {self._names[idx]: dat for idx, dat in enumerate(self.read(fobj, cs=cs))} def sci_data(self, data): - for ky, func in zip(self._names, - self._sci_func): + for ky, func in zip(self._names, self._sci_func): if func is None: continue data[ky] = func(data[ky]) @@ -140,7 +140,7 @@ def data_stdnames(self): return stdnms -class _LinFunc(): +class _LinFunc: """A simple linear offset and scaling object. Usage: @@ -165,129 +165,248 @@ def __call__(self, array): return array -header = _DataDef([ - ('sync', 'B', [], None), - ('hsz', 'B', [], None), - ('id', 'B', [], None), - ('fam', 'B', [], None), - ('sz', 'H', [], None), - ('cs', 'H', [], None), - ('hcs', 'H', [], None), -]) +header = _DataDef( + [ + ("sync", "B", [], None), + ("hsz", "B", [], None), + ("id", "B", [], None), + ("fam", "B", [], None), + ("sz", "H", [], None), + ("cs", "H", [], None), + ("hcs", "H", [], None), + ] +) _burst_hdr = [ - ('ver', 'B', [], None), - ('DatOffset', 'B', [], None), - ('config', 'H', [], None), - ('SerialNum', 'I', [], None), - ('year', 'B', [], None), - ('month', 'B', [], None), - ('day', 'B', [], None), - ('hour', 'B', [], None), - ('minute', 'B', [], None), - ('second', 'B', [], None), - ('usec100', 'H', [], None), - ('c_sound', 'H', [], _LinFunc(0.1, dtype=dt32), 'm s-1', - 'Speed of Sound', 'speed_of_sound_in_sea_water'), - ('temp', 'H', [], _LinFunc(0.01, dtype=dt32), - 'degree_C', 'Temperature', 'sea_water_temperature'), - ('pressure', 'I', [], _LinFunc(0.001, dtype=dt32), - 'dbar', 'Pressure', 'sea_water_pressure'), - ('heading', 'H', [], _LinFunc(0.01, dtype=dt32), - 'degree', 'Heading', 'platform_orientation'), - ('pitch', 'h', [], _LinFunc(0.01, dtype=dt32), - 'degree', 'Pitch', 'platform_pitch'), - ('roll', 'h', [], _LinFunc(0.01, dtype=dt32), 'degree', 'Roll', 'platform_roll'), - ('beam_config', 'H', [], None), - ('cell_size', 'H', [], _LinFunc(0.001), 'm'), - ('blank_dist', 'H', [], _LinFunc(0.01), 'm'), - ('nominal_corr', 'B', [], None, '%'), - ('temp_press', 'B', [], _LinFunc(0.2, -20, dtype=dt32), - 'degree_C', 'Pressure Sensor Temperature'), - ('batt', 'H', [], _LinFunc(0.1, dtype=dt32), - 'V', 'Battery Voltage', 'battery_voltage'), - ('mag', 'h', [3], _LinFunc(0.1, dtype=dt32), 'uT', 'Compass'), - ('accel', 'h', [3], _LinFunc(1. / 16384 * grav, dtype=dt32), - 'm s-2', 'Acceleration'), - ('ambig_vel', 'h', [], _LinFunc(0.001, dtype=dt32), 'm s-1'), - ('data_desc', 'H', [], None), - ('xmit_energy', 'H', [], None, 'dB', 'Sound Pressure Level of Acoustic Signal'), - ('vel_scale', 'b', [], None), - ('power_level_dB', 'b', [], _LinFunc(dtype=dt32), 'dB', 'Power Level'), - ('temp_mag', 'h', [], None), # uncalibrated - ('temp_clock', 'h', [], _LinFunc(0.01, dtype=dt32), - 'degree_C', 'Internal Clock Temperature'), - ('error', 'H', [], None, '1', 'Error Code'), - ('status0', 'H', [], None, '1', 'Status 0 Code'), - ('status', 'I', [], None, '1', 'Status Code'), - ('_ensemble', 'I', [], None), + ("ver", "B", [], None), + ("DatOffset", "B", [], None), + ("config", "H", [], None), + ("SerialNum", "I", [], None), + ("year", "B", [], None), + ("month", "B", [], None), + ("day", "B", [], None), + ("hour", "B", [], None), + ("minute", "B", [], None), + ("second", "B", [], None), + ("usec100", "H", [], None), + ( + "c_sound", + "H", + [], + _LinFunc(0.1, dtype=dt32), + "m s-1", + "Speed of Sound", + "speed_of_sound_in_sea_water", + ), + ( + "temp", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "degree_C", + "Temperature", + "sea_water_temperature", + ), + ( + "pressure", + "I", + [], + _LinFunc(0.001, dtype=dt32), + "dbar", + "Pressure", + "sea_water_pressure", + ), + ( + "heading", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "degree", + "Heading", + "platform_orientation", + ), + ("pitch", "h", [], _LinFunc(0.01, dtype=dt32), "degree", "Pitch", "platform_pitch"), + ("roll", "h", [], _LinFunc(0.01, dtype=dt32), "degree", "Roll", "platform_roll"), + ("beam_config", "H", [], None), + ("cell_size", "H", [], _LinFunc(0.001), "m"), + ("blank_dist", "H", [], _LinFunc(0.01), "m"), + ("nominal_corr", "B", [], None, "%"), + ( + "temp_press", + "B", + [], + _LinFunc(0.2, -20, dtype=dt32), + "degree_C", + "Pressure Sensor Temperature", + ), + ( + "batt", + "H", + [], + _LinFunc(0.1, dtype=dt32), + "V", + "Battery Voltage", + "battery_voltage", + ), + ("mag", "h", [3], _LinFunc(0.1, dtype=dt32), "uT", "Compass"), + ( + "accel", + "h", + [3], + _LinFunc(1.0 / 16384 * grav, dtype=dt32), + "m s-2", + "Acceleration", + ), + ("ambig_vel", "h", [], _LinFunc(0.001, dtype=dt32), "m s-1"), + ("data_desc", "H", [], None), + ("xmit_energy", "H", [], None, "dB", "Sound Pressure Level of Acoustic Signal"), + ("vel_scale", "b", [], None), + ("power_level_dB", "b", [], _LinFunc(dtype=dt32), "dB", "Power Level"), + ("temp_mag", "h", [], None), # uncalibrated + ( + "temp_clock", + "h", + [], + _LinFunc(0.01, dtype=dt32), + "degree_C", + "Internal Clock Temperature", + ), + ("error", "H", [], None, "1", "Error Code"), + ("status0", "H", [], None, "1", "Status 0 Code"), + ("status", "I", [], None, "1", "Status Code"), + ("_ensemble", "I", [], None), ] _bt_hdr = [ - ('ver', 'B', [], None), - ('DatOffset', 'B', [], None), - ('config', 'H', [], None), - ('SerialNum', 'I', [], None), - ('year', 'B', [], None), - ('month', 'B', [], None), - ('day', 'B', [], None), - ('hour', 'B', [], None), - ('minute', 'B', [], None), - ('second', 'B', [], None), - ('usec100', 'H', [], None), - ('c_sound', 'H', [], _LinFunc(0.1, dtype=dt32), 'm s-1', - 'Speed of Sound', 'speed_of_sound_in_sea_water'), - ('temp', 'H', [], _LinFunc(0.01, dtype=dt32), - 'degree_C', 'Temperature', 'sea_water_temperature'), - ('pressure', 'I', [], _LinFunc(0.001, dtype=dt32), - 'dbar', 'Pressure', 'sea_water_pressure'), - ('heading', 'H', [], _LinFunc(0.01, dtype=dt32), - 'degree', 'Heading', 'platform_orientation'), - ('pitch', 'h', [], _LinFunc(0.01, dtype=dt32), - 'degree', 'Pitch', 'platform_pitch'), - ('roll', 'h', [], _LinFunc(0.01, dtype=dt32), 'degree', 'Roll', 'platform_roll'), - ('beam_config', 'H', [], None), - ('cell_size', 'H', [], _LinFunc(0.001), 'm'), - ('blank_dist', 'H', [], _LinFunc(0.01), 'm'), - ('nominal_corr', 'B', [], None, '%'), - ('unused', 'B', [], None), - ('batt', 'H', [], _LinFunc(0.1, dtype=dt32), - 'V', 'Battery Voltage', 'battery_voltage'), - ('mag', 'h', [3], None, 'uT', 'Compass'), - ('accel', 'h', [3], _LinFunc(1. / 16384 * grav, dtype=dt32), - 'm s-2', 'Acceleration', ''), - ('ambig_vel', 'I', [], _LinFunc(0.001, dtype=dt32), 'm s-1'), - ('data_desc', 'H', [], None), - ('xmit_energy', 'H', [], None, 'dB', 'Sound Pressure Level of Acoustic Signal'), - ('vel_scale', 'b', [], None), - ('power_level_dB', 'b', [], _LinFunc(dtype=dt32), 'dB'), - ('temp_mag', 'h', [], None), # uncalibrated - ('temp_clock', 'h', [], _LinFunc(0.01, dtype=dt32), - 'degree_C', 'Internal Clock Temperature'), - ('error', 'I', [], None, '1', 'Error Code'), - ('status', 'I', [], None, '1', 'Status Code'), - ('_ensemble', 'I', [], None), + ("ver", "B", [], None), + ("DatOffset", "B", [], None), + ("config", "H", [], None), + ("SerialNum", "I", [], None), + ("year", "B", [], None), + ("month", "B", [], None), + ("day", "B", [], None), + ("hour", "B", [], None), + ("minute", "B", [], None), + ("second", "B", [], None), + ("usec100", "H", [], None), + ( + "c_sound", + "H", + [], + _LinFunc(0.1, dtype=dt32), + "m s-1", + "Speed of Sound", + "speed_of_sound_in_sea_water", + ), + ( + "temp", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "degree_C", + "Temperature", + "sea_water_temperature", + ), + ( + "pressure", + "I", + [], + _LinFunc(0.001, dtype=dt32), + "dbar", + "Pressure", + "sea_water_pressure", + ), + ( + "heading", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "degree", + "Heading", + "platform_orientation", + ), + ("pitch", "h", [], _LinFunc(0.01, dtype=dt32), "degree", "Pitch", "platform_pitch"), + ("roll", "h", [], _LinFunc(0.01, dtype=dt32), "degree", "Roll", "platform_roll"), + ("beam_config", "H", [], None), + ("cell_size", "H", [], _LinFunc(0.001), "m"), + ("blank_dist", "H", [], _LinFunc(0.01), "m"), + ("nominal_corr", "B", [], None, "%"), + ("unused", "B", [], None), + ( + "batt", + "H", + [], + _LinFunc(0.1, dtype=dt32), + "V", + "Battery Voltage", + "battery_voltage", + ), + ("mag", "h", [3], None, "uT", "Compass"), + ( + "accel", + "h", + [3], + _LinFunc(1.0 / 16384 * grav, dtype=dt32), + "m s-2", + "Acceleration", + "", + ), + ("ambig_vel", "I", [], _LinFunc(0.001, dtype=dt32), "m s-1"), + ("data_desc", "H", [], None), + ("xmit_energy", "H", [], None, "dB", "Sound Pressure Level of Acoustic Signal"), + ("vel_scale", "b", [], None), + ("power_level_dB", "b", [], _LinFunc(dtype=dt32), "dB"), + ("temp_mag", "h", [], None), # uncalibrated + ( + "temp_clock", + "h", + [], + _LinFunc(0.01, dtype=dt32), + "degree_C", + "Internal Clock Temperature", + ), + ("error", "I", [], None, "1", "Error Code"), + ("status", "I", [], None, "1", "Status Code"), + ("_ensemble", "I", [], None), ] _ahrs_def = [ - ('orientmat', 'f', [3, 3], None, '1', 'Orientation Matrix'), - ('quaternions', 'f', [4], None, '1', 'Quaternions'), - ('angrt', 'f', [3], _LinFunc(np.pi / 180, dtype=dt32), 'rad s-1', 'Angular Velocity'), + ("orientmat", "f", [3, 3], None, "1", "Orientation Matrix"), + ("quaternions", "f", [4], None, "1", "Quaternions"), + ( + "angrt", + "f", + [3], + _LinFunc(np.pi / 180, dtype=dt32), + "rad s-1", + "Angular Velocity", + ), ] def _calc_bt_struct(config, nb): - flags = lib._headconfig_int2dict(config, mode='bt') + flags = lib._headconfig_int2dict(config, mode="bt") dd = copy(_bt_hdr) - if flags['vel']: + if flags["vel"]: # units handled in Ad2cpReader.sci_data - dd.append(('vel', 'i', [nb], None, 'm s-1', 'Platform Velocity from Bottom Track')) - if flags['dist']: - dd.append(('dist', 'i', [nb], _LinFunc(0.001, dtype=dt32), 'm', 'Bottom Track Measured Depth')) - if flags['fom']: - dd.append(('fom', 'H', [nb], None, '1', 'Figure of Merit')) - if flags['ahrs']: + dd.append( + ("vel", "i", [nb], None, "m s-1", "Platform Velocity from Bottom Track") + ) + if flags["dist"]: + dd.append( + ( + "dist", + "i", + [nb], + _LinFunc(0.001, dtype=dt32), + "m", + "Bottom Track Measured Depth", + ) + ) + if flags["fom"]: + dd.append(("fom", "H", [nb], None, "1", "Figure of Merit")) + if flags["ahrs"]: dd += _ahrs_def return _DataDef(dd) @@ -295,14 +414,27 @@ def _calc_bt_struct(config, nb): def _calc_echo_struct(config, nc): flags = lib._headconfig_int2dict(config) dd = copy(_burst_hdr) - dd[19] = ('blank_dist', 'H', [], _LinFunc(0.001)) # m - if any([flags[nm] for nm in ['vel', 'amp', 'corr', 'alt', 'ast', - 'alt_raw', 'p_gd', 'std']]): + dd[19] = ("blank_dist", "H", [], _LinFunc(0.001)) # m + if any( + [ + flags[nm] + for nm in ["vel", "amp", "corr", "alt", "ast", "alt_raw", "p_gd", "std"] + ] + ): raise Exception("Echosounder ping contains invalid data?") - if flags['echo']: - dd += [('echo', 'H', [nc], _LinFunc(0.01, dtype=dt32), 'dB', - 'Echo Sounder Acoustic Signal Backscatter', 'acoustic_target_strength_in_sea_water')] - if flags['ahrs']: + if flags["echo"]: + dd += [ + ( + "echo", + "H", + [nc], + _LinFunc(0.01, dtype=dt32), + "dB", + "Echo Sounder Acoustic Signal Backscatter", + "acoustic_target_strength_in_sea_water", + ) + ] + if flags["ahrs"]: dd += _ahrs_def return _DataDef(dd) @@ -310,53 +442,155 @@ def _calc_echo_struct(config, nc): def _calc_burst_struct(config, nb, nc): flags = lib._headconfig_int2dict(config) dd = copy(_burst_hdr) - if flags['echo']: + if flags["echo"]: raise Exception("Echosounder data found in velocity ping?") - if flags['vel']: - dd.append(('vel', 'h', [nb, nc], None, 'm s-1', 'Water Velocity')) - if flags['amp']: - dd.append(('amp', 'B', [nb, nc], _LinFunc(0.5, dtype=dt32), '1', 'Acoustic Signal Amplitude', - 'signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water')) - if flags['corr']: - dd.append(('corr', 'B', [nb, nc], None, '%', 'Acoustic Signal Correlation', - 'beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water')) - if flags['alt']: + if flags["vel"]: + dd.append(("vel", "h", [nb, nc], None, "m s-1", "Water Velocity")) + if flags["amp"]: + dd.append( + ( + "amp", + "B", + [nb, nc], + _LinFunc(0.5, dtype=dt32), + "1", + "Acoustic Signal Amplitude", + "signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water", + ) + ) + if flags["corr"]: + dd.append( + ( + "corr", + "B", + [nb, nc], + None, + "%", + "Acoustic Signal Correlation", + "beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water", + ) + ) + if flags["alt"]: # There may be a problem here with reading 32bit floats if # nb and nc are odd - dd += [('alt_dist', 'f', [], _LinFunc(dtype=dt32), 'm', 'Altimeter Range', 'altimeter_range'), - ('alt_quality', 'H', [], _LinFunc(0.01, dtype=dt32), '1', 'Altimeter Quality Indicator'), - ('alt_status', 'H', [], None, '1', 'Altimeter Status')] - if flags['ast']: dd += [ - ('ast_dist', 'f', [], _LinFunc(dtype=dt32), 'm', 'Acoustic Surface Tracking Range'), - ('ast_quality', 'H', [], _LinFunc(0.01, dtype=dt32), '1', - 'Acoustic Surface Tracking Quality Indicator'), - ('ast_offset_time', 'h', [], _LinFunc(0.0001, dtype=dt32), - 's', 'Acoustic Surface Tracking Time Offset to Velocity Ping'), - ('ast_pressure', 'f', [], None, 'dbar', 'Pressure measured during AST ping', - 'sea_water_pressure'), - ('ast_spare', 'B7x', [], None), + ( + "alt_dist", + "f", + [], + _LinFunc(dtype=dt32), + "m", + "Altimeter Range", + "altimeter_range", + ), + ( + "alt_quality", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "1", + "Altimeter Quality Indicator", + ), + ("alt_status", "H", [], None, "1", "Altimeter Status"), + ] + if flags["ast"]: + dd += [ + ( + "ast_dist", + "f", + [], + _LinFunc(dtype=dt32), + "m", + "Acoustic Surface Tracking Range", + ), + ( + "ast_quality", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "1", + "Acoustic Surface Tracking Quality Indicator", + ), + ( + "ast_offset_time", + "h", + [], + _LinFunc(0.0001, dtype=dt32), + "s", + "Acoustic Surface Tracking Time Offset to Velocity Ping", + ), + ( + "ast_pressure", + "f", + [], + None, + "dbar", + "Pressure measured during AST ping", + "sea_water_pressure", + ), + ("ast_spare", "B7x", [], None), ] - if flags['alt_raw']: + if flags["alt_raw"]: dd += [ - ('altraw_nsamp', 'I', [], None, '1', 'Number of Altimeter Samples'), - ('altraw_dsamp', 'H', [], _LinFunc(0.0001, dtype=dt32), 'm', - 'Altimeter Distance between Samples'), - ('altraw_samp', 'h', [], None), + ("altraw_nsamp", "I", [], None, "1", "Number of Altimeter Samples"), + ( + "altraw_dsamp", + "H", + [], + _LinFunc(0.0001, dtype=dt32), + "m", + "Altimeter Distance between Samples", + ), + ("altraw_samp", "h", [], None), ] - if flags['ahrs']: + if flags["ahrs"]: dd += _ahrs_def - if flags['p_gd']: - dd += [('percent_good', 'B', [nc], None, '%', 'Percent Good', - 'proportion_of_acceptable_signal_returns_from_acoustic_instrument_in_sea_water')] - if flags['std']: - dd += [('pitch_std', 'h', [], - _LinFunc(0.01, dtype=dt32), 'degree', 'Pitch Standard Deviation'), - ('roll_std', 'h', [], - _LinFunc(0.01, dtype=dt32), 'degree', 'Roll Standard Deviation'), - ('heading_std', 'h', [], - _LinFunc(0.01, dtype=dt32), 'degree', 'Heading Standard Deviation'), - ('press_std', 'h', [], - _LinFunc(0.1, dtype=dt32), 'dbar', 'Pressure Standard Deviation'), - ('std_spare', 'H22x', [], None)] + if flags["p_gd"]: + dd += [ + ( + "percent_good", + "B", + [nc], + None, + "%", + "Percent Good", + "proportion_of_acceptable_signal_returns_from_acoustic_instrument_in_sea_water", + ) + ] + if flags["std"]: + dd += [ + ( + "pitch_std", + "h", + [], + _LinFunc(0.01, dtype=dt32), + "degree", + "Pitch Standard Deviation", + ), + ( + "roll_std", + "h", + [], + _LinFunc(0.01, dtype=dt32), + "degree", + "Roll Standard Deviation", + ), + ( + "heading_std", + "h", + [], + _LinFunc(0.01, dtype=dt32), + "degree", + "Heading Standard Deviation", + ), + ( + "press_std", + "h", + [], + _LinFunc(0.1, dtype=dt32), + "dbar", + "Pressure Standard Deviation", + ), + ("std_spare", "H22x", [], None), + ] return _DataDef(dd) diff --git a/mhkit/dolfyn/io/nortek2_lib.py b/mhkit/dolfyn/io/nortek2_lib.py index f3575b6e6..38610b995 100644 --- a/mhkit/dolfyn/io/nortek2_lib.py +++ b/mhkit/dolfyn/io/nortek2_lib.py @@ -26,9 +26,13 @@ def _reduce_by_average_angle(data, ky0, ky1, degrees=True): rad_fact = 1 if ky1 in data: if ky0 in data: - data[ky0] = np.angle( - np.exp(1j * data.pop(ky0) * rad_fact) + - np.exp(1j * data.pop(ky1) * rad_fact)) / rad_fact + data[ky0] = ( + np.angle( + np.exp(1j * data.pop(ky0) * rad_fact) + + np.exp(1j * data.pop(ky1) * rad_fact) + ) + / rad_fact + ) else: data[ky0] = data.pop(ky1) @@ -36,56 +40,65 @@ def _reduce_by_average_angle(data, ky0, ky1, degrees=True): # This is the data-type of the index file. # This must match what is written-out by the create_index function. _index_version = 1 -_hdr = struct.Struct(' 60) # This probably indicates a corrupted byte, so we just insert None. @@ -96,55 +109,93 @@ def _calc_time(year, month, day, hour, minute, second, usec, zero_is_bad=True): def _create_index(infile, outfile, N_ens, debug): logging = getLogger() - print("Indexing {}...".format(infile), end='') - fin = open(_abspath(infile), 'rb') - fout = open(_abspath(outfile), 'wb') - fout.write(b'Index Ver:') - fout.write(struct.pack(' 0: # Covers all id keys saved in "burst mode" - ens[idk] = last_ens[idk]+1 + ens[idk] = last_ens[idk] + 1 if last_ens[idk] > 0 and last_ens[idk] != ens[idk]: N[idk] += 1 - fout.write(struct.pack(' N_id)[0] @@ -173,30 +224,33 @@ def _check_index(idx, infile, fix_hw_ens=False): FLAG = True # The ping number reported here may not be quite right if # the ensemble count is wrong. - warnings.warn("Skipped ping (ID: {}) in file {} at ensemble {}." - .format(id, infile, idx['ens'][inds[ib + 1] - 1])) - hwe[inds[(ib + 1):]] += 1 - ens[inds[(ib + 1):]] += 1 + warnings.warn( + "Skipped ping (ID: {}) in file {} at ensemble {}.".format( + id, infile, idx["ens"][inds[ib + 1] - 1] + ) + ) + hwe[inds[(ib + 1) :]] += 1 + ens[inds[(ib + 1) :]] += 1 # This block fixes skips that originate from before this file. delta = max(hwe[:N_id]) - hwe[:N_id] - for d, id in zip(delta, idx['ID'][:N_id]): + for d, id in zip(delta, idx["ID"][:N_id]): if d != 0: FLAG = True - hwe[id == idx['ID']] += d - ens[id == idx['ID']] += d + hwe[id == idx["ID"]] += d + ens[id == idx["ID"]] += d if np.any(np.diff(ens) > 1) and FLAG: - idx['ens'] = np.unwrap(hwe.astype(np.int64), period=period) - hwe[0] + idx["ens"] = np.unwrap(hwe.astype(np.int64), period=period) - hwe[0] def _boolarray_firstensemble_ping(index): """ - Return a boolean of the index that indicates only the first ping in + Return a boolean of the index that indicates only the first ping in each ensemble. """ - dens = np.ones(index['ens'].shape, dtype='bool') - dens[1:] = np.diff(index['ens']) != 0 + dens = np.ones(index["ens"].shape, dtype="bool") + dens[1:] = np.diff(index["ens"]) != 0 return dens @@ -219,13 +273,13 @@ def get_index(infile, reload=False, debug=False): Tuple containing info held within index file """ - index_file = infile + '.index' + index_file = infile + ".index" if not path.isfile(index_file) or reload: - _create_index(infile, index_file, 2 ** 32, debug) - f = open(_abspath(index_file), 'rb') + _create_index(infile, index_file, 2**32, debug) + f = open(_abspath(index_file), "rb") file_head = f.read(12) - if file_head[:10] == b'Index Ver:': - index_ver = struct.unpack('> n) & 1) -def _headconfig_int2dict(val, mode='burst'): +def _headconfig_int2dict(val, mode="burst"): """ Convert the burst Configuration bit-mask to a dict of bools. @@ -330,7 +388,7 @@ def _headconfig_int2dict(val, mode='burst'): For 'burst' configs, or 'bottom-track' configs. """ - if (mode == 'burst') or (mode == 'avg'): + if (mode == "burst") or (mode == "avg"): return dict( press_valid=_getbit(val, 0), temp_valid=_getbit(val, 1), @@ -349,7 +407,7 @@ def _headconfig_int2dict(val, mode='burst'): std=_getbit(val, 14), # bit 15 is unused ) - elif mode == 'bt': + elif mode == "bt": return dict( press_valid=_getbit(val, 0), temp_valid=_getbit(val, 1), @@ -371,9 +429,9 @@ def _status02data(val): bi = _BitIndexer(val) out = {} if any(bi[15]): # 'status0_in_use' - out['proc_idle_less_3pct'] = bi[0] - out['proc_idle_less_6pct'] = bi[1] - out['proc_idle_less_12pct'] = bi[2] + out["proc_idle_less_3pct"] = bi[0] + out["proc_idle_less_6pct"] = bi[1] + out["proc_idle_less_12pct"] = bi[2] return out @@ -383,18 +441,18 @@ def _status2data(val): # Integrators Guide (2017) bi = _BitIndexer(val) out = {} - out['wakeup_state'] = bi[28:32] - out['orient_up'] = bi[25:28] - out['auto_orientation'] = bi[22:25] - out['previous_wakeup_state'] = bi[18:22] - out['low_volt_skip'] = bi[17] - out['active_config'] = bi[16] - out['echo_index'] = bi[12:16] - out['telemetry_data'] = bi[11] - out['boost_running'] = bi[10] - out['echo_freq_bin'] = bi[5:10] + out["wakeup_state"] = bi[28:32] + out["orient_up"] = bi[25:28] + out["auto_orientation"] = bi[22:25] + out["previous_wakeup_state"] = bi[18:22] + out["low_volt_skip"] = bi[17] + out["active_config"] = bi[16] + out["echo_index"] = bi[12:16] + out["telemetry_data"] = bi[11] + out["boost_running"] = bi[10] + out["echo_freq_bin"] = bi[5:10] # 2,3,4 unused - out['bd_scaling'] = bi[1] # if True: cm scaling of blanking dist + out["bd_scaling"] = bi[1] # if True: cm scaling of blanking dist # 0 unused return out @@ -404,25 +462,25 @@ def _alt_status2data(val): # Integrators Guide (2017) bi = _BitIndexer(val) out = {} - out['tilt_over_5deg'] = bi[0] - out['tilt_over_10deg'] = bi[1] - out['multibeam_alt'] = bi[2] - out['n_beams_alt'] = bi[3:7] - out['power_level_idx_alt'] = bi[7:10] + out["tilt_over_5deg"] = bi[0] + out["tilt_over_10deg"] = bi[1] + out["multibeam_alt"] = bi[2] + out["n_beams_alt"] = bi[3:7] + out["power_level_idx_alt"] = bi[7:10] return out def _beams_cy_int2dict(val, id): - """Convert the beams/coordinate-system bytes to a dict of values. - """ + """Convert the beams/coordinate-system bytes to a dict of values.""" if id == 28: # 0x1C (echosounder) return dict(n_cells=val) return dict( - n_cells=val & (2 ** 10 - 1), - cy=['ENU', 'XYZ', 'beam', None][val >> 10 & 3], - n_beams=val >> 12) + n_cells=val & (2**10 - 1), + cy=["ENU", "XYZ", "beam", None][val >> 10 & 3], + n_beams=val >> 12, + ) def _isuniform(vec, exclude=[]): @@ -442,8 +500,7 @@ def _collapse(vec, name=None, exclude=[]): elif _isuniform(vec, exclude=exclude): return list(set(np.unique(vec)) - set(exclude))[0] else: - uniq, idx, counts = np.unique( - vec, return_index=True, return_counts=True) + uniq, idx, counts = np.unique(vec, return_index=True, return_counts=True) if all(e == counts[0] for e in counts): val = max(vec) # pings saved out of order, but equal # of pings @@ -452,11 +509,14 @@ def _collapse(vec, name=None, exclude=[]): if not set(uniq) == set([0, val]) and set(counts) == set([1, np.max(counts)]): # warn when the 'wrong value' is not just a single zero. - warnings.warn("The variable {} is expected to be uniform, but it is not.\n" - "Values found: {} (counts: {}).\n" - "Using the most common value: {}".format( - name, list(uniq), list(counts), val)) - + warnings.warn( + "The variable {} is expected to be uniform, but it is not.\n" + "Values found: {} (counts: {}).\n" + "Using the most common value: {}".format( + name, list(uniq), list(counts), val + ) + ) + return val @@ -471,33 +531,31 @@ def _calc_config(index): A dict containing the key information for initializing arrays. """ - ids = np.unique(index['ID']) + ids = np.unique(index["ID"]) config = {} for id in ids: if id not in [21, 22, 23, 24, 26, 28]: continue if id == 23: - type = 'bt' + type = "bt" elif id == 22: - type = 'avg' + type = "avg" else: - type = 'burst' - inds = index['ID'] == id - _config = index['config'][inds] - _beams_cy = index['beams_cy'][inds] + type = "burst" + inds = index["ID"] == id + _config = index["config"][inds] + _beams_cy = index["beams_cy"][inds] # Check that these variables are consistent if not _isuniform(_config): - raise Exception("config are not identical for id: 0x{:X}." - .format(id)) + raise Exception("config are not identical for id: 0x{:X}.".format(id)) if not _isuniform(_beams_cy): - raise Exception("beams_cy are not identical for id: 0x{:X}." - .format(id)) + raise Exception("beams_cy are not identical for id: 0x{:X}.".format(id)) # Now that we've confirmed they are the same: config[id] = _headconfig_int2dict(_config[0], mode=type) config[id].update(_beams_cy_int2dict(_beams_cy[0], id)) - config[id]['_config'] = _config[0] - config[id]['_beams_cy'] = _beams_cy[0] - config[id]['type'] = type - config[id].pop('cy', None) + config[id]["_config"] = _config[0] + config[id]["_beams_cy"] = _beams_cy[0] + config[id]["type"] = type + config[id].pop("cy", None) return config diff --git a/mhkit/dolfyn/io/nortek_defs.py b/mhkit/dolfyn/io/nortek_defs.py index 180af05eb..17cba8185 100644 --- a/mhkit/dolfyn/io/nortek_defs.py +++ b/mhkit/dolfyn/io/nortek_defs.py @@ -1,8 +1,9 @@ import numpy as np + nan = np.nan -class _VarAtts(): +class _VarAtts: """ A data variable attributes class. @@ -36,11 +37,21 @@ class _VarAtts(): A list of names for each dimension of the array. """ - def __init__(self, dims=[], dtype=None, group='data_vars', - view_type=None, default_val=None, - offset=0, factor=1, - title_name=None, units='1', dim_names=None, - long_name='', standard_name=''): + def __init__( + self, + dims=[], + dtype=None, + group="data_vars", + view_type=None, + default_val=None, + offset=0, + factor=1, + title_name=None, + units="1", + dim_names=None, + long_name="", + standard_name="", + ): self.dims = list(dims) if dtype is None: dtype = np.float32 @@ -66,7 +77,7 @@ def shape(self, **kwargs): if hit: return a else: - return self.dims + [kwargs['n']] + return self.dims + [kwargs["n"]] def _empty_array(self, **kwargs): out = np.zeros(self.shape(**kwargs), dtype=self.dtype) @@ -102,241 +113,274 @@ def sci_func(self, data): vec_data = { - 'AnaIn2LSB': _VarAtts(dims=[], - dtype=np.uint8, - group='sys', - ), - 'Count': _VarAtts(dims=[], - dtype=np.uint8, - group='sys', - units='1', - ), - 'PressureMSB': _VarAtts(dims=[], - dtype=np.uint8, - group='data_vars', - ), - 'AnaIn2MSB': _VarAtts(dims=[], - dtype=np.uint8, - group='sys', - ), - 'PressureLSW': _VarAtts(dims=[], - dtype=np.uint16, - group='data_vars', - ), - 'AnaIn1': _VarAtts(dims=[], - dtype=np.uint16, - group='sys', - ), - 'vel': _VarAtts(dims=[3], - dtype=np.float32, - group='data_vars', - factor=0.001, - default_val=nan, - units='m s-1', - long_name='Water Velocity', - ), - 'amp': _VarAtts(dims=[3], - dtype=np.uint8, - group='data_vars', - units='1', - long_name='Acoustic Signal Amplitude', - standard_name='signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water' - ), - 'corr': _VarAtts(dims=[3], - dtype=np.uint8, - group='data_vars', - units='%', - long_name='Acoustic Signal Correlation', - ), + "AnaIn2LSB": _VarAtts( + dims=[], + dtype=np.uint8, + group="sys", + ), + "Count": _VarAtts( + dims=[], + dtype=np.uint8, + group="sys", + units="1", + ), + "PressureMSB": _VarAtts( + dims=[], + dtype=np.uint8, + group="data_vars", + ), + "AnaIn2MSB": _VarAtts( + dims=[], + dtype=np.uint8, + group="sys", + ), + "PressureLSW": _VarAtts( + dims=[], + dtype=np.uint16, + group="data_vars", + ), + "AnaIn1": _VarAtts( + dims=[], + dtype=np.uint16, + group="sys", + ), + "vel": _VarAtts( + dims=[3], + dtype=np.float32, + group="data_vars", + factor=0.001, + default_val=nan, + units="m s-1", + long_name="Water Velocity", + ), + "amp": _VarAtts( + dims=[3], + dtype=np.uint8, + group="data_vars", + units="1", + long_name="Acoustic Signal Amplitude", + standard_name="signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water", + ), + "corr": _VarAtts( + dims=[3], + dtype=np.uint8, + group="data_vars", + units="%", + long_name="Acoustic Signal Correlation", + ), } vec_sysdata = { - 'time': _VarAtts(dims=[], - dtype=np.float64, - group='coords', - default_val=nan, - units='seconds since 1970-01-01 00:00:00', - long_name='Time', - standard_name='time', - ), - 'batt': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='V', - long_name='Battery Voltage', - ), - 'c_sound': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='m s-1', - long_name='Speed of Sound', - standard_name='speed_of_sound_in_sea_water', - ), - 'heading': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='degree', - long_name='Heading', - standard_name='platform_orientation', - ), - 'pitch': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='degree', - long_name='Pitch', - standard_name='platform_pitch', - ), - 'roll': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='degree', - long_name='Roll', - standard_name='platform_roll' - ), - 'temp': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.01, - units='degree_C', - long_name='Temperature', - standard_name='sea_water_temperature', - ), - 'error': _VarAtts(dims=[], - dtype=np.uint8, - group='data_vars', - default_val=nan, - long_name='Error Code', - ), - 'status': _VarAtts(dims=[], - dtype=np.uint8, - group='data_vars', - default_val=nan, - long_name='Status Code' - ), - 'AnaIn': _VarAtts(dims=[], - dtype=np.float32, - group='sys', - default_val=nan, - ), - 'orientation_down': _VarAtts(dims=[], - dtype=bool, - group='data_vars', - default_val=nan, - long_name='Orientation of ADV Communication Cable' - ), + "time": _VarAtts( + dims=[], + dtype=np.float64, + group="coords", + default_val=nan, + units="seconds since 1970-01-01 00:00:00", + long_name="Time", + standard_name="time", + ), + "batt": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="V", + long_name="Battery Voltage", + ), + "c_sound": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="m s-1", + long_name="Speed of Sound", + standard_name="speed_of_sound_in_sea_water", + ), + "heading": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="degree", + long_name="Heading", + standard_name="platform_orientation", + ), + "pitch": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="degree", + long_name="Pitch", + standard_name="platform_pitch", + ), + "roll": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="degree", + long_name="Roll", + standard_name="platform_roll", + ), + "temp": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.01, + units="degree_C", + long_name="Temperature", + standard_name="sea_water_temperature", + ), + "error": _VarAtts( + dims=[], + dtype=np.uint8, + group="data_vars", + default_val=nan, + long_name="Error Code", + ), + "status": _VarAtts( + dims=[], + dtype=np.uint8, + group="data_vars", + default_val=nan, + long_name="Status Code", + ), + "AnaIn": _VarAtts( + dims=[], + dtype=np.float32, + group="sys", + default_val=nan, + ), + "orientation_down": _VarAtts( + dims=[], + dtype=bool, + group="data_vars", + default_val=nan, + long_name="Orientation of ADV Communication Cable", + ), } awac_profile = { - 'time': _VarAtts(dims=[], - dtype=np.float64, - group='coords', - units='seconds since 1970-01-01 00:00:00', - long_name='Time', - standard_name='time', - ), - 'error': _VarAtts(dims=[], - dtype=np.uint16, - group='data_vars', - long_name='Error Code', - ), - 'AnaIn1': _VarAtts(dims=[], - dtype=np.float32, - group='sys', - default_val=nan, - units='n/a', - ), - 'batt': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='V', - long_name='Battery Voltage', - ), - 'c_sound': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='m s-1', - long_name='Speed of Sound', - standard_name='speed_of_sound_in_sea_water', - ), - 'heading': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='degree', - long_name='Heading', - standard_name='platform_orientation', - ), - 'pitch': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='degree', - long_name='Pitch', - standard_name='platform_pitch', - ), - 'roll': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.1, - units='degree', - long_name='Roll', - standard_name='platform_roll' - ), - 'pressure': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.001, - units='dbar', - long_name='Pressure', - standard_name='sea_water_pressure', - ), - 'status': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - long_name='Status Code' - ), - 'temp': _VarAtts(dims=[], - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.01, - units='degree_C', - long_name='Temperature', - standard_name='sea_water_temperature', - ), - 'vel': _VarAtts(dims=[3, 'nbins', 'n'], # how to change this for different # of beams? - dtype=np.float32, - group='data_vars', - default_val=nan, - factor=0.001, - units='m s-1', - long_name='Water Velocity', - ), - 'amp': _VarAtts(dims=[3, 'nbins', 'n'], - dtype=np.uint8, - group='data_vars', - units='1', - long_name='Acoustic Signal Amplitude', - standard_name='signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water', - ), + "time": _VarAtts( + dims=[], + dtype=np.float64, + group="coords", + units="seconds since 1970-01-01 00:00:00", + long_name="Time", + standard_name="time", + ), + "error": _VarAtts( + dims=[], + dtype=np.uint16, + group="data_vars", + long_name="Error Code", + ), + "AnaIn1": _VarAtts( + dims=[], + dtype=np.float32, + group="sys", + default_val=nan, + units="n/a", + ), + "batt": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="V", + long_name="Battery Voltage", + ), + "c_sound": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="m s-1", + long_name="Speed of Sound", + standard_name="speed_of_sound_in_sea_water", + ), + "heading": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="degree", + long_name="Heading", + standard_name="platform_orientation", + ), + "pitch": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="degree", + long_name="Pitch", + standard_name="platform_pitch", + ), + "roll": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.1, + units="degree", + long_name="Roll", + standard_name="platform_roll", + ), + "pressure": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.001, + units="dbar", + long_name="Pressure", + standard_name="sea_water_pressure", + ), + "status": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + long_name="Status Code", + ), + "temp": _VarAtts( + dims=[], + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.01, + units="degree_C", + long_name="Temperature", + standard_name="sea_water_temperature", + ), + "vel": _VarAtts( + dims=[3, "nbins", "n"], # how to change this for different # of beams? + dtype=np.float32, + group="data_vars", + default_val=nan, + factor=0.001, + units="m s-1", + long_name="Water Velocity", + ), + "amp": _VarAtts( + dims=[3, "nbins", "n"], + dtype=np.uint8, + group="data_vars", + units="1", + long_name="Acoustic Signal Amplitude", + standard_name="signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water", + ), } diff --git a/mhkit/dolfyn/io/rdi.py b/mhkit/dolfyn/io/rdi.py index 68ffac611..518031734 100644 --- a/mhkit/dolfyn/io/rdi.py +++ b/mhkit/dolfyn/io/rdi.py @@ -14,8 +14,15 @@ from ..rotate.api import set_declination -def read_rdi(filename, userdata=None, nens=None, debug_level=-1, - vmdas_search=False, winriver=False, **kwargs): +def read_rdi( + filename, + userdata=None, + nens=None, + debug_level=-1, + vmdas_search=False, + winriver=False, + **kwargs, +): """ Read a TRDI binary data file. @@ -26,7 +33,7 @@ def read_rdi(filename, userdata=None, nens=None, debug_level=-1, userdata : True, False, or string of userdata.json filename Whether to read the '.userdata.json' file. Default = True nens : None, int or 2-element tuple (start, stop) - Number of pings or ensembles to read from the file. + Number of pings or ensembles to read from the file. Default is None, read entire file debug_level : int Debug level [0 - 2]. Default = -1 @@ -34,7 +41,7 @@ def read_rdi(filename, userdata=None, nens=None, debug_level=-1, Search from the end of each ensemble for the VMDAS navigation block. The byte offsets are sometimes incorrect. Default = False winriver : bool - If file is winriver or not. Automatically set by dolfyn, this is helpful + If file is winriver or not. Automatically set by dolfyn, this is helpful for debugging. Default = False Returns @@ -47,18 +54,19 @@ def read_rdi(filename, userdata=None, nens=None, debug_level=-1, for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) filepath = Path(filename) - logfile = filepath.with_suffix('.dolfyn.log') - logging.basicConfig(filename=str(logfile), - filemode='w', - level=logging.NOTSET, - format='%(name)s - %(levelname)s - %(message)s') + logfile = filepath.with_suffix(".dolfyn.log") + logging.basicConfig( + filename=str(logfile), + filemode="w", + level=logging.NOTSET, + format="%(name)s - %(levelname)s - %(message)s", + ) # Reads into a dictionary of dictionaries using netcdf naming conventions # Should be easier to debug - with _RDIReader(filename, - debug_level=debug_level, - vmdas_search=vmdas_search, - winriver=winriver) as ldr: + with _RDIReader( + filename, debug_level=debug_level, vmdas_search=vmdas_search, winriver=winriver + ) as ldr: datNB, datBB = ldr.load_data(nens=nens) dats = [dat for dat in [datNB, datBB] if dat is not None] @@ -68,58 +76,57 @@ def read_rdi(filename, userdata=None, nens=None, debug_level=-1, dss = [] for dat in dats: for nm in userdata: - dat['attrs'][nm] = userdata[nm] + dat["attrs"][nm] = userdata[nm] # Pass one if only one ds returned - if not np.isfinite(dat['coords']['time'][0]): + if not np.isfinite(dat["coords"]["time"][0]): continue # GPS data not necessarily sampling at the same rate as ADCP DAQ. - if 'time_gps' in dat['coords']: + if "time_gps" in dat["coords"]: dat = _remove_gps_duplicates(dat) # Convert time coords to dt64 - t_coords = [t for t in dat['coords'] if 'time' in t] + t_coords = [t for t in dat["coords"] if "time" in t] for ky in t_coords: - dat['coords'][ky] = tmlib.epoch2dt64(dat['coords'][ky]) + dat["coords"][ky] = tmlib.epoch2dt64(dat["coords"][ky]) # Convert time vars to dt64 - t_data = [t for t in dat['data_vars'] if 'time' in t] + t_data = [t for t in dat["data_vars"] if "time" in t] for ky in t_data: - dat['data_vars'][ky] = tmlib.epoch2dt64(dat['data_vars'][ky]) + dat["data_vars"][ky] = tmlib.epoch2dt64(dat["data_vars"][ky]) # Create xarray dataset from upper level dictionary ds = _create_dataset(dat) ds = _set_coords(ds, ref_frame=ds.coord_sys) # Create orientation matrices - if 'beam2inst_orientmat' not in ds: - ds['beam2inst_orientmat'] = xr.DataArray( - _calc_beam_orientmat(ds.beam_angle, - ds.beam_pattern == 'convex'), - coords={'x1': [1, 2, 3, 4], - 'x2': [1, 2, 3, 4]}, - dims=['x1', 'x2'], - attrs={'units': '1', - 'long_name': 'Rotation Matrix'}) - - if 'orientmat' not in ds: - ds['orientmat'] = _calc_orientmat(ds) + if "beam2inst_orientmat" not in ds: + ds["beam2inst_orientmat"] = xr.DataArray( + _calc_beam_orientmat(ds.beam_angle, ds.beam_pattern == "convex"), + coords={"x1": [1, 2, 3, 4], "x2": [1, 2, 3, 4]}, + dims=["x1", "x2"], + attrs={"units": "1", "long_name": "Rotation Matrix"}, + ) + + if "orientmat" not in ds: + ds["orientmat"] = _calc_orientmat(ds) # Check magnetic declination if provided via software and/or userdata _set_rdi_declination(ds, filename, inplace=True) # VMDAS applies gps correction on velocity in .ENX files only - if filename.rsplit('.')[-1] == 'ENX': - ds.attrs['vel_gps_corrected'] = 1 + if filename.rsplit(".")[-1] == "ENX": + ds.attrs["vel_gps_corrected"] = 1 else: # (not ENR or ENS) or WinRiver files - ds.attrs['vel_gps_corrected'] = 0 + ds.attrs["vel_gps_corrected"] = 0 dss += [ds] if len(dss) == 2: - warnings.warn("\nTwo profiling configurations retrieved from file" - "\nReturning first.") + warnings.warn( + "\nTwo profiling configurations retrieved from file" "\nReturning first." + ) # Close handler if debug_level >= 0: @@ -137,22 +144,23 @@ def _remove_gps_duplicates(dat): (in addition to the GPS unit's timestamp). """ - dat['data_vars']['hdwtime_gps'] = dat['coords']['time'] + dat["data_vars"]["hdwtime_gps"] = dat["coords"]["time"] # Remove duplicate timestamp values, if applicable - dat['coords']['time_gps'], idx = np.unique(dat['coords']['time_gps'], - return_index=True) + dat["coords"]["time_gps"], idx = np.unique( + dat["coords"]["time_gps"], return_index=True + ) # Remove nan values, if applicable - nan = np.zeros(dat['coords']['time'].shape, dtype=bool) - if any(np.isnan(dat['coords']['time_gps'])): - nan = np.isnan(dat['coords']['time_gps']) - dat['coords']['time_gps'] = dat['coords']['time_gps'][~nan] - - for key in dat['data_vars']: - if ('gps' in key) or ('nmea' in key): - dat['data_vars'][key] = dat['data_vars'][key][idx] + nan = np.zeros(dat["coords"]["time"].shape, dtype=bool) + if any(np.isnan(dat["coords"]["time_gps"])): + nan = np.isnan(dat["coords"]["time_gps"]) + dat["coords"]["time_gps"] = dat["coords"]["time_gps"][~nan] + + for key in dat["data_vars"]: + if ("gps" in key) or ("nmea" in key): + dat["data_vars"][key] = dat["data_vars"][key][idx] if sum(nan) > 0: - dat['data_vars'][key] = dat['data_vars'][key][~nan] + dat["data_vars"][key] = dat["data_vars"][key][~nan] return dat @@ -163,40 +171,42 @@ def _set_rdi_declination(dat, fname, inplace): included in the heading and in the velocity data. """ - declin = dat.attrs.pop('declination', None) # userdata declination + declin = dat.attrs.pop("declination", None) # userdata declination - if dat.attrs['magnetic_var_deg'] != 0: # from TRDI software if set - dat.attrs['declination'] = dat.attrs['magnetic_var_deg'] - dat.attrs['declination_in_orientmat'] = 1 # logical + if dat.attrs["magnetic_var_deg"] != 0: # from TRDI software if set + dat.attrs["declination"] = dat.attrs["magnetic_var_deg"] + dat.attrs["declination_in_orientmat"] = 1 # logical - if dat.attrs['magnetic_var_deg'] != 0 and declin is not None: + if dat.attrs["magnetic_var_deg"] != 0 and declin is not None: warnings.warn( "'magnetic_var_deg' is set to {:.2f} degrees in the binary " "file '{}', AND 'declination' is set in the 'userdata.json' " "file. DOLfYN WILL USE THE VALUE of {:.2f} degrees in " "userdata.json. If you want to use the value in " "'magnetic_var_deg', delete the value from userdata.json and " - "re-read the file." - .format(dat.attrs['magnetic_var_deg'], fname, declin)) - dat.attrs['declination'] = declin + "re-read the file.".format(dat.attrs["magnetic_var_deg"], fname, declin) + ) + dat.attrs["declination"] = declin if declin is not None: set_declination(dat, declin, inplace) -class _RDIReader(): +class _RDIReader: _pos = 0 progress = 0 - _cfac = 180 / 2 ** 31 + _cfac = 180 / 2**31 _source = 0 _fixoffset = 0 _nbyte = 0 _search_num = 30000 # Maximum distance? to search _debug7f79 = None - def __init__(self, fname, navg=1, debug_level=0, vmdas_search=False, winriver=False): + def __init__( + self, fname, navg=1, debug_level=0, vmdas_search=False, winriver=False + ): self.fname = _abspath(fname) - print('\nReading file {} ...'.format(fname)) + print("\nReading file {} ...".format(fname)) self._debug_level = debug_level self._vmdas_search = vmdas_search self._winrivprob = winriver @@ -211,22 +221,22 @@ def __init__(self, fname, navg=1, debug_level=0, vmdas_search=False, winriver=Fa space = self.code_spacing() # '0x7F' self._npings = int(self._filesize / (space + 2)) if self._debug_level >= 0: - logging.info('Done: {}'.format(self.cfg)) - logging.info('self._bb {}'.format(self._bb)) + logging.info("Done: {}".format(self.cfg)) + logging.info("self._bb {}".format(self._bb)) logging.info(self.cfgbb) self.f.seek(self._pos, 0) self.n_avg = navg - self.ensemble = defs._ensemble(self.n_avg, self.cfg['n_cells']) + self.ensemble = defs._ensemble(self.n_avg, self.cfg["n_cells"]) if self._bb: - self.ensembleBB = defs._ensemble(self.n_avg, self.cfgbb['n_cells']) + self.ensembleBB = defs._ensemble(self.n_avg, self.cfgbb["n_cells"]) - self.vars_read = defs._variable_setlist(['time']) + self.vars_read = defs._variable_setlist(["time"]) if self._bb: - self.vars_readBB = defs._variable_setlist(['time']) + self.vars_readBB = defs._variable_setlist(["time"]) if self._debug_level >= 0: - logging.info(' %d pings estimated in this file' % self._npings) + logging.info(" %d pings estimated in this file" % self._npings) def code_spacing(self, iternum=50): """ @@ -237,7 +247,7 @@ def code_spacing(self, iternum=50): p0 = self._pos # Get basic header data and check dual profile if not self.read_hdr(): - raise RuntimeError('No header in this file') + raise RuntimeError("No header in this file") self._bb = self.check_for_double_buffer() # Turn off debugging to check code spacing @@ -249,19 +259,21 @@ def code_spacing(self, iternum=50): except: break # Compute the average of the data size: - size = (self._pos - p0) / (i+1) * 0.995 + size = (self._pos - p0) / (i + 1) * 0.995 self.f = fd self._pos = p0 self._debug_level = debug_level return size - def read_hdr(self,): + def read_hdr( + self, + ): fd = self.f cfgid = list(fd.read_ui8(2)) nread = 0 if self._debug_level >= 0: - logging.info('pos {}'.format(self.f.pos)) - logging.info('cfgid0: [{:x}, {:x}]'.format(*cfgid)) + logging.info("pos {}".format(self.f.pos)) + logging.info("cfgid0: [{:x}, {:x}]".format(*cfgid)) while (cfgid[0] != 127 or cfgid[1] != 127) or not self.checkheader(): nextbyte = fd.read_ui8(1) if nextbyte is None: @@ -272,13 +284,17 @@ def read_hdr(self,): cfgid[0] = nextbyte if not pos % 1000: if self._debug_level >= 0: - logging.info(' Still looking for valid cfgid at file ' - 'position %d ...' % pos) + logging.info( + " Still looking for valid cfgid at file " + "position %d ..." % pos + ) self._pos = self.f.tell() - 2 self.read_hdrseg() return True - def check_for_double_buffer(self,): + def check_for_double_buffer( + self, + ): """ VMDAS will record two buffers in NB or NB/BB mode, so we need to figure out if that is happening here @@ -287,14 +303,14 @@ def check_for_double_buffer(self,): pos = self.f.pos if self._debug_level >= 0: logging.info(self.hdr) - logging.info('pos {}'.format(pos)) + logging.info("pos {}".format(pos)) self.id_positions = {} - for offset in self.hdr['dat_offsets']: - self.f.seek(offset+pos - self.hdr['dat_offsets'][0], rel=0) + for offset in self.hdr["dat_offsets"]: + self.f.seek(offset + pos - self.hdr["dat_offsets"][0], rel=0) id = self.f.read_ui16(1) self.id_positions[id] = offset if self._debug_level >= 0: - logging.info('pos {} id {}'.format(offset, id)) + logging.info("pos {} id {}".format(offset, id)) if id == 1: self.read_fixed(bb=True) found = True @@ -314,13 +330,13 @@ def mean(self, dat): def load_data(self, nens=None): if nens is None: self._nens = int(self._npings / self.n_avg) - elif (nens.__class__ is tuple or nens.__class__ is list): + elif nens.__class__ is tuple or nens.__class__ is list: raise Exception(" `nens` must be a integer") else: self._nens = nens if self._debug_level >= 0: - logging.info(' taking data from pings 0 - %d' % self._nens) - logging.info(' %d ensembles will be produced.\n' % self._nens) + logging.info(" taking data from pings 0 - %d" % self._nens) + logging.info(" %d ensembles will be produced.\n" % self._nens) self.init_data() for iens in range(self._nens): @@ -351,10 +367,13 @@ def load_data(self, nens=None): # 1. n_cells has changed, # 2. nm is a beam variable # 3. n_cells is greater than any previous - if self.flag > 0 and len(ds.shape) == 3 and (ds.shape[0] != bn.shape[0]): + if ( + self.flag > 0 + and len(ds.shape) == 3 + and (ds.shape[0] != bn.shape[0]) + ): # increase the size of original dataset - a = np.empty( - (self.flag, ds.shape[1], ds.shape[2]))*np.nan + a = np.empty((self.flag, ds.shape[1], ds.shape[2])) * np.nan ds = np.append(ds, a, axis=0) defs._setd(dat, nm, ds) # Copy the ensemble to the dataset. @@ -364,14 +383,17 @@ def load_data(self, nens=None): try: dates = tmlib.date2epoch( - tmlib.datetime(*clock[:6, 0], - microsecond=clock[6, 0] * 10000))[0] + tmlib.datetime(*clock[:6, 0], microsecond=clock[6, 0] * 10000) + )[0] except ValueError: - warnings.warn("Invalid time stamp in ping {}.".format( - int(self.ensemble.number[0]))) - dat['coords']['time'][iens] = np.NaN + warnings.warn( + "Invalid time stamp in ping {}.".format( + int(self.ensemble.number[0]) + ) + ) + dat["coords"]["time"][iens] = np.NaN else: - dat['coords']['time'][iens] = np.median(dates) + dat["coords"]["time"][iens] = np.median(dates) self.cleanup(self.cfg, self.outd) if self._bb: @@ -380,50 +402,72 @@ def load_data(self, nens=None): # Finalize dataset (runs through both nb and bb) for dat in datl: self.finalize(dat) - if 'vel_bt' in dat['data_vars']: - dat['attrs']['rotate_vars'].append('vel_bt') + if "vel_bt" in dat["data_vars"]: + dat["attrs"]["rotate_vars"].append("vel_bt") dat = self.outd datbb = self.outdBB if self._bb else None return dat, datbb - def init_data(self,): - outd = {'data_vars': {}, 'coords': {}, - 'attrs': {}, 'units': {}, 'long_name': {}, - 'standard_name': {}, 'sys': {}} - outd['attrs']['inst_make'] = 'TRDI' - outd['attrs']['inst_type'] = 'ADCP' - outd['attrs']['rotate_vars'] = ['vel', ] + def init_data( + self, + ): + outd = { + "data_vars": {}, + "coords": {}, + "attrs": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + "sys": {}, + } + outd["attrs"]["inst_make"] = "TRDI" + outd["attrs"]["inst_type"] = "ADCP" + outd["attrs"]["rotate_vars"] = [ + "vel", + ] # Currently RDI doesn't use IMUs - outd['attrs']['has_imu'] = 0 + outd["attrs"]["has_imu"] = 0 if self._bb: - outdbb = {'data_vars': {}, 'coords': {}, - 'attrs': {}, 'units': {}, 'long_name': {}, - 'standard_name': {}, 'sys': {}} - outdbb['attrs']['inst_make'] = 'TRDI' - outdbb['attrs']['inst_type'] = 'ADCP' - outdbb['attrs']['rotate_vars'] = ['vel', ] - outdbb['attrs']['has_imu'] = 0 + outdbb = { + "data_vars": {}, + "coords": {}, + "attrs": {}, + "units": {}, + "long_name": {}, + "standard_name": {}, + "sys": {}, + } + outdbb["attrs"]["inst_make"] = "TRDI" + outdbb["attrs"]["inst_type"] = "ADCP" + outdbb["attrs"]["rotate_vars"] = [ + "vel", + ] + outdbb["attrs"]["has_imu"] = 0 for nm in defs.data_defs: - outd = defs._idata(outd, nm, - sz=defs._get_size(nm, self._nens, self.cfg['n_cells'])) + outd = defs._idata( + outd, nm, sz=defs._get_size(nm, self._nens, self.cfg["n_cells"]) + ) self.outd = outd if self._bb: for nm in defs.data_defs: - outdbb = defs._idata(outdbb, nm, - sz=defs._get_size(nm, self._nens, self.cfgbb['n_cells'])) + outdbb = defs._idata( + outdbb, nm, sz=defs._get_size(nm, self._nens, self.cfgbb["n_cells"]) + ) self.outdBB = outdbb if self._debug_level > 1: - logging.info(np.shape(outdbb['data_vars']['vel'])) + logging.info(np.shape(outdbb["data_vars"]["vel"])) if self._debug_level > 1: - logging.info('{} ncells, not BB'.format(self.cfg['n_cells'])) + logging.info("{} ncells, not BB".format(self.cfg["n_cells"])) if self._bb: - logging.info('{} ncells, BB'.format(self.cfgbb['n_cells'])) + logging.info("{} ncells, BB".format(self.cfgbb["n_cells"])) - def read_buffer(self,): + def read_buffer( + self, + ): fd = self.f self.ensemble.k = -1 # so that k+=1 gives 0 on the first loop. if self._bb: @@ -436,52 +480,53 @@ def read_buffer(self,): startpos = fd.tell() - 2 self.read_hdrseg() if self._debug_level >= 0: - logging.info('Read Header', hdr) + logging.info("Read Header", hdr) byte_offset = self._nbyte + 2 self._read_vmdas = False - for n in range(len(hdr['dat_offsets'])): + for n in range(len(hdr["dat_offsets"])): id = fd.read_ui16(1) if self._debug_level > 0: - logging.info(f'n {n}: {id} {id:04x}') + logging.info(f"n {n}: {id} {id:04x}") self.print_pos() retval = self.read_dat(id) - if retval == 'FAIL': + if retval == "FAIL": break byte_offset += self._nbyte - if n < (len(hdr['dat_offsets']) - 1): - oset = hdr['dat_offsets'][n + 1] - byte_offset + if n < (len(hdr["dat_offsets"]) - 1): + oset = hdr["dat_offsets"][n + 1] - byte_offset if oset != 0: if self._debug_level > 0: - logging.debug( - ' %s: Adjust location by %d\n' % (id, oset)) + logging.debug(" %s: Adjust location by %d\n" % (id, oset)) fd.seek(oset, 1) - byte_offset = hdr['dat_offsets'][n + 1] + byte_offset = hdr["dat_offsets"][n + 1] else: - if hdr['nbyte'] - 2 != byte_offset: + if hdr["nbyte"] - 2 != byte_offset: if not self._winrivprob: if self._debug_level > 0: - logging.debug(' {:d}: Adjust location by {:d}\n' - .format(id, hdr['nbyte'] - 2 - byte_offset)) - self.f.seek(hdr['nbyte'] - 2 - byte_offset, 1) - byte_offset = hdr['nbyte'] - 2 + logging.debug( + " {:d}: Adjust location by {:d}\n".format( + id, hdr["nbyte"] - 2 - byte_offset + ) + ) + self.f.seek(hdr["nbyte"] - 2 - byte_offset, 1) + byte_offset = hdr["nbyte"] - 2 # Check for vmdas again because vmdas doesn't set the offsets # correctly, and we need this info: if not self._read_vmdas and self._vmdas_search: if self._debug_level >= 1: - logging.info( - 'Searching for vmdas nav data. Going to next ensemble') + logging.info("Searching for vmdas nav data. Going to next ensemble") self.search_buffer() # now go back to where vmdas would be: fd.seek(-98, 1) id = self.f.read_ui16(1) if id is not None: if self._debug_level >= 1: - logging.info(f'Found {id:04d}') + logging.info(f"Found {id:04d}") if id == 8192: self.read_dat(id) readbytes = fd.tell() - startpos - offset = hdr['nbyte'] + 2 - readbytes + offset = hdr["nbyte"] + 2 - readbytes self.check_offset(offset, readbytes) self.print_pos(byte_offset=byte_offset) @@ -500,10 +545,10 @@ def search_buffer(self): search_cnt = 0 fd = self.f if self._debug_level >= 2: - logging.info(' -->In search_buffer...') - while (search_cnt < self._search_num and - ((id1[0] != 127 or id1[1] != 127) or - not self.checkheader())): + logging.info(" -->In search_buffer...") + while search_cnt < self._search_num and ( + (id1[0] != 127 or id1[1] != 127) or not self.checkheader() + ): search_cnt += 1 nextbyte = fd.read_ui8(1) if nextbyte == None: @@ -512,29 +557,34 @@ def search_buffer(self): id1[0] = nextbyte if search_cnt == self._search_num: raise Exception( - 'Searched {} entries... Bad data encountered. -> {}' - .format(search_cnt, id1)) + "Searched {} entries... Bad data encountered. -> {}".format( + search_cnt, id1 + ) + ) elif search_cnt > 0: if self._debug_level >= 1: - logging.info(' Searched {} bytes to find next ' - 'valid ensemble start [{:x}, {:x}]\n' - .format(search_cnt, *id1)) + logging.info( + " Searched {} bytes to find next " + "valid ensemble start [{:x}, {:x}]\n".format(search_cnt, *id1) + ) return True - def checkheader(self,): + def checkheader( + self, + ): if self._debug_level > 1: logging.info(" ###In checkheader.") fd = self.f valid = False if self._debug_level >= 0: - logging.info('pos {}'.format(self.f.pos)) + logging.info("pos {}".format(self.f.pos)) numbytes = fd.read_i16(1) if numbytes > 0: fd.seek(numbytes - 2, 1) cfgid = fd.read_ui8(2) if cfgid is None: if self._debug_level > 1: - logging.info('EOF') + logging.info("EOF") return False if len(cfgid) == 2: fd.seek(-numbytes - 2, 1) @@ -542,7 +592,7 @@ def checkheader(self,): if cfgid[1] == 121 and self._debug7f79 is None: self._debug7f79 = True if self._debug_level > 1: - logging.warning('7f79!!!') + logging.warning("7f79!!!") valid = True else: fd.seek(-2, 1) @@ -550,33 +600,39 @@ def checkheader(self,): logging.info(" ###Leaving checkheader.") return valid - def read_hdrseg(self,): + def read_hdrseg( + self, + ): fd = self.f hdr = self.hdr - hdr['nbyte'] = fd.read_i16(1) + hdr["nbyte"] = fd.read_i16(1) spare = fd.read_ui8(1) ndat = fd.read_ui8(1) - hdr['dat_offsets'] = fd.read_ui16(ndat) + hdr["dat_offsets"] = fd.read_ui16(ndat) self._nbyte = 4 + ndat * 2 - def print_progress(self,): + def print_progress( + self, + ): self.progress = self.f.tell() if self._debug_level > 1: - logging.debug(' pos %0.0fmb/%0.0fmb\n' % - (self.f.tell() / 1048576., self._filesize / 1048576.)) + logging.debug( + " pos %0.0fmb/%0.0fmb\n" + % (self.f.tell() / 1048576.0, self._filesize / 1048576.0) + ) if (self.f.tell() - self.progress) < 1048576: return def print_pos(self, byte_offset=-1): - """Print the position in the file, used for debugging. - """ + """Print the position in the file, used for debugging.""" if self._debug_level >= 2: - if hasattr(self, 'ensemble'): + if hasattr(self, "ensemble"): k = self.ensemble.k else: k = 0 logging.debug( - f' pos: {self.f.tell()}, pos_: {self._pos}, nbyte: {self._nbyte}, k: {k}, byte_offset: {byte_offset}') + f" pos: {self.f.tell()}, pos_: {self._pos}, nbyte: {self._nbyte}, k: {k}, byte_offset: {byte_offset}" + ) def check_offset(self, offset, readbytes): fd = self.f @@ -584,125 +640,130 @@ def check_offset(self, offset, readbytes): if self._debug_level > 0: if fd.tell() == self._filesize: logging.error( - ' EOF reached unexpectedly - discarding this last ensemble\n') + " EOF reached unexpectedly - discarding this last ensemble\n" + ) else: - logging.debug(" Adjust location by {:d} (readbytes={:d},hdr['nbyte']={:d})\n" - .format(offset, readbytes, self.hdr['nbyte'])) + logging.debug( + " Adjust location by {:d} (readbytes={:d},hdr['nbyte']={:d})\n".format( + offset, readbytes, self.hdr["nbyte"] + ) + ) self._fixoffset = offset - 4 fd.seek(4 + self._fixoffset, 1) def remove_end(self, iens): dat = self.outd if self._debug_level > 0: - logging.info(' Encountered end of file. Cleaning up data.') + logging.info(" Encountered end of file. Cleaning up data.") for nm in self.vars_read: defs._setd(dat, nm, defs._get(dat, nm)[..., :iens]) def read_dat(self, id): - function_map = {0: (self.read_fixed, []), # 0000 1st profile fixed leader - 1: (self.read_fixed, [True]), # 0001 - # 0010 Surface layer fixed leader (RiverPro & StreamPro) - 16: (self.read_fixed_sl, []), - # 0080 1st profile variable leader - 128: (self.read_var, [0]), - # 0081 2nd profile variable leader - 129: (self.read_var, [1]), - # 0100 1st profile velocity - 256: (self.read_vel, [0]), - # 0101 2nd profile velocity - 257: (self.read_vel, [1]), - # 0103 Waves first leader - 259: (self.skip_Nbyte, [74]), - # 0110 Surface layer velocity (RiverPro & StreamPro) - 272: (self.read_vel, [2]), - # 0200 1st profile correlation - 512: (self.read_corr, [0]), - # 0201 2nd profile correlation - 513: (self.read_corr, [1]), - # 0203 Waves data - 515: (self.skip_Nbyte, [186]), - # 020C Ambient sound profile - 524: (self.skip_Nbyte, [4]), - # 0210 Surface layer correlation (RiverPro & StreamPro) - 528: (self.read_corr, [2]), - # 0300 1st profile amplitude - 768: (self.read_amp, [0]), - # 0301 2nd profile amplitude - 769: (self.read_amp, [1]), - # 0302 Beam 5 Sum of squared velocities - 770: (self.skip_Ncol, []), - # 0303 Waves last leader - 771: (self.skip_Ncol, [18]), - # 0310 Surface layer amplitude (RiverPro & StreamPro) - 784: (self.read_amp, [2]), - # 0400 1st profile % good - 1024: (self.read_prcnt_gd, [0]), - # 0401 2nd profile pct good - 1025: (self.read_prcnt_gd, [1]), - # 0403 Waves HPR data - 1027: (self.skip_Nbyte, [6]), - # 0410 Surface layer pct good (RiverPro & StreamPro) - 1040: (self.read_prcnt_gd, [2]), - # 0500 1st profile status - 1280: (self.read_status, [0]), - # 0501 2nd profile status - 1281: (self.read_status, [1]), - # 0510 Surface layer status (RiverPro & StreamPro) - 1296: (self.read_status, [2]), - 1536: (self.read_bottom, []), # 0600 bottom tracking - 1793: (self.skip_Ncol, [4]), # 0701 number of pings - 1794: (self.skip_Ncol, [4]), # 0702 sum of squared vel - 1795: (self.skip_Ncol, [4]), # 0703 sum of velocities - 2560: (self.skip_Ncol, []), # 0A00 Beam 5 velocity - 2816: (self.skip_Ncol, []), # 0B00 Beam 5 correlation - 3072: (self.skip_Ncol, []), # 0C00 Beam 5 amplitude - 3328: (self.skip_Ncol, []), # 0D00 Beam 5 pct_good - # Fixed attitude data format for Ocean Surveyor ADCPs - 3000: (self.skip_Nbyte, [32]), - 3841: (self.skip_Nbyte, [38]), # 0F01 Beam 5 leader - 8192: (self.read_vmdas, []), # 2000 - # 2013 Navigation parameter data - 8211: (self.skip_Nbyte, [83]), - 8226: (self.read_winriver2, []), # 2022 - 8448: (self.read_winriver, [38]), # 2100 - 8449: (self.read_winriver, [97]), # 2101 - 8450: (self.read_winriver, [45]), # 2102 - 8451: (self.read_winriver, [60]), # 2103 - 8452: (self.read_winriver, [38]), # 2104 - # 3200 Transformation matrix - 12800: (self.skip_Nbyte, [32]), - # 3000 Fixed attitude data format for Ocean Surveyor ADCPs - 12288: (self.skip_Nbyte, [32]), - 12496: (self.skip_Nbyte, [24]), # 30D0 - 12504: (self.skip_Nbyte, [48]), # 30D8 - # 4100 beam 5 range - 16640: (self.read_alt, []), - # 4400 Firmware status data (RiverPro & StreamPro) - 17408: (self.skip_Nbyte, [28]), - # 4401 Auto mode setup (RiverPro & StreamPro) - 17409: (self.skip_Nbyte, [82]), - # 5803 High resolution bottom track velocity - 22531: (self.skip_Nbyte, [68]), - # 5804 Bottom track range - 22532: (self.skip_Nbyte, [21]), - # 5901 ISM (IMU) data - 22785: (self.skip_Nbyte, [65]), - # 5902 Ping attitude - 22786: (self.skip_Nbyte, [105]), - # 7001 ADC data - 28673: (self.skip_Nbyte, [14]), - } + function_map = { + 0: (self.read_fixed, []), # 0000 1st profile fixed leader + 1: (self.read_fixed, [True]), # 0001 + # 0010 Surface layer fixed leader (RiverPro & StreamPro) + 16: (self.read_fixed_sl, []), + # 0080 1st profile variable leader + 128: (self.read_var, [0]), + # 0081 2nd profile variable leader + 129: (self.read_var, [1]), + # 0100 1st profile velocity + 256: (self.read_vel, [0]), + # 0101 2nd profile velocity + 257: (self.read_vel, [1]), + # 0103 Waves first leader + 259: (self.skip_Nbyte, [74]), + # 0110 Surface layer velocity (RiverPro & StreamPro) + 272: (self.read_vel, [2]), + # 0200 1st profile correlation + 512: (self.read_corr, [0]), + # 0201 2nd profile correlation + 513: (self.read_corr, [1]), + # 0203 Waves data + 515: (self.skip_Nbyte, [186]), + # 020C Ambient sound profile + 524: (self.skip_Nbyte, [4]), + # 0210 Surface layer correlation (RiverPro & StreamPro) + 528: (self.read_corr, [2]), + # 0300 1st profile amplitude + 768: (self.read_amp, [0]), + # 0301 2nd profile amplitude + 769: (self.read_amp, [1]), + # 0302 Beam 5 Sum of squared velocities + 770: (self.skip_Ncol, []), + # 0303 Waves last leader + 771: (self.skip_Ncol, [18]), + # 0310 Surface layer amplitude (RiverPro & StreamPro) + 784: (self.read_amp, [2]), + # 0400 1st profile % good + 1024: (self.read_prcnt_gd, [0]), + # 0401 2nd profile pct good + 1025: (self.read_prcnt_gd, [1]), + # 0403 Waves HPR data + 1027: (self.skip_Nbyte, [6]), + # 0410 Surface layer pct good (RiverPro & StreamPro) + 1040: (self.read_prcnt_gd, [2]), + # 0500 1st profile status + 1280: (self.read_status, [0]), + # 0501 2nd profile status + 1281: (self.read_status, [1]), + # 0510 Surface layer status (RiverPro & StreamPro) + 1296: (self.read_status, [2]), + 1536: (self.read_bottom, []), # 0600 bottom tracking + 1793: (self.skip_Ncol, [4]), # 0701 number of pings + 1794: (self.skip_Ncol, [4]), # 0702 sum of squared vel + 1795: (self.skip_Ncol, [4]), # 0703 sum of velocities + 2560: (self.skip_Ncol, []), # 0A00 Beam 5 velocity + 2816: (self.skip_Ncol, []), # 0B00 Beam 5 correlation + 3072: (self.skip_Ncol, []), # 0C00 Beam 5 amplitude + 3328: (self.skip_Ncol, []), # 0D00 Beam 5 pct_good + # Fixed attitude data format for Ocean Surveyor ADCPs + 3000: (self.skip_Nbyte, [32]), + 3841: (self.skip_Nbyte, [38]), # 0F01 Beam 5 leader + 8192: (self.read_vmdas, []), # 2000 + # 2013 Navigation parameter data + 8211: (self.skip_Nbyte, [83]), + 8226: (self.read_winriver2, []), # 2022 + 8448: (self.read_winriver, [38]), # 2100 + 8449: (self.read_winriver, [97]), # 2101 + 8450: (self.read_winriver, [45]), # 2102 + 8451: (self.read_winriver, [60]), # 2103 + 8452: (self.read_winriver, [38]), # 2104 + # 3200 Transformation matrix + 12800: (self.skip_Nbyte, [32]), + # 3000 Fixed attitude data format for Ocean Surveyor ADCPs + 12288: (self.skip_Nbyte, [32]), + 12496: (self.skip_Nbyte, [24]), # 30D0 + 12504: (self.skip_Nbyte, [48]), # 30D8 + # 4100 beam 5 range + 16640: (self.read_alt, []), + # 4400 Firmware status data (RiverPro & StreamPro) + 17408: (self.skip_Nbyte, [28]), + # 4401 Auto mode setup (RiverPro & StreamPro) + 17409: (self.skip_Nbyte, [82]), + # 5803 High resolution bottom track velocity + 22531: (self.skip_Nbyte, [68]), + # 5804 Bottom track range + 22532: (self.skip_Nbyte, [21]), + # 5901 ISM (IMU) data + 22785: (self.skip_Nbyte, [65]), + # 5902 Ping attitude + 22786: (self.skip_Nbyte, [105]), + # 7001 ADC data + 28673: (self.skip_Nbyte, [14]), + } # Call the correct function: if self._debug_level >= 2: - logging.debug(f'Trying to Read {id}') + logging.debug(f"Trying to Read {id}") if id in function_map: if self._debug_level > 1: - logging.info(' Reading code {}...'.format(hex(id))) + logging.info(" Reading code {}...".format(hex(id))) retval = function_map.get(id)[0](*function_map[id][1]) if retval: return retval if self._debug_level > 1: - logging.info(' success!') + logging.info(" success!") else: self.read_nocode(id) @@ -710,29 +771,34 @@ def read_fixed(self, bb=False): self.read_cfgseg(bb=bb) self._nbyte += 2 if self._debug_level >= 0: - logging.info('Read Fixed') + logging.info("Read Fixed") # Check if n_cells changed (for winriver transect files) - if hasattr(self, 'ensemble') and (self.ensemble['n_cells'] != self.cfg['n_cells']): - diff = self.cfg['n_cells'] - self.ensemble['n_cells'] + if hasattr(self, "ensemble") and ( + self.ensemble["n_cells"] != self.cfg["n_cells"] + ): + diff = self.cfg["n_cells"] - self.ensemble["n_cells"] if diff > 0: self.flag = diff - self.ensemble = defs._ensemble(self.n_avg, self.cfg['n_cells']) + self.ensemble = defs._ensemble(self.n_avg, self.cfg["n_cells"]) # Not concerned if # of cells decreases if self._debug_level >= 1: - logging.warning('Number of cells changed to {}' - .format(self.cfg['n_cells'])) + logging.warning( + "Number of cells changed to {}".format(self.cfg["n_cells"]) + ) - def read_fixed_sl(self,): + def read_fixed_sl( + self, + ): # Surface layer profile cfg = self.cfg - cfg['surface_layer'] = 1 - cfg['n_cells_sl'] = self.f.read_ui8(1) - cfg['cell_size_sl'] = self.f.read_ui16(1) * .01 - cfg['bin1_dist_m_sl'] = round(self.f.read_ui16(1) * .01, 4) + cfg["surface_layer"] = 1 + cfg["n_cells_sl"] = self.f.read_ui8(1) + cfg["cell_size_sl"] = self.f.read_ui16(1) * 0.01 + cfg["bin1_dist_m_sl"] = round(self.f.read_ui16(1) * 0.01, 4) if self._debug_level >= 0: - logging.info('Read Surface Layer Config') + logging.info("Read Surface Layer Config") self._nbyte = 2 + 5 def read_cfgseg(self, bb=False): @@ -745,71 +811,68 @@ def read_cfgseg(self, bb=False): fd = self.f tmp = fd.read_ui8(5) prog_ver0 = tmp[0] - cfg['prog_ver'] = tmp[0] + tmp[1] / 100. - cfg['inst_model'] = defs.adcp_type.get(tmp[0], - 'unrecognized firmware version') + cfg["prog_ver"] = tmp[0] + tmp[1] / 100.0 + cfg["inst_model"] = defs.adcp_type.get(tmp[0], "unrecognized firmware version") config = tmp[2:4] - cfg['beam_angle'] = [15, 20, 30][(config[1] & 3)] + cfg["beam_angle"] = [15, 20, 30][(config[1] & 3)] beam5 = [0, 1][int((config[1] & 16) == 16)] - cfg['freq'] = ([75, 150, 300, 600, 1200, 2400, 38][(config[0] & 7)]) - cfg['beam_pattern'] = (['concave', - 'convex'][int((config[0] & 8) == 8)]) - cfg['orientation'] = ['down', 'up'][int((config[0] & 128) == 128)] - simflag = ['real', 'simulated'][tmp[4]] + cfg["freq"] = [75, 150, 300, 600, 1200, 2400, 38][(config[0] & 7)] + cfg["beam_pattern"] = ["concave", "convex"][int((config[0] & 8) == 8)] + cfg["orientation"] = ["down", "up"][int((config[0] & 128) == 128)] + simflag = ["real", "simulated"][tmp[4]] fd.seek(1, 1) - cfg['n_beams'] = fd.read_ui8(1) + beam5 - cfg['n_cells'] = fd.read_ui8(1) - cfg['pings_per_ensemble'] = fd.read_ui16(1) - cfg['cell_size'] = fd.read_ui16(1) * .01 - cfg['blank_dist'] = fd.read_ui16(1) * .01 - cfg['profiling_mode'] = fd.read_ui8(1) - cfg['min_corr_threshold'] = fd.read_ui8(1) - cfg['n_code_reps'] = fd.read_ui8(1) - cfg['min_prcnt_gd'] = fd.read_ui8(1) - cfg['max_error_vel'] = fd.read_ui16(1) / 1000 - cfg['sec_between_ping_groups'] = ( - np.sum(np.array(fd.read_ui8(3)) * - np.array([60., 1., .01]))) + cfg["n_beams"] = fd.read_ui8(1) + beam5 + cfg["n_cells"] = fd.read_ui8(1) + cfg["pings_per_ensemble"] = fd.read_ui16(1) + cfg["cell_size"] = fd.read_ui16(1) * 0.01 + cfg["blank_dist"] = fd.read_ui16(1) * 0.01 + cfg["profiling_mode"] = fd.read_ui8(1) + cfg["min_corr_threshold"] = fd.read_ui8(1) + cfg["n_code_reps"] = fd.read_ui8(1) + cfg["min_prcnt_gd"] = fd.read_ui8(1) + cfg["max_error_vel"] = fd.read_ui16(1) / 1000 + cfg["sec_between_ping_groups"] = np.sum( + np.array(fd.read_ui8(3)) * np.array([60.0, 1.0, 0.01]) + ) coord_sys = fd.read_ui8(1) - cfg['coord_sys'] = (['beam', 'inst', - 'ship', 'earth'][((coord_sys >> 3) & 3)]) - cfg['use_pitchroll'] = ['no', 'yes'][(coord_sys & 4) == 4] - cfg['use_3beam'] = ['no', 'yes'][(coord_sys & 2) == 2] - cfg['bin_mapping'] = ['no', 'yes'][(coord_sys & 1) == 1] - cfg['heading_misalign_deg'] = fd.read_i16(1) * .01 - cfg['magnetic_var_deg'] = fd.read_i16(1) * .01 - cfg['sensors_src'] = np.binary_repr(fd.read_ui8(1), 8) - cfg['sensors_avail'] = np.binary_repr(fd.read_ui8(1), 8) - cfg['bin1_dist_m'] = round(fd.read_ui16(1) * .01, 4) - cfg['transmit_pulse_m'] = fd.read_ui16(1) * .01 - cfg['water_ref_cells'] = list(fd.read_ui8(2)) # list for attrs - cfg['false_target_threshold'] = fd.read_ui8(1) + cfg["coord_sys"] = ["beam", "inst", "ship", "earth"][((coord_sys >> 3) & 3)] + cfg["use_pitchroll"] = ["no", "yes"][(coord_sys & 4) == 4] + cfg["use_3beam"] = ["no", "yes"][(coord_sys & 2) == 2] + cfg["bin_mapping"] = ["no", "yes"][(coord_sys & 1) == 1] + cfg["heading_misalign_deg"] = fd.read_i16(1) * 0.01 + cfg["magnetic_var_deg"] = fd.read_i16(1) * 0.01 + cfg["sensors_src"] = np.binary_repr(fd.read_ui8(1), 8) + cfg["sensors_avail"] = np.binary_repr(fd.read_ui8(1), 8) + cfg["bin1_dist_m"] = round(fd.read_ui16(1) * 0.01, 4) + cfg["transmit_pulse_m"] = fd.read_ui16(1) * 0.01 + cfg["water_ref_cells"] = list(fd.read_ui8(2)) # list for attrs + cfg["false_target_threshold"] = fd.read_ui8(1) fd.seek(1, 1) - cfg['transmit_lag_m'] = fd.read_ui16(1) * .01 + cfg["transmit_lag_m"] = fd.read_ui16(1) * 0.01 self._nbyte = 40 - if cfg['prog_ver'] >= 8.14: + if cfg["prog_ver"] >= 8.14: cpu_serialnum = fd.read_ui8(8) self._nbyte += 8 - if cfg['prog_ver'] >= 8.24: - cfg['bandwidth'] = fd.read_ui16(1) + if cfg["prog_ver"] >= 8.24: + cfg["bandwidth"] = fd.read_ui16(1) self._nbyte += 2 - if cfg['prog_ver'] >= 16.05: - cfg['power_level'] = fd.read_ui8(1) + if cfg["prog_ver"] >= 16.05: + cfg["power_level"] = fd.read_ui8(1) self._nbyte += 1 - if cfg['prog_ver'] >= 16.27: + if cfg["prog_ver"] >= 16.27: # cfg['navigator_basefreqindex'] = fd.read_ui8(1) fd.seek(1, 1) - cfg['serialnum'] = fd.read_ui32(1) - cfg['beam_angle'] = fd.read_ui8(1) + cfg["serialnum"] = fd.read_ui32(1) + cfg["beam_angle"] = fd.read_ui8(1) self._nbyte += 6 self.configsize = self.f.tell() - cfgstart if self._debug_level >= 0: - logging.info('Read Config') + logging.info("Read Config") def read_var(self, bb=False): - """ Read variable leader """ + """Read variable leader""" fd = self.f if bb: ens = self.ensembleBB @@ -818,22 +881,24 @@ def read_var(self, bb=False): ens.k += 1 ens = self.ensemble k = ens.k - self.vars_read += ['number', - 'rtc', - 'number', - 'builtin_test_fail', - 'c_sound', - 'depth', - 'heading', - 'pitch', - 'roll', - 'salinity', - 'temp', - 'min_preping_wait', - 'heading_std', - 'pitch_std', - 'roll_std', - 'adc'] + self.vars_read += [ + "number", + "rtc", + "number", + "builtin_test_fail", + "c_sound", + "depth", + "heading", + "pitch", + "roll", + "salinity", + "temp", + "min_preping_wait", + "heading_std", + "pitch_std", + "roll_std", + "adc", + ] ens.number[k] = fd.read_ui16(1) ens.rtc[:, k] = fd.read_ui8(7) ens.number[k] += 65535 * fd.read_ui8(1) @@ -845,8 +910,7 @@ def read_var(self, bb=False): ens.roll[k] = fd.read_i16(1) * 0.01 ens.salinity[k] = fd.read_i16(1) ens.temp[k] = fd.read_i16(1) * 0.01 - ens.min_preping_wait[k] = (fd.read_ui8( - 3) * np.array([60, 1, .01])).sum() + ens.min_preping_wait[k] = (fd.read_ui8(3) * np.array([60, 1, 0.01])).sum() ens.heading_std[k] = fd.read_ui8(1) ens.pitch_std[k] = fd.read_ui8(1) * 0.1 ens.roll_std[k] = fd.read_ui8(1) * 0.1 @@ -854,45 +918,45 @@ def read_var(self, bb=False): self._nbyte = 2 + 40 cfg = self.cfg - if cfg['inst_model'].lower() == 'broadband': - if cfg['prog_ver'] >= 5.55: + if cfg["inst_model"].lower() == "broadband": + if cfg["prog_ver"] >= 5.55: fd.seek(15, 1) cent = fd.read_ui8(1) ens.rtc[:, k] = fd.read_ui8(7) ens.rtc[0, k] = ens.rtc[0, k] + cent * 100 self._nbyte += 23 - elif cfg['inst_model'].lower() == 'ocean surveyor': + elif cfg["inst_model"].lower() == "ocean surveyor": fd.seek(16, 1) # 30 bytes all set to zero, 14 read above self._nbyte += 16 - if cfg['prog_ver'] > 23: + if cfg["prog_ver"] > 23: fd.seek(2, 1) self._nbyte += 2 else: ens.error_status[k] = np.binary_repr(fd.read_ui32(1), 32) - self.vars_read += ['pressure', 'pressure_std'] + self.vars_read += ["pressure", "pressure_std"] self._nbyte += 4 - if cfg['prog_ver'] >= 8.13: + if cfg["prog_ver"] >= 8.13: # Added pressure sensor stuff in 8.13 fd.seek(2, 1) ens.pressure[k] = fd.read_ui32(1) / 1000 # dPa to dbar ens.pressure_std[k] = fd.read_ui32(1) / 1000 self._nbyte += 10 - if cfg['prog_ver'] >= 8.24: + if cfg["prog_ver"] >= 8.24: # Spare byte added 8.24 fd.seek(1, 1) self._nbyte += 1 - if cfg['prog_ver'] >= 16.05: + if cfg["prog_ver"] >= 16.05: # Added more fields with century in clock cent = fd.read_ui8(1) ens.rtc[:, k] = fd.read_ui8(7) ens.rtc[0, k] = ens.rtc[0, k] + cent * 100 self._nbyte += 8 - if cfg['prog_ver'] >= 56: + if cfg["prog_ver"] >= 56: fd.seek(1) # lag near bottom flag self._nbyte += 1 if self._debug_level >= 0: - logging.info('Read Var') + logging.info("Read Var") def switch_profile(self, bb): if bb == 1: @@ -900,91 +964,90 @@ def switch_profile(self, bb): cfg = self.cfgbb # Placeholder for dual profile mode # Solution for vmdas profile in bb spot (vs nb) - tag = '' + tag = "" elif bb == 2: ens = self.ensemble cfg = self.cfg - tag = '_sl' + tag = "_sl" else: ens = self.ensemble cfg = self.cfg - tag = '' + tag = "" return ens, cfg, tag def read_vel(self, bb=0): ens, cfg, tg = self.switch_profile(bb) - self.vars_read += ['vel'+tg] - n_cells = cfg['n_cells'+tg] + self.vars_read += ["vel" + tg] + n_cells = cfg["n_cells" + tg] k = ens.k - vel = np.array( - self.f.read_i16(4 * n_cells) - ).reshape((n_cells, 4)) * .001 - ens['vel'+tg][:n_cells, :, k] = vel + vel = np.array(self.f.read_i16(4 * n_cells)).reshape((n_cells, 4)) * 0.001 + ens["vel" + tg][:n_cells, :, k] = vel self._nbyte = 2 + 4 * n_cells * 2 if self._debug_level >= 0: - logging.info('Read Vel') + logging.info("Read Vel") def read_corr(self, bb=0): ens, cfg, tg = self.switch_profile(bb) - self.vars_read += ['corr'+tg] - n_cells = cfg['n_cells'+tg] + self.vars_read += ["corr" + tg] + n_cells = cfg["n_cells" + tg] k = ens.k - ens['corr'+tg][:n_cells, :, k] = np.array( + ens["corr" + tg][:n_cells, :, k] = np.array( self.f.read_ui8(4 * n_cells) ).reshape((n_cells, 4)) self._nbyte = 2 + 4 * n_cells if self._debug_level >= 0: - logging.info('Read Corr') + logging.info("Read Corr") def read_amp(self, bb=0): ens, cfg, tg = self.switch_profile(bb) - self.vars_read += ['amp'+tg] - n_cells = cfg['n_cells'+tg] + self.vars_read += ["amp" + tg] + n_cells = cfg["n_cells" + tg] k = ens.k - ens['amp'+tg][:n_cells, :, k] = np.array( + ens["amp" + tg][:n_cells, :, k] = np.array( self.f.read_ui8(4 * n_cells) ).reshape((n_cells, 4)) self._nbyte = 2 + 4 * n_cells if self._debug_level >= 0: - logging.info('Read Amp') + logging.info("Read Amp") def read_prcnt_gd(self, bb=0): ens, cfg, tg = self.switch_profile(bb) - self.vars_read += ['prcnt_gd'+tg] - n_cells = cfg['n_cells'+tg] + self.vars_read += ["prcnt_gd" + tg] + n_cells = cfg["n_cells" + tg] - ens['prcnt_gd'+tg][:n_cells, :, ens.k] = np.array( + ens["prcnt_gd" + tg][:n_cells, :, ens.k] = np.array( self.f.read_ui8(4 * n_cells) ).reshape((n_cells, 4)) self._nbyte = 2 + 4 * n_cells if self._debug_level >= 0: - logging.info('Read PG') + logging.info("Read PG") def read_status(self, bb=0): ens, cfg, tg = self.switch_profile(bb) - self.vars_read += ['status'+tg] - n_cells = cfg['n_cells'+tg] + self.vars_read += ["status" + tg] + n_cells = cfg["n_cells" + tg] - ens['status'+tg][:n_cells, :, ens.k] = np.array( + ens["status" + tg][:n_cells, :, ens.k] = np.array( self.f.read_ui8(4 * n_cells) ).reshape((n_cells, 4)) self._nbyte = 2 + 4 * n_cells if self._debug_level >= 0: - logging.info('Read Status') + logging.info("Read Status") - def read_bottom(self,): - self.vars_read += ['dist_bt', 'vel_bt', 'corr_bt', 'amp_bt', - 'prcnt_gd_bt'] + def read_bottom( + self, + ): + self.vars_read += ["dist_bt", "vel_bt", "corr_bt", "amp_bt", "prcnt_gd_bt"] fd = self.f ens = self.ensemble k = ens.k cfg = self.cfg if self._source == 2: - self.vars_read += ['latitude_gps', 'longitude_gps'] + self.vars_read += ["latitude_gps", "longitude_gps"] fd.seek(2, 1) long1 = fd.read_ui16(1) fd.seek(6, 1) @@ -1000,8 +1063,7 @@ def read_bottom(self,): ens.prcnt_gd_bt[:, k] = fd.read_ui8(4) if self._source == 2: fd.seek(2, 1) - ens.longitude_gps[k] = ( - long1 + 65536 * fd.read_ui16(1)) * self._cfac + ens.longitude_gps[k] = (long1 + 65536 * fd.read_ui16(1)) * self._cfac if ens.longitude_gps[k] > 180: ens.longitude_gps[k] = ens.longitude_gps[k] - 360 if ens.longitude_gps[k] == 0: @@ -1010,9 +1072,10 @@ def read_bottom(self,): qual = fd.read_ui8(1) if qual == 0: if self._debug_level > 0: - logging.info(' qual==%d,%f %f' % (qual, - ens.latitude_gps[k], - ens.longitude_gps[k])) + logging.info( + " qual==%d,%f %f" + % (qual, ens.latitude_gps[k], ens.longitude_gps[k]) + ) ens.latitude_gps[k] = np.NaN ens.longitude_gps[k] = np.NaN fd.seek(71 - 45 - 16 - 17, 1) @@ -1021,81 +1084,85 @@ def read_bottom(self,): # Skip reference layer data fd.seek(26, 1) self._nbyte = 2 + 68 - if cfg['prog_ver'] >= 5.3: + if cfg["prog_ver"] >= 5.3: fd.seek(7, 1) # skip to rangeMsb bytes ens.dist_bt[:, k] = ens.dist_bt[:, k] + fd.read_ui8(4) * 655.36 self._nbyte += 11 - if cfg['prog_ver'] >= 16.2 and (cfg.get('sourceprog') != 'WINRIVER'): + if cfg["prog_ver"] >= 16.2 and (cfg.get("sourceprog") != "WINRIVER"): fd.seek(4, 1) # not documented self._nbyte += 4 - if cfg['prog_ver'] >= 56.1: + if cfg["prog_ver"] >= 56.1: fd.seek(4, 1) # not documented self._nbyte += 4 if self._debug_level >= 0: - logging.info('Read Bottom Track') + logging.info("Read Bottom Track") - def read_alt(self,): - """Read altimeter (vertical beam range) """ + def read_alt( + self, + ): + """Read altimeter (vertical beam range)""" fd = self.f ens = self.ensemble k = ens.k - self.vars_read += ['alt_dist', 'alt_rssi', 'alt_eval', 'alt_status'] + self.vars_read += ["alt_dist", "alt_rssi", "alt_eval", "alt_status"] ens.alt_eval[k] = fd.read_ui8(1) # evaluation amplitude ens.alt_rssi[k] = fd.read_ui8(1) # RSSI amplitude ens.alt_dist[k] = fd.read_ui32(1) / 1000 # range to surface/seafloor ens.alt_status[k] = fd.read_ui8(1) # status bit flags self._nbyte = 7 + 2 if self._debug_level >= 0: - logging.info('Read Altimeter') + logging.info("Read Altimeter") - def read_vmdas(self,): + def read_vmdas( + self, + ): """Read VMDAS Navigation block""" fd = self.f - self.cfg['sourceprog'] = 'VMDAS' + self.cfg["sourceprog"] = "VMDAS" ens = self.ensemble k = ens.k if self._source != 1 and self._debug_level >= 0: - logging.info(' \n***** Apparently a VMDAS file \n\n') + logging.info(" \n***** Apparently a VMDAS file \n\n") self._source = 1 - self.vars_read += ['time_gps', - 'clock_offset_UTC_gps', - 'latitude_gps', - 'longitude_gps', - 'avg_speed_gps', - 'avg_dir_gps', - 'speed_made_good_gps', - 'dir_made_good_gps', - 'flags_gps', - 'pitch_gps', - 'roll_gps', - 'heading_gps', - ] + self.vars_read += [ + "time_gps", + "clock_offset_UTC_gps", + "latitude_gps", + "longitude_gps", + "avg_speed_gps", + "avg_dir_gps", + "speed_made_good_gps", + "dir_made_good_gps", + "flags_gps", + "pitch_gps", + "roll_gps", + "heading_gps", + ] # UTC date time utim = fd.read_ui8(4) date_utc = tmlib.datetime(utim[2] + utim[3] * 256, utim[1], utim[0]) # 1st lat/lon position after previous ADCP ping # This byte is in hundredths of seconds (10s of milliseconds): - utc_time_first_fix = tmlib.timedelta( - milliseconds=(int(fd.read_ui32(1) / 10))) - ens.clock_offset_UTC_gps[k] = fd.read_i32( - 1) / 1000 # "PC clock offset from UTC" in ms + utc_time_first_fix = tmlib.timedelta(milliseconds=(int(fd.read_ui32(1) / 10))) + ens.clock_offset_UTC_gps[k] = ( + fd.read_i32(1) / 1000 + ) # "PC clock offset from UTC" in ms latitude_first_gps = fd.read_i32(1) * self._cfac longitude_first_gps = fd.read_i32(1) * self._cfac # Last lat/lon position prior to current ADCP ping - utc_time_fix = tmlib.timedelta( - milliseconds=(int(fd.read_ui32(1) / 10))) + utc_time_fix = tmlib.timedelta(milliseconds=(int(fd.read_ui32(1) / 10))) ens.time_gps[k] = tmlib.date2epoch(date_utc + utc_time_fix)[0] ens.latitude_gps[k] = fd.read_i32(1) * self._cfac ens.longitude_gps[k] = fd.read_i32(1) * self._cfac ens.avg_speed_gps[k] = fd.read_ui16(1) / 1000 - ens.avg_dir_gps[k] = fd.read_ui16(1) * 180 / 2 ** 15 # avg true track + ens.avg_dir_gps[k] = fd.read_ui16(1) * 180 / 2**15 # avg true track fd.seek(2, 1) # avg magnetic track ens.speed_made_good_gps[k] = fd.read_ui16(1) / 1000 - ens.dir_made_good_gps[k] = fd.read_ui16(1) * 180 / 2 ** 15 + ens.dir_made_good_gps[k] = fd.read_ui16(1) * 180 / 2**15 fd.seek(2, 1) # reserved ens.flags_gps[k] = int(np.binary_repr(fd.read_ui16(1))) fd.seek(6, 1) # reserved, ADCP ensemble # @@ -1103,28 +1170,29 @@ def read_vmdas(self,): # ADCP date time utim = fd.read_ui8(4) date_adcp = tmlib.datetime(utim[0] + utim[1] * 256, utim[3], utim[2]) - time_adcp = tmlib.timedelta( - milliseconds=(int(fd.read_ui32(1) / 10))) + time_adcp = tmlib.timedelta(milliseconds=(int(fd.read_ui32(1) / 10))) - ens.pitch_gps[k] = fd.read_ui16(1) * 180 / 2 ** 15 - ens.roll_gps[k] = fd.read_ui16(1) * 180 / 2 ** 15 - ens.heading_gps[k] = fd.read_ui16(1) * 180 / 2 ** 15 + ens.pitch_gps[k] = fd.read_ui16(1) * 180 / 2**15 + ens.roll_gps[k] = fd.read_ui16(1) * 180 / 2**15 + ens.heading_gps[k] = fd.read_ui16(1) * 180 / 2**15 fd.seek(10, 1) self._nbyte = 2 + 76 if self._debug_level >= 0: - logging.info('Read VMDAS') + logging.info("Read VMDAS") self._read_vmdas = True - def read_winriver2(self, ): + def read_winriver2( + self, + ): startpos = self.f.tell() self._winrivprob = True - self.cfg['sourceprog'] = 'WinRiver2' + self.cfg["sourceprog"] = "WinRiver2" ens = self.ensemble k = ens.k if self._debug_level >= 0: - logging.info('Read WinRiver2') + logging.info("Read WinRiver2") self._source = 3 spid = self.f.read_ui16(1) # NMEA specific IDs @@ -1132,21 +1200,24 @@ def read_winriver2(self, ): sz = self.f.read_ui16(1) dtime = self.f.read_f64(1) if sz <= 43: # If no sentence, data is still stored in nmea format - empty_gps = self.f.reads(sz-2) + empty_gps = self.f.reads(sz - 2) self.f.seek(2, 1) else: # TRDI rewrites the nmea string into their format if one is found start_string = self.f.reads(6) if type(start_string) != str: if self._debug_level >= 1: - logging.warning(f'Invalid GGA string found in ensemble {k},' - ' skipping...') - return 'FAIL' + logging.warning( + f"Invalid GGA string found in ensemble {k}," " skipping..." + ) + return "FAIL" self.f.seek(1, 1) gga_time = self.f.reads(9) - time = tmlib.timedelta(hours=int(gga_time[0:2]), - minutes=int(gga_time[2:4]), - seconds=int(gga_time[4:6]), - milliseconds=int(float(gga_time[6:])*1000)) + time = tmlib.timedelta( + hours=int(gga_time[0:2]), + minutes=int(gga_time[2:4]), + seconds=int(gga_time[4:6]), + milliseconds=int(float(gga_time[6:]) * 1000), + ) clock = self.ensemble.rtc[:, :] if clock[0, 0] < 100: clock[0, :] += defs.century @@ -1155,11 +1226,11 @@ def read_winriver2(self, ): self.f.seek(1, 1) ens.latitude_gps[k] = self.f.read_f64(1) tcNS = self.f.reads(1) # 'N' or 'S' - if tcNS == 'S': + if tcNS == "S": ens.latitude_gps[k] *= -1 ens.longitude_gps[k] = self.f.read_f64(1) tcEW = self.f.reads(1) # 'E' or 'W' - if tcEW == 'W': + if tcEW == "W": ens.longitude_gps[k] *= -1 ens.fix_gps[k] = self.f.read_ui8(1) # gps fix type/quality ens.n_sat_gps[k] = self.f.read_ui8(1) # of satellites @@ -1171,23 +1242,32 @@ def read_winriver2(self, ): m2 = self.f.reads(1) # geoid unit, 'm' ens.rtk_age_gps[k] = self.f.read_float(1) station_id = self.f.read_ui16(1) - self.vars_read += ['time_gps', 'longitude_gps', 'latitude_gps', 'fix_gps', - 'n_sat_gps', 'hdop_gps', 'elevation_gps', 'rtk_age_gps'] + self.vars_read += [ + "time_gps", + "longitude_gps", + "latitude_gps", + "fix_gps", + "n_sat_gps", + "hdop_gps", + "elevation_gps", + "rtk_age_gps", + ] self._nbyte = self.f.tell() - startpos + 2 elif spid in [5, 105]: # VTG sz = self.f.read_ui16(1) dtime = self.f.read_f64(1) if sz <= 22: # if no data - empty_gps = self.f.reads(sz-2) + empty_gps = self.f.reads(sz - 2) self.f.seek(2, 1) else: start_string = self.f.reads(6) if type(start_string) != str: if self._debug_level >= 1: - logging.warning(f'Invalid VTG string found in ensemble {k},' - ' skipping...') - return 'FAIL' + logging.warning( + f"Invalid VTG string found in ensemble {k}," " skipping..." + ) + return "FAIL" self.f.seek(1, 1) true_track = self.f.read_float(1) t = self.f.reads(1) # 'T' @@ -1201,23 +1281,23 @@ def read_winriver2(self, ): # knots -> m/s ens.speed_over_grnd_gps[k] = speed_knot / 1.944 ens.dir_over_grnd_gps[k] = true_track - self.vars_read += ['speed_over_grnd_gps', - 'dir_over_grnd_gps'] + self.vars_read += ["speed_over_grnd_gps", "dir_over_grnd_gps"] self._nbyte = self.f.tell() - startpos + 2 elif spid in [6, 106]: # 'DBT' depth sounder sz = self.f.read_ui16(1) dtime = self.f.read_f64(1) if sz <= 20: - empty_gps = self.f.reads(sz-2) + empty_gps = self.f.reads(sz - 2) self.f.seek(2, 1) else: start_string = self.f.reads(6) if type(start_string) != str: if self._debug_level >= 1: - logging.warning(f'Invalid DBT string found in ensemble {k},' - ' skipping...') - return 'FAIL' + logging.warning( + f"Invalid DBT string found in ensemble {k}," " skipping..." + ) + return "FAIL" self.f.seek(1, 1) depth_ft = self.f.read_float(1) ft = self.f.reads(1) # 'f' @@ -1226,44 +1306,47 @@ def read_winriver2(self, ): depth_fathom = self.f.read_float(1) f = self.f.reads(1) # 'F' ens.dist_nmea[k] = depth_m - self.vars_read += ['dist_nmea'] + self.vars_read += ["dist_nmea"] self._nbyte = self.f.tell() - startpos + 2 elif spid in [7, 107]: # 'HDT' sz = self.f.read_ui16(1) dtime = self.f.read_f64(1) if sz <= 14: - empty_gps = self.f.reads(sz-2) + empty_gps = self.f.reads(sz - 2) self.f.seek(2, 1) else: start_string = self.f.reads(6) if type(start_string) != str: if self._debug_level >= 1: - logging.warning(f'Invalid HDT string found in ensemble {k},' - ' skipping...') - return 'FAIL' + logging.warning( + f"Invalid HDT string found in ensemble {k}," " skipping..." + ) + return "FAIL" self.f.seek(1, 1) ens.heading_gps[k] = self.f.read_f64(1) tt = self.f.reads(1) - self.vars_read += ['heading_gps'] + self.vars_read += ["heading_gps"] self._nbyte = self.f.tell() - startpos + 2 def read_winriver(self, nbt): self._winrivprob = True - self.cfg['sourceprog'] = 'WINRIVER' + self.cfg["sourceprog"] = "WINRIVER" if self._source not in [2, 3]: if self._debug_level >= 0: - logging.warning('\n***** Apparently a WINRIVER file - ' - 'Raw NMEA data handler not yet implemented\n') + logging.warning( + "\n***** Apparently a WINRIVER file - " + "Raw NMEA data handler not yet implemented\n" + ) self._source = 2 startpos = self.f.tell() sz = self.f.read_ui16(1) - tmp = self.f.reads(sz-2) + tmp = self.f.reads(sz - 2) self._nbyte = self.f.tell() - startpos + 2 def skip_Ncol(self, n_skip=1): - self.f.seek(n_skip * self.cfg['n_cells'], 1) - self._nbyte = 2 + n_skip * self.cfg['n_cells'] + self.f.seek(n_skip * self.cfg["n_cells"], 1) + self._nbyte = 2 + n_skip * self.cfg["n_cells"] def skip_Nbyte(self, n_skip): self.f.seek(n_skip, 1) @@ -1272,75 +1355,81 @@ def skip_Nbyte(self, n_skip): def read_nocode(self, id): # Skipping bytes from codes 0340-30FC, commented if needed hxid = hex(id) - if hxid[2:4] == '30': + if hxid[2:4] == "30": logging.warning("Skipping bytes from codes 0340-30FC") # I want to count the number of 1s in the middle 4 bits # of the 2nd two bytes. # 60 is a 0b00111100 mask - nflds = (bin(int(hxid[3]) & 60).count('1') + - bin(int(hxid[4]) & 60).count('1')) + nflds = bin(int(hxid[3]) & 60).count("1") + bin(int(hxid[4]) & 60).count( + "1" + ) # I want to count the number of 1s in the highest # 2 bits of byte 3 # 3 is a 0b00000011 mask: - dfac = bin(int(hxid[3], 0) & 3).count('1') + dfac = bin(int(hxid[3], 0) & 3).count("1") self.skip_Nbyte(12 * nflds * dfac) else: if self._debug_level >= 0: - logging.warning(' Unrecognized ID code: %0.4X' % id) + logging.warning(" Unrecognized ID code: %0.4X" % id) self.skip_nocode(id) def skip_nocode(self, id): # Skipping bytes if ID isn't known offsets = list(self.id_positions.values()) idx = np.where(offsets == self.id_positions[id])[0][0] - byte_len = offsets[idx+1] - offsets[idx] - 2 + byte_len = offsets[idx + 1] - offsets[idx] - 2 self.skip_Nbyte(byte_len) if self._debug_level >= 0: logging.debug(f"Skipping ID code {id}\n") def cleanup(self, cfg, dat): - dat['coords']['range'] = (cfg['bin1_dist_m'] + - np.arange(self.ensemble['n_cells']) * - cfg['cell_size']) + dat["coords"]["range"] = ( + cfg["bin1_dist_m"] + np.arange(self.ensemble["n_cells"]) * cfg["cell_size"] + ) for nm in cfg: - dat['attrs'][nm] = cfg[nm] + dat["attrs"][nm] = cfg[nm] - if 'surface_layer' in cfg: # RiverPro/StreamPro - dat['coords']['range_sl'] = (cfg['bin1_dist_m_sl'] + - np.arange(self.cfg['n_cells_sl']) * - cfg['cell_size_sl']) + if "surface_layer" in cfg: # RiverPro/StreamPro + dat["coords"]["range_sl"] = ( + cfg["bin1_dist_m_sl"] + + np.arange(self.cfg["n_cells_sl"]) * cfg["cell_size_sl"] + ) # Trim surface layer profile to length - dv = dat['data_vars'] + dv = dat["data_vars"] for var in dv: - if 'sl' in var: - dv[var] = dv[var][:cfg['n_cells_sl']] - dat['attrs']['rotate_vars'].append('vel_sl') + if "sl" in var: + dv[var] = dv[var][: cfg["n_cells_sl"]] + dat["attrs"]["rotate_vars"].append("vel_sl") def finalize(self, dat): - """Remove the attributes from the data that were never loaded. - """ + """Remove the attributes from the data that were never loaded.""" for nm in set(defs.data_defs.keys()) - self.vars_read: defs._pop(dat, nm) for nm in self.cfg: - dat['attrs'][nm] = self.cfg[nm] + dat["attrs"][nm] = self.cfg[nm] # VMDAS and WinRiver have different set sampling frequency - da = dat['attrs'] - if hasattr(da, 'sourceprog') and (da['sourceprog'].lower() in ['vmdas', 'winriver', 'winriver2']): - da['fs'] = round(np.diff(dat['coords']['time']).mean() ** -1, 2) + da = dat["attrs"] + if hasattr(da, "sourceprog") and ( + da["sourceprog"].lower() in ["vmdas", "winriver", "winriver2"] + ): + da["fs"] = round(np.diff(dat["coords"]["time"]).mean() ** -1, 2) else: - da['fs'] = (da['sec_between_ping_groups'] * - da['pings_per_ensemble']) ** (-1) - da['n_cells'] = self.ensemble['n_cells'] + da["fs"] = (da["sec_between_ping_groups"] * da["pings_per_ensemble"]) ** ( + -1 + ) + da["n_cells"] = self.ensemble["n_cells"] for nm in defs.data_defs: shp = defs.data_defs[nm][0] - if len(shp) and shp[0] == 'nc' and defs._in_group(dat, nm): + if len(shp) and shp[0] == "nc" and defs._in_group(dat, nm): defs._setd(dat, nm, np.swapaxes(defs._get(dat, nm), 0, 1)) - def __enter__(self,): + def __enter__( + self, + ): return self def __exit__(self, type, value, traceback): diff --git a/mhkit/dolfyn/io/rdi_defs.py b/mhkit/dolfyn/io/rdi_defs.py index 8c65812db..f7c249c50 100644 --- a/mhkit/dolfyn/io/rdi_defs.py +++ b/mhkit/dolfyn/io/rdi_defs.py @@ -1,105 +1,325 @@ import numpy as np century = 2000 -adcp_type = {4: 'Broadband', - 5: 'Broadband', - 6: 'Navigator', - 10: 'Rio Grande', - 11: 'H-ADCP', - 14: 'Ocean Surveyor', - 16: 'Workhorse', - 19: 'Navigator', - 23: 'Ocean Surveyor', - 28: 'ChannelMaster', - 31: 'StreamPro', - 34: 'Explorer', - 37: 'Navigator', - 41: 'DVS', - 43: 'Workhorse', - 44: 'RiverRay', - 47: 'SentinelV', - 50: 'Workhorse', - 51: 'Workhorse', - 52: 'Workhorse', - 53: 'Navigator', - 55: 'DVS', - 56: 'RiverPro', - 59: 'Meridian', - 61: 'Pinnacle', - 66: 'SentinelV', - 67: 'Pathfinder', - 73: 'Pioneer', - 74: 'Tasman', - 76: 'WayFinder', - 77: 'Workhorse', - 78: 'Workhorse', - } - -data_defs = {'number': ([], 'data_vars', 'uint32', '1', 'Ensemble Number', 'number_of_observations'), - 'rtc': ([7], 'sys', 'uint16', '1', 'Real Time Clock', ''), - 'builtin_test_fail': ([], 'data_vars', 'bool', '1', 'Built-In Test Failures', ''), - 'c_sound': ([], 'data_vars', 'float32', 'm s-1', 'Speed of Sound', 'speed_of_sound_in_sea_water'), - 'depth': ([], 'data_vars', 'float32', 'm', 'Depth', 'depth'), - 'pitch': ([], 'data_vars', 'float32', 'degree', 'Pitch', 'platform_pitch'), - 'roll': ([], 'data_vars', 'float32', 'degree', 'Roll', 'platform_roll'), - 'heading': ([], 'data_vars', 'float32', 'degree', 'Heading', 'platform_orientation'), - 'temp': ([], 'data_vars', 'float32', 'degree_C', 'Temperature', 'sea_water_temperature'), - 'salinity': ([], 'data_vars', 'float32', 'psu', 'Salinity', 'sea_water_salinity'), - 'min_preping_wait': ([], 'data_vars', 'float32', 's', 'Minimum Pre-Ping Wait Time Between Measurements', ''), - 'heading_std': ([], 'data_vars', 'float32', 'degree', 'Heading Standard Deviation', ''), - 'pitch_std': ([], 'data_vars', 'float32', 'degree', 'Pitch Standard Deviation', ''), - 'roll_std': ([], 'data_vars', 'float32', 'degree', 'Roll Standard Deviation', ''), - 'adc': ([8], 'sys', 'uint8', '1', 'Analog-Digital Converter Output', ''), - 'error_status': ([], 'attrs', 'float32', '1', 'Error Status', ''), - 'pressure': ([], 'data_vars', 'float32', 'dbar', 'Pressure', 'sea_water_pressure'), - 'pressure_std': ([], 'data_vars', 'float32', 'dbar', 'Pressure Standard Deviation', ''), - 'vel': (['nc', 4], 'data_vars', 'float32', 'm s-1', 'Water Velocity', ''), - 'amp': (['nc', 4], 'data_vars', 'uint8', '1', 'Acoustic Signal Amplitude', - 'signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water'), - 'corr': (['nc', 4], 'data_vars', 'uint8', '1', 'Acoustic Signal Correlation', - 'beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water'), - 'prcnt_gd': (['nc', 4], 'data_vars', 'uint8', '%', 'Percent Good', - 'proportion_of_acceptable_signal_returns_from_acoustic_instrument_in_sea_water'), - 'status': (['nc', 4], 'data_vars', 'float32', '1', 'Status', ''), - 'dist_bt': ([4], 'data_vars', 'float32', 'm', 'Bottom Track Measured Depth', ''), - 'vel_bt': ([4], 'data_vars', 'float32', 'm s-1', 'Platform Velocity from Bottom Track', ''), - 'corr_bt': ([4], 'data_vars', 'uint8', '1', 'Bottom Track Acoustic Signal Correlation', ''), - 'amp_bt': ([4], 'data_vars', 'uint8', '1', 'Bottom Track Acoustic Signal Amplitude', ''), - 'prcnt_gd_bt': ([4], 'data_vars', 'uint8', '%', 'Bottom Track Percent Good', ''), - 'time': ([], 'coords', 'float64', 'seconds since 1970-01-01 00:00:00', 'Time', 'time'), - 'alt_dist': ([], 'data_vars', 'float32', 'm', 'Altimeter Range', 'altimeter_range'), - 'alt_rssi': ([], 'data_vars', 'uint8', 'dB', 'Altimeter Recieved Signal Strength Indicator', ''), - 'alt_eval': ([], 'data_vars', 'uint8', 'dB', 'Altimeter Evaluation Amplitude', ''), - 'alt_status': ([], 'data_vars', 'uint8', 'bit', 'Altimeter Status', ''), - 'time_gps': ([], 'coords', 'float64', 'seconds since 1970-01-01 00:00:00', 'GPS Time', 'time'), - 'clock_offset_UTC_gps': ([], 'data_vars', 'float64', 's', 'Instrument Clock Offset from UTC', ''), - 'latitude_gps': ([], 'data_vars', 'float32', 'degrees_north', 'Latitude', 'latitude'), - 'longitude_gps': ([], 'data_vars', 'float32', 'degrees_east', 'Longitude', 'longitude'), - 'avg_speed_gps': ([], 'data_vars', 'float32', 'm s-1', 'Average Platform Speed', 'platform_speed_wrt_ground'), - 'avg_dir_gps': ([], 'data_vars', 'float32', 'degree', 'Average Platform Direction', 'platform_course'), - 'speed_made_good_gps': ([], 'data_vars', 'float32', 'm s-1', 'Platform Speed Made Good', 'platform_speed_wrt_ground'), - 'dir_made_good_gps': ([], 'data_vars', 'float32', 'degree', 'Platform Direction Made Good', 'platform_course'), - 'flags_gps': ([], 'data_vars', 'float32', 'bits', 'GPS Flags', ''), - 'fix_gps': ([], 'data_vars', 'int8', '1', 'GPS Fix', ''), - 'n_sat_gps': ([], 'data_vars', 'int8', 'count', 'Number of Satellites', ''), - 'hdop_gps': ([], 'data_vars', 'float32', '1', 'Horizontal Dilution of Precision', ''), - 'elevation_gps': ([], 'data_vars', 'float32', 'm', 'Elevation above MLLW', ''), - 'rtk_age_gps': ([], 'data_vars', 'float32', 's', 'Age of Received Real Time Kinetic Signal', ''), - 'speed_over_grnd_gps': ([], 'data_vars', 'float32', 'm s-1', 'Platform Speed over Ground', 'platform_speed_wrt_ground'), - 'dir_over_grnd_gps': ([], 'data_vars', 'float32', 'degree', 'Platform Direction over Ground', 'platform_course'), - 'heading_gps': ([], 'data_vars', 'float32', 'degree', 'GPS Heading', 'platform_orientation'), - 'pitch_gps': ([], 'data_vars', 'float32', 'degree', 'GPS Pitch', 'platform_pitch'), - 'roll_gps': ([], 'data_vars', 'float32', 'degree', 'GPS Roll', 'platform_roll'), - 'dist_nmea': ([], 'data_vars', 'float32', 'm', 'Depth Sounder Range', ''), - 'vel_sl': (['nc', 4], 'data_vars', 'float32', 'm s-1', 'Surface Layer Water Velocity', ''), - 'corr_sl': (['nc', 4], 'data_vars', 'uint8', '1', 'Surface Layer Acoustic Signal Correlation', - 'beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water'), - 'amp_sl': (['nc', 4], 'data_vars', 'uint8', '1', 'Surface Layer Acoustic Signal Amplitude', - 'signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water'), - 'prcnt_gd_sl': (['nc', 4], 'data_vars', 'uint8', '%', 'Surface Layer Percent Good', - 'proportion_of_acceptable_signal_returns_from_acoustic_instrument_in_sea_water'), - 'status_sl': (['nc', 4], 'data_vars', 'float32', '1', 'Surface Layer Status', ''), - } +adcp_type = { + 4: "Broadband", + 5: "Broadband", + 6: "Navigator", + 10: "Rio Grande", + 11: "H-ADCP", + 14: "Ocean Surveyor", + 16: "Workhorse", + 19: "Navigator", + 23: "Ocean Surveyor", + 28: "ChannelMaster", + 31: "StreamPro", + 34: "Explorer", + 37: "Navigator", + 41: "DVS", + 43: "Workhorse", + 44: "RiverRay", + 47: "SentinelV", + 50: "Workhorse", + 51: "Workhorse", + 52: "Workhorse", + 53: "Navigator", + 55: "DVS", + 56: "RiverPro", + 59: "Meridian", + 61: "Pinnacle", + 66: "SentinelV", + 67: "Pathfinder", + 73: "Pioneer", + 74: "Tasman", + 76: "WayFinder", + 77: "Workhorse", + 78: "Workhorse", +} + +data_defs = { + "number": ( + [], + "data_vars", + "uint32", + "1", + "Ensemble Number", + "number_of_observations", + ), + "rtc": ([7], "sys", "uint16", "1", "Real Time Clock", ""), + "builtin_test_fail": ([], "data_vars", "bool", "1", "Built-In Test Failures", ""), + "c_sound": ( + [], + "data_vars", + "float32", + "m s-1", + "Speed of Sound", + "speed_of_sound_in_sea_water", + ), + "depth": ([], "data_vars", "float32", "m", "Depth", "depth"), + "pitch": ([], "data_vars", "float32", "degree", "Pitch", "platform_pitch"), + "roll": ([], "data_vars", "float32", "degree", "Roll", "platform_roll"), + "heading": ( + [], + "data_vars", + "float32", + "degree", + "Heading", + "platform_orientation", + ), + "temp": ( + [], + "data_vars", + "float32", + "degree_C", + "Temperature", + "sea_water_temperature", + ), + "salinity": ([], "data_vars", "float32", "psu", "Salinity", "sea_water_salinity"), + "min_preping_wait": ( + [], + "data_vars", + "float32", + "s", + "Minimum Pre-Ping Wait Time Between Measurements", + "", + ), + "heading_std": ( + [], + "data_vars", + "float32", + "degree", + "Heading Standard Deviation", + "", + ), + "pitch_std": ([], "data_vars", "float32", "degree", "Pitch Standard Deviation", ""), + "roll_std": ([], "data_vars", "float32", "degree", "Roll Standard Deviation", ""), + "adc": ([8], "sys", "uint8", "1", "Analog-Digital Converter Output", ""), + "error_status": ([], "attrs", "float32", "1", "Error Status", ""), + "pressure": ([], "data_vars", "float32", "dbar", "Pressure", "sea_water_pressure"), + "pressure_std": ( + [], + "data_vars", + "float32", + "dbar", + "Pressure Standard Deviation", + "", + ), + "vel": (["nc", 4], "data_vars", "float32", "m s-1", "Water Velocity", ""), + "amp": ( + ["nc", 4], + "data_vars", + "uint8", + "1", + "Acoustic Signal Amplitude", + "signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water", + ), + "corr": ( + ["nc", 4], + "data_vars", + "uint8", + "1", + "Acoustic Signal Correlation", + "beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water", + ), + "prcnt_gd": ( + ["nc", 4], + "data_vars", + "uint8", + "%", + "Percent Good", + "proportion_of_acceptable_signal_returns_from_acoustic_instrument_in_sea_water", + ), + "status": (["nc", 4], "data_vars", "float32", "1", "Status", ""), + "dist_bt": ([4], "data_vars", "float32", "m", "Bottom Track Measured Depth", ""), + "vel_bt": ( + [4], + "data_vars", + "float32", + "m s-1", + "Platform Velocity from Bottom Track", + "", + ), + "corr_bt": ( + [4], + "data_vars", + "uint8", + "1", + "Bottom Track Acoustic Signal Correlation", + "", + ), + "amp_bt": ( + [4], + "data_vars", + "uint8", + "1", + "Bottom Track Acoustic Signal Amplitude", + "", + ), + "prcnt_gd_bt": ([4], "data_vars", "uint8", "%", "Bottom Track Percent Good", ""), + "time": ( + [], + "coords", + "float64", + "seconds since 1970-01-01 00:00:00", + "Time", + "time", + ), + "alt_dist": ([], "data_vars", "float32", "m", "Altimeter Range", "altimeter_range"), + "alt_rssi": ( + [], + "data_vars", + "uint8", + "dB", + "Altimeter Recieved Signal Strength Indicator", + "", + ), + "alt_eval": ([], "data_vars", "uint8", "dB", "Altimeter Evaluation Amplitude", ""), + "alt_status": ([], "data_vars", "uint8", "bit", "Altimeter Status", ""), + "time_gps": ( + [], + "coords", + "float64", + "seconds since 1970-01-01 00:00:00", + "GPS Time", + "time", + ), + "clock_offset_UTC_gps": ( + [], + "data_vars", + "float64", + "s", + "Instrument Clock Offset from UTC", + "", + ), + "latitude_gps": ( + [], + "data_vars", + "float32", + "degrees_north", + "Latitude", + "latitude", + ), + "longitude_gps": ( + [], + "data_vars", + "float32", + "degrees_east", + "Longitude", + "longitude", + ), + "avg_speed_gps": ( + [], + "data_vars", + "float32", + "m s-1", + "Average Platform Speed", + "platform_speed_wrt_ground", + ), + "avg_dir_gps": ( + [], + "data_vars", + "float32", + "degree", + "Average Platform Direction", + "platform_course", + ), + "speed_made_good_gps": ( + [], + "data_vars", + "float32", + "m s-1", + "Platform Speed Made Good", + "platform_speed_wrt_ground", + ), + "dir_made_good_gps": ( + [], + "data_vars", + "float32", + "degree", + "Platform Direction Made Good", + "platform_course", + ), + "flags_gps": ([], "data_vars", "float32", "bits", "GPS Flags", ""), + "fix_gps": ([], "data_vars", "int8", "1", "GPS Fix", ""), + "n_sat_gps": ([], "data_vars", "int8", "count", "Number of Satellites", ""), + "hdop_gps": ( + [], + "data_vars", + "float32", + "1", + "Horizontal Dilution of Precision", + "", + ), + "elevation_gps": ([], "data_vars", "float32", "m", "Elevation above MLLW", ""), + "rtk_age_gps": ( + [], + "data_vars", + "float32", + "s", + "Age of Received Real Time Kinetic Signal", + "", + ), + "speed_over_grnd_gps": ( + [], + "data_vars", + "float32", + "m s-1", + "Platform Speed over Ground", + "platform_speed_wrt_ground", + ), + "dir_over_grnd_gps": ( + [], + "data_vars", + "float32", + "degree", + "Platform Direction over Ground", + "platform_course", + ), + "heading_gps": ( + [], + "data_vars", + "float32", + "degree", + "GPS Heading", + "platform_orientation", + ), + "pitch_gps": ([], "data_vars", "float32", "degree", "GPS Pitch", "platform_pitch"), + "roll_gps": ([], "data_vars", "float32", "degree", "GPS Roll", "platform_roll"), + "dist_nmea": ([], "data_vars", "float32", "m", "Depth Sounder Range", ""), + "vel_sl": ( + ["nc", 4], + "data_vars", + "float32", + "m s-1", + "Surface Layer Water Velocity", + "", + ), + "corr_sl": ( + ["nc", 4], + "data_vars", + "uint8", + "1", + "Surface Layer Acoustic Signal Correlation", + "beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water", + ), + "amp_sl": ( + ["nc", 4], + "data_vars", + "uint8", + "1", + "Surface Layer Acoustic Signal Amplitude", + "signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water", + ), + "prcnt_gd_sl": ( + ["nc", 4], + "data_vars", + "uint8", + "%", + "Surface Layer Percent Good", + "proportion_of_acceptable_signal_returns_from_acoustic_instrument_in_sea_water", + ), + "status_sl": (["nc", 4], "data_vars", "float32", "1", "Surface Layer Status", ""), +} def _get(dat, nm): @@ -141,21 +361,21 @@ def _idata(dat, nm, sz): long_name = data_defs[nm][4] standard_name = data_defs[nm][5] arr = np.empty(sz, dtype=dtype) - if dtype.startswith('float'): + if dtype.startswith("float"): arr[:] = np.NaN dat[group][nm] = arr - dat['units'][nm] = units - dat['long_name'][nm] = long_name + dat["units"][nm] = units + dat["long_name"][nm] = long_name if standard_name: - dat['standard_name'][nm] = standard_name + dat["standard_name"][nm] = standard_name return dat def _get_size(name, n=None, ncell=0): sz = list(data_defs[name][0]) # create a copy! - if 'nc' in sz: - sz.insert(sz.index('nc'), ncell) - sz.remove('nc') + if "nc" in sz: + sz.insert(sz.index("nc"), ncell) + sz.remove("nc") if n is None: return tuple(sz) return tuple(sz + [n]) @@ -168,7 +388,7 @@ def __iadd__(self, vals): return self -class _ensemble(): +class _ensemble: n_avg = 1 k = -1 # This is the counter for filling the ensemble object @@ -181,9 +401,13 @@ def __init__(self, navg, n_cells): self.n_avg = navg self.n_cells = n_cells for nm in data_defs: - setattr(self, nm, - np.zeros(_get_size(nm, n=navg, ncell=n_cells), - dtype=data_defs[nm][2])) + setattr( + self, + nm, + np.zeros(_get_size(nm, n=navg, ncell=n_cells), dtype=data_defs[nm][2]), + ) - def clean_data(self,): - self['vel'][self['vel'] == -32.768] = np.NaN + def clean_data( + self, + ): + self["vel"][self["vel"] == -32.768] = np.NaN diff --git a/mhkit/dolfyn/io/rdi_lib.py b/mhkit/dolfyn/io/rdi_lib.py index dac0b710b..6e07f214f 100644 --- a/mhkit/dolfyn/io/rdi_lib.py +++ b/mhkit/dolfyn/io/rdi_lib.py @@ -3,40 +3,52 @@ from os.path import expanduser -class bin_reader(): +class bin_reader: """ Reads binary data files. It is mostly for development purposes, to simplify learning a data file's format. Reading binary data files should minimize the number of calls to struct.unpack and file.read because many calls to these functions (i.e. using the code in this module) are slow. """ - _size_factor = {'B': 1, 'b': 1, 'H': 2, - 'h': 2, 'L': 4, 'l': 4, 'f': 4, 'd': 8} - _frmt = {np.uint8: 'B', np.int8: 'b', - np.uint16: 'H', np.int16: 'h', - np.uint32: 'L', np.int32: 'l', - float: 'f', np.float32: 'f', - np.double: 'd', np.float64: 'd', - } + + _size_factor = {"B": 1, "b": 1, "H": 2, "h": 2, "L": 4, "l": 4, "f": 4, "d": 8} + _frmt = { + np.uint8: "B", + np.int8: "b", + np.uint16: "H", + np.int16: "h", + np.uint32: "L", + np.int32: "l", + float: "f", + np.float32: "f", + np.double: "d", + np.float64: "d", + } @property - def pos(self,): + def pos( + self, + ): return self.f.tell() - def __enter__(self,): + def __enter__( + self, + ): return self - def __exit__(self,): + def __exit__( + self, + ): self.close() - def __init__(self, fname, endian='<', checksum_size=None, debug_level=0): + def __init__(self, fname, endian="<", checksum_size=None, debug_level=0): """ Default to little-endian '<'... *checksum_size* is in bytes, if it is None or False, this function does not perform checksums. """ self.endian = endian - self.f = open(expanduser(fname), 'rb') + self.f = open(expanduser(fname), "rb") self.f.seek(0, 2) self.fsize = self.tell() self.f.seek(0, 0) @@ -47,7 +59,9 @@ def __init__(self, fname, endian='<', checksum_size=None, debug_level=0): self.cs = checksum_size self.debug_level = debug_level - def checksum(self,): + def checksum( + self, + ): """ The next byte(s) are the expected checksum. Perform the checksum. """ @@ -55,9 +69,11 @@ def checksum(self,): cs = self.read(1, self.cs._frmt) self.cs(cs, True) else: - raise Exception('CheckSum not requested for this file') + raise Exception("CheckSum not requested for this file") - def tell(self,): + def tell( + self, + ): return self.f.tell() def seek(self, pos, rel=1): @@ -70,7 +86,7 @@ def reads(self, n): val = self.f.read(n) self.cs and self.cs.add(val) try: - val = val.decode('utf-8') + val = val.decode("utf-8") except: if self.debug_level > 5: print("ERROR DECODING: {}".format(val)) @@ -88,28 +104,28 @@ def read(self, n, frmt): return np.array(unpack(self.endian + frmt * n, val)) def read_ui8(self, n): - return self.read(n, 'B') + return self.read(n, "B") def read_float(self, n): - return self.read(n, 'f') + return self.read(n, "f") def read_double(self, n): - return self.read(n, 'd') + return self.read(n, "d") read_f32 = read_float read_f64 = read_double def read_i8(self, n): - return self.read(n, 'b') + return self.read(n, "b") def read_ui16(self, n): - return self.read(n, 'H') + return self.read(n, "H") def read_i16(self, n): - return self.read(n, 'h') + return self.read(n, "h") def read_ui32(self, n): - return self.read(n, 'L') + return self.read(n, "L") def read_i32(self, n): - return self.read(n, 'l') + return self.read(n, "l") diff --git a/mhkit/dolfyn/rotate/api.py b/mhkit/dolfyn/rotate/api.py index 65a6277b1..835b170e2 100644 --- a/mhkit/dolfyn/rotate/api.py +++ b/mhkit/dolfyn/rotate/api.py @@ -9,20 +9,20 @@ # The 'rotation chain' -rc = ['beam', 'inst', 'earth', 'principal'] +rc = ["beam", "inst", "earth", "principal"] rot_module_dict = { # Nortek instruments - 'vector': r_vec, - 'awac': r_awac, - 'signature': r_sig, - 'ad2cp': r_sig, - + "vector": r_vec, + "awac": r_awac, + "signature": r_sig, + "ad2cp": r_sig, # TRDI instruments - 'rdi': r_rdi} + "rdi": r_rdi, +} -def rotate2(ds, out_frame='earth', inplace=True): +def rotate2(ds, out_frame="earth", inplace=True): """ Rotate a dataset to a new coordinate system. @@ -46,8 +46,8 @@ def rotate2(ds, out_frame='earth', inplace=True): ----- - This function rotates all variables in ``ds.attrs['rotate_vars']``. - - In order to rotate to the 'principal' frame, a value should exist for - ``ds.attrs['principal_heading']``. The function + - In order to rotate to the 'principal' frame, a value should exist for + ``ds.attrs['principal_heading']``. The function :func:`calc_principal_heading ` is recommended for this purpose, e.g.: @@ -62,18 +62,19 @@ def rotate2(ds, out_frame='earth', inplace=True): ds = ds.copy(deep=True) csin = ds.coord_sys.lower() - if csin == 'ship': - csin = 'inst' + if csin == "ship": + csin = "inst" # Returns True/False if head2inst_rotmat has been set/not-set. r_vec._check_inst2head_rotmat(ds) - if out_frame == 'principal' and csin != 'earth': + if out_frame == "principal" and csin != "earth": warnings.warn( "You are attempting to rotate into the 'principal' " "coordinate system, but the dataset is in the {} " "coordinate system. Be sure that 'principal_heading' is " - "defined based on the earth coordinate system.".format(csin)) + "defined based on the earth coordinate system.".format(csin) + ) rmod = None for ky in rot_module_dict: @@ -81,22 +82,26 @@ def rotate2(ds, out_frame='earth', inplace=True): rmod = rot_module_dict[ky] break if rmod is None: - raise ValueError("Rotations are not defined for " - "instrument '{}'.".format(_make_model(ds))) + raise ValueError( + "Rotations are not defined for " "instrument '{}'.".format(_make_model(ds)) + ) # Get the 'indices' of the rotation chain try: iframe_in = rc.index(csin) except ValueError: - raise Exception("The coordinate system of the input " - "dataset, '{}', is invalid." - .format(ds.coord_sys)) + raise Exception( + "The coordinate system of the input " + "dataset, '{}', is invalid.".format(ds.coord_sys) + ) try: iframe_out = rc.index(out_frame.lower()) except ValueError: - raise Exception("The specified output coordinate system " - "is invalid, please select one of: 'beam', 'inst', " - "'earth', 'principal'.") + raise Exception( + "The specified output coordinate system " + "is invalid, please select one of: 'beam', 'inst', " + "'earth', 'principal'." + ) if iframe_out == iframe_in: print("Data is already in the {} coordinate system".format(out_frame)) @@ -108,13 +113,13 @@ def rotate2(ds, out_frame='earth', inplace=True): while ds.coord_sys.lower() != out_frame.lower(): csin = ds.coord_sys - if csin == 'ship': - csin = 'inst' + if csin == "ship": + csin = "inst" inow = rc.index(csin) if reverse: - func = getattr(rmod, '_' + rc[inow - 1] + '2' + rc[inow]) + func = getattr(rmod, "_" + rc[inow - 1] + "2" + rc[inow]) else: - func = getattr(rmod, '_' + rc[inow] + '2' + rc[inow + 1]) + func = getattr(rmod, "_" + rc[inow] + "2" + rc[inow + 1]) ds = func(ds, reverse=reverse) if not inplace: @@ -130,7 +135,7 @@ def calc_principal_heading(vel, tidal_mode=True): vel : np.ndarray (2,...,Nt), or (3,...,Nt) The 2D or 3D velocity array (3rd-dim is ignored in this calculation) tidal_mode : bool - If true, range is set from 0 to +/-180 degrees. If false, range is 0 to + If true, range is set from 0 to +/-180 degrees. If false, range is 0 to 360 degrees. Default = True Returns @@ -165,8 +170,7 @@ def calc_principal_heading(vel, tidal_mode=True): dt = np.ma.masked_invalid(dt) # Divide the angle by 2 to remove the doubling done on the previous # line. - pang = np.angle( - np.nanmean(dt, -1, dtype=np.complex128)) / 2 + pang = np.angle(np.nanmean(dt, -1, dtype=np.complex128)) / 2 else: pang = np.angle(np.nanmean(dt, -1)) @@ -225,8 +229,8 @@ def set_declination(ds, declin, inplace=True): if not inplace: ds = ds.copy(deep=True) - if 'declination' in ds.attrs: - angle = declin - ds.attrs.pop('declination') + if "declination" in ds.attrs: + angle = declin - ds.attrs.pop("declination") else: angle = declin cd = np.cos(-np.deg2rad(angle)) @@ -234,28 +238,28 @@ def set_declination(ds, declin, inplace=True): # The ordering is funny here because orientmat is the # transpose of the inst->earth rotation matrix: - Rdec = np.array([[cd, -sd, 0], - [sd, cd, 0], - [0, 0, 1]]) + Rdec = np.array([[cd, -sd, 0], [sd, cd, 0], [0, 0, 1]]) - if ds.coord_sys == 'earth': + if ds.coord_sys == "earth": rotate2earth = True - rotate2(ds, 'inst', inplace=True) + rotate2(ds, "inst", inplace=True) else: rotate2earth = False - ds['orientmat'].values = np.einsum('kj...,ij->ki...', - ds['orientmat'].values, - Rdec, ) - if 'heading' in ds: - ds['heading'] += angle + ds["orientmat"].values = np.einsum( + "kj...,ij->ki...", + ds["orientmat"].values, + Rdec, + ) + if "heading" in ds: + ds["heading"] += angle if rotate2earth: - rotate2(ds, 'earth', inplace=True) - if 'principal_heading' in ds.attrs: - ds.attrs['principal_heading'] += angle + rotate2(ds, "earth", inplace=True) + if "principal_heading" in ds.attrs: + ds.attrs["principal_heading"] += angle - ds.attrs['declination'] = declin - ds.attrs['declination_in_orientmat'] = 1 # logical + ds.attrs["declination"] = declin + ds.attrs["declination_in_orientmat"] = 1 # logical if not inplace: return ds @@ -295,31 +299,32 @@ def set_inst2head_rotmat(ds, rotmat, inplace=True): if not inplace: ds = ds.copy(deep=True) - if not ds.inst_model.lower() == 'vector': - raise Exception("Setting 'inst2head_rotmat' is only supported " - "for Nortek Vector ADVs.") - if ds.get('inst2head_rotmat', None) is not None: + if not ds.inst_model.lower() == "vector": + raise Exception( + "Setting 'inst2head_rotmat' is only supported " "for Nortek Vector ADVs." + ) + if ds.get("inst2head_rotmat", None) is not None: raise Exception( "You are setting 'inst2head_rotmat' after it has already " - "been set. You can only set it once.") + "been set. You can only set it once." + ) csin = ds.coord_sys - if csin not in ['inst', 'beam']: - rotate2(ds, 'inst', inplace=True) + if csin not in ["inst", "beam"]: + rotate2(ds, "inst", inplace=True) - ds['inst2head_rotmat'] = xr.DataArray(np.array(rotmat), - dims=['x1', 'x2'], - coords={'x1': [1, 2, 3], - 'x2': [1, 2, 3]}) + ds["inst2head_rotmat"] = xr.DataArray( + np.array(rotmat), dims=["x1", "x2"], coords={"x1": [1, 2, 3], "x2": [1, 2, 3]} + ) - ds.attrs['inst2head_rotmat_was_set'] = 1 # logical + ds.attrs["inst2head_rotmat_was_set"] = 1 # logical # Note that there is no validation that the user doesn't # change `ds.attrs['inst2head_rotmat']` after calling this # function. - if not csin == 'beam': # csin not 'beam', then we're in inst + if not csin == "beam": # csin not 'beam', then we're in inst ds = r_vec._rotate_inst2head(ds) - if csin not in ['inst', 'beam']: + if csin not in ["inst", "beam"]: rotate2(ds, csin, inplace=True) if not inplace: diff --git a/mhkit/dolfyn/rotate/base.py b/mhkit/dolfyn/rotate/base.py index 13503e61b..d7cdef541 100644 --- a/mhkit/dolfyn/rotate/base.py +++ b/mhkit/dolfyn/rotate/base.py @@ -10,8 +10,7 @@ def _make_model(ds): The make and model of the instrument that collected the data in this data object. """ - return '{} {}'.format(ds.attrs['inst_make'], - ds.attrs['inst_model']).lower() + return "{} {}".format(ds.attrs["inst_make"], ds.attrs["inst_model"]).lower() def _check_rotmat_det(rotmat, thresh=1e-3): @@ -30,72 +29,81 @@ def _check_rotmat_det(rotmat, thresh=1e-3): def _check_rotate_vars(ds, rotate_vars): if rotate_vars is None: - if 'rotate_vars' in ds.attrs: + if "rotate_vars" in ds.attrs: rotate_vars = ds.rotate_vars else: - warnings.warn(" 'rotate_vars' attribute not found." - "Rotating `vel`.") - rotate_vars = ['vel'] + warnings.warn(" 'rotate_vars' attribute not found." "Rotating `vel`.") + rotate_vars = ["vel"] return rotate_vars def _set_coords(ds, ref_frame, forced=False): """ - Checks the current reference frame and adjusts xarray coords/dims + Checks the current reference frame and adjusts xarray coords/dims as necessary. Makes sure assigned dataarray coordinates match what DOLfYN is reading in. """ make = _make_model(ds) - XYZ = ['X', 'Y', 'Z'] - ENU = ['E', 'N', 'U'] + XYZ = ["X", "Y", "Z"] + ENU = ["E", "N", "U"] beam = ds.beam.values - principal = ['streamwise', 'x-stream', 'vert'] + principal = ["streamwise", "x-stream", "vert"] # check make/model - if 'rdi' in make: - inst = ['X', 'Y', 'Z', 'err'] - earth = ['E', 'N', 'U', 'err'] - princ = ['streamwise', 'x-stream', 'vert', 'err'] + if "rdi" in make: + inst = ["X", "Y", "Z", "err"] + earth = ["E", "N", "U", "err"] + princ = ["streamwise", "x-stream", "vert", "err"] - elif 'nortek' in make: - if 'signature' in make or 'ad2cp' in make: - inst = ['X', 'Y', 'Z1', 'Z2'] - earth = ['E', 'N', 'U1', 'U2'] - princ = ['streamwise', 'x-stream', 'vert1', 'vert2'] + elif "nortek" in make: + if "signature" in make or "ad2cp" in make: + inst = ["X", "Y", "Z1", "Z2"] + earth = ["E", "N", "U1", "U2"] + princ = ["streamwise", "x-stream", "vert1", "vert2"] else: # AWAC or Vector inst = XYZ earth = ENU princ = principal - orient = {'beam': beam, 'inst': inst, 'ship': inst, 'earth': earth, - 'principal': princ} - orientIMU = {'beam': XYZ, 'inst': XYZ, 'ship': XYZ, 'earth': ENU, - 'principal': principal} + orient = { + "beam": beam, + "inst": inst, + "ship": inst, + "earth": earth, + "principal": princ, + } + orientIMU = { + "beam": XYZ, + "inst": XYZ, + "ship": XYZ, + "earth": ENU, + "principal": principal, + } if forced: - ref_frame += '-forced' + ref_frame += "-forced" # Update 'dir' and 'dirIMU' dimensions - attrs = ds['dir'].attrs - attrs.update({'ref_frame': ref_frame}) + attrs = ds["dir"].attrs + attrs.update({"ref_frame": ref_frame}) - ds['dir'] = orient[ref_frame] - ds['dir'].attrs = attrs - if hasattr(ds, 'dirIMU'): - ds['dirIMU'] = orientIMU[ref_frame] - ds['dirIMU'].attrs = attrs + ds["dir"] = orient[ref_frame] + ds["dir"].attrs = attrs + if hasattr(ds, "dirIMU"): + ds["dirIMU"] = orientIMU[ref_frame] + ds["dirIMU"].attrs = attrs - ds.attrs['coord_sys'] = ref_frame + ds.attrs["coord_sys"] = ref_frame # These are essentially one extra line to scroll through - tag = ['', '_echo', '_bt'] + tag = ["", "_echo", "_bt"] for tg in tag: - if hasattr(ds, 'coord_sys_axes'+tg): - ds.attrs.pop('coord_sys_axes'+tg) + if hasattr(ds, "coord_sys_axes" + tg): + ds.attrs.pop("coord_sys_axes" + tg) return ds @@ -122,12 +130,12 @@ def _beam2inst(dat, reverse=False, force=False): """ if not force: - if not reverse and dat.coord_sys.lower() != 'beam': - raise ValueError('The input must be in beam coordinates.') - if reverse and dat.coord_sys != 'inst': - raise ValueError('The input must be in inst coordinates.') + if not reverse and dat.coord_sys.lower() != "beam": + raise ValueError("The input must be in beam coordinates.") + if reverse and dat.coord_sys != "inst": + raise ValueError("The input must be in inst coordinates.") - rotmat = dat['beam2inst_orientmat'] + rotmat = dat["beam2inst_orientmat"] if isinstance(force, (list, set, tuple)): # You can force a distinct set of variables to be rotated by @@ -135,16 +143,17 @@ def _beam2inst(dat, reverse=False, force=False): rotate_vars = force else: rotate_vars = [ - ky for ky in dat.rotate_vars if dat[ky].shape[0] == rotmat.shape[0]] + ky for ky in dat.rotate_vars if dat[ky].shape[0] == rotmat.shape[0] + ] - cs = 'inst' + cs = "inst" if reverse: # Can't use transpose because rotation is not between # orthogonal coordinate systems rotmat = inv(rotmat) - cs = 'beam' + cs = "beam" for ky in rotate_vars: - dat[ky].values = np.einsum('ij,j...->i...', rotmat, dat[ky].values) + dat[ky].values = np.einsum("ij,j...->i...", rotmat, dat[ky].values) if force: dat = _set_coords(dat, cs, forced=True) @@ -154,7 +163,7 @@ def _beam2inst(dat, reverse=False, force=False): return dat -def euler2orient(heading, pitch, roll, units='degrees'): +def euler2orient(heading, pitch, roll, units="degrees"): """ Calculate the orientation matrix from DOLfYN-defined euler angles. @@ -163,8 +172,8 @@ def euler2orient(heading, pitch, roll, units='degrees'): The matrices H, P, R are the transpose of the matrices for rotation about z, y, x as shown here https://en.wikipedia.org/wiki/Rotation_matrix. The transpose is used - because in DOLfYN the orientation matrix is organized for - rotation from EARTH --> INST, while the wiki's matrices are organized for + because in DOLfYN the orientation matrix is organized for + rotation from EARTH --> INST, while the wiki's matrices are organized for rotation from INST --> EARTH. Parameters @@ -187,7 +196,7 @@ def euler2orient(heading, pitch, roll, units='degrees'): - a "ZYX" rotation order. That is, these variables are computed assuming that rotation from the earth -> instrument frame happens by rotating around the z-axis first (heading), then rotating - around the y-axis (pitch), then rotating around the x-axis (roll). + around the y-axis (pitch), then rotating around the x-axis (roll). Note this requires matrix multiplication in the reverse order. - heading is defined as the direction the x-axis points, positive @@ -201,11 +210,11 @@ def euler2orient(heading, pitch, roll, units='degrees'): instrument's x-axis """ - if units.lower() == 'degrees': + if units.lower() == "degrees": pitch = np.deg2rad(pitch) roll = np.deg2rad(roll) heading = np.deg2rad(heading) - elif units.lower() == 'radians': + elif units.lower() == "radians": pass else: raise Exception("Invalid units") @@ -227,19 +236,28 @@ def euler2orient(heading, pitch, roll, units='degrees'): one = np.ones_like(sr) H = np.array( - [[ch, sh, zero], - [-sh, ch, zero], - [zero, zero, one], ]) + [ + [ch, sh, zero], + [-sh, ch, zero], + [zero, zero, one], + ] + ) P = np.array( - [[cp, zero, -sp], - [zero, one, zero], - [sp, zero, cp], ]) + [ + [cp, zero, -sp], + [zero, one, zero], + [sp, zero, cp], + ] + ) R = np.array( - [[one, zero, zero], - [zero, cr, sr], - [zero, -sr, cr], ]) + [ + [one, zero, zero], + [zero, cr, sr], + [zero, -sr, cr], + ] + ) - return np.einsum('ij...,jk...,kl...->il...', R, P, H) + return np.einsum("ij...,jk...,kl...->il...", R, P, H) def orient2euler(omat): @@ -258,18 +276,17 @@ def orient2euler(omat): positive clockwise from North (this is *opposite* the right-hand-rule around the Z-axis), range 0-360 degrees. pitch : np.ndarray - The pitch angle (degrees). Pitch is positive when the x-axis + The pitch angle (degrees). Pitch is positive when the x-axis pitches up (this is *opposite* the right-hand-rule around the Y-axis). roll : np.ndarray - The roll angle (degrees). Roll is positive according to the + The roll angle (degrees). Roll is positive according to the right-hand-rule around the instrument's x-axis. """ - if isinstance(omat, np.ndarray) and \ - omat.shape[:2] == (3, 3): + if isinstance(omat, np.ndarray) and omat.shape[:2] == (3, 3): pass - elif hasattr(omat, 'orientmat'): - omat = omat['orientmat'].values + elif hasattr(omat, "orientmat"): + omat = omat["orientmat"].values # Note: orientation matrix is earth->inst unless supplied by an external IMU hh = np.rad2deg(np.arctan2(omat[0, 0], omat[0, 1])) @@ -286,7 +303,7 @@ def orient2euler(omat): def quaternion2orient(quaternions): """ - Calculate orientation from Nortek AHRS quaternions, where q = [W, X, Y, Z] + Calculate orientation from Nortek AHRS quaternions, where q = [W, X, Y, Z] instead of the standard q = [X, Y, Z, W] = [q1, q2, q3, q4] Parameters @@ -305,23 +322,43 @@ def quaternion2orient(quaternions): """ omat = type(quaternions)(np.empty((3, 3, quaternions.time.size))) - omat = omat.rename({'dim_0': 'earth', 'dim_1': 'inst', 'dim_2': 'time'}) + omat = omat.rename({"dim_0": "earth", "dim_1": "inst", "dim_2": "time"}) for i in range(quaternions.time.size): - r = R.from_quat([quaternions.isel(q=1, time=i), - quaternions.isel(q=2, time=i), - quaternions.isel(q=3, time=i), - quaternions.isel(q=0, time=i)]) + r = R.from_quat( + [ + quaternions.isel(q=1, time=i), + quaternions.isel(q=2, time=i), + quaternions.isel(q=3, time=i), + quaternions.isel(q=0, time=i), + ] + ) omat[..., i] = r.as_matrix() # quaternions in inst2earth reference frame, need to rotate to earth2inst omat.values = np.rollaxis(omat.values, 1) - earth = xr.DataArray(['E', 'N', 'U'], dims=['earth'], name='earth', attrs={ - 'units': '1', 'long_name': 'Earth Reference Frame', 'coverage_content_type': 'coordinate'}) - inst = xr.DataArray(['X', 'Y', 'Z'], dims=['inst'], name='inst', attrs={ - 'units': '1', 'long_name': 'Instrument Reference Frame', 'coverage_content_type': 'coordinate'}) - return omat.assign_coords({'earth': earth, 'inst': inst, 'time': quaternions.time}) + earth = xr.DataArray( + ["E", "N", "U"], + dims=["earth"], + name="earth", + attrs={ + "units": "1", + "long_name": "Earth Reference Frame", + "coverage_content_type": "coordinate", + }, + ) + inst = xr.DataArray( + ["X", "Y", "Z"], + dims=["inst"], + name="inst", + attrs={ + "units": "1", + "long_name": "Instrument Reference Frame", + "coverage_content_type": "coordinate", + }, + ) + return omat.assign_coords({"earth": earth, "inst": inst, "time": quaternions.time}) def calc_tilt(pitch, roll): @@ -334,16 +371,16 @@ def calc_tilt(pitch, roll): Instrument roll in degrees pitch : numpy.ndarray or xarray.DataArray Instrument pitch in degrees - + Returns ------- tilt : numpy.ndarray Vertical inclination of the instrument in degrees """ - if 'xarray' in type(pitch).__module__: + if "xarray" in type(pitch).__module__: pitch = pitch.values - if 'xarray' in type(roll).__module__: + if "xarray" in type(roll).__module__: roll = roll.values tilt = np.arctan( diff --git a/mhkit/dolfyn/rotate/rdi.py b/mhkit/dolfyn/rotate/rdi.py index 9f58e3738..36e91c8dd 100644 --- a/mhkit/dolfyn/rotate/rdi.py +++ b/mhkit/dolfyn/rotate/rdi.py @@ -31,15 +31,16 @@ def _inst2earth(adcpo, reverse=False, rotate_vars=None, force=False): """ csin = adcpo.coord_sys.lower() - cs_allowed = ['inst', 'ship'] + cs_allowed = ["inst", "ship"] if reverse: - cs_allowed = ['earth'] + cs_allowed = ["earth"] if not force and csin not in cs_allowed: - raise ValueError("Invalid rotation for data in {}-frame " - "coordinate system.".format(csin)) + raise ValueError( + "Invalid rotation for data in {}-frame " "coordinate system.".format(csin) + ) - if 'orientmat' in adcpo: - omat = adcpo['orientmat'] + if "orientmat" in adcpo: + omat = adcpo["orientmat"] else: omat = _calc_orientmat(adcpo) @@ -52,11 +53,11 @@ def _inst2earth(adcpo, reverse=False, rotate_vars=None, force=False): # view (not a new array) rotmat = np.rollaxis(omat.data, 1) if reverse: - cs_new = 'inst' - sumstr = 'jik,j...k->i...k' + cs_new = "inst" + sumstr = "jik,j...k->i...k" else: - cs_new = 'earth' - sumstr = 'ijk,j...k->i...k' + cs_new = "earth" + sumstr = "ijk,j...k->i...k" # Only operate on the first 3-components, b/c the 4th is err_vel for nm in rotate_vars: @@ -91,18 +92,17 @@ def _calc_beam_orientmat(theta=20, convex=True, degrees=True): c = -1 else: c = 1 - a = 1 / (2. * np.sin(theta)) - b = 1 / (4. * np.cos(theta)) - d = a / (2. ** 0.5) - return np.array([[c * a, -c * a, 0, 0], - [0, 0, -c * a, c * a], - [b, b, b, b], - [d, d, -d, -d]]) + a = 1 / (2.0 * np.sin(theta)) + b = 1 / (4.0 * np.cos(theta)) + d = a / (2.0**0.5) + return np.array( + [[c * a, -c * a, 0, 0], [0, 0, -c * a, c * a], [b, b, b, b], [d, d, -d, -d]] + ) def _calc_orientmat(adcpo): """ - Calculate the orientation matrix using the raw + Calculate the orientation matrix using the raw heading, pitch, roll values from the RDI binary file. Parameters @@ -123,12 +123,12 @@ def _calc_orientmat(adcpo): (Tilt 1) is recorded in the variable leader. P is set to 0 if the "use tilt" bit of the EX command is not set.""" - r = np.deg2rad(adcpo['roll'].values) - p = np.arctan(np.tan(np.deg2rad(adcpo['pitch'].values)) * np.cos(r)) - h = np.deg2rad(adcpo['heading'].values) + r = np.deg2rad(adcpo["roll"].values) + p = np.arctan(np.tan(np.deg2rad(adcpo["pitch"].values)) * np.cos(r)) + h = np.deg2rad(adcpo["heading"].values) - if 'rdi' in adcpo.inst_make.lower(): - if adcpo.orientation == 'up': + if "rdi" in adcpo.inst_make.lower(): + if adcpo.orientation == "up": """ ## RDI-ADCP-MANUAL (Jan 08, section 5.6 page 18) Since the roll describes the ship axes rather than the @@ -139,7 +139,7 @@ def _calc_orientmat(adcpo): to 0 if the "use tilt" bit of the EX command is not set. """ r += np.pi - if (adcpo.coord_sys == 'ship' and adcpo.use_pitchroll == 'yes'): + if adcpo.coord_sys == "ship" and adcpo.use_pitchroll == "yes": r[:] = 0 p[:] = 0 @@ -163,14 +163,29 @@ def _calc_orientmat(adcpo): # The 'orientation matrix' is the transpose of the 'rotation matrix'. omat = np.rollaxis(rotmat, 1) - earth = xr.DataArray(['E', 'N', 'U'], dims=['earth'], name='earth', attrs={ - 'units': '1', 'long_name': 'Earth Reference Frame', 'coverage_content_type': 'coordinate'}) - inst = xr.DataArray(['X', 'Y', 'Z'], dims=['inst'], name='inst', attrs={ - 'units': '1', 'long_name': 'Instrument Reference Frame', 'coverage_content_type': 'coordinate'}) - return xr.DataArray(omat, - coords={'earth': earth, - 'inst': inst, - 'time': adcpo.time}, - dims=['earth', 'inst', 'time'], - attrs={'units': '1', - 'long_name': 'Orientation Matrix'}) + earth = xr.DataArray( + ["E", "N", "U"], + dims=["earth"], + name="earth", + attrs={ + "units": "1", + "long_name": "Earth Reference Frame", + "coverage_content_type": "coordinate", + }, + ) + inst = xr.DataArray( + ["X", "Y", "Z"], + dims=["inst"], + name="inst", + attrs={ + "units": "1", + "long_name": "Instrument Reference Frame", + "coverage_content_type": "coordinate", + }, + ) + return xr.DataArray( + omat, + coords={"earth": earth, "inst": inst, "time": adcpo.time}, + dims=["earth", "inst", "time"], + attrs={"units": "1", "long_name": "Orientation Matrix"}, + ) diff --git a/mhkit/dolfyn/rotate/signature.py b/mhkit/dolfyn/rotate/signature.py index 8d333a136..771842842 100644 --- a/mhkit/dolfyn/rotate/signature.py +++ b/mhkit/dolfyn/rotate/signature.py @@ -22,23 +22,23 @@ def _inst2earth(adcpo, reverse=False, rotate_vars=None, force=False): The list of variables to rotate. By default this is taken from adcpo.rotate_vars. force : bool - Do not check which frame the data is in prior to performing + Do not check which frame the data is in prior to performing this rotation. Default = False """ if reverse: # The transpose of the rotation matrix gives the inverse # rotation, so we simply reverse the order of the einsum: - sumstr = 'jik,j...k->i...k' - cs_now = 'earth' - cs_new = 'inst' + sumstr = "jik,j...k->i...k" + cs_now = "earth" + cs_new = "inst" else: - sumstr = 'ijk,j...k->i...k' - cs_now = 'inst' - cs_new = 'earth' + sumstr = "ijk,j...k->i...k" + cs_now = "inst" + cs_new = "earth" # if ADCP is upside down - if adcpo.orientation == 'down': + if adcpo.orientation == "down": down = True else: # orientation = 'up' or 'AHRS' down = False @@ -52,14 +52,18 @@ def _inst2earth(adcpo, reverse=False, rotate_vars=None, force=False): return elif cs != cs_now: raise ValueError( - "Data must be in the '%s' frame when using this function" % - cs_now) + "Data must be in the '%s' frame when using this function" % cs_now + ) - if 'orientmat' in adcpo: - omat = adcpo['orientmat'] + if "orientmat" in adcpo: + omat = adcpo["orientmat"] else: - omat = _euler2orient(adcpo['time'], adcpo['heading'].values, adcpo['pitch'].values, - adcpo['roll'].values) + omat = _euler2orient( + adcpo["time"], + adcpo["heading"].values, + adcpo["pitch"].values, + adcpo["roll"].values, + ) # Take the transpose of the orientation to get the inst->earth rotation # matrix. @@ -67,12 +71,18 @@ def _inst2earth(adcpo, reverse=False, rotate_vars=None, force=False): _dcheck = rotb._check_rotmat_det(rmat) if not _dcheck.all(): - warnings.warn("Invalid orientation matrix (determinant != 1) at indices: {}. " - "If rotated, data at these indices will be erroneous." - .format(np.nonzero(~_dcheck)[0]), UserWarning) + warnings.warn( + "Invalid orientation matrix (determinant != 1) at indices: {}. " + "If rotated, data at these indices will be erroneous.".format( + np.nonzero(~_dcheck)[0] + ), + UserWarning, + ) # The dictionary of rotation matrices for different sized arrays. - rmd = {3: rmat, } + rmd = { + 3: rmat, + } # The 4-row rotation matrix assume that rows 0,1 are u,v, # and 2,3 are independent estimates of w. @@ -99,30 +109,35 @@ def _inst2earth(adcpo, reverse=False, rotate_vars=None, force=False): signIMU = np.array([1, -1, -1], ndmin=dat.ndim).T if not reverse: if n == 3: - dat = np.einsum(sumstr, rmd[3], signIMU*dat) + dat = np.einsum(sumstr, rmd[3], signIMU * dat) elif n == 4: - dat = np.einsum('ijk,j...k->i...k', rmd[4], sign*dat) + dat = np.einsum("ijk,j...k->i...k", rmd[4], sign * dat) else: - raise Exception("The entry {} is not a vector, it cannot" - "be rotated.".format(nm)) + raise Exception( + "The entry {} is not a vector, it cannot" + "be rotated.".format(nm) + ) elif reverse: if n == 3: - dat = signIMU*np.einsum(sumstr, rmd[3], dat) + dat = signIMU * np.einsum(sumstr, rmd[3], dat) elif n == 4: - dat = sign*np.einsum('ijk,j...k->i...k', rmd[4], dat) + dat = sign * np.einsum("ijk,j...k->i...k", rmd[4], dat) else: - raise Exception("The entry {} is not a vector, it cannot" - "be rotated.".format(nm)) + raise Exception( + "The entry {} is not a vector, it cannot" + "be rotated.".format(nm) + ) else: # 'up' and AHRS if n == 3: dat = np.einsum(sumstr, rmd[3], dat) elif n == 4: - dat = np.einsum('ijk,j...k->i...k', rmd[4], dat) + dat = np.einsum("ijk,j...k->i...k", rmd[4], dat) else: - raise Exception("The entry {} is not a vector, it cannot" - "be rotated.".format(nm)) + raise Exception( + "The entry {} is not a vector, it cannot" "be rotated.".format(nm) + ) adcpo[nm].values = dat.copy() adcpo = rotb._set_coords(adcpo, cs_new) diff --git a/mhkit/dolfyn/rotate/vector.py b/mhkit/dolfyn/rotate/vector.py index bc833d7dd..3fcd856a3 100644 --- a/mhkit/dolfyn/rotate/vector.py +++ b/mhkit/dolfyn/rotate/vector.py @@ -28,28 +28,28 @@ def _beam2inst(dat, reverse=False, force=False): def _rotate_inst2head(advo, reverse=False): """ - Rotates the velocity vector from the instrument frame to the ADV probe (head) frame or + Rotates the velocity vector from the instrument frame to the ADV probe (head) frame or vice versa. - This function uses the rotation matrix 'inst2head_rotmat' to rotate the velocity vector 'vel' - from the instrument frame to the head frame ('inst->head') or from the head frame to the + This function uses the rotation matrix 'inst2head_rotmat' to rotate the velocity vector 'vel' + from the instrument frame to the head frame ('inst->head') or from the head frame to the instrument frame ('head->inst'). Parameters ---------- advo: dict - A dictionary-like object that includes the rotation matrix 'inst2head_rotmat' + A dictionary-like object that includes the rotation matrix 'inst2head_rotmat' and the velocity vector 'vel' to be rotated. reverse: bool, optional - A boolean value indicating the direction of the rotation. - If False (default), the function rotates 'vel' from the instrument frame to the head frame. + A boolean value indicating the direction of the rotation. + If False (default), the function rotates 'vel' from the instrument frame to the head frame. If True, the function rotates 'vel' from the head frame to the instrument frame. Returns ------- advo: dict - The input dictionary-like object with the rotated velocity vector. + The input dictionary-like object with the rotated velocity vector. If 'inst2head_rotmat' doesn't exist in 'advo', the function returns the input 'advo' unmodified. """ @@ -57,9 +57,9 @@ def _rotate_inst2head(advo, reverse=False): # This object doesn't have a head2inst_rotmat, so we do nothing. return advo if reverse: # head->inst - advo['vel'].values = np.dot(advo['inst2head_rotmat'].T, advo['vel']) + advo["vel"].values = np.dot(advo["inst2head_rotmat"].T, advo["vel"]) else: # inst->head - advo['vel'].values = np.dot(advo['inst2head_rotmat'], advo['vel']) + advo["vel"].values = np.dot(advo["inst2head_rotmat"], advo["vel"]) return advo @@ -80,12 +80,14 @@ def _check_inst2head_rotmat(advo): Returns True if 'inst2head_rotmat' exists, was set correctly, and is valid (False if not). """ - if advo.get('inst2head_rotmat', None) is None: + if advo.get("inst2head_rotmat", None) is None: # This is the default value, and we do nothing. return False if not advo.inst2head_rotmat_was_set: - raise Exception("The inst2head rotation matrix exists in props, " - "but it was not set using `set_inst2head_rotmat.") + raise Exception( + "The inst2head rotation matrix exists in props, " + "but it was not set using `set_inst2head_rotmat." + ) if not rotb._check_rotmat_det(advo.inst2head_rotmat.values): raise ValueError("Invalid inst2head_rotmat (determinant != 1).") return True @@ -107,20 +109,20 @@ def _inst2earth(advo, reverse=False, rotate_vars=None, force=False): The list of variables to rotate. By default this is taken from advo.attrs['rotate_vars']. force : bool - Do not check which frame the data is in prior to performing + Do not check which frame the data is in prior to performing this rotation. Default = False """ if reverse: # earth->inst # The transpose of the rotation matrix gives the inverse # rotation, so we simply reverse the order of the einsum: - sumstr = 'jik,j...k->i...k' - cs_now = 'earth' - cs_new = 'inst' + sumstr = "jik,j...k->i...k" + cs_now = "earth" + cs_new = "inst" else: # inst->earth - sumstr = 'ijk,j...k->i...k' - cs_now = 'inst' - cs_new = 'earth' + sumstr = "ijk,j...k->i...k" + cs_now = "inst" + cs_new = "earth" rotate_vars = rotb._check_rotate_vars(advo, rotate_vars) @@ -131,17 +133,18 @@ def _inst2earth(advo, reverse=False, rotate_vars=None, force=False): return elif cs != cs_now: raise ValueError( - "Data must be in the '%s' frame when using this function" % - cs_now) + "Data must be in the '%s' frame when using this function" % cs_now + ) - if hasattr(advo, 'orientmat'): - omat = advo['orientmat'] + if hasattr(advo, "orientmat"): + omat = advo["orientmat"] else: - if 'vector' in advo.inst_model.lower(): - orientation_down = advo['orientation_down'] + if "vector" in advo.inst_model.lower(): + orientation_down = advo["orientation_down"] - omat = _calc_omat(advo['time'], advo['heading'], advo['pitch'], - advo['roll'], orientation_down) + omat = _calc_omat( + advo["time"], advo["heading"], advo["pitch"], advo["roll"], orientation_down + ) # Take the transpose of the orientation to get the inst->earth rotation # matrix. @@ -149,15 +152,20 @@ def _inst2earth(advo, reverse=False, rotate_vars=None, force=False): _dcheck = rotb._check_rotmat_det(rmat) if not _dcheck.all(): - warnings.warn("Invalid orientation matrix (determinant != 1) at indices: {}. " - "If rotated, data at these indices will be erroneous." - .format(np.nonzero(~_dcheck)[0]), UserWarning) + warnings.warn( + "Invalid orientation matrix (determinant != 1) at indices: {}. " + "If rotated, data at these indices will be erroneous.".format( + np.nonzero(~_dcheck)[0] + ), + UserWarning, + ) for nm in rotate_vars: n = advo[nm].shape[0] if n != 3: - raise Exception("The entry {} is not a vector, it cannot " - "be rotated.".format(nm)) + raise Exception( + "The entry {} is not a vector, it cannot " "be rotated.".format(nm) + ) advo[nm].values = np.einsum(sumstr, rmat, advo[nm]) advo = rotb._set_coords(advo, cs_new) @@ -191,34 +199,32 @@ def _earth2principal(advo, reverse=False, rotate_vars=None): # the rest of the function) if reverse: - cs_now = 'principal' - cs_new = 'earth' + cs_now = "principal" + cs_new = "earth" else: ang *= -1 - cs_now = 'earth' - cs_new = 'principal' + cs_now = "earth" + cs_new = "principal" rotate_vars = rotb._check_rotate_vars(advo, rotate_vars) cs = advo.coord_sys.lower() if cs == cs_new: - print('Data is already in the %s coordinate system' % cs_new) + print("Data is already in the %s coordinate system" % cs_new) return elif cs != cs_now: raise ValueError( - 'Data must be in the {} frame ' - 'to use this function'.format(cs_now)) + "Data must be in the {} frame " "to use this function".format(cs_now) + ) # Calculate the rotation matrix: cp, sp = np.cos(ang), np.sin(ang) - rotmat = np.array([[cp, -sp, 0], - [sp, cp, 0], - [0, 0, 1]], dtype=np.float32) + rotmat = np.array([[cp, -sp, 0], [sp, cp, 0], [0, 0, 1]], dtype=np.float32) # Perform the rotation: for nm in rotate_vars: dat = advo[nm].values - dat[:2] = np.einsum('ij,j...->i...', rotmat[:2, :2], dat[:2]) + dat[:2] = np.einsum("ij,j...->i...", rotmat[:2, :2], dat[:2]) advo[nm].values = dat.copy() # Finalize the output. @@ -273,7 +279,7 @@ def _calc_omat(time, hh, pp, rr, orientation_down=None): return _euler2orient(time, hh, pp, rr) -def _euler2orient(time, heading, pitch, roll, units='degrees'): +def _euler2orient(time, heading, pitch, roll, units="degrees"): # For Nortek data only. # The heading, pitch, roll used here are from the Nortek binary files. @@ -281,7 +287,7 @@ def _euler2orient(time, heading, pitch, roll, units='degrees'): # Returns a rotation matrix that rotates earth (ENU) -> inst. # This is based on the Nortek `Transforms.m` file, available in # the refs folder. - if units.lower() == 'degrees': + if units.lower() == "degrees": pitch = np.deg2rad(pitch) roll = np.deg2rad(roll) heading = np.deg2rad(heading) @@ -291,7 +297,7 @@ def _euler2orient(time, heading, pitch, roll, units='degrees'): # This also involved swapping the sign on sh in the def of omat # below from the values provided in the Nortek Matlab script. - heading = (np.pi / 2 - heading) + heading = np.pi / 2 - heading ch = np.cos(heading) sh = np.sin(heading) @@ -313,14 +319,29 @@ def _euler2orient(time, heading, pitch, roll, units='degrees'): omat[1, 2, :] = sr * cp omat[2, 2, :] = cp * cr - earth = xr.DataArray(['E', 'N', 'U'], dims=['earth'], name='earth', attrs={ - 'units': '1', 'long_name': 'Earth Reference Frame', 'coverage_content_type': 'coordinate'}) - inst = xr.DataArray(['X', 'Y', 'Z'], dims=['inst'], name='inst', attrs={ - 'units': '1', 'long_name': 'Instrument Reference Frame', 'coverage_content_type': 'coordinate'}) - return xr.DataArray(omat, - coords={'earth': earth, - 'inst': inst, - 'time': time}, - dims=['earth', 'inst', 'time'], - attrs={'units': '1', - 'long_name': 'Orientation Matrix'}) + earth = xr.DataArray( + ["E", "N", "U"], + dims=["earth"], + name="earth", + attrs={ + "units": "1", + "long_name": "Earth Reference Frame", + "coverage_content_type": "coordinate", + }, + ) + inst = xr.DataArray( + ["X", "Y", "Z"], + dims=["inst"], + name="inst", + attrs={ + "units": "1", + "long_name": "Instrument Reference Frame", + "coverage_content_type": "coordinate", + }, + ) + return xr.DataArray( + omat, + coords={"earth": earth, "inst": inst, "time": time}, + dims=["earth", "inst", "time"], + attrs={"units": "1", "long_name": "Orientation Matrix"}, + ) diff --git a/mhkit/dolfyn/time.py b/mhkit/dolfyn/time.py index 576c395d1..ed25b23a5 100644 --- a/mhkit/dolfyn/time.py +++ b/mhkit/dolfyn/time.py @@ -12,7 +12,7 @@ def _fullyear(year): def epoch2dt64(ep_time): """ - Convert from epoch time (seconds since 1/1/1970 00:00:00) to + Convert from epoch time (seconds since 1/1/1970 00:00:00) to numpy.datetime64 array Parameters @@ -27,14 +27,14 @@ def epoch2dt64(ep_time): """ # assumes t0=1970-01-01 00:00:00 - out = np.array(ep_time.astype('int')).astype('datetime64[s]') - out = out + ((ep_time % 1) * 1e9).astype('timedelta64[ns]') + out = np.array(ep_time.astype("int")).astype("datetime64[s]") + out = out + ((ep_time % 1) * 1e9).astype("timedelta64[ns]") return out def dt642epoch(dt64): """ - Convert numpy.datetime64 array to epoch time + Convert numpy.datetime64 array to epoch time (seconds since 1/1/1970 00:00:00) Parameters @@ -48,7 +48,7 @@ def dt642epoch(dt64): Epoch time (seconds since 1/1/1970 00:00:00) """ - return dt64.astype('datetime64[ns]').astype('float') / 1e9 + return dt64.astype("datetime64[ns]").astype("float") / 1e9 def date2dt64(dt): @@ -66,7 +66,7 @@ def date2dt64(dt): Single or array of datetime64 object(s) """ - return np.array(dt).astype('datetime64[ns]') + return np.array(dt).astype("datetime64[ns]") def dt642date(dt64): @@ -89,7 +89,7 @@ def dt642date(dt64): def epoch2date(ep_time, offset_hr=0, to_str=False): """ - Convert from epoch time (seconds since 1/1/1970 00:00:00) to a list + Convert from epoch time (seconds since 1/1/1970 00:00:00) to a list of datetime objects Parameters @@ -104,12 +104,12 @@ def epoch2date(ep_time, offset_hr=0, to_str=False): Returns ------- time : datetime.datetime - The converted datetime object or list(strings) + The converted datetime object or list(strings) Notes ----- The specific time instance is set during deployment, usually sync'd to the - deployment computer. The time seen by DOLfYN is in the timezone of the + deployment computer. The time seen by DOLfYN is in the timezone of the deployment computer, which is unknown to DOLfYN. """ @@ -161,7 +161,7 @@ def date2str(dt, format_str=None): """ if format_str is None: - format_str = '%Y-%m-%d %H:%M:%S.%f' + format_str = "%Y-%m-%d %H:%M:%S.%f" if not isinstance(dt, list): dt = [dt] @@ -208,9 +208,10 @@ def date2matlab(dt): time = list() for i in range(len(dt)): mdn = dt[i] + timedelta(days=366) - frac_seconds = (dt[i]-datetime(dt[i].year, dt[i].month, - dt[i].day, 0, 0, 0)).seconds / (24*60*60) - frac_microseconds = dt[i].microsecond / (24*60*60*1000000) + frac_seconds = ( + dt[i] - datetime(dt[i].year, dt[i].month, dt[i].day, 0, 0, 0) + ).seconds / (24 * 60 * 60) + frac_microseconds = dt[i].microsecond / (24 * 60 * 60 * 1000000) time.append(mdn.toordinal() + frac_seconds + frac_microseconds) return time @@ -238,9 +239,10 @@ def matlab2date(matlab_dn): time.append(day + dayfrac) # Datenum is precise down to 100 microseconds - add difference to round - us = int(round(time[i].microsecond/100, 0))*100 - time[i] = time[i].replace(microsecond=time[i].microsecond) + \ - timedelta(microseconds=us-time[i].microsecond) + us = int(round(time[i].microsecond / 100, 0)) * 100 + time[i] = time[i].replace(microsecond=time[i].microsecond) + timedelta( + microseconds=us - time[i].microsecond + ) return time @@ -253,7 +255,7 @@ def _fill_time_gaps(epoch, sample_rate_hz): """ # epoch is seconds since 1970 - dt = 1. / sample_rate_hz + dt = 1.0 / sample_rate_hz epoch = fillgaps(epoch) if np.isnan(epoch[0]): i0 = np.nonzero(~np.isnan(epoch))[0][0] @@ -263,6 +265,6 @@ def _fill_time_gaps(epoch, sample_rate_hz): # Search backward through the array to get the 'negative index' ie = -np.nonzero(~np.isnan(epoch[::-1]))[0][0] - 1 delta = np.arange(1, -ie, 1) * dt - epoch[(ie + 1):] = epoch[ie] + delta + epoch[(ie + 1) :] = epoch[ie] + delta return epoch diff --git a/mhkit/dolfyn/tools/fft.py b/mhkit/dolfyn/tools/fft.py index 8810c78b0..36698d0dd 100644 --- a/mhkit/dolfyn/tools/fft.py +++ b/mhkit/dolfyn/tools/fft.py @@ -1,5 +1,6 @@ import numpy as np from .misc import detrend_array + fft = np.fft.fft @@ -28,13 +29,13 @@ def fft_frequency(nfft, fs, full=False): if full: return f else: - return np.abs(f[1:int(nfft / 2. + 1)]) + return np.abs(f[1 : int(nfft / 2.0 + 1)]) def _getwindow(window, nfft): - if window == 'hann': + if window == "hann": window = np.hanning(nfft) - elif window == 'hamm': + elif window == "hamm": window = np.hamming(nfft) elif window is None or window == 1: window = np.ones(nfft) @@ -68,7 +69,7 @@ def _stepsize(l, nfft, nens=None, step=None): if nens is None and step is None: if l == nfft: return 0, 1, int(nfft) - nens = int(2. * l / nfft) + nens = int(2.0 * l / nfft) return int((l - nfft) / (nens - 1)), nens, int(nfft) elif nens is None: return int(step), int((l - nfft) / step + 1), int(nfft) @@ -78,7 +79,7 @@ def _stepsize(l, nfft, nens=None, step=None): return int((l - nfft) / (nens - 1)), int(nens), int(nfft) -def cpsd_quasisync_1D(a, b, nfft, fs, window='hann'): +def cpsd_quasisync_1D(a, b, nfft, fs, window="hann"): """ Compute the cross power spectral density (CPSD) of the signals `a` and `b`. @@ -148,21 +149,24 @@ def cpsd_quasisync_1D(a, b, nfft, fs, window='hann'): step[1], nens, nfft = _stepsize(l[1], nfft, nens=nens) fs = np.float64(fs) window = _getwindow(window, nfft) - fft_inds = slice(1, int(nfft / 2. + 1)) - wght = 2. / (window ** 2).sum() - pwr = fft(detrend_array(a[0:nfft]) * window)[fft_inds] * \ - np.conj(fft(detrend_array(b[0:nfft]) * window)[fft_inds]) + fft_inds = slice(1, int(nfft / 2.0 + 1)) + wght = 2.0 / (window**2).sum() + pwr = fft(detrend_array(a[0:nfft]) * window)[fft_inds] * np.conj( + fft(detrend_array(b[0:nfft]) * window)[fft_inds] + ) if nens - 1: - for i1, i2 in zip(range(step[0], l[0] - nfft + 1, step[0]), - range(step[1], l[1] - nfft + 1, step[1])): - pwr += fft(detrend_array(a[i1:(i1 + nfft)]) * window)[fft_inds] * \ - np.conj( - fft(detrend_array(b[i2:(i2 + nfft)]) * window)[fft_inds]) + for i1, i2 in zip( + range(step[0], l[0] - nfft + 1, step[0]), + range(step[1], l[1] - nfft + 1, step[1]), + ): + pwr += fft(detrend_array(a[i1 : (i1 + nfft)]) * window)[fft_inds] * np.conj( + fft(detrend_array(b[i2 : (i2 + nfft)]) * window)[fft_inds] + ) pwr *= wght / nens / fs return pwr -def cpsd_1D(a, b, nfft, fs, window='hann', step=None): +def cpsd_1D(a, b, nfft, fs, window="hann", step=None): """ Compute the cross power spectral density (CPSD) of the signals `a` and `b`. @@ -229,8 +233,8 @@ def cpsd_1D(a, b, nfft, fs, window='hann', step=None): step, nens, nfft = _stepsize(l, nfft, step=step) fs = np.float64(fs) window = _getwindow(window, nfft) - fft_inds = slice(1, int(nfft / 2. + 1)) - wght = 2. / (window ** 2).sum() + fft_inds = slice(1, int(nfft / 2.0 + 1)) + wght = 2.0 / (window**2).sum() s1 = fft(detrend_array(a[0:nfft]) * window)[fft_inds] if auto_psd: pwr = np.abs(s1) ** 2 @@ -238,18 +242,18 @@ def cpsd_1D(a, b, nfft, fs, window='hann', step=None): pwr = s1 * np.conj(fft(detrend_array(b[0:nfft]) * window)[fft_inds]) if nens - 1: for i in range(step, l - nfft + 1, step): - s1 = fft(detrend_array(a[i:(i + nfft)]) * window)[fft_inds] + s1 = fft(detrend_array(a[i : (i + nfft)]) * window)[fft_inds] if auto_psd: pwr += np.abs(s1) ** 2 else: - pwr += s1 * \ - np.conj( - fft(detrend_array(b[i:(i + nfft)]) * window)[fft_inds]) + pwr += s1 * np.conj( + fft(detrend_array(b[i : (i + nfft)]) * window)[fft_inds] + ) pwr *= wght / nens / fs return pwr -def psd_1D(a, nfft, fs, window='hann', step=None): +def psd_1D(a, nfft, fs, window="hann", step=None): """ Compute the power spectral density (PSD). @@ -286,7 +290,7 @@ def psd_1D(a, nfft, fs, window='hann', step=None): Notes ----- - Credit: This function's line of code was copied from JN's fast_psd.m + Credit: This function's line of code was copied from JN's fast_psd.m routine. See Also diff --git a/mhkit/dolfyn/tools/misc.py b/mhkit/dolfyn/tools/misc.py index de0400772..b08e8e364 100644 --- a/mhkit/dolfyn/tools/misc.py +++ b/mhkit/dolfyn/tools/misc.py @@ -50,8 +50,9 @@ def detrend_array(arr, axis=-1, in_place=False): x = np.arange(sz[axis], dtype=np.float_).reshape(sz) x -= np.nanmean(x, axis=axis, keepdims=True) arr -= np.nanmean(arr, axis=axis, keepdims=True) - b = np.nanmean((x * arr), axis=axis, keepdims=True) / \ - np.nanmean((x ** 2), axis=axis, keepdims=True) + b = np.nanmean((x * arr), axis=axis, keepdims=True) / np.nanmean( + (x**2), axis=axis, keepdims=True + ) arr -= b * x return arr @@ -82,7 +83,7 @@ def group(bl, min_length=0): if not any(bl): return np.empty(0) - vl = np.diff(bl.astype('int')) + vl = np.diff(bl.astype("int")) ups = np.nonzero(vl == 1)[0] + 1 dns = np.nonzero(vl == -1)[0] + 1 if bl[0]: @@ -95,7 +96,7 @@ def group(bl, min_length=0): dns = np.array([len(bl)]) else: dns = np.concatenate((dns, [len(bl)])) - out = np.empty(len(dns), dtype='O') + out = np.empty(len(dns), dtype="O") idx = 0 for u, d in zip(ups, dns): if d - u < min_length: @@ -134,7 +135,7 @@ def slice1d_along_axis(arr_shape, axis=0): if axis < 0: axis += nd ind = [0] * (nd - 1) - i = np.zeros(nd, 'O') + i = np.zeros(nd, "O") indlist = list(range(nd)) indlist.remove(axis) i[axis] = slice(None) @@ -165,18 +166,18 @@ def convert_degrees(deg, tidal_mode=True): deg: float or array-like Number or array in 'degrees CCW from East' or 'degrees CW from North' tidal_mode : bool - If true, range is set from 0 to +/-180 degrees. If false, range is 0 to + If true, range is set from 0 to +/-180 degrees. If false, range is 0 to 360 degrees. Default = True Returns ------- out : float or array-like - Input data transformed to 'degrees CW from North' or + Input data transformed to 'degrees CW from North' or 'degrees CCW from East', respectively (based on `deg`) Notes ----- - The same algorithm is used to convert back and forth between 'CCW from E' + The same algorithm is used to convert back and forth between 'CCW from E' and 'CW from N' """ @@ -223,11 +224,10 @@ def fillgaps(a, maxgap=np.inf, dim=0, extrapFlg=False): nd = a.ndim if dim < 0: dim += nd - if (dim >= nd): - raise ValueError("dim must be less than a.ndim; dim=%d, rank=%d." - % (dim, nd)) + if dim >= nd: + raise ValueError("dim must be less than a.ndim; dim=%d, rank=%d." % (dim, nd)) ind = [0] * (nd - 1) - i = np.zeros(nd, 'O') + i = np.zeros(nd, "O") indlist = list(range(nd)) indlist.remove(dim) i[dim] = slice(None, None) @@ -238,18 +238,21 @@ def fillgaps(a, maxgap=np.inf, dim=0, extrapFlg=False): # Here we extrapolate the ends, if necessary: if extrapFlg and gd.__len__() > 0: if gd[0] != 0 and gd[0] <= maxgap: - a[:gd[0]] = a[gd[0]] + a[: gd[0]] = a[gd[0]] if gd[-1] != a.__len__() and (a.__len__() - (gd[-1] + 1)) <= maxgap: - a[gd[-1]:] = a[gd[-1]] + a[gd[-1] :] = a[gd[-1]] # Here is the main loop if gd.__len__() > 1: inds = np.nonzero((1 < np.diff(gd)) & (np.diff(gd) <= maxgap + 1))[0] for i2 in range(0, inds.__len__()): ii = list(range(gd[inds[i2]] + 1, gd[inds[i2] + 1])) - a[ii] = (np.diff(a[gd[[inds[i2], inds[i2] + 1]]]) * - (np.arange(0, ii.__len__()) + 1) / - (ii.__len__() + 1) + a[gd[inds[i2]]]).astype(a.dtype) + a[ii] = ( + np.diff(a[gd[[inds[i2], inds[i2] + 1]]]) + * (np.arange(0, ii.__len__()) + 1) + / (ii.__len__() + 1) + + a[gd[inds[i2]]] + ).astype(a.dtype) return a @@ -289,27 +292,28 @@ def interpgaps(a, t, maxgap=np.inf, dim=0, extrapFlg=False): # Here we extrapolate the ends, if necessary: if extrapFlg and gd.__len__() > 0: if gd[0] != 0 and gd[0] <= maxgap: - a[:gd[0]] = a[gd[0]] + a[: gd[0]] = a[gd[0]] if gd[-1] != a.__len__() and (a.__len__() - (gd[-1] + 1)) <= maxgap: - a[gd[-1]:] = a[gd[-1]] + a[gd[-1] :] = a[gd[-1]] # Here is the main loop if gd.__len__() > 1: - inds = _find((1 < np.diff(gd)) & - (np.diff(gd) <= maxgap + 1)) + inds = _find((1 < np.diff(gd)) & (np.diff(gd) <= maxgap + 1)) for i2 in range(0, inds.__len__()): ii = np.arange(gd[inds[i2]] + 1, gd[inds[i2] + 1]) - ti = (t[ii] - t[gd[inds[i2]]]) / np.diff(t[[gd[inds[i2]], - gd[inds[i2] + 1]]]) - a[ii] = (np.diff(a[gd[[inds[i2], inds[i2] + 1]]]) * ti + - a[gd[inds[i2]]]).astype(a.dtype) + ti = (t[ii] - t[gd[inds[i2]]]) / np.diff( + t[[gd[inds[i2]], gd[inds[i2] + 1]]] + ) + a[ii] = ( + np.diff(a[gd[[inds[i2], inds[i2] + 1]]]) * ti + a[gd[inds[i2]]] + ).astype(a.dtype) return a def medfiltnan(a, kernel, thresh=0): """ - Do a running median filter of the data. Regions where more than + Do a running median filter of the data. Regions where more than ``thresh`` fraction of the points are NaN are set to NaN. Parameters @@ -317,9 +321,9 @@ def medfiltnan(a, kernel, thresh=0): a : numpy.ndarray 2D array containing data to be filtered. kernel_size : numpy.ndarray or list, optional - A scalar or a list of length 2, giving the size of the median - filter window in each dimension. Elements of kernel_size should - be odd. If kernel_size is a scalar, then this scalar is used as + A scalar or a list of length 2, giving the size of the median + filter window in each dimension. Elements of kernel_size should + be odd. If kernel_size is a scalar, then this scalar is used as the size in each dimension. thresh : int Maximum gap in *a* to filter over @@ -344,9 +348,9 @@ def medfiltnan(a, kernel, thresh=0): kernel = [1, kernel] out = medfilt2d(a, kernel) if thresh > 0: - out[convolve2d(np.isnan(a), - np.ones(kernel) / np.prod(kernel), - 'same') > thresh] = np.NaN + out[ + convolve2d(np.isnan(a), np.ones(kernel) / np.prod(kernel), "same") > thresh + ] = np.NaN if flag_1D: return out[0] return out diff --git a/mhkit/dolfyn/velocity.py b/mhkit/dolfyn/velocity.py index 4ab0194bc..2fd30eeb9 100644 --- a/mhkit/dolfyn/velocity.py +++ b/mhkit/dolfyn/velocity.py @@ -7,13 +7,13 @@ from .tools.misc import slice1d_along_axis, convert_degrees -@xr.register_dataset_accessor('velds') # 'vel dataset' -class Velocity(): +@xr.register_dataset_accessor("velds") # 'vel dataset' +class Velocity: """ All ADCP and ADV xarray datasets wrap this base class. - The turbulence-related attributes defined within this class - assume that the ``'tke_vec'`` and ``'stress_vec'`` data entries are + The turbulence-related attributes defined within this class + assume that the ``'tke_vec'`` and ``'stress_vec'`` data entries are included in the dataset. These are typically calculated using a :class:`VelBinner` tool, but the method for calculating these variables can depend on the details of the measurement @@ -27,7 +27,7 @@ class Velocity(): ######## # Major components of the dolfyn-API - def rotate2(self, out_frame='earth', inplace=True): + def rotate2(self, out_frame="earth", inplace=True): """ Rotate the dataset to a new coordinate system. @@ -173,100 +173,128 @@ def __getitem__(self, key): def __contains__(self, val): return val in self.ds - def __repr__(self, ): - time_string = '{:.2f} {} (started: {})' - if ('time' not in self or dt642epoch(self['time'][0]) < 1): - time_string = '-->No Time Information!<--' + def __repr__( + self, + ): + time_string = "{:.2f} {} (started: {})" + if "time" not in self or dt642epoch(self["time"][0]) < 1: + time_string = "-->No Time Information!<--" else: - tm = self['time'][[0, -1]].values + tm = self["time"][[0, -1]].values dt = dt642date(tm[0])[0] - delta = (dt642epoch(tm[-1]) - - dt642epoch(tm[0])) / (3600 * 24) # days + delta = (dt642epoch(tm[-1]) - dt642epoch(tm[0])) / (3600 * 24) # days if delta > 1: - units = 'days' + units = "days" elif delta * 24 > 1: - units = 'hours' + units = "hours" delta *= 24 elif delta * 24 * 60 > 1: delta *= 24 * 60 - units = 'minutes' + units = "minutes" else: delta *= 24 * 3600 - units = 'seconds' + units = "seconds" try: - time_string = time_string.format(delta, units, - dt.strftime('%b %d, %Y %H:%M')) + time_string = time_string.format( + delta, units, dt.strftime("%b %d, %Y %H:%M") + ) except AttributeError: - time_string = '-->Error in time info<--' + time_string = "-->Error in time info<--" p = self.ds.attrs - t_shape = self['time'].shape + t_shape = self["time"].shape if len(t_shape) > 1: - shape_string = '({} bins, {} pings @ {}Hz)'.format( - t_shape[0], t_shape, p.get('fs')) + shape_string = "({} bins, {} pings @ {}Hz)".format( + t_shape[0], t_shape, p.get("fs") + ) else: - shape_string = '({} pings @ {}Hz)'.format( - t_shape[0], p.get('fs', '??')) - _header = ("<%s data object>: " - " %s %s\n" - " . %s\n" - " . %s-frame\n" - " . %s\n" % - (p.get('inst_type'), - self.ds.attrs['inst_make'], self.ds.attrs['inst_model'], - time_string, - p.get('coord_sys'), - shape_string)) - _vars = ' Variables:\n' + shape_string = "({} pings @ {}Hz)".format(t_shape[0], p.get("fs", "??")) + _header = ( + "<%s data object>: " + " %s %s\n" + " . %s\n" + " . %s-frame\n" + " . %s\n" + % ( + p.get("inst_type"), + self.ds.attrs["inst_make"], + self.ds.attrs["inst_model"], + time_string, + p.get("coord_sys"), + shape_string, + ) + ) + _vars = " Variables:\n" # Specify which variable show up in this view here. # * indicates a wildcard # This list also sets the display order. # Only the first 12 matches are displayed. - show_vars = ['time*', 'vel*', 'range', 'range_echo', - 'orientmat', 'heading', 'pitch', 'roll', - 'temp', 'press*', 'amp*', 'corr*', - 'accel', 'angrt', 'mag', 'echo', - ] + show_vars = [ + "time*", + "vel*", + "range", + "range_echo", + "orientmat", + "heading", + "pitch", + "roll", + "temp", + "press*", + "amp*", + "corr*", + "accel", + "angrt", + "mag", + "echo", + ] n = 0 for v in show_vars: if n > 12: break - if v.endswith('*'): + if v.endswith("*"): v = v[:-1] # Drop the '*' for nm in self.variables: if n > 12: break if nm.startswith(v): n += 1 - _vars += ' - {} {}\n'.format(nm, self.ds[nm].dims) + _vars += " - {} {}\n".format(nm, self.ds[nm].dims) elif v in self.ds: - _vars += ' - {} {}\n'.format(v, self.ds[v].dims) + _vars += " - {} {}\n".format(v, self.ds[v].dims) if n < len(self.variables): - _vars += ' ... and others (see `.variables`)\n' + _vars += " ... and others (see `.variables`)\n" return _header + _vars ###### # Duplicate valuable xarray properties here. @property - def variables(self, ): + def variables( + self, + ): """A sorted list of the variable names in the dataset.""" return sorted(self.ds.variables) @property - def attrs(self, ): + def attrs( + self, + ): """The attributes in the dataset.""" return self.ds.attrs @property - def coords(self, ): + def coords( + self, + ): """The coordinates in the dataset.""" return self.ds.coords ###### # A bunch of DOLfYN specific properties @property - def u(self,): + def u( + self, + ): """ The first velocity component. @@ -279,10 +307,12 @@ def u(self,): - earth: east - principal: streamwise """ - return self.ds['vel'][0].drop('dir') + return self.ds["vel"][0].drop("dir") @property - def v(self,): + def v( + self, + ): """ The second velocity component. @@ -295,10 +325,12 @@ def v(self,): - earth: north - principal: cross-stream """ - return self.ds['vel'][1].drop('dir') + return self.ds["vel"][1].drop("dir") @property - def w(self,): + def w( + self, + ): """ The third velocity component. @@ -311,37 +343,47 @@ def w(self,): - earth: up - principal: up """ - return self.ds['vel'][2].drop('dir') + return self.ds["vel"][2].drop("dir") @property - def U(self,): + def U( + self, + ): """Horizontal velocity as a complex quantity""" return xr.DataArray( - (self.u + self.v * 1j).astype('complex64'), - attrs={'units': 'm s-1', - 'long_name': 'Horizontal Water Velocity'}) - + (self.u + self.v * 1j).astype("complex64"), + attrs={"units": "m s-1", "long_name": "Horizontal Water Velocity"}, + ) + @property - def U_mag(self,): + def U_mag( + self, + ): """Horizontal velocity magnitude""" return xr.DataArray( - np.abs(self.U).astype('float32'), - attrs={'units': 'm s-1', - 'long_name': 'Water Speed', - 'standard_name': 'sea_water_speed'}) + np.abs(self.U).astype("float32"), + attrs={ + "units": "m s-1", + "long_name": "Water Speed", + "standard_name": "sea_water_speed", + }, + ) @property - def U_dir(self,): + def U_dir( + self, + ): """ - Angle of horizontal velocity vector. Direction is 'to', - as opposed to 'from'. This function calculates angle as - "degrees CCW from X/East/streamwise" and then converts it to + Angle of horizontal velocity vector. Direction is 'to', + as opposed to 'from'. This function calculates angle as + "degrees CCW from X/East/streamwise" and then converts it to "degrees CW from X/North/streamwise". """ + def convert_to_CW(angle): - if self.ds.coord_sys == 'earth': + if self.ds.coord_sys == "earth": # Convert "deg CCW from East" to "deg CW from North" [0, 360] angle = convert_degrees(angle, tidal_mode=False) relative_to = self.ds.dir[1].values @@ -353,18 +395,23 @@ def convert_to_CW(angle): return angle, relative_to # Convert from radians to degrees - angle, rel = convert_to_CW(np.angle(self.U)*(180/np.pi)) + angle, rel = convert_to_CW(np.angle(self.U) * (180 / np.pi)) return xr.DataArray( - angle.astype('float32'), + angle.astype("float32"), dims=self.U.dims, coords=self.U.coords, - attrs={'units': 'degrees_CW_from_' + str(rel), - 'long_name': 'Water Direction', - 'standard_name': 'sea_water_to_direction'}) + attrs={ + "units": "degrees_CW_from_" + str(rel), + "long_name": "Water Direction", + "standard_name": "sea_water_to_direction", + }, + ) @property - def E_coh(self,): + def E_coh( + self, + ): """ Coherent turbulent energy @@ -376,11 +423,14 @@ def E_coh(self,): E_coh = (self.upwp_**2 + self.upvp_**2 + self.vpwp_**2) ** (0.5) return xr.DataArray( - E_coh.astype('float32'), - coords={'time': self.ds['stress_vec'].time}, - dims=['time'], - attrs={'units': self.ds['stress_vec'].units, - 'long_name': 'Coherent Turbulence Energy'}) + E_coh.astype("float32"), + coords={"time": self.ds["stress_vec"].time}, + dims=["time"], + attrs={ + "units": self.ds["stress_vec"].units, + "long_name": "Coherent Turbulence Energy", + }, + ) @property def I_tke(self, thresh=0): @@ -389,14 +439,15 @@ def I_tke(self, thresh=0): Ratio of sqrt(tke) to horizontal velocity magnitude. """ - I_tke = np.ma.masked_where(self.U_mag < thresh, - np.sqrt(2 * self.tke) / self.U_mag) + I_tke = np.ma.masked_where( + self.U_mag < thresh, np.sqrt(2 * self.tke) / self.U_mag + ) return xr.DataArray( - I_tke.data.astype('float32'), + I_tke.data.astype("float32"), coords=self.U_mag.coords, dims=self.U_mag.dims, - attrs={'units': '% [0,1]', - 'long_name': 'TKE Intensity'}) + attrs={"units": "% [0,1]", "long_name": "TKE Intensity"}, + ) @property def I(self, thresh=0): @@ -406,61 +457,73 @@ def I(self, thresh=0): Ratio of standard deviation of horizontal velocity to horizontal velocity magnitude. """ - I = np.ma.masked_where(self.U_mag < thresh, - self.ds['U_std'] / self.U_mag) + I = np.ma.masked_where(self.U_mag < thresh, self.ds["U_std"] / self.U_mag) return xr.DataArray( - I.data.astype('float32'), + I.data.astype("float32"), coords=self.U_mag.coords, dims=self.U_mag.dims, - attrs={'units': '% [0,1]', - 'long_name': 'Turbulence Intensity'}) + attrs={"units": "% [0,1]", "long_name": "Turbulence Intensity"}, + ) @property - def tke(self,): - """Turbulent kinetic energy (sum of the three components) - """ - tke = self.ds['tke_vec'].sum('tke') / 2 - tke.name = 'TKE' - tke.attrs['units'] = self.ds['tke_vec'].units - tke.attrs['long_name'] = 'TKE' - tke.attrs['standard_name'] = 'specific_turbulent_kinetic_energy_of_sea_water' + def tke( + self, + ): + """Turbulent kinetic energy (sum of the three components)""" + tke = self.ds["tke_vec"].sum("tke") / 2 + tke.name = "TKE" + tke.attrs["units"] = self.ds["tke_vec"].units + tke.attrs["long_name"] = "TKE" + tke.attrs["standard_name"] = "specific_turbulent_kinetic_energy_of_sea_water" return tke @property - def upvp_(self,): + def upvp_( + self, + ): """u'v'bar Reynolds stress""" - return self.ds['stress_vec'].sel(tau="upvp_").drop('tau') + return self.ds["stress_vec"].sel(tau="upvp_").drop("tau") @property - def upwp_(self,): + def upwp_( + self, + ): """u'w'bar Reynolds stress""" - return self.ds['stress_vec'].sel(tau="upwp_").drop('tau') + return self.ds["stress_vec"].sel(tau="upwp_").drop("tau") @property - def vpwp_(self,): + def vpwp_( + self, + ): """v'w'bar Reynolds stress""" - return self.ds['stress_vec'].sel(tau="vpwp_").drop('tau') + return self.ds["stress_vec"].sel(tau="vpwp_").drop("tau") @property - def upup_(self,): + def upup_( + self, + ): """u'u'bar component of the tke""" - return self.ds['tke_vec'].sel(tke="upup_").drop('tke') + return self.ds["tke_vec"].sel(tke="upup_").drop("tke") @property - def vpvp_(self,): + def vpvp_( + self, + ): """v'v'bar component of the tke""" - return self.ds['tke_vec'].sel(tke="vpvp_").drop('tke') + return self.ds["tke_vec"].sel(tke="vpvp_").drop("tke") @property - def wpwp_(self,): + def wpwp_( + self, + ): """w'w'bar component of the tke""" - return self.ds['tke_vec'].sel(tke="wpwp_").drop('tke') + return self.ds["tke_vec"].sel(tke="wpwp_").drop("tke") class VelBinner(TimeBinner): @@ -487,38 +550,53 @@ class VelBinner(TimeBinner): # This defines how cross-spectra and stresses are computed. _cross_pairs = [(0, 1), (0, 2), (1, 2)] - tke = xr.DataArray(["upup_", "vpvp_", "wpwp_"], - dims=['tke'], - name='tke', - attrs={'units': '1', - 'long_name': 'Turbulent Kinetic Energy Vector Components', - 'coverage_content_type': 'coordinate'}) - - tau = xr.DataArray(["upvp_", "upwp_", "vpwp_"], - dims=['tau'], - name='tau', - attrs={'units': '1', - 'long_name': 'Reynolds Stress Vector Components', - 'coverage_content_type': 'coordinate'}) - - S = xr.DataArray(['Sxx', 'Syy', 'Szz'], - dims=['S'], - name='S', - attrs={'units': '1', - 'long_name': 'Power Spectral Density Vector Components', - 'coverage_content_type': 'coordinate'}) - - C = xr.DataArray(['Cxy', 'Cxz', 'Cyz'], - dims=['C'], - name='C', - attrs={'units': '1', - 'long_name': 'Cross-Spectral Density Vector Components', - 'coverage_content_type': 'coordinate'}) - + tke = xr.DataArray( + ["upup_", "vpvp_", "wpwp_"], + dims=["tke"], + name="tke", + attrs={ + "units": "1", + "long_name": "Turbulent Kinetic Energy Vector Components", + "coverage_content_type": "coordinate", + }, + ) + + tau = xr.DataArray( + ["upvp_", "upwp_", "vpwp_"], + dims=["tau"], + name="tau", + attrs={ + "units": "1", + "long_name": "Reynolds Stress Vector Components", + "coverage_content_type": "coordinate", + }, + ) + + S = xr.DataArray( + ["Sxx", "Syy", "Szz"], + dims=["S"], + name="S", + attrs={ + "units": "1", + "long_name": "Power Spectral Density Vector Components", + "coverage_content_type": "coordinate", + }, + ) + + C = xr.DataArray( + ["Cxy", "Cxz", "Cyz"], + dims=["C"], + name="C", + attrs={ + "units": "1", + "long_name": "Cross-Spectral Density Vector Components", + "coverage_content_type": "coordinate", + }, + ) def bin_average(self, raw_ds, out_ds=None, names=None): """ - Bin the dataset and calculate the ensemble averages of each + Bin the dataset and calculate the ensemble averages of each variable. Parameters @@ -561,34 +639,38 @@ def bin_average(self, raw_ds, out_ds=None, names=None): dims_list = raw_ds[ky].dims coords_dict = {} for nm in dims_list: - if 'time' in nm: + if "time" in nm: coords_dict[nm] = self.mean(raw_ds[ky][nm].values) else: coords_dict[nm] = raw_ds[ky][nm].values # create Dataset - if 'ensemble' not in ky: + if "ensemble" not in ky: try: # variables with time coordinate - out_ds[ky] = xr.DataArray(self.mean(raw_ds[ky].values), - coords=coords_dict, - dims=dims_list, - attrs=raw_ds[ky].attrs - ).astype('float32') + out_ds[ky] = xr.DataArray( + self.mean(raw_ds[ky].values), + coords=coords_dict, + dims=dims_list, + attrs=raw_ds[ky].attrs, + ).astype("float32") except: # variables not needing averaging pass # Add standard deviation std = self.standard_deviation(raw_ds.velds.U_mag.values) - out_ds['U_std'] = xr.DataArray( - std.astype('float32'), + out_ds["U_std"] = xr.DataArray( + std.astype("float32"), dims=raw_ds.vel.dims[1:], - attrs={'units': 'm s-1', - 'long_name': 'Water Velocity Standard Deviation'}) + attrs={ + "units": "m s-1", + "long_name": "Water Velocity Standard Deviation", + }, + ) return out_ds - def bin_variance(self, raw_ds, out_ds=None, names=None, suffix='_var'): + def bin_variance(self, raw_ds, out_ds=None, names=None, suffix="_var"): """ - Bin the dataset and calculate the ensemble variances of each + Bin the dataset and calculate the ensemble variances of each variable. Complementary to `bin_average()`. Parameters @@ -632,19 +714,20 @@ def bin_variance(self, raw_ds, out_ds=None, names=None, suffix='_var'): dims_list = raw_ds[ky].dims coords_dict = {} for nm in dims_list: - if 'time' in nm: + if "time" in nm: coords_dict[nm] = self.mean(raw_ds[ky][nm].values) else: coords_dict[nm] = raw_ds[ky][nm].values # create Dataset - if 'ensemble' not in ky: + if "ensemble" not in ky: try: # variables with time coordinate - out_ds[ky+suffix] = xr.DataArray(self.variance(raw_ds[ky].values), - coords=coords_dict, - dims=dims_list, - attrs=raw_ds[ky].attrs - ).astype('float32') + out_ds[ky + suffix] = xr.DataArray( + self.variance(raw_ds[ky].values), + coords=coords_dict, + dims=dims_list, + attrs=raw_ds[ky].attrs, + ).astype("float32") except: # variables not needing averaging pass @@ -680,17 +763,18 @@ def autocovariance(self, veldat, n_bin=None): indat = veldat.values n_bin = self._parse_nbin(n_bin) - out = np.empty(self._outshape(indat.shape, n_bin=n_bin)[:-1] + - [int(n_bin // 4)], dtype=indat.dtype) + out = np.empty( + self._outshape(indat.shape, n_bin=n_bin)[:-1] + [int(n_bin // 4)], + dtype=indat.dtype, + ) dt1 = self.reshape(indat, n_pad=n_bin / 2 - 2) # Here we de-mean only on the 'valid' range: - dt1 = dt1 - dt1[..., :, int(n_bin // 4): - int(-n_bin // 4)].mean(-1)[..., None] + dt1 = dt1 - dt1[..., :, int(n_bin // 4) : int(-n_bin // 4)].mean(-1)[..., None] dt2 = self.demean(indat) se = slice(int(n_bin // 4) - 1, None, 1) sb = slice(int(n_bin // 4) - 1, None, -1) for slc in slice1d_along_axis(dt1.shape, -1): - tmp = np.correlate(dt1[slc], dt2[slc], 'valid') + tmp = np.correlate(dt1[slc], dt2[slc], "valid") # The zero-padding in reshape means we compute coherence # from one-sided time-series for first and last points. if slc[-2] == 0: @@ -703,100 +787,113 @@ def autocovariance(self, veldat, n_bin=None): dims_list, coords_dict = self._new_coords(veldat) # tack on new coordinate - dims_list.append('lag') - coords_dict['lag'] = np.arange(n_bin//4) + dims_list.append("lag") + coords_dict["lag"] = np.arange(n_bin // 4) - da = xr.DataArray(out.astype('float32'), - coords=coords_dict, - dims=dims_list,) - da['lag'].attrs['units'] = 'timestep' + da = xr.DataArray( + out.astype("float32"), + coords=coords_dict, + dims=dims_list, + ) + da["lag"].attrs["units"] = "timestep" return da def turbulent_kinetic_energy(self, veldat, noise=None, detrend=True): """ - Calculate the turbulent kinetic energy (TKE) (variances + Calculate the turbulent kinetic energy (TKE) (variances of u,v,w). Parameters ---------- veldat : xarray.DataArray - Velocity data array from ADV or single beam from ADCP. + Velocity data array from ADV or single beam from ADCP. The last dimension is assumed to be time. noise : float or array-like - A vector of the noise levels of the velocity data with + A vector of the noise levels of the velocity data with the same first dimension as the velocity vector. detrend : bool (default: False) Detrend the velocity data (True), or simply de-mean it (False), prior to computing tke. Note: the psd routines use detrend, so if you want to have the same amount of variance here as there use ``detrend=True``. - + Returns ------- tke_vec : xarray.DataArray dataArray containing u'u'_, v'v'_ and w'w'_ """ - if 'xarray' in type(veldat).__module__: + if "xarray" in type(veldat).__module__: vel = veldat.values - if 'xarray' in type(noise).__module__: + if "xarray" in type(noise).__module__: noise = noise.values if len(np.shape(vel)) > 2: - raise ValueError("This function is only valid for calculating TKE using " - "velocity from an ADV or a single ADCP beam.") + raise ValueError( + "This function is only valid for calculating TKE using " + "velocity from an ADV or a single ADCP beam." + ) # Calc TKE if detrend: - out = np.nanmean(self.detrend(vel)**2, axis=-1) + out = np.nanmean(self.detrend(vel) ** 2, axis=-1) else: - out = np.nanmean(self.demean(vel)**2, axis=-1) + out = np.nanmean(self.demean(vel) ** 2, axis=-1) - if 'dir' in veldat.dims: + if "dir" in veldat.dims: # Subtract noise if noise is not None: if np.shape(noise)[0] != 3: raise Exception( - 'Noise should have same first dimension as velocity') + "Noise should have same first dimension as velocity" + ) out[0] -= noise[0] ** 2 out[1] -= noise[1] ** 2 out[2] -= noise[2] ** 2 # Set coords - dims = ['tke', 'time'] - coords = {'tke': self.tke, - 'time': self.mean(veldat.time.values)} + dims = ["tke", "time"] + coords = {"tke": self.tke, "time": self.mean(veldat.time.values)} else: # Subtract noise if noise is not None: if np.shape(noise) > np.shape(vel): raise Exception( - 'Noise should have same or fewer dimensions as velocity') - out -= noise ** 2 + "Noise should have same or fewer dimensions as velocity" + ) + out -= noise**2 # Set coords dims = veldat.dims coords = {} for nm in veldat.dims: - if 'time' in nm: + if "time" in nm: coords[nm] = self.mean(veldat[nm].values) else: coords[nm] = veldat[nm].values return xr.DataArray( - out.astype('float32'), + out.astype("float32"), dims=dims, coords=coords, - attrs={'units': 'm2 s-2', - 'long_name': 'TKE Vector', - 'standard_name': 'specific_turbulent_kinetic_energy_of_sea_water'}) - - def power_spectral_density(self, veldat, - freq_units='rad/s', - fs=None, - window='hann', - noise=None, - n_bin=None, n_fft=None, n_pad=None, - step=None): + attrs={ + "units": "m2 s-2", + "long_name": "TKE Vector", + "standard_name": "specific_turbulent_kinetic_energy_of_sea_water", + }, + ) + + def power_spectral_density( + self, + veldat, + freq_units="rad/s", + fs=None, + window="hann", + noise=None, + n_bin=None, + n_fft=None, + n_pad=None, + step=None, + ): """ Calculate the power spectral density of velocity. @@ -805,7 +902,7 @@ def power_spectral_density(self, veldat, veldat : xr.DataArray The raw velocity data (of dims 'dir' and 'time'). freq_units : string - Frequency units of the returned spectra in either Hz or rad/s + Frequency units of the returned spectra in either Hz or rad/s (`f` or :math:`\\omega`) fs : float (optional) The sample rate. Default is `binner.fs` @@ -813,7 +910,7 @@ def power_spectral_density(self, veldat, Specify the window function. Options: 1, None, 'hann', 'hamm' noise : float or array-like - A vector of the noise levels of the velocity data with + A vector of the noise levels of the velocity data with the same first dimension as the velocity vector. Default = 0. n_bin : int (optional) @@ -835,77 +932,93 @@ def power_spectral_density(self, veldat, fs_in = self._parse_fs(fs) n_fft = self._parse_nfft(n_fft) - if 'xarray' in type(veldat).__module__: + if "xarray" in type(veldat).__module__: vel = veldat.values - if 'xarray' in type(noise).__module__: + if "xarray" in type(noise).__module__: noise = noise.values - if ('rad' not in freq_units) and ('Hz' not in freq_units): + if ("rad" not in freq_units) and ("Hz" not in freq_units): raise ValueError("`freq_units` should be one of 'Hz' or 'rad/s'") - + # Create frequency vector, also checks whether using f or omega - if 'rad' in freq_units: - fs = 2*np.pi*fs_in - freq_units = 'rad s-1' - units = 'm2 s-1 rad-1' + if "rad" in freq_units: + fs = 2 * np.pi * fs_in + freq_units = "rad s-1" + units = "m2 s-1 rad-1" else: fs = fs_in - freq_units = 'Hz' - units = 'm2 s-2 Hz-1' - freq = xr.DataArray(self._fft_freq(fs=fs_in, units=freq_units, n_fft=n_fft), - dims=['freq'], - name='freq', - attrs={'units': freq_units, - 'long_name': 'FFT Frequency Vector', - 'coverage_content_type': 'coordinate'} - ).astype('float32') + freq_units = "Hz" + units = "m2 s-2 Hz-1" + freq = xr.DataArray( + self._fft_freq(fs=fs_in, units=freq_units, n_fft=n_fft), + dims=["freq"], + name="freq", + attrs={ + "units": freq_units, + "long_name": "FFT Frequency Vector", + "coverage_content_type": "coordinate", + }, + ).astype("float32") # Spectra, if input is full velocity or a single array if len(vel.shape) == 2: if not vel.shape[0] == 3: - raise Exception("Function can only handle 1D or 3D arrays." \ - " If ADCP data, please select a specific depth bin.") - if (noise is not None) and (np.shape(noise)[0] != 3): raise Exception( - 'Noise should have same first dimension as velocity') + "Function can only handle 1D or 3D arrays." + " If ADCP data, please select a specific depth bin." + ) + if (noise is not None) and (np.shape(noise)[0] != 3): + raise Exception("Noise should have same first dimension as velocity") else: noise = np.array([0, 0, 0]) - out = np.empty(self._outshape_fft(vel[:3].shape, n_fft=n_fft, n_bin=n_bin), - dtype=np.float32) + out = np.empty( + self._outshape_fft(vel[:3].shape, n_fft=n_fft, n_bin=n_bin), + dtype=np.float32, + ) for idx in range(3): - out[idx] = self._psd_base(vel[idx], - fs=fs, - noise=noise[idx], - window=window, - n_bin=n_bin, - n_pad=n_pad, - n_fft=n_fft, - step=step) - coords = {'S': self.S, - 'time': self.mean(veldat['time'].values), - 'freq': freq} - dims = ['S', 'time', 'freq'] + out[idx] = self._psd_base( + vel[idx], + fs=fs, + noise=noise[idx], + window=window, + n_bin=n_bin, + n_pad=n_pad, + n_fft=n_fft, + step=step, + ) + coords = { + "S": self.S, + "time": self.mean(veldat["time"].values), + "freq": freq, + } + dims = ["S", "time", "freq"] else: if (noise is not None) and (len(np.shape(noise)) > 1): - raise Exception( - 'Noise should have same first dimension as velocity') + raise Exception("Noise should have same first dimension as velocity") else: noise = np.array(0) - out = self._psd_base(vel, - fs=fs, - noise=noise, - window=window, - n_bin=n_bin, - n_pad=n_pad, - n_fft=n_fft, - step=step) - coords = {veldat.dims[-1]: self.mean(veldat[veldat.dims[-1]].values), - 'freq': freq} - dims = [veldat.dims[-1], 'freq'] + out = self._psd_base( + vel, + fs=fs, + noise=noise, + window=window, + n_bin=n_bin, + n_pad=n_pad, + n_fft=n_fft, + step=step, + ) + coords = { + veldat.dims[-1]: self.mean(veldat[veldat.dims[-1]].values), + "freq": freq, + } + dims = [veldat.dims[-1], "freq"] return xr.DataArray( - out.astype('float32'), + out.astype("float32"), coords=coords, dims=dims, - attrs={'units': units, - 'n_fft': n_fft, - 'long_name': 'Power Spectral Density'}) + attrs={ + "units": units, + "n_fft": n_fft, + "long_name": "Power Spectral Density", + }, + ) diff --git a/mhkit/loads/__init__.py b/mhkit/loads/__init__.py index cd0ea3c22..d6c0551cc 100644 --- a/mhkit/loads/__init__.py +++ b/mhkit/loads/__init__.py @@ -1,3 +1,3 @@ from mhkit.loads import general from mhkit.loads import graphics -from mhkit.loads import extreme \ No newline at end of file +from mhkit.loads import extreme diff --git a/mhkit/loads/extreme.py b/mhkit/loads/extreme.py index 4cff02ca0..7788cd8cc 100644 --- a/mhkit/loads/extreme.py +++ b/mhkit/loads/extreme.py @@ -4,40 +4,45 @@ from mhkit.wave.resource import frequency_moment from mhkit.utils import upcrossing, custom + def _peaks_over_threshold(peaks, threshold, sampling_rate): - threshold_unit = np.percentile(peaks, 100*threshold, method='hazen') + threshold_unit = np.percentile(peaks, 100 * threshold, method="hazen") idx_peaks = np.arange(len(peaks)) - idx_storm_peaks, storm_peaks = global_peaks( - idx_peaks, peaks-threshold_unit) + idx_storm_peaks, storm_peaks = global_peaks(idx_peaks, peaks - threshold_unit) idx_storm_peaks = idx_storm_peaks.astype(int) # Two storms that are close enough (within specified window) are # considered the same storm, to ensure independence. - independent_storm_peaks = [storm_peaks[0],] - idx_independent_storm_peaks = [idx_storm_peaks[0],] + independent_storm_peaks = [ + storm_peaks[0], + ] + idx_independent_storm_peaks = [ + idx_storm_peaks[0], + ] # check first 14 days to determine window size nlags = int(14 * 24 / sampling_rate) x = peaks - np.mean(peaks) acf = signal.correlate(x, x, mode="full") lag = signal.correlation_lags(len(x), len(x), mode="full") - idx_zero = np.argmax(lag==0) - positive_lag = lag[(idx_zero):(idx_zero+nlags+1)] - acf_positive = acf[(idx_zero):(idx_zero+nlags+1)] / acf[idx_zero] + idx_zero = np.argmax(lag == 0) + positive_lag = lag[(idx_zero) : (idx_zero + nlags + 1)] + acf_positive = acf[(idx_zero) : (idx_zero + nlags + 1)] / acf[idx_zero] - window_size = sampling_rate * positive_lag[acf_positive<0.5][0] + window_size = sampling_rate * positive_lag[acf_positive < 0.5][0] # window size in "observations" instead of "hours" between peaks. window = window_size / sampling_rate # keep only independent storm peaks for idx in idx_storm_peaks[1:]: if (idx - idx_independent_storm_peaks[-1]) > window: idx_independent_storm_peaks.append(idx) - independent_storm_peaks.append(peaks[idx]-threshold_unit) + independent_storm_peaks.append(peaks[idx] - threshold_unit) elif peaks[idx] > independent_storm_peaks[-1]: idx_independent_storm_peaks[-1] = idx - independent_storm_peaks[-1] = peaks[idx]-threshold_unit + independent_storm_peaks[-1] = peaks[idx] - threshold_unit return independent_storm_peaks + def global_peaks(t, data): """ Find the global peaks of a zero-centered response time-series. @@ -60,15 +65,15 @@ def global_peaks(t, data): Peak values of the response time-series """ if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") # Find zero up-crossings inds = upcrossing(t, data) # We also include the final point in the dataset - inds = np.append(inds, len(data)-1) + inds = np.append(inds, len(data) - 1) # As we want to return both the time and peak # values, look for the index at the peak. @@ -79,7 +84,7 @@ def global_peaks(t, data): func = lambda ind1, ind2: np.argmax(data[ind1:ind2]) + ind1 peak_inds = np.array(custom(t, data, func, inds), dtype=int) - + return t[peak_inds], data[peak_inds] @@ -102,11 +107,11 @@ def number_of_short_term_peaks(n, t, t_st): Number of peaks in short term period. """ if not isinstance(n, int): - raise TypeError(f'n must be of type int. Got: {type(n)}') + raise TypeError(f"n must be of type int. Got: {type(n)}") if not isinstance(t, float): - raise TypeError(f't must be of type float. Got: {type(t)}') + raise TypeError(f"t must be of type float. Got: {type(t)}") if not isinstance(t_st, float): - raise TypeError(f't_st must be of type float. Got: {type(t_st)}') + raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") return n * t_st / t @@ -130,11 +135,11 @@ def peaks_distribution_weibull(x): Probability distribution of the peaks. """ if not isinstance(x, np.ndarray): - raise TypeError(f'x must be of type np.ndarray. Got: {type(x)}') + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") # peaks distribution peaks_params = stats.exponweib.fit(x, f0=1, floc=0) - param_names = ['a', 'c', 'loc', 'scale'] + param_names = ["a", "c", "loc", "scale"] peaks_params = {k: v for k, v in zip(param_names, peaks_params)} peaks = stats.exponweib(**peaks_params) # save the parameter info @@ -161,7 +166,7 @@ def peaks_distribution_weibull_tail_fit(x): Probability distribution of the peaks. """ if not isinstance(x, np.ndarray): - raise TypeError(f'x must be of type np.ndarray. Got: {type(x)}') + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") # Initial guess for Weibull parameters p0 = stats.exponweib.fit(x, f0=1, floc=0) @@ -184,9 +189,8 @@ def peaks_distribution_weibull_tail_fit(x): subset_shape_params[set] = popt[0] subset_scale_params[set] = popt[1] # peaks distribution - peaks_params = [1, np.mean(subset_shape_params), 0, - np.mean(subset_scale_params)] - param_names = ['a', 'c', 'loc', 'scale'] + peaks_params = [1, np.mean(subset_shape_params), 0, np.mean(subset_scale_params)] + param_names = ["a", "c", "loc", "scale"] peaks_params = {k: v for k, v in zip(param_names, peaks_params)} peaks = stats.exponweib(**peaks_params) # save the parameter info @@ -199,8 +203,8 @@ def peaks_distribution_weibull_tail_fit(x): def automatic_hs_threshold( peaks, sampling_rate, - initial_threshold_range = (0.990, 0.995, 0.001), - max_refinement=5 + initial_threshold_range=(0.990, 0.995, 0.001), + max_refinement=5, ): """ Find the best significant wave height threshold for the @@ -239,20 +243,22 @@ def automatic_hs_threshold( """ if not isinstance(sampling_rate, (float, int)): raise TypeError( - f'sampling_rate must be of type float or int. Got: {type(sampling_rate)}') + f"sampling_rate must be of type float or int. Got: {type(sampling_rate)}" + ) if not isinstance(peaks, np.ndarray): - raise TypeError( - f'peaks must be of type np.ndarray. Got: {type(peaks)}') + raise TypeError(f"peaks must be of type np.ndarray. Got: {type(peaks)}") if not len(initial_threshold_range) == 3: raise ValueError( - f'initial_threshold_range must be length 3. Got: {len(initial_threshold_range)}') + f"initial_threshold_range must be length 3. Got: {len(initial_threshold_range)}" + ) if not isinstance(max_refinement, int): raise TypeError( - f'max_refinement must be of type int. Got: {type(max_refinement)}') + f"max_refinement must be of type int. Got: {type(max_refinement)}" + ) range_min, range_max, range_step = initial_threshold_range best_threshold = -1 - years = len(peaks)/(365.25*24/sampling_rate) + years = len(peaks) / (365.25 * 24 / sampling_rate) for i in range(max_refinement): thresholds = np.arange(range_min, range_max, range_step) @@ -260,34 +266,33 @@ def automatic_hs_threshold( for threshold in thresholds: distribution = stats.genpareto - over_threshold = _peaks_over_threshold( - peaks, threshold, sampling_rate) + over_threshold = _peaks_over_threshold(peaks, threshold, sampling_rate) rate_per_year = len(over_threshold) / years if rate_per_year < 2: break - distributions_parameters = distribution.fit( - over_threshold, floc=0.) + distributions_parameters = distribution.fit(over_threshold, floc=0.0) _, (_, _, correlation) = stats.probplot( - peaks, distributions_parameters, distribution, fit=True) + peaks, distributions_parameters, distribution, fit=True + ) correlations.append(correlation) max_i = np.argmax(correlations) minimal_change = np.abs(best_threshold - thresholds[max_i]) < 0.0005 best_threshold = thresholds[max_i] - if minimal_change and i= self.threshold] if xt.size != 0: - pot_ccdf = 1. - self.pot.cdf(xt-self.threshold) - prop_pot = npot/npeaks - out[x >= self.threshold] = 1. - (prop_pot * pot_ccdf) + pot_ccdf = 1.0 - self.pot.cdf(xt - self.threshold) + prop_pot = npot / npeaks + out[x >= self.threshold] = 1.0 - (prop_pot * pot_ccdf) return out peaks = _Peaks(name="peaks", pot_distribution=pot, threshold=threshold) @@ -381,15 +386,14 @@ def ste_peaks(peaks_distribution, npeaks): Short-term extreme distribution. """ if not callable(peaks_distribution.cdf): - raise TypeError('peaks_distribution must be a scipy.stat distribution.') + raise TypeError("peaks_distribution must be a scipy.stat distribution.") if not isinstance(npeaks, float): - raise TypeError(f'npeaks must be of type float. Got: {type(npeaks)}') + raise TypeError(f"npeaks must be of type float. Got: {type(npeaks)}") class _ShortTermExtreme(stats.rv_continuous): - def __init__(self, *args, **kwargs): - self.peaks = kwargs.pop('peaks_distribution') - self.npeaks = kwargs.pop('npeaks') + self.peaks = kwargs.pop("peaks_distribution") + self.npeaks = kwargs.pop("npeaks") super().__init__(*args, **kwargs) def _cdf(self, x): @@ -397,11 +401,11 @@ def _cdf(self, x): peaks_cdf[np.isnan(peaks_cdf)] = 0.0 if len(peaks_cdf) == 1: peaks_cdf = peaks_cdf[0] - return peaks_cdf ** self.npeaks + return peaks_cdf**self.npeaks - ste = _ShortTermExtreme(name="short_term_extreme", - peaks_distribution=peaks_distribution, - npeaks=npeaks) + ste = _ShortTermExtreme( + name="short_term_extreme", peaks_distribution=peaks_distribution, npeaks=npeaks + ) return ste @@ -427,16 +431,16 @@ def block_maxima(t, x, t_st): Block maxima (i.e. largest peak in each block). """ if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(x, np.ndarray): - raise TypeError(f'x must be of type np.ndarray. Got: {type(x)}') + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") if not isinstance(t_st, float): - raise TypeError(f't_st must be of type float. Got: {type(t_st)}') + raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") nblock = int(t[-1] / t_st) block_maxima = np.zeros(int(nblock)) for iblock in range(nblock): - ix = x[(t >= iblock * t_st) & (t < (iblock+1)*t_st)] + ix = x[(t >= iblock * t_st) & (t < (iblock + 1) * t_st)] block_maxima[iblock] = np.max(ix) return block_maxima @@ -458,10 +462,11 @@ def ste_block_maxima_gev(block_maxima): """ if not isinstance(block_maxima, np.ndarray): raise TypeError( - f'block_maxima must be of type np.ndarray. Got: {type(block_maxima)}') + f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" + ) ste_params = stats.genextreme.fit(block_maxima) - param_names = ['c', 'loc', 'scale'] + param_names = ["c", "loc", "scale"] ste_params = {k: v for k, v in zip(param_names, ste_params)} ste = stats.genextreme(**ste_params) ste.params = ste_params @@ -485,10 +490,11 @@ def ste_block_maxima_gumbel(block_maxima): """ if not isinstance(block_maxima, np.ndarray): raise TypeError( - f'block_maxima must be of type np.ndarray. Got: {type(block_maxima)}') + f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" + ) ste_params = stats.gumbel_r.fit(block_maxima) - param_names = ['loc', 'scale'] + param_names = ["loc", "scale"] ste_params = {k: v for k, v in zip(param_names, ste_params)} ste = stats.gumbel_r(**ste_params) ste.params = ste_params @@ -531,28 +537,29 @@ def short_term_extreme(t, data, t_st, method): Short-term extreme distribution. """ if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") if not isinstance(t_st, float): - raise TypeError(f't_st must be of type float. Got: {type(t_st)}') + raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") if not isinstance(method, str): - raise TypeError(f'method must be of type string. Got: {type(method)}') + raise TypeError(f"method must be of type string. Got: {type(method)}") peaks_methods = { - 'peaks_weibull': peaks_distribution_weibull, - 'peaks_weibull_tail_fit': peaks_distribution_weibull_tail_fit, - 'peaks_over_threshold': peaks_distribution_peaks_over_threshold} + "peaks_weibull": peaks_distribution_weibull, + "peaks_weibull_tail_fit": peaks_distribution_weibull_tail_fit, + "peaks_over_threshold": peaks_distribution_peaks_over_threshold, + } blockmaxima_methods = { - 'block_maxima_gev': ste_block_maxima_gev, - 'block_maxima_gumbel': ste_block_maxima_gumbel, + "block_maxima_gev": ste_block_maxima_gev, + "block_maxima_gumbel": ste_block_maxima_gumbel, } if method in peaks_methods.keys(): fit_peaks = peaks_methods[method] _, peaks = global_peaks(t, data) npeaks = len(peaks) - time = t[-1]-t[0] + time = t[-1] - t[0] nst = number_of_short_term_peaks(npeaks, time, t_st) peaks_dist = fit_peaks(peaks) ste = ste_peaks(peaks_dist, nst) @@ -585,18 +592,19 @@ def full_seastate_long_term_extreme(ste, weights): """ if not isinstance(ste, list): raise TypeError( - f'ste must be of type list[scipy.stats.rv_frozen]. Got: {type(ste)}') + f"ste must be of type list[scipy.stats.rv_frozen]. Got: {type(ste)}" + ) if not isinstance(weights, (list, np.ndarray)): raise TypeError( - f'weights must be of type list or np.ndarray. Got: {type(weights)}') + f"weights must be of type list or np.ndarray. Got: {type(weights)}" + ) class _LongTermExtreme(stats.rv_continuous): - def __init__(self, *args, **kwargs): - weights = kwargs.pop('weights') + weights = kwargs.pop("weights") # make sure weights add to 1.0 self.weights = weights / np.sum(weights) - self.ste = kwargs.pop('ste') + self.ste = kwargs.pop("ste") self.n = len(self.weights) super().__init__(*args, **kwargs) @@ -634,24 +642,25 @@ def mler_coefficients(rao, wave_spectrum, response_desired): rao = np.array(rao) except: pass - + if not isinstance(rao, np.ndarray): - raise TypeError( - f'rao must be of type np.ndarray. Got: {type(rao)}') + raise TypeError(f"rao must be of type np.ndarray. Got: {type(rao)}") if not isinstance(wave_spectrum, pd.DataFrame): raise TypeError( - f'wave_spectrum must be of type pd.DataFrame. Got: {type(wave_spectrum)}') + f"wave_spectrum must be of type pd.DataFrame. Got: {type(wave_spectrum)}" + ) if not isinstance(response_desired, (int, float)): raise TypeError( - f'response_desired must be of type int or float. Got: {type(response_desired)}') + f"response_desired must be of type int or float. Got: {type(response_desired)}" + ) freq_hz = wave_spectrum.index.values # convert from Hz to rad/s - freq = freq_hz * (2*np.pi) + freq = freq_hz * (2 * np.pi) # change from Hz to rad/s - wave_spectrum = wave_spectrum.iloc[:, 0].values / (2*np.pi) + wave_spectrum = wave_spectrum.iloc[:, 0].values / (2 * np.pi) # get delta - dw = (2*np.pi - 0.) / (len(freq)-1) + dw = (2 * np.pi - 0.0) / (len(freq) - 1) spectrum_r = np.zeros(len(freq)) # [(response units)^2-s/rad] _s = np.zeros(len(freq)) # [m^2-s/rad] @@ -662,7 +671,7 @@ def mler_coefficients(rao, wave_spectrum, response_desired): # Note: waves.A is "S" in Quon2016; 'waves' naming convention # matches WEC-Sim conventions (EWQ) # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 - spectrum_r[:] = np.abs(rao)**2 * (2*wave_spectrum) + spectrum_r[:] = np.abs(rao) ** 2 * (2 * wave_spectrum) # calculate spectral moments and other important spectral values. m0 = (frequency_moment(pd.Series(spectrum_r, index=freq), 0)).iloc[0, 0] @@ -672,8 +681,12 @@ def mler_coefficients(rao, wave_spectrum, response_desired): # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 # Drummen version. Dietz has negative of this. - _coeff_a_rn[:] = np.abs(rao) * np.sqrt(2*wave_spectrum*dw) * \ - ((m2 - freq*m1) + wBar*(freq*m0 - m1)) / (m0*m2 - m1**2) + _coeff_a_rn[:] = ( + np.abs(rao) + * np.sqrt(2 * wave_spectrum * dw) + * ((m2 - freq * m1) + wBar * (freq * m0 - m1)) + / (m0 * m2 - m1**2) + ) # save the new spectral info to pass out # Phase delay should be a positive number in this convention (AP) @@ -686,9 +699,8 @@ def mler_coefficients(rao, wave_spectrum, response_desired): _coeff_a_rn[_coeff_a_rn < 0] *= -1 # calculate the conditioned spectrum [m^2-s/rad] - _s[:] = wave_spectrum * _coeff_a_rn[:]**2 * response_desired**2 - _a[:] = 2*wave_spectrum * _coeff_a_rn[:]**2 * \ - response_desired**2 + _s[:] = wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 + _a[:] = 2 * wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 # if the response amplitude we ask for is negative, we will add # a pi phase shift to the phase information. This is because @@ -699,8 +711,7 @@ def mler_coefficients(rao, wave_spectrum, response_desired): if response_desired < 0: _phase += np.pi - mler = pd.DataFrame( - data={'WaveSpectrum': _s, 'Phase': _phase}, index=freq_hz) + mler = pd.DataFrame(data={"WaveSpectrum": _s, "Phase": _phase}, index=freq_hz) mler = mler.fillna(0) return mler @@ -736,30 +747,30 @@ def mler_simulation(parameters=None): """ if not isinstance(parameters, (type(None), dict)): raise TypeError( - f'If specified, parameters must be of type dict. Got: {type(parameters)}') + f"If specified, parameters must be of type dict. Got: {type(parameters)}" + ) sim = {} if parameters == None: - sim['startTime'] = -150.0 # [s] Starting time - sim['endTime'] = 150.0 # [s] Ending time - sim['dT'] = 1.0 # [s] Time-step size - sim['T0'] = 0.0 # [s] Time of maximum event - - sim['startX'] = -300.0 # [m] Start of simulation space - sim['endX'] = 300.0 # [m] End of simulation space - sim['dX'] = 1.0 # [m] Horiontal spacing - sim['X0'] = 0.0 # [m] Position of maximum event + sim["startTime"] = -150.0 # [s] Starting time + sim["endTime"] = 150.0 # [s] Ending time + sim["dT"] = 1.0 # [s] Time-step size + sim["T0"] = 0.0 # [s] Time of maximum event + + sim["startX"] = -300.0 # [m] Start of simulation space + sim["endX"] = 300.0 # [m] End of simulation space + sim["dX"] = 1.0 # [m] Horiontal spacing + sim["X0"] = 0.0 # [m] Position of maximum event else: sim = parameters # maximum timestep index - sim['maxIT'] = int( - np.ceil((sim['endTime'] - sim['startTime'])/sim['dT'] + 1)) - sim['T'] = np.linspace(sim['startTime'], sim['endTime'], sim['maxIT']) + sim["maxIT"] = int(np.ceil((sim["endTime"] - sim["startTime"]) / sim["dT"] + 1)) + sim["T"] = np.linspace(sim["startTime"], sim["endTime"], sim["maxIT"]) - sim['maxIX'] = int(np.ceil((sim['endX'] - sim['startX'])/sim['dX'] + 1)) - sim['X'] = np.linspace(sim['startX'], sim['endX'], sim['maxIX']) + sim["maxIX"] = int(np.ceil((sim["endX"] - sim["startX"]) / sim["dX"] + 1)) + sim["X"] = np.linspace(sim["startX"], sim["endX"], sim["maxIX"]) return sim @@ -791,28 +802,24 @@ def mler_wave_amp_normalize(wave_amp, mler, sim, k): except: pass if not isinstance(mler, pd.DataFrame): - raise TypeError( - f'mler must be of type pd.DataFrame. Got: {type(mler)}') + raise TypeError(f"mler must be of type pd.DataFrame. Got: {type(mler)}") if not isinstance(wave_amp, (int, float)): - raise TypeError( - f'wave_amp must be of type int or float. Got: {type(wave_amp)}') + raise TypeError(f"wave_amp must be of type int or float. Got: {type(wave_amp)}") if not isinstance(sim, dict): - raise TypeError( - f'sim must be of type dict. Got: {type(sim)}') + raise TypeError(f"sim must be of type dict. Got: {type(sim)}") if not isinstance(k, np.ndarray): - raise TypeError( - f'k must be of type ndarray. Got: {type(k)}') + raise TypeError(f"k must be of type ndarray. Got: {type(k)}") - freq = mler.index.values * 2*np.pi - dw = (max(freq) - min(freq)) / (len(freq)-1) # get delta + freq = mler.index.values * 2 * np.pi + dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - wave_amp_time = np.zeros((sim['maxIX'], sim['maxIT'])) - for ix, x in enumerate(sim['X']): - for it, t in enumerate(sim['T']): + wave_amp_time = np.zeros((sim["maxIX"], sim["maxIT"])) + for ix, x in enumerate(sim["X"]): + for it, t in enumerate(sim["T"]): # conditioned wave wave_amp_time[ix, it] = np.sum( - np.sqrt(2*mler['WaveSpectrum']*dw) * - np.cos(freq*(t-sim['T0']) - k*(x-sim['X0']) + mler['Phase']) + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.cos(freq * (t - sim["T0"]) - k * (x - sim["X0"]) + mler["Phase"]) ) tmp_max_amp = np.max(np.abs(wave_amp_time)) @@ -820,11 +827,11 @@ def mler_wave_amp_normalize(wave_amp, mler, sim, k): # renormalization of wave amplitudes rescale_fact = np.abs(wave_amp) / np.abs(tmp_max_amp) # rescale the wave spectral amplitude coefficients - spectrum = mler['WaveSpectrum'] * rescale_fact**2 + spectrum = mler["WaveSpectrum"] * rescale_fact**2 mler_norm = pd.DataFrame(index=mler.index) - mler_norm['WaveSpectrum'] = spectrum - mler_norm['Phase'] = mler['Phase'] + mler_norm["WaveSpectrum"] = spectrum + mler_norm["Phase"] = mler["Phase"] return mler_norm @@ -862,38 +869,35 @@ def mler_export_time_series(rao, mler, sim, k): except: pass if not isinstance(rao, np.ndarray): - raise TypeError( - f'rao must be of type ndarray. Got: {type(rao)}') + raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") if not isinstance(mler, pd.DataFrame): - raise TypeError( - f'mler must be of type pd.DataFrame. Got: {type(mler)}') + raise TypeError(f"mler must be of type pd.DataFrame. Got: {type(mler)}") if not isinstance(sim, dict): - raise TypeError( - f'sim must be of type dict. Got: {type(sim)}') + raise TypeError(f"sim must be of type dict. Got: {type(sim)}") if not isinstance(k, np.ndarray): - raise TypeError( - f'k must be of type ndarray. Got: {type(k)}') + raise TypeError(f"k must be of type ndarray. Got: {type(k)}") - freq = mler.index.values * 2*np.pi # convert Hz to rad/s - dw = (max(freq) - min(freq)) / (len(freq)-1) # get delta + freq = mler.index.values * 2 * np.pi # convert Hz to rad/s + dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta # calculate the series - wave_amp_time = np.zeros((sim['maxIT'], 2)) - xi = sim['X0'] - for i, ti in enumerate(sim['T']): + wave_amp_time = np.zeros((sim["maxIT"], 2)) + xi = sim["X0"] + for i, ti in enumerate(sim["T"]): # conditioned wave wave_amp_time[i, 0] = np.sum( - np.sqrt(2*mler['WaveSpectrum']*dw) * - np.cos(freq*(ti-sim['T0']) + mler['Phase'] - k*(xi-sim['X0'])) + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) ) # Response calculation wave_amp_time[i, 1] = np.sum( - np.sqrt(2*mler['WaveSpectrum']*dw) * np.abs(rao) * - np.cos(freq*(ti-sim['T0']) - k*(xi-sim['X0'])) + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.abs(rao) + * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) ) - mler_ts = pd.DataFrame(wave_amp_time, index=sim['T']) - mler_ts = mler_ts.rename(columns={0: 'WaveHeight', 1: 'LinearResponse'}) + mler_ts = pd.DataFrame(wave_amp_time, index=sim["T"]) + mler_ts = mler_ts.rename(columns={0: "WaveHeight", 1: "LinearResponse"}) return mler_ts @@ -918,13 +922,15 @@ def return_year_value(ppf, return_year, short_term_period_hr): The value corresponding to the return period from the distribution. """ if not callable(ppf): - raise TypeError('ppf must be a callable Percentage Point Function') + raise TypeError("ppf must be a callable Percentage Point Function") if not isinstance(return_year, (float, int)): raise TypeError( - f'return_year must be of type float or int. Got: {type(return_year)}') + f"return_year must be of type float or int. Got: {type(return_year)}" + ) if not isinstance(short_term_period_hr, (float, int)): raise TypeError( - f'short_term_period_hr must be of type float or int. Got: {type(short_term_period_hr)}') + f"short_term_period_hr must be of type float or int. Got: {type(short_term_period_hr)}" + ) p = 1 / (return_year * 365.25 * 24 / short_term_period_hr) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index 28558eb58..350937eb5 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -1,24 +1,25 @@ from scipy.stats import binned_statistic -import pandas as pd +import pandas as pd import numpy as np import fatpack -def bin_statistics(data,bin_against,bin_edges,data_signal=[]): + +def bin_statistics(data, bin_against, bin_edges, data_signal=[]): """ - Bins calculated statistics against data signal (or channel) + Bins calculated statistics against data signal (or channel) according to IEC TS 62600-3:2020 ED1. - + Parameters ----------- data : pandas DataFrame - Time-series statistics of data signal(s) + Time-series statistics of data signal(s) bin_against : array Data signal to bin data against (e.g. wind speed) bin_edges : array Bin edges with consistent step size - data_signal : list, optional + data_signal : list, optional List of data signal(s) to bin, default = all data signals - + Returns -------- bin_mean : pandas DataFrame @@ -28,26 +29,26 @@ def bin_statistics(data,bin_against,bin_edges,data_signal=[]): """ if not isinstance(data, pd.DataFrame): - raise TypeError( - f'data must be of type pd.DataFrame. Got: {type(data)}') + raise TypeError(f"data must be of type pd.DataFrame. Got: {type(data)}") try: - bin_against = np.asarray(bin_against) + bin_against = np.asarray(bin_against) except: raise TypeError( - f'bin_against must be of type np.ndarray. Got: {type(bin_against)}') + f"bin_against must be of type np.ndarray. Got: {type(bin_against)}" + ) try: bin_edges = np.asarray(bin_edges) except: - raise TypeError( - f'bin_edges must be of type np.ndarray. Got: {type(bin_edges)}') + raise TypeError(f"bin_edges must be of type np.ndarray. Got: {type(bin_edges)}") # Determine variables to analyze - if len(data_signal)==0: # if not specified, bin all variables - data_signal=data.columns.values + if len(data_signal) == 0: # if not specified, bin all variables + data_signal = data.columns.values else: if not isinstance(data_signal, list): raise TypeError( - f'data_signal must be of type list. Got: {type(data_signal)}') + f"data_signal must be of type list. Got: {type(data_signal)}" + ) # Pre-allocate list variables bin_stat_list = [] @@ -56,13 +57,14 @@ def bin_statistics(data,bin_against,bin_edges,data_signal=[]): # loop through data_signal and get binned means for signal_name in data_signal: # Bin data - bin_stat = binned_statistic(bin_against,data[signal_name], - statistic='mean',bins=bin_edges) + bin_stat = binned_statistic( + bin_against, data[signal_name], statistic="mean", bins=bin_edges + ) # Calculate std of bins std = [] stdev = pd.DataFrame(data[signal_name]) - stdev.set_index(bin_stat.binnumber,inplace=True) - for i in range(1,len(bin_stat.bin_edges)): + stdev.set_index(bin_stat.binnumber, inplace=True) + for i in range(1, len(bin_stat.bin_edges)): try: temp = stdev.loc[i].std(ddof=0) std.append(temp[0]) @@ -70,20 +72,20 @@ def bin_statistics(data,bin_against,bin_edges,data_signal=[]): std.append(np.nan) bin_stat_list.append(bin_stat.statistic) bin_std_list.append(std) - + # Convert to DataFrames - bin_mean = pd.DataFrame(np.transpose(bin_stat_list),columns=data_signal) - bin_std = pd.DataFrame(np.transpose(bin_std_list),columns=data_signal) + bin_mean = pd.DataFrame(np.transpose(bin_stat_list), columns=data_signal) + bin_std = pd.DataFrame(np.transpose(bin_std_list), columns=data_signal) - # Check for nans + # Check for nans if bin_mean.isna().any().any(): - print('Warning: some bins may be empty!') + print("Warning: some bins may be empty!") return bin_mean, bin_std -def blade_moments(blade_coefficients,flap_offset,flap_raw,edge_offset,edge_raw): - ''' +def blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_raw): + """ Transfer function for deriving blade flap and edge moments using blade matrix. Parameters @@ -98,55 +100,56 @@ def blade_moments(blade_coefficients,flap_offset,flap_raw,edge_offset,edge_raw): Derived offset of raw edge signal obtained during calibration process edge_raw : numpy array Raw strain signal of blade in the edgewise direction - + Returns -------- M_flap : numpy array Blade flapwise moment in SI units M_edge : numpy array Blade edgewise moment in SI units - ''' - + """ + try: blade_coefficients = np.asarray(blade_coefficients) except: raise TypeError( - f'blade_coefficients must be of type np.ndarray. Got: {type(blade_coefficients)}') + f"blade_coefficients must be of type np.ndarray. Got: {type(blade_coefficients)}" + ) try: flap_raw = np.asarray(flap_raw) except: - raise TypeError( - f'flap_raw must be of type np.ndarray. Got: {type(flap_raw)}') + raise TypeError(f"flap_raw must be of type np.ndarray. Got: {type(flap_raw)}") try: edge_raw = np.asarray(edge_raw) except: + raise TypeError(f"edge_raw must be of type np.ndarray. Got: {type(edge_raw)}") + + if not isinstance(flap_offset, (float, int)): raise TypeError( - f'edge_raw must be of type np.ndarray. Got: {type(edge_raw)}') - - if not isinstance(flap_offset, (float,int)): - raise TypeError( - f'flap_offset must be of type int or float. Got: {type(flap_offset)}') - if not isinstance(edge_offset, (float,int)): + f"flap_offset must be of type int or float. Got: {type(flap_offset)}" + ) + if not isinstance(edge_offset, (float, int)): raise TypeError( - f'edge_offset must be of type int or float. Got: {type(edge_offset)}') - + f"edge_offset must be of type int or float. Got: {type(edge_offset)}" + ) + # remove offset from raw signal flap_signal = flap_raw - flap_offset edge_signal = edge_raw - edge_offset # apply matrix to get load signals - M_flap = blade_coefficients[0]*flap_signal + blade_coefficients[1]*edge_signal - M_edge = blade_coefficients[2]*flap_signal + blade_coefficients[3]*edge_signal + M_flap = blade_coefficients[0] * flap_signal + blade_coefficients[1] * edge_signal + M_edge = blade_coefficients[2] * flap_signal + blade_coefficients[3] * edge_signal return M_flap, M_edge def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): - ''' - Calculates the damage equivalent load of a single data signal (or channel) - based on IEC TS 62600-3:2020 ED1. 4-point rainflow counting algorithm from + """ + Calculates the damage equivalent load of a single data signal (or channel) + based on IEC TS 62600-3:2020 ED1. 4-point rainflow counting algorithm from fatpack module is based on the following resources: - + - `C. Amzallag et. al. Standardization of the rainflow counting method for fatigue analysis. International Journal of Fatigue, 16 (1994) 287-293` - `ISO 12110-2, Metallic materials - Fatigue testing - Variable amplitude @@ -154,7 +157,7 @@ def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): - `G. Marsh et. al. Review and application of Rainflow residue processing techniques for accurate fatigue damage estimation. International Journal of Fatigue, 82 (2016) 757-765` - + Parameters: ----------- @@ -166,33 +169,34 @@ def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): Number of bins for rainflow counting method (minimum=100) data_length : float/int Length of measured data (seconds) - + Returns -------- DEL : float Damage equivalent load (DEL) of single data signal - ''' - + """ + try: data_signal = np.array(data_signal) except: raise TypeError( - f'data_signal must be of type np.ndarray. Got: {type(data_signal)}') - if not isinstance(m, (float,int)): - raise TypeError(f'm must be of type float or int. Got: {type(m)}') - if not isinstance(bin_num, (float,int)): - raise TypeError( - f'bin_num must be of type float or int. Got: {type(bin_num)}') - if not isinstance(data_length, (float,int)): + f"data_signal must be of type np.ndarray. Got: {type(data_signal)}" + ) + if not isinstance(m, (float, int)): + raise TypeError(f"m must be of type float or int. Got: {type(m)}") + if not isinstance(bin_num, (float, int)): + raise TypeError(f"bin_num must be of type float or int. Got: {type(bin_num)}") + if not isinstance(data_length, (float, int)): raise TypeError( - f'data_length must be of type float or int. Got: {type(data_length)}') + f"data_length must be of type float or int. Got: {type(data_length)}" + ) - rainflow_ranges = fatpack.find_rainflow_ranges(data_signal,k=256) + rainflow_ranges = fatpack.find_rainflow_ranges(data_signal, k=256) # Range count and bin Nrf, Srf = fatpack.find_range_count(rainflow_ranges, bin_num) DELs = Srf**m * Nrf / data_length - DEL = DELs.sum() ** (1/m) + DEL = DELs.sum() ** (1 / m) return DEL diff --git a/mhkit/loads/graphics.py b/mhkit/loads/graphics.py index 93a246196..6bdaa5197 100644 --- a/mhkit/loads/graphics.py +++ b/mhkit/loads/graphics.py @@ -1,8 +1,9 @@ import matplotlib.pyplot as plt import numpy as np -def plot_statistics(x,y_mean,y_max,y_min,y_stdev=[],**kwargs): - ''' + +def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): + """ Plot showing standard raw statistics of variable Parameters @@ -17,7 +18,7 @@ def plot_statistics(x,y_mean,y_max,y_min,y_stdev=[],**kwargs): Array of min statistical values of variable y_stdev : numpy array, optional Array of standard deviation statistical values of variable - **kwargs : optional + **kwargs : optional x_label : string x axis label for plot y_label : string @@ -30,66 +31,77 @@ def plot_statistics(x,y_mean,y_max,y_min,y_stdev=[],**kwargs): Returns -------- ax : matplotlib pyplot axes - ''' - + """ + try: x = np.array(x) except: - raise TypeError(f'x must be of type np.ndarray. Got: {type(x)}') + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") try: y_mean = np.array(y_mean) except: - raise TypeError(f'y_mean must be of type np.ndarray. Got: {type(y_mean)}') + raise TypeError(f"y_mean must be of type np.ndarray. Got: {type(y_mean)}") try: y_max = np.array(y_max) except: - raise TypeError(f'y_max must be of type np.ndarray. Got: {type(y_max)}') + raise TypeError(f"y_max must be of type np.ndarray. Got: {type(y_max)}") try: y_min = np.array(y_min) except: - raise TypeError(f'y_min must be of type np.ndarray. Got: {type(y_min)}') - - x_label = kwargs.get("x_label", None) - y_label = kwargs.get("y_label", None) - title = kwargs.get("title", None) + raise TypeError(f"y_min must be of type np.ndarray. Got: {type(y_min)}") + + x_label = kwargs.get("x_label", None) + y_label = kwargs.get("y_label", None) + title = kwargs.get("title", None) save_path = kwargs.get("save_path", None) - + if not isinstance(x_label, (str, type(None))): - raise TypeError(f'x_label must be of type str. Got: {type(x_label)}') + raise TypeError(f"x_label must be of type str. Got: {type(x_label)}") if not isinstance(y_label, (str, type(None))): - raise TypeError(f'y_label must be of type str. Got: {type(y_label)}') + raise TypeError(f"y_label must be of type str. Got: {type(y_label)}") if not isinstance(title, (str, type(None))): - raise TypeError(f'title must be of type str. Got: {type(title)}') + raise TypeError(f"title must be of type str. Got: {type(title)}") if not isinstance(save_path, (str, type(None))): - raise TypeError( - f'save_path must be of type str. Got: {type(save_path)}') - - fig, ax = plt.subplots(figsize=(6,4)) - ax.plot(x,y_max,'^',label='max',mfc='none') - ax.plot(x,y_mean,'o',label='mean',mfc='none') - ax.plot(x,y_min,'v',label='min',mfc='none') - - if len(y_stdev)>0: ax.plot(x,y_stdev,'+',label='stdev',c='m') + raise TypeError(f"save_path must be of type str. Got: {type(save_path)}") + + fig, ax = plt.subplots(figsize=(6, 4)) + ax.plot(x, y_max, "^", label="max", mfc="none") + ax.plot(x, y_mean, "o", label="mean", mfc="none") + ax.plot(x, y_min, "v", label="min", mfc="none") + + if len(y_stdev) > 0: + ax.plot(x, y_stdev, "+", label="stdev", c="m") ax.grid(alpha=0.4) - ax.legend(loc='best') - - if x_label!=None: ax.set_xlabel(x_label) - if y_label!=None: ax.set_ylabel(y_label) - if title!=None: ax.set_title(title) - + ax.legend(loc="best") + + if x_label != None: + ax.set_xlabel(x_label) + if y_label != None: + ax.set_ylabel(y_label) + if title != None: + ax.set_title(title) + fig.tight_layout() - - if save_path==None: plt.show() - else: + + if save_path == None: + plt.show() + else: fig.savefig(save_path) plt.close() return ax -def plot_bin_statistics(bin_centers, bin_mean,bin_max, bin_min, - bin_mean_std, bin_max_std, bin_min_std, - **kwargs): - ''' +def plot_bin_statistics( + bin_centers, + bin_mean, + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + **kwargs, +): + """ Plot showing standard binned statistics of single variable Parameters @@ -108,7 +120,7 @@ def plot_bin_statistics(bin_centers, bin_mean,bin_max, bin_min, Standard deviations of max binned statistics bin_min_std : numpy array Standard deviations of min binned statistics - **kwargs : optional + **kwargs : optional x_label : string x axis label for plot y_label : string @@ -121,60 +133,97 @@ def plot_bin_statistics(bin_centers, bin_mean,bin_max, bin_min, Returns -------- ax : matplotlib pyplot axes - ''' - - try: bin_centers = np.asarray(bin_centers) - except: 'bin_centers must be of type np.ndarray' - - try: bin_mean = np.asarray(bin_mean) - except: 'bin_mean must be of type np.ndarray' - try: bin_max = np.asarray(bin_max) - except:'bin_max must be of type np.ndarray' - try: bin_min = np.asarray(bin_min) - except: 'bin_min must be of type type np.ndarray' - - try: bin_mean_std = np.asarray(bin_mean_std) - except: 'bin_mean_std must be of type np.ndarray' - try: bin_max_std = np.asarray(bin_max_std) - except: 'bin_max_std must be of type np.ndarray' - try: bin_min_std = np.asarray(bin_min_std) - except: 'bin_min_std must be of type np.ndarray' - - x_label = kwargs.get("x_label", None) - y_label = kwargs.get("y_label", None) - title = kwargs.get("title", None) + """ + + try: + bin_centers = np.asarray(bin_centers) + except: + "bin_centers must be of type np.ndarray" + + try: + bin_mean = np.asarray(bin_mean) + except: + "bin_mean must be of type np.ndarray" + try: + bin_max = np.asarray(bin_max) + except: + "bin_max must be of type np.ndarray" + try: + bin_min = np.asarray(bin_min) + except: + "bin_min must be of type type np.ndarray" + + try: + bin_mean_std = np.asarray(bin_mean_std) + except: + "bin_mean_std must be of type np.ndarray" + try: + bin_max_std = np.asarray(bin_max_std) + except: + "bin_max_std must be of type np.ndarray" + try: + bin_min_std = np.asarray(bin_min_std) + except: + "bin_min_std must be of type np.ndarray" + + x_label = kwargs.get("x_label", None) + y_label = kwargs.get("y_label", None) + title = kwargs.get("title", None) save_path = kwargs.get("save_path", None) - + if not isinstance(x_label, (str, type(None))): - raise TypeError(f'x_label must be of type str. Got: {type(x_label)}') + raise TypeError(f"x_label must be of type str. Got: {type(x_label)}") if not isinstance(y_label, (str, type(None))): - raise TypeError(f'y_label must be of type str. Got: {type(y_label)}') + raise TypeError(f"y_label must be of type str. Got: {type(y_label)}") if not isinstance(title, (str, type(None))): - raise TypeError(f'title must be of type str. Got: {type(title)}') + raise TypeError(f"title must be of type str. Got: {type(title)}") if not isinstance(save_path, (str, type(None))): - raise TypeError( - f'save_path must be of type str. Got: {type(save_path)}') - - fig, ax = plt.subplots(figsize=(7,5)) - ax.errorbar(bin_centers,bin_max,marker='^',mfc='none', - yerr=bin_max_std,capsize=4,label='max') - ax.errorbar(bin_centers,bin_mean,marker='o',mfc='none', - yerr=bin_mean_std,capsize=4,label='mean') - ax.errorbar(bin_centers,bin_min,marker='v',mfc='none', - yerr=bin_min_std,capsize=4,label='min') - + raise TypeError(f"save_path must be of type str. Got: {type(save_path)}") + + fig, ax = plt.subplots(figsize=(7, 5)) + ax.errorbar( + bin_centers, + bin_max, + marker="^", + mfc="none", + yerr=bin_max_std, + capsize=4, + label="max", + ) + ax.errorbar( + bin_centers, + bin_mean, + marker="o", + mfc="none", + yerr=bin_mean_std, + capsize=4, + label="mean", + ) + ax.errorbar( + bin_centers, + bin_min, + marker="v", + mfc="none", + yerr=bin_min_std, + capsize=4, + label="min", + ) + ax.grid(alpha=0.5) - ax.legend(loc='best') - - if x_label!=None: ax.set_xlabel(x_label) - if y_label!=None: ax.set_ylabel(y_label) - if title!=None: ax.set_title(title) - + ax.legend(loc="best") + + if x_label != None: + ax.set_xlabel(x_label) + if y_label != None: + ax.set_ylabel(y_label) + if title != None: + ax.set_title(title) + fig.tight_layout() - - if save_path==None: plt.show() - else: + + if save_path == None: + plt.show() + else: fig.savefig(save_path) plt.close() return ax - diff --git a/mhkit/mooring/graphics.py b/mhkit/mooring/graphics.py index a8dc678df..389953c45 100644 --- a/mhkit/mooring/graphics.py +++ b/mhkit/mooring/graphics.py @@ -29,8 +29,22 @@ from matplotlib.animation import FuncAnimation -def animate(dsani, dimension='2d', xaxis='x', yaxis='z', zaxis='y', xlim=None, ylim=None, zlim=None, - interval=10, repeat=False, xlabel=None, ylabel=None, zlabel=None, title=None): +def animate( + dsani, + dimension="2d", + xaxis="x", + yaxis="z", + zaxis="y", + xlim=None, + ylim=None, + zlim=None, + interval=10, + repeat=False, + xlabel=None, + ylabel=None, + zlabel=None, + title=None, +): """ Graphics function that creates a 2D or 3D animation of the node positions of a mooring line over time. @@ -73,25 +87,26 @@ def animate(dsani, dimension='2d', xaxis='x', yaxis='z', zaxis='y', xlim=None, y Raises ------ TypeError - Checks for correct input types for dsani, dimension, xaxis, yaxis, zaxis, xlim, ylim, + Checks for correct input types for dsani, dimension, xaxis, yaxis, zaxis, xlim, ylim, zlim, interval, repeat, xlabel, ylabel, zlabel, and title """ - _validate_input(dsani, xlim, ylim, interval, repeat, - xlabel, ylabel, title, dimension) - if dimension == '3d': + _validate_input( + dsani, xlim, ylim, interval, repeat, xlabel, ylabel, title, dimension + ) + if dimension == "3d": if not isinstance(zlim, (list, type(None))): - raise TypeError('zlim must be of type list') + raise TypeError("zlim must be of type list") if not isinstance(zlabel, (str, type(None))): - raise TypeError('zlabel must be of type str') + raise TypeError("zlabel must be of type str") if not isinstance(xaxis, str): - raise TypeError('xaxis must be of type str') + raise TypeError("xaxis must be of type str") if not isinstance(yaxis, str): - raise TypeError('yaxis must be of type str') + raise TypeError("yaxis must be of type str") if not isinstance(zaxis, str): - raise TypeError('zaxis must be of type str') + raise TypeError("zaxis must be of type str") current_idx = list(dsani.dims.mapping.keys())[0] - dsani = dsani.rename({current_idx: 'time'}) + dsani = dsani.rename({current_idx: "time"}) nodes_x, nodes_y, nodes_z = _get_axis_nodes(dsani, xaxis, yaxis, zaxis) @@ -99,18 +114,18 @@ def animate(dsani, dimension='2d', xaxis='x', yaxis='z', zaxis='y', xlim=None, y xlim = _find_limits(dsani[nodes_x]) if not ylim: ylim = _find_limits(dsani[nodes_y]) - if dimension == '3d' and not zlim: + if dimension == "3d" and not zlim: zlim = _find_limits(dsani[nodes_z]) fig = plt.figure() - if dimension == '3d': - ax = fig.add_subplot(projection='3d') + if dimension == "3d": + ax = fig.add_subplot(projection="3d") else: ax = fig.add_subplot() ax.grid() - if dimension == '2d': - ln, = ax.plot([], [], '-o') + if dimension == "2d": + (ln,) = ax.plot([], [], "-o") def init(): ax.set(xlim=xlim, ylim=ylim) @@ -122,8 +137,8 @@ def update(frame): y = dsani[nodes_y].isel(time=frame).to_array().values ln.set_data(x, y) - elif dimension == '3d': - ln, = ax.plot([], [], [], '-o') + elif dimension == "3d": + (ln,) = ax.plot([], [], [], "-o") def init(): ax.set(xlim3d=xlim, ylim3d=ylim, zlim3d=zlim) @@ -137,33 +152,41 @@ def update(frame): ln.set_data(x, y) ln.set_3d_properties(z) - ani = FuncAnimation(fig, update, frames=len(dsani.time), - init_func=init, interval=interval, repeat=repeat) + ani = FuncAnimation( + fig, + update, + frames=len(dsani.time), + init_func=init, + interval=interval, + repeat=repeat, + ) return ani -def _validate_input(dsani, xlim, ylim, interval, repeat, xlabel, ylabel, title, dimension): +def _validate_input( + dsani, xlim, ylim, interval, repeat, xlabel, ylabel, title, dimension +): """ Validate common input parameters for animate function. """ if not isinstance(dsani, xr.Dataset): - raise TypeError('dsani must be of type xr.Dataset') + raise TypeError("dsani must be of type xr.Dataset") if not isinstance(xlim, (list, type(None))): - raise TypeError('xlim must be of type list') + raise TypeError("xlim must be of type list") if not isinstance(ylim, (list, type(None))): - raise TypeError('ylim must be of type list') + raise TypeError("ylim must be of type list") if not isinstance(interval, int): - raise TypeError('interval must be of type int') + raise TypeError("interval must be of type int") if not isinstance(repeat, bool): - raise TypeError('repeat must be of type bool') + raise TypeError("repeat must be of type bool") if not isinstance(xlabel, (str, type(None))): - raise TypeError('xlabel must be of type str') + raise TypeError("xlabel must be of type str") if not isinstance(ylabel, (str, type(None))): - raise TypeError('ylabel must be of type str') + raise TypeError("ylabel must be of type str") if not isinstance(title, (str, type(None))): - raise TypeError('title must be of type str') - if dimension not in ['2d', '3d']: + raise TypeError("title must be of type str") + if dimension not in ["2d", "3d"]: raise ValueError('dimension must be either "2d" or "3d"') @@ -191,10 +214,10 @@ def _get_axis_nodes(dsani, xaxis, yaxis, zaxis): nodesZ : list List of nodes along the z-axis """ - nodes = [s for s in list(dsani.data_vars) if 'Node' in s] - nodes_x = [s for s in nodes if f'p{xaxis}' in s] - nodes_y = [s for s in nodes if f'p{yaxis}' in s] - nodes_z = [s for s in nodes if f'p{zaxis}' in s] + nodes = [s for s in list(dsani.data_vars) if "Node" in s] + nodes_x = [s for s in nodes if f"p{xaxis}" in s] + nodes_y = [s for s in nodes if f"p{yaxis}" in s] + nodes_z = [s for s in nodes if f"p{zaxis}" in s] return nodes_x, nodes_y, nodes_z @@ -213,9 +236,9 @@ def _find_limits(dataset): Min and max plot limits for axis """ x_1 = dataset.min().to_array().min().values - x_1 = x_1 - abs(x_1*0.1) + x_1 = x_1 - abs(x_1 * 0.1) x_2 = dataset.max().to_array().max().values - x_2 = x_2 + abs(x_2*0.1) + x_2 = x_2 + abs(x_2 * 0.1) return [x_1, x_2] diff --git a/mhkit/mooring/io.py b/mhkit/mooring/io.py index bb5715193..9e2e4d174 100644 --- a/mhkit/mooring/io.py +++ b/mhkit/mooring/io.py @@ -22,9 +22,9 @@ def read_moordyn(filepath, input_file=None): """ - Reads in MoorDyn OUT files such as "FAST.MD.out" and - "FAST.MD.Line1.out" and stores inside xarray. Also allows for - parsing and storage of MoorDyn input file as attributes inside + Reads in MoorDyn OUT files such as "FAST.MD.out" and + "FAST.MD.Line1.out" and stores inside xarray. Also allows for + parsing and storage of MoorDyn input file as attributes inside the xarray. Parameters @@ -45,15 +45,16 @@ def read_moordyn(filepath, input_file=None): Checks for correct input types for filepath and input_file """ if not isinstance(filepath, str): - raise TypeError('filepath must be of type str') + raise TypeError("filepath must be of type str") if input_file: if not isinstance(input_file, str): - raise TypeError('input_file must be of type str') + raise TypeError("input_file must be of type str") if not os.path.isfile(filepath): raise FileNotFoundError(f"No file found at provided path: {filepath}") - data = pd.read_csv(filepath, header=0, skiprows=[ - 1], sep=' ', skipinitialspace=True, index_col=0) + data = pd.read_csv( + filepath, header=0, skiprows=[1], sep=" ", skipinitialspace=True, index_col=0 + ) data = data.dropna(axis=1) dataset = data.to_xarray() @@ -80,11 +81,13 @@ def _moordyn_input(input_file, dataset): return Dataset that includes input file parameters as attributes """ - with open(input_file, 'r', encoding='utf-8') as moordyn_file: - for line in moordyn_file: # loop through each line in the file + with open(input_file, "r", encoding="utf-8") as moordyn_file: + for line in moordyn_file: # loop through each line in the file # get line type property sets - if line.count('---') > 0 and (line.upper().count('LINE DICTIONARY') > 0 or - line.upper().count('LINE TYPES') > 0): + if line.count("---") > 0 and ( + line.upper().count("LINE DICTIONARY") > 0 + or line.upper().count("LINE TYPES") > 0 + ): linetypes = dict() # skip this header line, plus channel names and units lines line = next(moordyn_file) @@ -92,19 +95,21 @@ def _moordyn_input(input_file, dataset): line = next(moordyn_file) units = line.split() line = next(moordyn_file) - while line.count('---') == 0: + while line.count("---") == 0: entries = line.split() linetypes[entries[0]] = dict() for x in range(1, len(entries)): linetypes[entries[0]][variables[x]] = entries[x] line = next(moordyn_file) - linetypes['units'] = units[1:] - dataset.attrs['LINE_TYPES'] = linetypes + linetypes["units"] = units[1:] + dataset.attrs["LINE_TYPES"] = linetypes # get properties of each Point - if line.count('---') > 0 and (line.upper().count('POINTS') > 0 - or line.upper().count('POINT LIST') > 0 - or line.upper().count('POINT PROPERTIES') > 0): + if line.count("---") > 0 and ( + line.upper().count("POINTS") > 0 + or line.upper().count("POINT LIST") > 0 + or line.upper().count("POINT PROPERTIES") > 0 + ): # skip this header line, plus channel names and units lines line = next(moordyn_file) variables = line.split() @@ -112,19 +117,21 @@ def _moordyn_input(input_file, dataset): units = line.split() line = next(moordyn_file) points = dict() - while line.count('---') == 0: + while line.count("---") == 0: entries = line.split() points[entries[0]] = dict() for x in range(1, len(entries)): points[entries[0]][variables[x]] = entries[x] line = next(moordyn_file) - points['units'] = units[1:] - dataset.attrs['POINTS'] = points + points["units"] = units[1:] + dataset.attrs["POINTS"] = points # get properties of each line - if line.count('---') > 0 and (line.upper().count('LINES') > 0 - or line.upper().count('LINE LIST') > 0 - or line.upper().count('LINE PROPERTIES') > 0): + if line.count("---") > 0 and ( + line.upper().count("LINES") > 0 + or line.upper().count("LINE LIST") > 0 + or line.upper().count("LINE PROPERTIES") > 0 + ): # skip this header line, plus channel names and units lines line = next(moordyn_file) variables = line.split() @@ -132,24 +139,24 @@ def _moordyn_input(input_file, dataset): units = line.split() line = next(moordyn_file) lines = {} - while line.count('---') == 0: + while line.count("---") == 0: entries = line.split() lines[entries[0]] = dict() for x in range(1, len(entries)): lines[entries[0]][variables[x]] = entries[x] line = next(moordyn_file) - lines['units'] = units[1:] - dataset.attrs['LINES'] = lines + lines["units"] = units[1:] + dataset.attrs["LINES"] = lines # get options entries - if line.count('---') > 0 and "options" in line.lower(): + if line.count("---") > 0 and "options" in line.lower(): line = next(moordyn_file) # skip this header line options = {} - while line.count('---') == 0: + while line.count("---") == 0: entries = line.split() options[entries[1]] = entries[0] line = next(moordyn_file) - dataset.attrs['OPTIONS'] = options + dataset.attrs["OPTIONS"] = options moordyn_file.close() diff --git a/mhkit/mooring/main.py b/mhkit/mooring/main.py index c4221a850..a5ebeafa4 100644 --- a/mhkit/mooring/main.py +++ b/mhkit/mooring/main.py @@ -27,40 +27,41 @@ def lay_length(dataset, depth, tolerance=0.25): Checks for correct input types for ds, depth, and tolerance """ if not isinstance(dataset, xr.Dataset): - raise TypeError('dataset must be of type xr.Dataset') + raise TypeError("dataset must be of type xr.Dataset") if not isinstance(depth, (float, int)): - raise TypeError('depth must be of type float or int') + raise TypeError("depth must be of type float or int") if not isinstance(tolerance, (float, int)): - raise TypeError('tolerance must be of type float or int') + raise TypeError("tolerance must be of type float or int") # get channel names chans = list(dataset.keys()) - nodes_x = [x for x in chans if 'x' in x] - nodes_y = [y for y in chans if 'y' in y] - nodes_z = [z for z in chans if 'z' in z] + nodes_x = [x for x in chans if "x" in x] + nodes_y = [y for y in chans if "y" in y] + nodes_z = [z for z in chans if "z" in z] # check if the dataset contains the necessary 'x', 'y', 'z' nodes if not nodes_x or not nodes_y or not nodes_z: - raise ValueError('The dataset must contain x, y, and z node data') + raise ValueError("The dataset must contain x, y, and z node data") if len(nodes_z) < 3: raise ValueError( - 'This function requires at least 3 nodes to calculate lay length') + "This function requires at least 3 nodes to calculate lay length" + ) # find name of first z point where tolerance is exceeded - laypoint = dataset[nodes_z].where(dataset[nodes_z] > depth+abs(tolerance)) + laypoint = dataset[nodes_z].where(dataset[nodes_z] > depth + abs(tolerance)) laypoint = laypoint.to_dataframe().dropna(axis=1).columns[0] # get previous z-point lay_indx = nodes_z.index(laypoint) - 1 lay_z = nodes_z[lay_indx] # get corresponding x-point and y-point node names - lay_x = lay_z[:-1] + 'x' - lay_y = lay_z[:-1] + 'y' + lay_x = lay_z[:-1] + "x" + lay_y = lay_z[:-1] + "y" lay_0x = nodes_x[0] lay_0y = nodes_y[0] # find distance between initial point and lay point laylength_x = dataset[lay_x] - dataset[lay_0x] laylength_y = dataset[lay_y] - dataset[lay_0y] - line_lay_length = (laylength_x**2 + laylength_y**2) ** (1/2) + line_lay_length = (laylength_x**2 + laylength_y**2) ** (1 / 2) return line_lay_length diff --git a/mhkit/power/__init__.py b/mhkit/power/__init__.py index 0056a8f31..a04e9c04a 100644 --- a/mhkit/power/__init__.py +++ b/mhkit/power/__init__.py @@ -1,3 +1,2 @@ from mhkit.power import quality from mhkit.power import characteristics - diff --git a/mhkit/power/characteristics.py b/mhkit/power/characteristics.py index 0569db572..964a4abdc 100644 --- a/mhkit/power/characteristics.py +++ b/mhkit/power/characteristics.py @@ -3,47 +3,52 @@ from scipy.signal import hilbert import datetime -def instantaneous_frequency(um): +def instantaneous_frequency(um): """ Calculates instantaneous frequency of measured voltage - - + + Parameters ----------- um: pandas Series or DataFrame - Measured voltage (V) indexed by time + Measured voltage (V) indexed by time + - Returns --------- frequency: pandas DataFrame - Frequency of the measured voltage (Hz) indexed by time + Frequency of the measured voltage (Hz) indexed by time with signal name columns - """ + """ if not isinstance(um, (pd.Series, pd.DataFrame)): - raise TypeError(f'um must be of type pd.Series or pd.DataFrame. Got: {type(um)}') - + raise TypeError( + f"um must be of type pd.Series or pd.DataFrame. Got: {type(um)}" + ) + if isinstance(um.index[0], datetime.datetime): - t = (um.index - datetime.datetime(1970,1,1)).total_seconds() + t = (um.index - datetime.datetime(1970, 1, 1)).total_seconds() else: t = um.index dt = pd.Series(t).diff()[1:] - if isinstance(um,pd.Series): + if isinstance(um, pd.Series): um = um.to_frame() - columns = um.columns - frequency=pd.DataFrame(columns=columns) + columns = um.columns + frequency = pd.DataFrame(columns=columns) for column in um.columns: f = hilbert(um[column]) instantaneous_phase = np.unwrap(np.angle(f)) - instantaneous_frequency = np.diff(instantaneous_phase) /(2.0*np.pi) * (1/dt) + instantaneous_frequency = ( + np.diff(instantaneous_phase) / (2.0 * np.pi) * (1 / dt) + ) frequency[column] = instantaneous_frequency - + return frequency + def dc_power(voltage, current): """ Calculates DC power from voltage and current @@ -54,57 +59,60 @@ def dc_power(voltage, current): Measured DC voltage [V] indexed by time current: pandas Series or DataFrame Measured three phase current [A] indexed by time - + Returns -------- P: pandas DataFrame DC power [W] from each channel and gross power indexed by time """ if not isinstance(voltage, (pd.Series, pd.DataFrame)): - raise TypeError(f'voltage must be of type pd.Series or pd.DataFrame. Got: {type(voltage)}') + raise TypeError( + f"voltage must be of type pd.Series or pd.DataFrame. Got: {type(voltage)}" + ) if not isinstance(current, (pd.Series, pd.DataFrame)): - raise TypeError(f'current must be of type pd.Series or pd.DataFrame. Got: {type(current)}') + raise TypeError( + f"current must be of type pd.Series or pd.DataFrame. Got: {type(current)}" + ) if not voltage.shape == current.shape: - raise ValueError('current and volatge must have the same shape') - - + raise ValueError("current and volatge must have the same shape") + P = current.values * voltage.values - P = pd.DataFrame(P) - P['Gross'] = P.sum(axis=1, skipna=True) + P = pd.DataFrame(P) + P["Gross"] = P.sum(axis=1, skipna=True) return P + def ac_power_three_phase(voltage, current, power_factor, line_to_line=False): """ - Calculates magnitude of active AC power from line to neutral voltage and current + Calculates magnitude of active AC power from line to neutral voltage and current Parameters ----------- voltage: pandas DataFrame Time-series of three phase measured voltage [V] indexed by time - current: pandas DataFrame + current: pandas DataFrame Time-series of three phase measured current [A] indexed by time - power_factor: float + power_factor: float Power factor for the efficiency of the system line_to_line: bool Set to true if the given voltage measurements are line_to_line - + Returns -------- P: pandas DataFrame - Magnitude of active AC power [W] indexed by time with Power column + Magnitude of active AC power [W] indexed by time with Power column """ if not isinstance(voltage, pd.DataFrame): - raise TypeError(f'voltage must be of type pd.DataFrame. Got: {type(voltage)}') + raise TypeError(f"voltage must be of type pd.DataFrame. Got: {type(voltage)}") if not isinstance(current, pd.DataFrame): - raise TypeError(f'current must be of type pd.DataFrame. Got: {type(current)}') + raise TypeError(f"current must be of type pd.DataFrame. Got: {type(current)}") if not len(voltage.columns) == 3: - raise ValueError('voltage must have three columns') + raise ValueError("voltage must have three columns") if not len(current.columns) == 3: - raise ValueError('current must have three columns') + raise ValueError("current must have three columns") if not current.shape == voltage.shape: - raise ValueError('current and voltage must be of the same size') - + raise ValueError("current and voltage must be of the same size") abs_current = np.abs(current.values) abs_voltage = np.abs(voltage.values) @@ -113,9 +121,9 @@ def ac_power_three_phase(voltage, current, power_factor, line_to_line=False): power = abs_current * (abs_voltage * np.sqrt(3)) else: power = abs_current * abs_voltage - - power = pd.DataFrame(power) + + power = pd.DataFrame(power) P = power.sum(axis=1) * power_factor - P = P.to_frame('Power') - + P = P.to_frame("Power") + return P diff --git a/mhkit/power/quality.py b/mhkit/power/quality.py index cc79933f8..9d9af93af 100644 --- a/mhkit/power/quality.py +++ b/mhkit/power/quality.py @@ -5,9 +5,10 @@ # This group of functions are to be used for power quality assessments + def harmonics(x, freq, grid_freq): """ - Calculates the harmonics from time series of voltage or current based on IEC 61000-4-7. + Calculates the harmonics from time series of voltage or current based on IEC 61000-4-7. Parameters ----------- @@ -23,26 +24,27 @@ def harmonics(x, freq, grid_freq): Returns -------- - harmonics: pandas DataFrame - Amplitude of the time-series data harmonics indexed by the harmonic + harmonics: pandas DataFrame + Amplitude of the time-series data harmonics indexed by the harmonic frequency with signal name columns """ if not isinstance(x, (pd.Series, pd.DataFrame)): raise ValueError( - 'Provided voltage or current must be of type pd.DataFrame or pd.Series') + "Provided voltage or current must be of type pd.DataFrame or pd.Series" + ) if not isinstance(freq, (float, int)): - raise ValueError('freq must be of type float or integer') + raise ValueError("freq must be of type float or integer") if grid_freq not in [50, 60]: - raise ValueError('grid_freq must be either 50 or 60') + raise ValueError("grid_freq must be either 50 or 60") # Check if x is a DataFrame if isinstance(x, (pd.DataFrame)) == True: cols = x.columns x = x.to_numpy() - sample_spacing = 1./freq + sample_spacing = 1.0 / freq frequency_bin_centers = fftpack.fftfreq(len(x), d=sample_spacing) harmonics_amplitude = np.abs(np.fft.fft(x, axis=0)) @@ -51,7 +53,7 @@ def harmonics(x, freq, grid_freq): harmonics = harmonics.sort_index() # Keep the signal name as the column name - if 'cols' in locals(): + if "cols" in locals(): harmonics.columns = cols if grid_freq == 60: @@ -59,8 +61,8 @@ def harmonics(x, freq, grid_freq): elif grid_freq == 50: hz = np.arange(0, 2570, 5) - harmonics = harmonics.reindex(hz, method='nearest') - harmonics = harmonics/len(x)*2 + harmonics = harmonics.reindex(hz, method="nearest") + harmonics = harmonics / len(x) * 2 return harmonics @@ -71,22 +73,22 @@ def harmonic_subgroups(harmonics, grid_freq): Parameters ---------- - harmonics: pandas Series or DataFrame - Harmonic amplitude indexed by the harmonic frequency + harmonics: pandas Series or DataFrame + Harmonic amplitude indexed by the harmonic frequency grid_freq: int Value indicating if the power supply is 50 or 60 Hz. Options = 50 or 60 Returns -------- harmonic_subgroups: pandas DataFrame - Harmonic subgroups indexed by harmonic frequency + Harmonic subgroups indexed by harmonic frequency with signal name columns """ if not isinstance(harmonics, (pd.Series, pd.DataFrame)): - raise ValueError('harmonics must be of type pd.DataFrame or pd.Series') + raise ValueError("harmonics must be of type pd.DataFrame or pd.Series") if grid_freq not in [50, 60]: - raise ValueError('grid_freq must be either 50 or 60') + raise ValueError("grid_freq must be either 50 or 60") # Check if harmonics is a DataFrame if isinstance(harmonics, pd.DataFrame): @@ -102,23 +104,29 @@ def harmonic_subgroups(harmonics, grid_freq): cols = harmonics.columns harmonic_subgroups = np.ones((np.size(hz), np.size(cols))) for n in hz: - harmonics = harmonics.sort_index(axis=0) ind = pd.Index(harmonics.index) - indn = ind.get_indexer([n], method='nearest')[0] + indn = ind.get_indexer([n], method="nearest")[0] for col in cols: - harmonic_subgroups[i, j] = np.sqrt(np.sum( - [harmonics[col].iloc[indn-1]**2, harmonics[col].iloc[indn]**2, harmonics[col].iloc[indn+1]**2])) - j = j+1 + harmonic_subgroups[i, j] = np.sqrt( + np.sum( + [ + harmonics[col].iloc[indn - 1] ** 2, + harmonics[col].iloc[indn] ** 2, + harmonics[col].iloc[indn + 1] ** 2, + ] + ) + ) + j = j + 1 j = 0 - i = i+1 + i = i + 1 harmonic_subgroups = pd.DataFrame(harmonic_subgroups, index=hz) # Keep the signal name as the column name - if 'cols' in locals(): + if "cols" in locals(): harmonic_subgroups.columns = cols return harmonic_subgroups @@ -139,22 +147,21 @@ def total_harmonic_current_distortion(harmonics_subgroup, rated_current): Returns -------- THCD: pd.DataFrame - Total harmonic current distortion indexed by signal name with THCD column + Total harmonic current distortion indexed by signal name with THCD column """ if not isinstance(harmonics_subgroup, (pd.Series, pd.DataFrame)): - raise ValueError( - 'harmonic_subgroups must be of type pd.DataFrame or pd.Series') + raise ValueError("harmonic_subgroups must be of type pd.DataFrame or pd.Series") if not isinstance(rated_current, float): - raise ValueError('rated_current must be a float') + raise ValueError("rated_current must be a float") - harmonics_sq = harmonics_subgroup.iloc[2:50]**2 + harmonics_sq = harmonics_subgroup.iloc[2:50] ** 2 harmonics_sum = harmonics_sq.sum() - THCD = (np.sqrt(harmonics_sum)/harmonics_subgroup.iloc[1])*100 + THCD = (np.sqrt(harmonics_sum) / harmonics_subgroup.iloc[1]) * 100 THCD = pd.DataFrame(THCD) # converting to dataframe for Matlab - THCD.columns = ['THCD'] + THCD.columns = ["THCD"] THCD = THCD.T return THCD @@ -166,8 +173,8 @@ def interharmonics(harmonics, grid_freq): Parameters ----------- - harmonics: pandas Series or DataFrame - Harmonic amplitude indexed by the harmonic frequency + harmonics: pandas Series or DataFrame + Harmonic amplitude indexed by the harmonic frequency grid_freq: int Value indicating if the power supply is 50 or 60 Hz. Options = 50 or 60 @@ -178,10 +185,10 @@ def interharmonics(harmonics, grid_freq): Interharmonics groups """ if not isinstance(harmonics, (pd.Series, pd.DataFrame)): - raise ValueError('harmonics must be of type pd.DataFrame or pd.Series') + raise ValueError("harmonics must be of type pd.DataFrame or pd.Series") if grid_freq not in [50, 60]: - raise ValueError('grid_freq must be either 50 or 60') + raise ValueError("grid_freq must be either 50 or 60") if grid_freq == 60: hz = np.arange(0, 3060, 60) @@ -196,20 +203,20 @@ def interharmonics(harmonics, grid_freq): harmonics = harmonics.sort_index(axis=0) ind = pd.Index(harmonics.index) - indn = ind.get_indexer([n], method='nearest')[0] + indn = ind.get_indexer([n], method="nearest")[0] for col in cols: if grid_freq == 60: - subset = harmonics[col].iloc[indn+1:indn+11]**2 + subset = harmonics[col].iloc[indn + 1 : indn + 11] ** 2 subset = subset.squeeze() else: - subset = harmonics[col].iloc[indn+1:indn+7]**2 + subset = harmonics[col].iloc[indn + 1 : indn + 7] ** 2 subset = subset.squeeze() interharmonics[i, j] = np.sqrt(np.sum(subset)) - j = j+1 + j = j + 1 j = 0 - i = i+1 + i = i + 1 interharmonics = pd.DataFrame(interharmonics, index=hz) diff --git a/mhkit/qc/__init__.py b/mhkit/qc/__init__.py index 841442eca..c325f37f2 100644 --- a/mhkit/qc/__init__.py +++ b/mhkit/qc/__init__.py @@ -1,2 +1,8 @@ -from pecos.monitoring import check_timestamp, check_missing, check_corrupt, \ - check_range, check_delta, check_outlier +from pecos.monitoring import ( + check_timestamp, + check_missing, + check_corrupt, + check_range, + check_delta, + check_outlier, +) diff --git a/mhkit/river/__init__.py b/mhkit/river/__init__.py index 452810833..8406b8cf1 100644 --- a/mhkit/river/__init__.py +++ b/mhkit/river/__init__.py @@ -1,5 +1,4 @@ -from mhkit.river import performance +from mhkit.river import performance from mhkit.river import graphics -from mhkit.river import resource -from mhkit.river import io - +from mhkit.river import resource +from mhkit.river import io diff --git a/mhkit/river/graphics.py b/mhkit/river/graphics.py index 46b621f88..bd4a6ddcb 100644 --- a/mhkit/river/graphics.py +++ b/mhkit/river/graphics.py @@ -1,10 +1,9 @@ import numpy as np import pandas as pd -import matplotlib.pyplot as plt +import matplotlib.pyplot as plt -def _xy_plot(x, y, fmt='.', label=None, xlabel=None, ylabel=None, title=None, - ax=None): +def _xy_plot(x, y, fmt=".", label=None, xlabel=None, ylabel=None, title=None, ax=None): """ Base function to plot any x vs y data @@ -14,241 +13,295 @@ def _xy_plot(x, y, fmt='.', label=None, xlabel=None, ylabel=None, title=None, Data for the x axis of plot y: array-like Data for y axis of plot - + Returns ------- ax : matplotlib.pyplot axes - + """ if ax is None: - plt.figure(figsize=(16,8)) - params = {'legend.fontsize': 'x-large', - 'axes.labelsize': 'x-large', - 'axes.titlesize':'x-large', - 'xtick.labelsize':'x-large', - 'ytick.labelsize':'x-large'} + plt.figure(figsize=(16, 8)) + params = { + "legend.fontsize": "x-large", + "axes.labelsize": "x-large", + "axes.titlesize": "x-large", + "xtick.labelsize": "x-large", + "ytick.labelsize": "x-large", + } plt.rcParams.update(params) ax = plt.gca() - + ax.plot(x, y, fmt, label=label, markersize=7) - + ax.grid() - - if label: ax.legend() - if xlabel: ax.set_xlabel(xlabel) - if ylabel: ax.set_ylabel(ylabel) - if title: ax.set_title(title) - + + if label: + ax.legend() + if xlabel: + ax.set_xlabel(xlabel) + if ylabel: + ax.set_ylabel(ylabel) + if title: + ax.set_title(title) + plt.tight_layout() - + return ax def plot_flow_duration_curve(D, F, label=None, ax=None): """ - Plots discharge vs exceedance probability as a Flow Duration Curve (FDC) - + Plots discharge vs exceedance probability as a Flow Duration Curve (FDC) + Parameters ------------ D: array-like Discharge [m/s] indexed by time - - F: array-like + + F: array-like Exceedance probability [unitless] indexed by time - + label: string Label to use in the legend - + ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. - + Returns --------- ax : matplotlib pyplot axes - + """ # Sort by F - temp = pd.DataFrame({'D': D, 'F': F}) - temp.sort_values('F', ascending=False, kind='mergesort', inplace=True) - - ax = _xy_plot(temp['D'], temp['F'], fmt='-', label=label, xlabel='Discharge [$m^3/s$]', - ylabel='Exceedance Probability', ax=ax) - plt.xscale('log') + temp = pd.DataFrame({"D": D, "F": F}) + temp.sort_values("F", ascending=False, kind="mergesort", inplace=True) + + ax = _xy_plot( + temp["D"], + temp["F"], + fmt="-", + label=label, + xlabel="Discharge [$m^3/s$]", + ylabel="Exceedance Probability", + ax=ax, + ) + plt.xscale("log") return ax def plot_velocity_duration_curve(V, F, label=None, ax=None): """ - Plots velocity vs exceedance probability as a Velocity Duration Curve (VDC) - + Plots velocity vs exceedance probability as a Velocity Duration Curve (VDC) + Parameters ------------ - V: array-like + V: array-like Velocity [m/s] indexed by time - - F: array-like + + F: array-like Exceedance probability [unitless] indexed by time - + label: string Label to use in the legend - + ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. - + Returns --------- ax : matplotlib pyplot axes - + """ # Sort by F - temp = pd.DataFrame({'V': V, 'F': F}) - temp.sort_values('F', ascending=False, kind='mergesort', inplace=True) - - ax = _xy_plot(temp['V'], temp['F'], fmt='-', label=label, xlabel='Velocity [$m/s$]', - ylabel='Exceedance Probability', ax=ax) + temp = pd.DataFrame({"V": V, "F": F}) + temp.sort_values("F", ascending=False, kind="mergesort", inplace=True) + + ax = _xy_plot( + temp["V"], + temp["F"], + fmt="-", + label=label, + xlabel="Velocity [$m/s$]", + ylabel="Exceedance Probability", + ax=ax, + ) return ax def plot_power_duration_curve(P, F, label=None, ax=None): """ - Plots power vs exceedance probability as a Power Duration Curve (PDC) + Plots power vs exceedance probability as a Power Duration Curve (PDC) Parameters ------------ - P: array-like + P: array-like Power [W] indexed by time - - F: array-like + + F: array-like Exceedance probability [unitless] indexed by time - + label: string Label to use in the legend - + ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. - + Returns --------- ax : matplotlib pyplot axes - + """ # Sort by F - temp = pd.DataFrame({'P': P, 'F': F}) - temp.sort_values('F', ascending=False, kind='mergesort', inplace=True) - - ax = _xy_plot(temp['P'], temp['F'], fmt='-', label=label, xlabel='Power [W]', - ylabel='Exceedance Probability', ax=ax) + temp = pd.DataFrame({"P": P, "F": F}) + temp.sort_values("F", ascending=False, kind="mergesort", inplace=True) + + ax = _xy_plot( + temp["P"], + temp["F"], + fmt="-", + label=label, + xlabel="Power [W]", + ylabel="Exceedance Probability", + ax=ax, + ) return ax - + def plot_discharge_timeseries(Q, label=None, ax=None): """ Plots discharge time-series - + Parameters ------------ Q: array-like Discharge [m3/s] indexed by time - + label: string Label to use in the legend - + ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. - + Returns --------- - ax : matplotlib pyplot axes - + ax : matplotlib pyplot axes + """ ax = _xy_plot( - Q.index, - Q, - fmt='-', - label=label, - xlabel='Time', - ylabel='Discharge [$m^3/s$]', - ax=ax + Q.index, + Q, + fmt="-", + label=label, + xlabel="Time", + ylabel="Discharge [$m^3/s$]", + ax=ax, ) - + return ax def plot_discharge_vs_velocity(D, V, polynomial_coeff=None, label=None, ax=None): """ Plots discharge vs velocity data along with the polynomial fit - + Parameters ------------ D : pandas Series Discharge [m/s] indexed by time - + V : pandas Series Velocity [m/s] indexed by time - + polynomial_coeff: numpy polynomial - Polynomial coefficients, which can be computed using - `river.resource.polynomial_fit`. If None, then the polynomial fit is - not included int the plot. - + Polynomial coefficients, which can be computed using + `river.resource.polynomial_fit`. If None, then the polynomial fit is + not included int the plot. + ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. - + Returns --------- ax : matplotlib pyplot axes - + """ - ax = _xy_plot(D, V, fmt='.', label=label, xlabel='Discharge [$m^3/s$]', - ylabel='Velocity [$m/s$]', ax=ax) + ax = _xy_plot( + D, + V, + fmt=".", + label=label, + xlabel="Discharge [$m^3/s$]", + ylabel="Velocity [$m/s$]", + ax=ax, + ) if polynomial_coeff: x = np.linspace(D.min(), D.max()) - ax = _xy_plot(x, polynomial_coeff(x), fmt='--', label='Polynomial fit', - xlabel='Discharge [$m^3/s$]', ylabel='Velocity [$m/s$]', - ax=ax) + ax = _xy_plot( + x, + polynomial_coeff(x), + fmt="--", + label="Polynomial fit", + xlabel="Discharge [$m^3/s$]", + ylabel="Velocity [$m/s$]", + ax=ax, + ) return ax def plot_velocity_vs_power(V, P, polynomial_coeff=None, label=None, ax=None): """ - Plots velocity vs power data along with the polynomial fit - + Plots velocity vs power data along with the polynomial fit + Parameters ------------ V : pandas Series Velocity [m/s] indexed by time - + P: pandas Series Power [W] indexed by time - + polynomial_coeff: numpy polynomial - Polynomial coefficients, which can be computed using - `river.resource.polynomial_fit`. If None, then the polynomial fit is - not included int the plot. - + Polynomial coefficients, which can be computed using + `river.resource.polynomial_fit`. If None, then the polynomial fit is + not included int the plot. + ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. - + Returns --------- ax : matplotlib pyplot axes - + """ - ax = _xy_plot(V, P, fmt='.', label=label, xlabel='Velocity [$m/s$]', - ylabel='Power [$W$]', ax=ax) + ax = _xy_plot( + V, + P, + fmt=".", + label=label, + xlabel="Velocity [$m/s$]", + ylabel="Power [$W$]", + ax=ax, + ) if polynomial_coeff: x = np.linspace(V.min(), V.max()) - ax = _xy_plot(x, polynomial_coeff(x), fmt='--', label='Polynomial fit', - xlabel='Velocity [$m/s$]', ylabel='Power [$W$]', ax=ax) - + ax = _xy_plot( + x, + polynomial_coeff(x), + fmt="--", + label="Polynomial fit", + xlabel="Velocity [$m/s$]", + ylabel="Power [$W$]", + ax=ax, + ) + return ax diff --git a/mhkit/river/io/__init__.py b/mhkit/river/io/__init__.py index bf2aea4d1..852964f7b 100644 --- a/mhkit/river/io/__init__.py +++ b/mhkit/river/io/__init__.py @@ -1,2 +1,2 @@ from mhkit.river.io import usgs -from mhkit.river.io import d3d +from mhkit.river.io import d3d diff --git a/mhkit/river/io/d3d.py b/mhkit/river/io/d3d.py index 30219026e..13cbd8b1c 100644 --- a/mhkit/river/io/d3d.py +++ b/mhkit/river/io/d3d.py @@ -8,15 +8,15 @@ def get_all_time(data): - ''' - Returns all of the time stamps from a D3D simulation passed to the function + """ + Returns all of the time stamps from a D3D simulation passed to the function as a NetCDF object (data) Parameters ---------- - data: NetCDF4 object + data: NetCDF4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear - stress generated by running a Delft3D model. + stress generated by running a Delft3D model. Returns ------- @@ -24,26 +24,26 @@ def get_all_time(data): Returns an array of integers representing the number of seconds after the simulation started and that the data object contains a snapshot of simulation conditions at that time. - ''' + """ if not isinstance(data, netCDF4._netCDF4.Dataset): - raise TypeError('data must be a NetCDF4 object') + raise TypeError("data must be a NetCDF4 object") - seconds_run = np.ma.getdata(data.variables['time'][:], False) + seconds_run = np.ma.getdata(data.variables["time"][:], False) return seconds_run def index_to_seconds(data, time_index): - ''' - The function will return 'seconds_run' if passed a 'time_index' + """ + The function will return 'seconds_run' if passed a 'time_index' Parameters ---------- - data: NetCDF4 object + data: NetCDF4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear - stress, generated by running a Delft3D model. - time_index: int + stress, generated by running a Delft3D model. + time_index: int A positive integer to pull the time index from the dataset. 0 being closest to time 0. Default is last time index -1. @@ -51,74 +51,74 @@ def index_to_seconds(data, time_index): ------- seconds_run: int, float The 'seconds_run' is the seconds corresponding to the 'time_index' increments. - ''' + """ return _convert_time(data, time_index=time_index) def seconds_to_index(data, seconds_run): - ''' + """ The function will return the nearest 'time_index' in the data if passed an integer number of 'seconds_run' Parameters ---------- - data: NetCDF4 object + data: NetCDF4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear - stress, generated by running a Delft3D model. + stress, generated by running a Delft3D model. seconds_run: int, float - A positive integer or float that represents the amount of time in seconds + A positive integer or float that represents the amount of time in seconds passed since starting the simulation. Returns ------- time_index: int - The 'time_index' is a positive integer starting from 0 + The 'time_index' is a positive integer starting from 0 and incrementing until in simulation is complete. - ''' + """ return _convert_time(data, seconds_run=seconds_run) def _convert_time(data, time_index=None, seconds_run=None): - ''' - Converts a time index to seconds or seconds to a time index. The user - must specify 'time_index' or 'seconds_run' (Not both). The function - will returns 'seconds_run' if passed a 'time_index' or will return the + """ + Converts a time index to seconds or seconds to a time index. The user + must specify 'time_index' or 'seconds_run' (Not both). The function + will returns 'seconds_run' if passed a 'time_index' or will return the closest 'time_index' if passed a number of 'seconds_run'. Parameters ---------- - data: NetCDF4 object + data: NetCDF4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear - stress, generated by running a Delft3D model. - time_index: int + stress, generated by running a Delft3D model. + time_index: int An integer to pull the time index from the dataset. 0 being closest - to the start time. + to the start time. seconds_run: int, float - An integer or float that represents the amount of time in seconds + An integer or float that represents the amount of time in seconds passed since starting the simulation. Returns ------- QoI: int, float - The quantity of interest is the unknown value either the 'time_index' - or the 'seconds_run'. The 'time_index' is an integer starting from 0 + The quantity of interest is the unknown value either the 'time_index' + or the 'seconds_run'. The 'time_index' is an integer starting from 0 and incrementing until in simulation is complete. The 'seconds_run' is the seconds corresponding to the 'time_index' increments. - ''' + """ if not isinstance(data, netCDF4._netCDF4.Dataset): - raise TypeError('data must be NetCDF4 object') + raise TypeError("data must be NetCDF4 object") if not (time_index or seconds_run): - raise ValueError('Input of time_index or seconds_run needed') + raise ValueError("Input of time_index or seconds_run needed") if time_index and seconds_run: - raise ValueError( - 'Only one of time_index or seconds_run should be provided') + raise ValueError("Only one of time_index or seconds_run should be provided") - if not (isinstance(time_index, (int, float)) or isinstance(seconds_run, (int, float))): - raise TypeError( - 'time_index or seconds_run input must be an int or float') + if not ( + isinstance(time_index, (int, float)) or isinstance(seconds_run, (int, float)) + ): + raise TypeError("time_index or seconds_run input must be an int or float") times = get_all_time(data) @@ -131,15 +131,18 @@ def _convert_time(data, time_index=None, seconds_run=None): except: idx = (np.abs(times - seconds_run)).argmin() QoI = idx - warnings.warn(f'Warning: seconds_run not found. Closest time stamp' - + 'found {times[idx]}', stacklevel=2) + warnings.warn( + f"Warning: seconds_run not found. Closest time stamp" + + "found {times[idx]}", + stacklevel=2, + ) return QoI def get_layer_data(data, variable, layer_index=-1, time_index=-1): - ''' - Get variable data from the NetCDF4 object at a specified layer and timestep. + """ + Get variable data from the NetCDF4 object at a specified layer and timestep. If the data is 2D the layer_index is ignored. Parameters @@ -149,41 +152,42 @@ def get_layer_data(data, variable, layer_index=-1, time_index=-1): stress, generated by running a Delft3D model. variable: string Delft3D outputs many vairables. The full list can be - found using "data.variables.keys()" in the console. + found using "data.variables.keys()" in the console. layer_index: int - An integer to pull out a layer from the dataset. 0 being closest + An integer to pull out a layer from the dataset. 0 being closest to the surface. Default is the bottom layer, found with input -1. - time_index: int + time_index: int An integer to pull the time index from the dataset. 0 being closest to the start time. Default is last time index, found with input -1. Returns ------- layer_data: DataFrame DataFrame with columns of "x", "y", "waterdepth", and "waterlevel" location - of the specified layer, variable values "v", and the "time" the + of the specified layer, variable values "v", and the "time" the simulation has run. The waterdepth is measured from the water surface and the - "waterlevel" is the water level diffrencein meters from the zero water level. - ''' + "waterlevel" is the water level diffrencein meters from the zero water level. + """ if not isinstance(time_index, int): - raise TypeError('time_index must be an int') + raise TypeError("time_index must be an int") if not isinstance(layer_index, int): - raise TypeError('layer_index must be an int') + raise TypeError("layer_index must be an int") if not isinstance(data, netCDF4._netCDF4.Dataset): - raise TypeError('data must be NetCDF4 object') + raise TypeError("data must be NetCDF4 object") if variable not in data.variables.keys(): - raise ValueError('variable not recognized') + raise ValueError("variable not recognized") coords = str(data.variables[variable].coordinates).split() var = data.variables[variable][:] - max_time_index = data['time'].shape[0] - 1 # to account for zero index + max_time_index = data["time"].shape[0] - 1 # to account for zero index if abs(time_index) > max_time_index: raise ValueError( - f'time_index must be less than the absolute value of the max time index {max_time_index}') + f"time_index must be less than the absolute value of the max time index {max_time_index}" + ) x = np.ma.getdata(data.variables[coords[0]][:], False) y = np.ma.getdata(data.variables[coords[1]][:], False) @@ -192,57 +196,70 @@ def get_layer_data(data, variable, layer_index=-1, time_index=-1): max_layer = len(var[0][0]) if abs(layer_index) > max_layer: - raise ValueError( - f'layer_index must be less than the max layer {max_layer}') + raise ValueError(f"layer_index must be less than the max layer {max_layer}") v = np.ma.getdata(var[time_index, :, layer_index], False) dimensions = 3 else: if type(var[0][0]) != np.float64: - raise TypeError('data not recognized') + raise TypeError("data not recognized") dimensions = 2 v = np.ma.getdata(var[time_index, :], False) # waterdepth if "mesh2d" in variable: - cords_to_layers = {'mesh2d_face_x mesh2d_face_y': {'name': 'mesh2d_nLayers', - 'coords': data.variables['mesh2d_layer_sigma'][:]}, - 'mesh2d_edge_x mesh2d_edge_y': {'name': 'mesh2d_nInterfaces', - 'coords': data.variables['mesh2d_interface_sigma'][:]}} + cords_to_layers = { + "mesh2d_face_x mesh2d_face_y": { + "name": "mesh2d_nLayers", + "coords": data.variables["mesh2d_layer_sigma"][:], + }, + "mesh2d_edge_x mesh2d_edge_y": { + "name": "mesh2d_nInterfaces", + "coords": data.variables["mesh2d_interface_sigma"][:], + }, + } bottom_depth = np.ma.getdata( - data.variables['mesh2d_waterdepth'][time_index, :], False) - waterlevel = np.ma.getdata( - data.variables['mesh2d_s1'][time_index, :], False) - coords = str(data.variables['waterdepth'].coordinates).split() - - elif str(data.variables[variable].coordinates) == 'FlowElem_xcc FlowElem_ycc': - cords_to_layers = {'FlowElem_xcc FlowElem_ycc': - {'name': 'laydim', - 'coords': data.variables['LayCoord_cc'][:]}, - 'FlowLink_xu FlowLink_yu': {'name': 'wdim', - 'coords': data.variables['LayCoord_w'][:]}} - bottom_depth = np.ma.getdata( - data.variables['waterdepth'][time_index, :], False) - waterlevel = np.ma.getdata(data.variables['s1'][time_index, :], False) - coords = str(data.variables['waterdepth'].coordinates).split() + data.variables["mesh2d_waterdepth"][time_index, :], False + ) + waterlevel = np.ma.getdata(data.variables["mesh2d_s1"][time_index, :], False) + coords = str(data.variables["waterdepth"].coordinates).split() + + elif str(data.variables[variable].coordinates) == "FlowElem_xcc FlowElem_ycc": + cords_to_layers = { + "FlowElem_xcc FlowElem_ycc": { + "name": "laydim", + "coords": data.variables["LayCoord_cc"][:], + }, + "FlowLink_xu FlowLink_yu": { + "name": "wdim", + "coords": data.variables["LayCoord_w"][:], + }, + } + bottom_depth = np.ma.getdata(data.variables["waterdepth"][time_index, :], False) + waterlevel = np.ma.getdata(data.variables["s1"][time_index, :], False) + coords = str(data.variables["waterdepth"].coordinates).split() else: - cords_to_layers = {'FlowElem_xcc FlowElem_ycc LayCoord_cc LayCoord_cc': - {'name': 'laydim', - 'coords': data.variables['LayCoord_cc'][:]}, - 'FlowLink_xu FlowLink_yu': {'name': 'wdim', - 'coords': data.variables['LayCoord_w'][:]}} - bottom_depth = np.ma.getdata( - data.variables['waterdepth'][time_index, :], False) - waterlevel = np.ma.getdata(data.variables['s1'][time_index, :], False) - coords = str(data.variables['waterdepth'].coordinates).split() + cords_to_layers = { + "FlowElem_xcc FlowElem_ycc LayCoord_cc LayCoord_cc": { + "name": "laydim", + "coords": data.variables["LayCoord_cc"][:], + }, + "FlowLink_xu FlowLink_yu": { + "name": "wdim", + "coords": data.variables["LayCoord_w"][:], + }, + } + bottom_depth = np.ma.getdata(data.variables["waterdepth"][time_index, :], False) + waterlevel = np.ma.getdata(data.variables["s1"][time_index, :], False) + coords = str(data.variables["waterdepth"].coordinates).split() layer_dim = str(data.variables[variable].coordinates) - cord_sys = cords_to_layers[layer_dim]['coords'] + cord_sys = cords_to_layers[layer_dim]["coords"] layer_percentages = np.ma.getdata(cord_sys, False) # accumulative - if layer_dim == 'FlowLink_xu FlowLink_yu': + if layer_dim == "FlowLink_xu FlowLink_yu": # interpolate x_laydim = np.ma.getdata(data.variables[coords[0]][:], False) y_laydim = np.ma.getdata(data.variables[coords[1]][:], False) @@ -253,51 +270,57 @@ def get_layer_data(data, variable, layer_index=-1, time_index=-1): y_wdim = np.ma.getdata(data.variables[coords_request[1]][:], False) points_wdim = np.array([[x, y] for x, y in zip(x_wdim, y_wdim)]) - bottom_depth_wdim = interp.griddata(points_laydim, bottom_depth, - points_wdim) - water_level_wdim = interp.griddata(points_laydim, waterlevel, - points_wdim) + bottom_depth_wdim = interp.griddata(points_laydim, bottom_depth, points_wdim) + water_level_wdim = interp.griddata(points_laydim, waterlevel, points_wdim) idx_bd = np.where(np.isnan(bottom_depth_wdim)) for i in idx_bd: - bottom_depth_wdim[i] = interp.griddata(points_laydim, bottom_depth, - points_wdim[i], method='nearest') - water_level_wdim[i] = interp.griddata(points_laydim, waterlevel, - points_wdim[i], method='nearest') + bottom_depth_wdim[i] = interp.griddata( + points_laydim, bottom_depth, points_wdim[i], method="nearest" + ) + water_level_wdim[i] = interp.griddata( + points_laydim, waterlevel, points_wdim[i], method="nearest" + ) waterdepth = [] if dimensions == 2: - if layer_dim == 'FlowLink_xu FlowLink_yu': + if layer_dim == "FlowLink_xu FlowLink_yu": z = [bottom_depth_wdim] waterlevel = water_level_wdim else: z = [bottom_depth] else: - if layer_dim == 'FlowLink_xu FlowLink_yu': - z = [bottom_depth_wdim*layer_percentages[layer_index]] + if layer_dim == "FlowLink_xu FlowLink_yu": + z = [bottom_depth_wdim * layer_percentages[layer_index]] waterlevel = water_level_wdim else: - z = [bottom_depth*layer_percentages[layer_index]] + z = [bottom_depth * layer_percentages[layer_index]] waterdepth = np.append(waterdepth, z) - time = np.ma.getdata( - data.variables['time'][time_index], False)*np.ones(len(x)) + time = np.ma.getdata(data.variables["time"][time_index], False) * np.ones(len(x)) - layer = np.array([[x_i, y_i, d_i, w_i, v_i, t_i] for x_i, y_i, d_i, w_i, v_i, t_i in - zip(x, y, waterdepth, waterlevel, v, time)]) + layer = np.array( + [ + [x_i, y_i, d_i, w_i, v_i, t_i] + for x_i, y_i, d_i, w_i, v_i, t_i in zip( + x, y, waterdepth, waterlevel, v, time + ) + ] + ) layer_data = pd.DataFrame( - layer, columns=['x', 'y', 'waterdepth', 'waterlevel', 'v', 'time']) + layer, columns=["x", "y", "waterdepth", "waterlevel", "v", "time"] + ) return layer_data def create_points(x, y, waterdepth): - ''' + """ Generate a DataFrame of points from combinations of input coordinates. - This function accepts three inputs and combines them to generate a + This function accepts three inputs and combines them to generate a DataFrame of points. The inputs can be: - 3 points - 2 points and 1 array @@ -322,7 +345,7 @@ def create_points(x, y, waterdepth): pd.DataFrame A DataFrame with columns 'x', 'y', and 'waterdepth' representing the generated points. - Example + Example ------- 2 arrays and 1 point: >>> x = np.array([1, 2]) @@ -336,7 +359,7 @@ def create_points(x, y, waterdepth): 2 1.0 4.0 6.0 3 2.0 4.0 6.0 4 1.0 5.0 6.0 - 5 2.0 5.0 6.0 + 5 2.0 5.0 6.0 3 arrays (x and y must have the same length): >>> x = np.array([1, 2, 3]) @@ -350,11 +373,11 @@ def create_points(x, y, waterdepth): 2 3.0 6.0 1.0 3 1.0 4.0 2.0 4 2.0 5.0 2.0 - 5 4.0 6.0 2.0 - ''' + 5 4.0 6.0 2.0 + """ # Check input types - inputs = {'x': x, 'y': y, 'waterdepth': waterdepth} + inputs = {"x": x, "y": y, "waterdepth": waterdepth} for name, value in inputs.items(): # Convert lists to numpy arrays if isinstance(value, list): @@ -379,35 +402,33 @@ def create_points(x, y, waterdepth): value_array = value # Determine the type based on the length - direction_type = 'point' if len(value_array) == 1 else 'array' + direction_type = "point" if len(value_array) == 1 else "array" # Assign to the directions dictionary - directions[name] = {'values': value_array, 'type': direction_type} + directions[name] = {"values": value_array, "type": direction_type} - types = [direction['type'] for direction in directions.values()] - num_points = types.count('point') + types = [direction["type"] for direction in directions.values()] + num_points = types.count("point") if num_points >= 2: - max_len_name = max(directions, key=lambda name: len( - directions[name]['values'])) + max_len_name = max(directions, key=lambda name: len(directions[name]["values"])) for name, direction in directions.items(): - if direction['type'] == 'point': - direction['values'] = np.full( - len(directions[max_len_name]['values']), direction['values'][0]) + if direction["type"] == "point": + direction["values"] = np.full( + len(directions[max_len_name]["values"]), direction["values"][0] + ) - combined_values = [direction['values'] - for direction in directions.values()] - points = pd.DataFrame(np.column_stack( - combined_values), columns=inputs.keys()) + combined_values = [direction["values"] for direction in directions.values()] + points = pd.DataFrame(np.column_stack(combined_values), columns=inputs.keys()) elif num_points == 1: point_name = None array_names = [] for name, direction in directions.items(): - if direction['type'] == 'point': + if direction["type"] == "point": point_name = name - elif direction['type'] == 'array': + elif direction["type"] == "array": array_names.append(name) if point_name is None: @@ -417,178 +438,204 @@ def create_points(x, y, waterdepth): raise ValueError("Expected two array type directions") mesh_x, mesh_y = np.meshgrid( - directions[array_names[0]]['values'], directions[array_names[1]]['values']) - mesh_depth = np.ones_like(mesh_x) * directions[point_name]['values'][0] + directions[array_names[0]]["values"], directions[array_names[1]]["values"] + ) + mesh_depth = np.ones_like(mesh_x) * directions[point_name]["values"][0] data = list(zip(mesh_x.ravel(), mesh_y.ravel(), mesh_depth.ravel())) - points = pd.DataFrame(data, columns=['x', 'y', 'waterdepth']) + points = pd.DataFrame(data, columns=["x", "y", "waterdepth"]) else: - x_values = directions['x']['values'] - y_values = directions['y']['values'] - depth_values = directions['waterdepth']['values'] + x_values = directions["x"]["values"] + y_values = directions["y"]["values"] + depth_values = directions["waterdepth"]["values"] if len(x_values) != len(y_values): raise ValueError( - 'X and Y must be the same length if you are inputting three arrays') + "X and Y must be the same length if you are inputting three arrays" + ) x_repeated = np.tile(x_values, len(depth_values)) y_repeated = np.tile(y_values, len(depth_values)) depth_tiled = np.repeat(depth_values, len(x_values)) - points = pd.DataFrame({ - 'x': x_repeated, - 'y': y_repeated, - 'waterdepth': depth_tiled - }) + points = pd.DataFrame( + {"x": x_repeated, "y": y_repeated, "waterdepth": depth_tiled} + ) return points -def variable_interpolation(data, variables, points='cells', edges='none', - x_max_lim=float('inf'), x_min_lim=float('-inf'), - y_max_lim=float('inf'), y_min_lim=float('-inf')): - ''' - Interpolate multiple variables from the Delft3D onto the same points. +def variable_interpolation( + data, + variables, + points="cells", + edges="none", + x_max_lim=float("inf"), + x_min_lim=float("-inf"), + y_max_lim=float("inf"), + y_min_lim=float("-inf"), +): + """ + Interpolate multiple variables from the Delft3D onto the same points. Parameters ---------- - data: NetCDF4 object + data: NetCDF4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear - stress generated by running a Delft3D model. + stress generated by running a Delft3D model. variables: array of strings Name of variables to interpolate, e.g. 'turkin1', 'ucx', 'ucy' and 'ucz'. The full list can be found using "data.variables.keys()" in the console. - points: string, DataFrame + points: string, DataFrame The points to interpolate data onto. 'cells'- interpolates all data onto the Delft3D cell coordinate system (Default) - 'faces'- interpolates all dada onto the Delft3D face coordinate system - DataFrame of x, y, and waterdepth coordinates - Interpolates data onto user + 'faces'- interpolates all dada onto the Delft3D face coordinate system + DataFrame of x, y, and waterdepth coordinates - Interpolates data onto user povided points. Can be created with `create_points` function. edges: sting: 'nearest' - If edges is set to 'nearest' the code will fill in nan values with nearest - interpolation. Otherwise only linear interpolarion will be used. + If edges is set to 'nearest' the code will fill in nan values with nearest + interpolation. Otherwise only linear interpolarion will be used. Returns ------- - transformed_data: DataFrame - Variables on specified grid points saved under the input variable names - and the x, y, and waterdepth coordinates of those points. - ''' + transformed_data: DataFrame + Variables on specified grid points saved under the input variable names + and the x, y, and waterdepth coordinates of those points. + """ if not isinstance(points, (str, pd.DataFrame)): - raise TypeError('points must be a string or DataFrame') + raise TypeError("points must be a string or DataFrame") if isinstance(points, str): - if not (points == 'cells' or points == 'faces'): - raise ValueError('points must be cells or faces') + if not (points == "cells" or points == "faces"): + raise ValueError("points must be cells or faces") if not isinstance(data, netCDF4._netCDF4.Dataset): - raise TypeError('data must be netCDF4 object') + raise TypeError("data must be netCDF4 object") data_raw = {} for var in variables: var_data_df = get_all_data_points(data, var, time_index=-1) - var_data_df['depth'] = var_data_df.waterdepth - \ - var_data_df.waterlevel # added - var_data_df = var_data_df.loc[:, ~ - var_data_df.T.duplicated(keep='first')] + var_data_df["depth"] = var_data_df.waterdepth - var_data_df.waterlevel # added + var_data_df = var_data_df.loc[:, ~var_data_df.T.duplicated(keep="first")] var_data_df = var_data_df[var_data_df.x > x_min_lim] var_data_df = var_data_df[var_data_df.x < x_max_lim] var_data_df = var_data_df[var_data_df.y > y_min_lim] var_data_df = var_data_df[var_data_df.y < y_max_lim] data_raw[var] = var_data_df if type(points) == pd.DataFrame: - print('points provided') - elif points == 'faces': - points = data_raw['ucx'][['x', 'y', 'waterdepth']] - elif points == 'cells': - points = data_raw['turkin1'][['x', 'y', 'waterdepth']] + print("points provided") + elif points == "faces": + points = data_raw["ucx"][["x", "y", "waterdepth"]] + elif points == "cells": + points = data_raw["turkin1"][["x", "y", "waterdepth"]] transformed_data = points.copy(deep=True) for var in variables: - transformed_data[var] = interp.griddata(data_raw[var][['x', 'y', 'waterdepth']], # waterdepth to depth - data_raw[var][var], points[['x', 'y', 'waterdepth']]) - if edges == 'nearest': + transformed_data[var] = interp.griddata( + data_raw[var][["x", "y", "waterdepth"]], # waterdepth to depth + data_raw[var][var], + points[["x", "y", "waterdepth"]], + ) + if edges == "nearest": idx = np.where(np.isnan(transformed_data[var])) if len(idx[0]): for i in idx[0]: - transformed_data[var][i] = (interp - .griddata(data_raw[var][['x', 'y', 'waterdepth']], - data_raw[var][var], - [points['x'][i], points['y'][i], - points['waterdepth'][i]], method='nearest')) + transformed_data[var][i] = interp.griddata( + data_raw[var][["x", "y", "waterdepth"]], + data_raw[var][var], + [points["x"][i], points["y"][i], points["waterdepth"][i]], + method="nearest", + ) return transformed_data def get_all_data_points(data, variable, time_index=-1): - ''' - Get data points for a passed variable for all layers at a specified time from - the Delft3D NetCDF4 object by iterating over the `get_layer_data` function. + """ + Get data points for a passed variable for all layers at a specified time from + the Delft3D NetCDF4 object by iterating over the `get_layer_data` function. Parameters ---------- - data: Netcdf4 object + data: Netcdf4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear - stress, generated by running a Delft3D model. + stress, generated by running a Delft3D model. variable: string Delft3D variable. The full list can be of variables can be - found using "data.variables.keys()" in the console. + found using "data.variables.keys()" in the console. time_index: int - An integer to pull the time step from the dataset. + An integer to pull the time step from the dataset. Default is last time step, found with the input -1. Returns ------- - all_data: DataFrame + all_data: DataFrame Dataframe with columns x, y, waterdepth, waterlevel, variable, and time. - The waterdepth is measured from the water surface and the "waterlevel" is + The waterdepth is measured from the water surface and the "waterlevel" is the water level diffrence in meters from the zero water level. - ''' + """ if not isinstance(time_index, int): - raise TypeError('time_index must be an int') + raise TypeError("time_index must be an int") if not isinstance(data, netCDF4._netCDF4.Dataset): - raise TypeError('data must be NetCDF4 object') + raise TypeError("data must be NetCDF4 object") if variable not in data.variables.keys(): - raise ValueError('variable not recognized') + raise ValueError("variable not recognized") max_time_index = len(data.variables[variable][:]) if abs(time_index) > max_time_index: raise ValueError( - f'time_index must be less than the max time index {max_time_index}') + f"time_index must be less than the max time index {max_time_index}" + ) if "mesh2d" in variable: - cords_to_layers = {'mesh2d_face_x mesh2d_face_y': {'name': 'mesh2d_nLayers', - 'coords': data.variables['mesh2d_layer_sigma'][:]}, - 'mesh2d_edge_x mesh2d_edge_y': {'name': 'mesh2d_nInterfaces', - 'coords': data.variables['mesh2d_interface_sigma'][:]}} - - elif str(data.variables[variable].coordinates) == 'FlowElem_xcc FlowElem_ycc': - cords_to_layers = {'FlowElem_xcc FlowElem_ycc': - {'name': 'laydim', - 'coords': data.variables['LayCoord_cc'][:]}, - 'FlowLink_xu FlowLink_yu': {'name': 'wdim', - 'coords': data.variables['LayCoord_w'][:]}} + cords_to_layers = { + "mesh2d_face_x mesh2d_face_y": { + "name": "mesh2d_nLayers", + "coords": data.variables["mesh2d_layer_sigma"][:], + }, + "mesh2d_edge_x mesh2d_edge_y": { + "name": "mesh2d_nInterfaces", + "coords": data.variables["mesh2d_interface_sigma"][:], + }, + } + + elif str(data.variables[variable].coordinates) == "FlowElem_xcc FlowElem_ycc": + cords_to_layers = { + "FlowElem_xcc FlowElem_ycc": { + "name": "laydim", + "coords": data.variables["LayCoord_cc"][:], + }, + "FlowLink_xu FlowLink_yu": { + "name": "wdim", + "coords": data.variables["LayCoord_w"][:], + }, + } else: - cords_to_layers = {'FlowElem_xcc FlowElem_ycc LayCoord_cc LayCoord_cc': - {'name': 'laydim', - 'coords': data.variables['LayCoord_cc'][:]}, - 'FlowLink_xu FlowLink_yu': {'name': 'wdim', - 'coords': data.variables['LayCoord_w'][:]}} + cords_to_layers = { + "FlowElem_xcc FlowElem_ycc LayCoord_cc LayCoord_cc": { + "name": "laydim", + "coords": data.variables["LayCoord_cc"][:], + }, + "FlowLink_xu FlowLink_yu": { + "name": "wdim", + "coords": data.variables["LayCoord_w"][:], + }, + } layer_dim = str(data.variables[variable].coordinates) try: - cord_sys = cords_to_layers[layer_dim]['coords'] + cord_sys = cords_to_layers[layer_dim]["coords"] except: - raise Exception('Coordinates not recognized.') + raise Exception("Coordinates not recognized.") else: layer_percentages = np.ma.getdata(cord_sys, False) @@ -610,122 +657,136 @@ def get_all_data_points(data, variable, time_index=-1): v_all = np.append(v_all, layer_data.v) time_all = np.append(time_all, layer_data.time) - known_points = np.array([[x, y, waterdepth, waterlevel, v, time] - for x, y, waterdepth, waterlevel, v, time in zip(x_all, y_all, - depth_all, water_level_all, v_all, time_all)]) + known_points = np.array( + [ + [x, y, waterdepth, waterlevel, v, time] + for x, y, waterdepth, waterlevel, v, time in zip( + x_all, y_all, depth_all, water_level_all, v_all, time_all + ) + ] + ) - all_data = pd.DataFrame(known_points, columns=[ - 'x', 'y', 'waterdepth', 'waterlevel', f'{variable}', 'time']) + all_data = pd.DataFrame( + known_points, + columns=["x", "y", "waterdepth", "waterlevel", f"{variable}", "time"], + ) return all_data -def turbulent_intensity(data, points='cells', time_index=-1, - intermediate_values=False): - ''' - Calculate the turbulent intensity percentage for a given data set for the +def turbulent_intensity(data, points="cells", time_index=-1, intermediate_values=False): + """ + Calculate the turbulent intensity percentage for a given data set for the specified points. Assumes variable names: ucx, ucy, ucz and turkin1. Parameters ---------- - data: NetCDF4 object + data: NetCDF4 object A NetCDF4 object that contains spatial data, e.g. velocity or shear stress, generated by running a Delft3D model. - points: string, DataFrame - Points to interpolate data onto. + points: string, DataFrame + Points to interpolate data onto. 'cells': interpolates all data onto velocity coordinate system (Default). 'faces': interpolates all data onto the TKE coordinate system. - DataFrame of x, y, and z coordinates: Interpolates data onto user - provided points. - time_index: int + DataFrame of x, y, and z coordinates: Interpolates data onto user + provided points. + time_index: int An integer to pull the time step from the dataset. Default is - late time step -1. + late time step -1. intermediate_values: boolean (optional) - If false the function will return position and turbulent intensity values. + If false the function will return position and turbulent intensity values. If true the function will return position(x,y,z) and values need to calculate turbulent intensity (ucx, uxy, uxz and turkin1) in a Dataframe. Default False. Returns ------- TI_data: Dataframe - If intermediate_values is true all values are output. - If intermediate_values is equal to false only turbulent_intesity and - x, y, and z variables are output. - x- position in the x direction - y- position in the y direction + If intermediate_values is true all values are output. + If intermediate_values is equal to false only turbulent_intesity and + x, y, and z variables are output. + x- position in the x direction + y- position in the y direction waterdepth- position in the vertical direction turbulet_intesity- turbulent kinetic energy divided by the root mean squared velocity - turkin1- turbulent kinetic energy - ucx- velocity in the x direction - ucy- velocity in the y direction - ucz- velocity in the vertical direction - ''' + turkin1- turbulent kinetic energy + ucx- velocity in the x direction + ucy- velocity in the y direction + ucz- velocity in the vertical direction + """ if not isinstance(points, (str, pd.DataFrame)): - raise TypeError('points must be a string or DataFrame') + raise TypeError("points must be a string or DataFrame") if isinstance(points, str): - if not (points == 'cells' or points == 'faces'): - raise ValueError('points must be cells or faces') + if not (points == "cells" or points == "faces"): + raise ValueError("points must be cells or faces") if not isinstance(time_index, int): - raise TypeError('time_index must be an int') + raise TypeError("time_index must be an int") - max_time_index = data['time'].shape[0] - 1 # to account for zero index + max_time_index = data["time"].shape[0] - 1 # to account for zero index if abs(time_index) > max_time_index: raise ValueError( - f'time_index must be less than the absolute value of the max time index {max_time_index}') + f"time_index must be less than the absolute value of the max time index {max_time_index}" + ) if not isinstance(data, netCDF4._netCDF4.Dataset): - raise TypeError('data must be netCDF4 object') + raise TypeError("data must be netCDF4 object") - for variable in ['turkin1', 'ucx', 'ucy', 'ucz']: + for variable in ["turkin1", "ucx", "ucy", "ucz"]: if variable not in data.variables.keys(): - raise ValueError(f'Variable {variable} not present in Data') + raise ValueError(f"Variable {variable} not present in Data") - TI_vars = ['turkin1', 'ucx', 'ucy', 'ucz'] + TI_vars = ["turkin1", "ucx", "ucy", "ucz"] TI_data_raw = {} for var in TI_vars: var_data_df = get_all_data_points(data, var, time_index) TI_data_raw[var] = var_data_df if type(points) == pd.DataFrame: - print('points provided') - elif points == 'faces': - points = TI_data_raw['turkin1'].drop(['waterlevel', 'turkin1'], axis=1) - elif points == 'cells': - points = TI_data_raw['ucx'].drop(['waterlevel', 'ucx'], axis=1) + print("points provided") + elif points == "faces": + points = TI_data_raw["turkin1"].drop(["waterlevel", "turkin1"], axis=1) + elif points == "cells": + points = TI_data_raw["ucx"].drop(["waterlevel", "ucx"], axis=1) TI_data = points.copy(deep=True) for var in TI_vars: - TI_data[var] = interp.griddata(TI_data_raw[var][['x', 'y', 'waterdepth']], - TI_data_raw[var][var], points[['x', 'y', 'waterdepth']]) + TI_data[var] = interp.griddata( + TI_data_raw[var][["x", "y", "waterdepth"]], + TI_data_raw[var][var], + points[["x", "y", "waterdepth"]], + ) idx = np.where(np.isnan(TI_data[var])) if len(idx[0]): for i in idx[0]: - TI_data[var][i] = interp.griddata(TI_data_raw[var][['x', 'y', 'waterdepth']], - TI_data_raw[var][var], - [points['x'][i], points['y'] - [i], points['waterdepth'][i]], - method='nearest') - - u_mag = unorm(np.array(TI_data['ucx']), np.array(TI_data['ucy']), - np.array(TI_data['ucz'])) - - neg_index = np.where(TI_data['turkin1'] < 0) - zero_bool = np.isclose(TI_data['turkin1'][TI_data['turkin1'] < 0].array, - np.zeros( - len(TI_data['turkin1'][TI_data['turkin1'] < 0].array)), - atol=1.0e-4) + TI_data[var][i] = interp.griddata( + TI_data_raw[var][["x", "y", "waterdepth"]], + TI_data_raw[var][var], + [points["x"][i], points["y"][i], points["waterdepth"][i]], + method="nearest", + ) + + u_mag = unorm( + np.array(TI_data["ucx"]), np.array(TI_data["ucy"]), np.array(TI_data["ucz"]) + ) + + neg_index = np.where(TI_data["turkin1"] < 0) + zero_bool = np.isclose( + TI_data["turkin1"][TI_data["turkin1"] < 0].array, + np.zeros(len(TI_data["turkin1"][TI_data["turkin1"] < 0].array)), + atol=1.0e-4, + ) zero_ind = neg_index[0][zero_bool] non_zero_ind = neg_index[0][~zero_bool] - TI_data.loc[zero_ind, 'turkin1'] = np.zeros(len(zero_ind)) - TI_data.loc[non_zero_ind, 'turkin1'] = [np.nan]*len(non_zero_ind) + TI_data.loc[zero_ind, "turkin1"] = np.zeros(len(zero_ind)) + TI_data.loc[non_zero_ind, "turkin1"] = [np.nan] * len(non_zero_ind) - TI_data['turbulent_intensity'] = np.sqrt( - 2/3*TI_data['turkin1'])/u_mag * 100 # % + TI_data["turbulent_intensity"] = ( + np.sqrt(2 / 3 * TI_data["turkin1"]) / u_mag * 100 + ) # % if intermediate_values == False: TI_data = TI_data.drop(TI_vars, axis=1) diff --git a/mhkit/river/io/usgs.py b/mhkit/river/io/usgs.py index 4a69e2dd2..4d125808c 100644 --- a/mhkit/river/io/usgs.py +++ b/mhkit/river/io/usgs.py @@ -7,19 +7,21 @@ def _read_usgs_json(text): - data = pd.DataFrame() - for i in range(len(text['value']['timeSeries'])): + for i in range(len(text["value"]["timeSeries"])): try: - site_name = text['value']['timeSeries'][i]['variable']['variableDescription'] + site_name = text["value"]["timeSeries"][i]["variable"][ + "variableDescription" + ] site_data = pd.DataFrame( - text['value']['timeSeries'][i]['values'][0]['value']) - site_data.set_index('dateTime', drop=True, inplace=True) + text["value"]["timeSeries"][i]["values"][0]["value"] + ) + site_data.set_index("dateTime", drop=True, inplace=True) site_data.index = pd.to_datetime(site_data.index, utc=True) - site_data.rename(columns={'value': site_name}, inplace=True) + site_data.rename(columns={"value": site_name}, inplace=True) site_data[site_name] = pd.to_numeric(site_data[site_name]) site_data.index.name = None - del site_data['qualifiers'] + del site_data["qualifiers"] data = data.combine_first(site_data) except: pass @@ -38,8 +40,8 @@ def read_usgs_file(file_name): Returns ------- - data : pandas DataFrame - Data indexed by datetime with columns named according to the parameter's + data : pandas DataFrame + Data indexed by datetime with columns named according to the parameter's variable description """ with open(file_name) as json_file: @@ -51,16 +53,17 @@ def read_usgs_file(file_name): def request_usgs_data( - station, - parameter, - start_date, - end_date, - data_type='Daily', - proxy=None, - write_json=None, - clear_cache=False): + station, + parameter, + start_date, + end_date, + data_type="Daily", + proxy=None, + write_json=None, + clear_cache=False, +): """ - Loads USGS data directly from https://waterdata.usgs.gov/nwis using a + Loads USGS data directly from https://waterdata.usgs.gov/nwis using a GET request The request URL prints to the screen. @@ -76,63 +79,78 @@ def request_usgs_data( end_date : str End date in the format 'YYYY-MM-DD' (e.g. '2018-12-31') data_type : str - Data type, options include 'Daily' (return the mean daily value) and + Data type, options include 'Daily' (return the mean daily value) and 'Instantaneous'. proxy : dict or None - To request data from behind a firewall, define a dictionary of proxy settings, + To request data from behind a firewall, define a dictionary of proxy settings, for example {"http": 'localhost:8080'} write_json : str or None Name of json file to write data clear_cache : bool - If True, the cache for this specific request will be cleared. + If True, the cache for this specific request will be cleared. Returns ------- - data : pandas DataFrame - Data indexed by datetime with columns named according to the parameter's + data : pandas DataFrame + Data indexed by datetime with columns named according to the parameter's variable description """ - if not data_type in ['Daily', 'Instantaneous']: - raise ValueError(f'data_type must be Daily or Instantaneous. Got: {data_type}') + if not data_type in ["Daily", "Instantaneous"]: + raise ValueError(f"data_type must be Daily or Instantaneous. Got: {data_type}") # Define the path to the cache directory - cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "usgs") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "usgs") # Create a unique filename based on the function parameters hash_params = f"{station}_{parameter}_{start_date}_{end_date}_{data_type}" # Use handle_caching to manage cache cached_data, metadata, cache_filepath = handle_caching( - hash_params, cache_dir, write_json, clear_cache) + hash_params, cache_dir, write_json, clear_cache + ) if cached_data is not None: return cached_data # If no cached data, proceed with the API request - if data_type == 'Daily': - data_url = 'https://waterservices.usgs.gov/nwis/dv' - api_query = '/?format=json&sites='+station + \ - '&startDT='+start_date+'&endDT='+end_date + \ - '&statCd=00003' + \ - '¶meterCd='+parameter+'&siteStatus=all' + if data_type == "Daily": + data_url = "https://waterservices.usgs.gov/nwis/dv" + api_query = ( + "/?format=json&sites=" + + station + + "&startDT=" + + start_date + + "&endDT=" + + end_date + + "&statCd=00003" + + "¶meterCd=" + + parameter + + "&siteStatus=all" + ) else: - data_url = 'https://waterservices.usgs.gov/nwis/iv' - api_query = '/?format=json&sites='+station + \ - '&startDT='+start_date+'&endDT='+end_date + \ - '¶meterCd='+parameter+'&siteStatus=all' - - print('Data request URL: ', data_url+api_query) - - response = requests.get(url=data_url+api_query, proxies=proxy) + data_url = "https://waterservices.usgs.gov/nwis/iv" + api_query = ( + "/?format=json&sites=" + + station + + "&startDT=" + + start_date + + "&endDT=" + + end_date + + "¶meterCd=" + + parameter + + "&siteStatus=all" + ) + + print("Data request URL: ", data_url + api_query) + + response = requests.get(url=data_url + api_query, proxies=proxy) text = json.loads(response.text) data = _read_usgs_json(text) # After making the API request and processing the response, write the # response to a cache file - handle_caching(hash_params, cache_dir, data=data, - clear_cache_file=clear_cache) + handle_caching(hash_params, cache_dir, data=data, clear_cache_file=clear_cache) if write_json: shutil.copy(cache_filepath, write_json) diff --git a/mhkit/river/performance.py b/mhkit/river/performance.py index ac28393c3..c805517ab 100644 --- a/mhkit/river/performance.py +++ b/mhkit/river/performance.py @@ -1,15 +1,16 @@ import numpy as np + def circular(diameter): """ - Calculates the equivalent diameter and projected capture area of a + Calculates the equivalent diameter and projected capture area of a circular turbine - + Parameters ------------ diameter : int/float Turbine diameter [m] - + Returns --------- equivalent_diameter : float @@ -17,24 +18,25 @@ def circular(diameter): projected_capture_area : float Projected capture area [m^2] """ - if not isinstance(diameter, (int,float)): - raise TypeError(f'diameter must be of type int or float. Got: {type(diameter)}') - + if not isinstance(diameter, (int, float)): + raise TypeError(f"diameter must be of type int or float. Got: {type(diameter)}") + equivalent_diameter = diameter - projected_capture_area = (1/4)*np.pi*(equivalent_diameter**2) - + projected_capture_area = (1 / 4) * np.pi * (equivalent_diameter**2) + return equivalent_diameter, projected_capture_area + def ducted(duct_diameter): """ Calculates the equivalent diameter and projected capture area of a ducted turbine - + Parameters ------------ duct_diameter : int/float Duct diameter [m] - + Returns --------- equivalent_diameter : float @@ -42,26 +44,29 @@ def ducted(duct_diameter): projected_capture_area : float Projected capture area [m^2] """ - if not isinstance(duct_diameter, (int,float)): - raise TypeError(f'duct_diameter must be of type int or float. Got: {type(duct_diameter)}') - + if not isinstance(duct_diameter, (int, float)): + raise TypeError( + f"duct_diameter must be of type int or float. Got: {type(duct_diameter)}" + ) + equivalent_diameter = duct_diameter - projected_capture_area = (1/4)*np.pi*(equivalent_diameter**2) + projected_capture_area = (1 / 4) * np.pi * (equivalent_diameter**2) return equivalent_diameter, projected_capture_area + def rectangular(h, w): """ - Calculates the equivalent diameter and projected capture area of a + Calculates the equivalent diameter and projected capture area of a retangular turbine - + Parameters ------------ h : int/float Turbine height [m] w : int/float Turbine width [m] - + Returns --------- equivalent_diameter : float @@ -69,26 +74,27 @@ def rectangular(h, w): projected_capture_area : float Projected capture area [m^2] """ - if not isinstance(h, (int,float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') - if not isinstance(w, (int,float)): - raise TypeError(f'w must be of type int or float. Got: {type(w)}') - - equivalent_diameter = np.sqrt(4.*h*w / np.pi) - projected_capture_area = h*w + if not isinstance(h, (int, float)): + raise TypeError(f"h must be of type int or float. Got: {type(h)}") + if not isinstance(w, (int, float)): + raise TypeError(f"w must be of type int or float. Got: {type(w)}") + + equivalent_diameter = np.sqrt(4.0 * h * w / np.pi) + projected_capture_area = h * w return equivalent_diameter, projected_capture_area + def multiple_circular(diameters): """ - Calculates the equivalent diameter and projected capture area of a + Calculates the equivalent diameter and projected capture area of a multiple circular turbine - + Parameters ------------ - diameters: list + diameters: list List of device diameters [m] - + Returns --------- equivalent_diameter : float @@ -97,16 +103,17 @@ def multiple_circular(diameters): Projected capture area [m^2] """ if not isinstance(diameters, list): - raise TypeError(f'diameters must be of type list. Got: {type(diameters)}') - + raise TypeError(f"diameters must be of type list. Got: {type(diameters)}") + diameters_squared = [x**2 for x in diameters] equivalent_diameter = np.sqrt(sum(diameters_squared)) - projected_capture_area = 0.25*np.pi*sum(diameters_squared) + projected_capture_area = 0.25 * np.pi * sum(diameters_squared) return equivalent_diameter, projected_capture_area -def tip_speed_ratio(rotor_speed,rotor_diameter,inflow_speed): - ''' + +def tip_speed_ratio(rotor_speed, rotor_diameter, inflow_speed): + """ Function used to calculate the tip speed ratio (TSR) of a MEC device with rotor Parameters @@ -122,25 +129,31 @@ def tip_speed_ratio(rotor_speed,rotor_diameter,inflow_speed): -------- TSR : numpy array Calculated tip speed ratio (TSR) - ''' - - try: rotor_speed = np.asarray(rotor_speed) - except: 'rotor_speed must be of type np.ndarray' - try: inflow_speed = np.asarray(inflow_speed) - except: 'inflow_speed must be of type np.ndarray' - - if not isinstance(rotor_diameter, (float,int)): - raise TypeError(f'rotor_diameter must be of type int or float. Got: {type(rotor_diameter)}') + """ + try: + rotor_speed = np.asarray(rotor_speed) + except: + "rotor_speed must be of type np.ndarray" + try: + inflow_speed = np.asarray(inflow_speed) + except: + "inflow_speed must be of type np.ndarray" - rotor_velocity = rotor_speed * np.pi*rotor_diameter + if not isinstance(rotor_diameter, (float, int)): + raise TypeError( + f"rotor_diameter must be of type int or float. Got: {type(rotor_diameter)}" + ) + + rotor_velocity = rotor_speed * np.pi * rotor_diameter TSR = rotor_velocity / inflow_speed return TSR -def power_coefficient(power,inflow_speed,capture_area,rho): - ''' + +def power_coefficient(power, inflow_speed, capture_area, rho): + """ Function that calculates the power coefficient of MEC device Parameters @@ -158,22 +171,27 @@ def power_coefficient(power,inflow_speed,capture_area,rho): -------- Cp : numpy array Power coefficient of device [-] - ''' - - try: power = np.asarray(power) - except: 'power must be of type np.ndarray' - try: inflow_speed = np.asarray(inflow_speed) - except: 'inflow_speed must be of type np.ndarray' - - if not isinstance(capture_area, (float,int)): - raise TypeError(f'capture_area must be of type int or float. Got: {type(capture_area)}') - if not isinstance(rho, (float,int)): - raise TypeError(f'rho must be of type int or float. Got: {type(rho)}') + """ + + try: + power = np.asarray(power) + except: + "power must be of type np.ndarray" + try: + inflow_speed = np.asarray(inflow_speed) + except: + "inflow_speed must be of type np.ndarray" + + if not isinstance(capture_area, (float, int)): + raise TypeError( + f"capture_area must be of type int or float. Got: {type(capture_area)}" + ) + if not isinstance(rho, (float, int)): + raise TypeError(f"rho must be of type int or float. Got: {type(rho)}") # Predicted power from inflow - power_in = (0.5 * rho * capture_area * inflow_speed**3) + power_in = 0.5 * rho * capture_area * inflow_speed**3 - Cp = power / power_in + Cp = power / power_in return Cp - diff --git a/mhkit/river/resource.py b/mhkit/river/resource.py index fcf2e0d07..a9815bd44 100644 --- a/mhkit/river/resource.py +++ b/mhkit/river/resource.py @@ -8,10 +8,10 @@ def Froude_number(v, h, g=9.80665): """ Calculate the Froude Number of the river, channel or duct flow, to check subcritical flow assumption (if Fr <1). - + Parameters ------------ - v : int/float + v : int/float Average velocity [m/s]. h : int/float Mean hydraulic depth float [m]. @@ -24,45 +24,45 @@ def Froude_number(v, h, g=9.80665): Froude Number of the river [unitless]. """ - if not isinstance(v, (int,float)): - raise TypeError(f'v must be of type int or float. Got: {type(v)}') - if not isinstance(h, (int,float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') - if not isinstance(g, (int,float)): - raise TypeError(f'g must be of type int or float. Got: {type(g)}') - - Fr = v / np.sqrt( g * h ) - - return Fr + if not isinstance(v, (int, float)): + raise TypeError(f"v must be of type int or float. Got: {type(v)}") + if not isinstance(h, (int, float)): + raise TypeError(f"h must be of type int or float. Got: {type(h)}") + if not isinstance(g, (int, float)): + raise TypeError(f"g must be of type int or float. Got: {type(g)}") + + Fr = v / np.sqrt(g * h) + + return Fr def exceedance_probability(D): """ Calculates the exceedance probability - + Parameters ---------- D : pandas Series - Data indexed by time [datetime or s]. - - Returns + Data indexed by time [datetime or s]. + + Returns ------- - F : pandas DataFrame + F : pandas DataFrame Exceedance probability [unitless] indexed by time [datetime or s] """ # dataframe allowed for matlab if not isinstance(D, (pd.DataFrame, pd.Series)): - raise TypeError(f'D must be of type pd.Series or pd.DataFrame. Got: {type(D)}') - - if isinstance(D, pd.DataFrame) and len(D.columns) == 1: # for matlab + raise TypeError(f"D must be of type pd.Series or pd.DataFrame. Got: {type(D)}") + + if isinstance(D, pd.DataFrame) and len(D.columns) == 1: # for matlab D = D.squeeze().copy() # Calculate exceedence probability (F) - rank = D.rank(method='max', ascending=False) - F = 100* (rank / (len(D)+1) ) - - F = F.to_frame('F') # for matlab - + rank = D.rank(method="max", ascending=False) + F = 100 * (rank / (len(D) + 1)) + + F = F.to_frame("F") # for matlab + return F @@ -86,7 +86,7 @@ def polynomial_fit(x, y, n): List of polynomial coefficients R2 : float Polynomical fit coeffcient of determination - + """ try: x = np.array(x) @@ -97,104 +97,110 @@ def polynomial_fit(x, y, n): except: pass if not isinstance(x, np.ndarray): - raise TypeError(f'x must be of type np.ndarray. Got: {type(x)}') + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") if not isinstance(y, np.ndarray): - raise TypeError(f'y must be of type np.ndarray. Got: {type(y)}') + raise TypeError(f"y must be of type np.ndarray. Got: {type(y)}") if not isinstance(n, int): - raise TypeError(f'n must be of type int. Got: {type(n)}') - - # Get coeffcients of polynomial of order n + raise TypeError(f"n must be of type int. Got: {type(n)}") + + # Get coeffcients of polynomial of order n polynomial_coefficients = np.poly1d(np.polyfit(x, y, n)) - + # Calculate the coeffcient of determination - slope, intercept, r_value, p_value, std_err = _linregress(y, polynomial_coefficients(x)) + slope, intercept, r_value, p_value, std_err = _linregress( + y, polynomial_coefficients(x) + ) R2 = r_value**2 - + return polynomial_coefficients, R2 - + def discharge_to_velocity(D, polynomial_coefficients): """ - Calculates velocity given discharge data and the relationship between + Calculates velocity given discharge data and the relationship between discharge and velocity at an individual turbine - + Parameters ------------ D : pandas Series Discharge data [m3/s] indexed by time [datetime or s] polynomial_coefficients : numpy polynomial - List of polynomial coefficients that discribe the relationship between + List of polynomial coefficients that discribe the relationship between discharge and velocity at an individual turbine - - Returns + + Returns ------------ - V: pandas DataFrame + V: pandas DataFrame Velocity [m/s] indexed by time [datetime or s] """ # dataframe allowed for matlab if not isinstance(D, (pd.DataFrame, pd.Series)): - raise TypeError(f'D must be of type pd.Series. Got: {type(D)}') + raise TypeError(f"D must be of type pd.Series. Got: {type(D)}") if not isinstance(polynomial_coefficients, np.poly1d): - raise TypeError(f'polynomial_coefficients must be of type np.poly1d. Got: {type(polynomial_coefficients)}') - - if isinstance(D, pd.DataFrame) and len(D.columns) == 1: # for matlab + raise TypeError( + f"polynomial_coefficients must be of type np.poly1d. Got: {type(polynomial_coefficients)}" + ) + + if isinstance(D, pd.DataFrame) and len(D.columns) == 1: # for matlab D = D.squeeze().copy() - + # Calculate velocity using polynomial vals = polynomial_coefficients(D) V = pd.Series(vals, index=D.index) - - V = V.to_frame('V') # for matlab - + + V = V.to_frame("V") # for matlab + return V - + def velocity_to_power(V, polynomial_coefficients, cut_in, cut_out): """ - Calculates power given velocity data and the relationship + Calculates power given velocity data and the relationship between velocity and power from an individual turbine - + Parameters ---------- V : pandas Series Velocity [m/s] indexed by time [datetime or s] polynomial_coefficients : numpy polynomial - List of polynomial coefficients that discribe the relationship between + List of polynomial coefficients that discribe the relationship between velocity and power at an individual turbine cut_in: int/float Velocity values below cut_in are not used to compute P cut_out: int/float Velocity values above cut_out are not used to compute P - - Returns + + Returns ------- P : pandas DataFrame Power [W] indexed by time [datetime or s] """ # dataframe allowed for matlab if not isinstance(V, (pd.DataFrame, pd.Series)): - raise TypeError(f'V must be of type pd.Series or pd.DataFrame. Got: {type(V)}') + raise TypeError(f"V must be of type pd.Series or pd.DataFrame. Got: {type(V)}") if not isinstance(polynomial_coefficients, np.poly1d): - raise TypeError(f'polynomial_coefficients must be of type np.poly1d. Got: {type(polynomial_coefficients)}') - if not isinstance(cut_in, (int,float)): - raise TypeError(f'cut_in must be of type int or float. Got: {type(cut_in)}') - if not isinstance(cut_out, (int,float)): - raise TypeError(f'cut_out must be of type int or float. Got: {type(cut_out)}') - + raise TypeError( + f"polynomial_coefficients must be of type np.poly1d. Got: {type(polynomial_coefficients)}" + ) + if not isinstance(cut_in, (int, float)): + raise TypeError(f"cut_in must be of type int or float. Got: {type(cut_in)}") + if not isinstance(cut_out, (int, float)): + raise TypeError(f"cut_out must be of type int or float. Got: {type(cut_out)}") + if isinstance(V, pd.DataFrame) and len(V.columns) == 1: V = V.squeeze().copy() - + # Calculate power using tranfer function and FDC vals = polynomial_coefficients(V) - + # Power for velocity values outside lower and upper bounds Turbine produces 0 power - vals[V < cut_in] = 0. - vals[V > cut_out] = 0. + vals[V < cut_in] = 0.0 + vals[V > cut_out] = 0.0 P = pd.Series(vals, index=V.index) - - P = P.to_frame('P') # for matlab - + + P = P.to_frame("P") # for matlab + return P @@ -202,14 +208,14 @@ def energy_produced(P, seconds): """ Returns the energy produced for a given time period provided exceedence probability and power. - + Parameters ---------- P : pandas Series Power [W] indexed by time [datetime or s] seconds: int or float Seconds in the time period of interest - + Returns ------- E : float @@ -217,25 +223,24 @@ def energy_produced(P, seconds): """ # dataframe allowed for matlab if not isinstance(P, (pd.DataFrame, pd.Series)): - raise TypeError(f'P must be of type pd.Series or pd.DataFrame. Got: {type(P)}') + raise TypeError(f"P must be of type pd.Series or pd.DataFrame. Got: {type(P)}") if not isinstance(seconds, (int, float)): - raise TypeError(f'seconds must be of type int or float. Got: {type(seconds)}') + raise TypeError(f"seconds must be of type int or float. Got: {type(seconds)}") - if isinstance(P, pd.DataFrame) and len(P.columns) == 1: # for matlab + if isinstance(P, pd.DataFrame) and len(P.columns) == 1: # for matlab P = P.squeeze().copy() - + # Calculate Histogram of power - H, edges = np.histogram(P, 100 ) + H, edges = np.histogram(P, 100) # Create a distribution - hist_dist = _rv_histogram([H,edges]) + hist_dist = _rv_histogram([H, edges]) # Sample range for pdf - x = np.linspace(edges.min(),edges.max(),1000) + x = np.linspace(edges.min(), edges.max(), 1000) # Calculate the expected value of Power - expected_val_of_power = np.trapz(x*hist_dist.pdf(x),x=x) + expected_val_of_power = np.trapz(x * hist_dist.pdf(x), x=x) # Note: Built-in Expected Value method often throws warning - #EV = hist_dist.expect(lb=edges.min(), ub=edges.max()) + # EV = hist_dist.expect(lb=edges.min(), ub=edges.max()) # Energy - E = seconds * expected_val_of_power - - return E + E = seconds * expected_val_of_power + return E diff --git a/mhkit/tests/dolfyn/base.py b/mhkit/tests/dolfyn/base.py index 13327baa4..780b9688c 100644 --- a/mhkit/tests/dolfyn/base.py +++ b/mhkit/tests/dolfyn/base.py @@ -7,15 +7,16 @@ def rfnm(filename): testdir = dirname(abspath(__file__)) - datadir = normpath(join(testdir, relpath( - '../../../examples/data/dolfyn/test_data/'))) - return datadir + '/' + filename + datadir = normpath( + join(testdir, relpath("../../../examples/data/dolfyn/test_data/")) + ) + return datadir + "/" + filename def exdt(filename): testdir = dirname(abspath(__file__)) - exdir = normpath(join(testdir, relpath('../../../examples/data/dolfyn/'))) - return exdir + '/' + filename + exdir = normpath(join(testdir, relpath("../../../examples/data/dolfyn/"))) + return exdir + "/" + filename def assert_allclose(dat0, dat1, *args, **kwargs): @@ -30,8 +31,9 @@ def assert_allclose(dat0, dat1, *args, **kwargs): _assert_allclose(dat0, dat1, *args, **kwargs) # Check attributes for nm in dat0.attrs: - assert dat0.attrs[nm] == dat1.attrs[nm], "The " + \ - nm + " attribute does not match." + assert dat0.attrs[nm] == dat1.attrs[nm], ( + "The " + nm + " attribute does not match." + ) # If test debugging for v in names: dat0[v] = time.epoch2dt64(dat0[v]) @@ -46,9 +48,9 @@ def save_netcdf(data, name, *args, **kwargs): io.save(data, rfnm(name), *args, **kwargs) -def load_matlab(name, *args, **kwargs): +def load_matlab(name, *args, **kwargs): return io.load_mat(rfnm(name), *args, **kwargs) -def save_matlab(data, name, *args, **kwargs): +def save_matlab(data, name, *args, **kwargs): io.save_mat(data, rfnm(name), *args, **kwargs) diff --git a/mhkit/tests/dolfyn/test_analysis.py b/mhkit/tests/dolfyn/test_analysis.py index f75d5e952..68853e637 100644 --- a/mhkit/tests/dolfyn/test_analysis.py +++ b/mhkit/tests/dolfyn/test_analysis.py @@ -1,5 +1,9 @@ from . import test_read_adp as tr, test_read_adv as tv -from mhkit.tests.dolfyn.base import load_netcdf as load, save_netcdf as save, assert_allclose +from mhkit.tests.dolfyn.base import ( + load_netcdf as load, + save_netcdf as save, + assert_allclose, +) from mhkit.dolfyn import VelBinner, read_example import mhkit.dolfyn.adv.api as avm import mhkit.dolfyn.adp.api as apm @@ -15,14 +19,14 @@ class analysis_testcase(unittest.TestCase): @classmethod def setUpClass(self): self.adv1 = tv.dat.copy(deep=True) - self.adv2 = read_example('vector_burst_mode01.VEC', nens=90) + self.adv2 = read_example("vector_burst_mode01.VEC", nens=90) self.adv_tool = VelBinner(n_bin=self.adv1.fs, fs=self.adv1.fs) self.adp = tr.dat_sig.copy(deep=True) with pytest.warns(UserWarning): - self.adp_tool = VelBinner(n_bin=self.adp.fs*20, - fs=self.adp.fs, - n_fft=self.adp.fs*40) + self.adp_tool = VelBinner( + n_bin=self.adp.fs * 20, fs=self.adp.fs, n_fft=self.adp.fs * 40 + ) @classmethod def tearDownClass(self): @@ -33,19 +37,19 @@ def test_do_func(self): ds_vec = self.adv_tool.bin_variance(self.adv1, out_ds=ds_vec) # test non-integer bin sizes - mean_test = self.adv_tool.mean(self.adv1['vel'].values, n_bin=ds_vec.fs*1.01) + mean_test = self.adv_tool.mean(self.adv1["vel"].values, n_bin=ds_vec.fs * 1.01) ds_sig = self.adp_tool.bin_average(self.adp) ds_sig = self.adp_tool.bin_variance(self.adp, out_ds=ds_sig) if make_data: - save(ds_vec, 'vector_data01_avg.nc') - save(ds_sig, 'BenchFile01_avg.nc') + save(ds_vec, "vector_data01_avg.nc") + save(ds_sig, "BenchFile01_avg.nc") return - assert np.sum(mean_test-ds_vec.vel.values) == 0, "Mean test failed" - assert_allclose(ds_vec, load('vector_data01_avg.nc'), atol=1e-6) - assert_allclose(ds_sig, load('BenchFile01_avg.nc'), atol=1e-6) + assert np.sum(mean_test - ds_vec.vel.values) == 0, "Mean test failed" + assert_allclose(ds_vec, load("vector_data01_avg.nc"), atol=1e-6) + assert_allclose(ds_sig, load("BenchFile01_avg.nc"), atol=1e-6) def test_calc_func(self): c = self.adv_tool @@ -54,34 +58,35 @@ def test_calc_func(self): test_ds = type(self.adv1)() test_ds_adp = type(self.adp)() - test_ds['acov'] = c.autocovariance(self.adv1.vel) - test_ds['tke_vec_detrend'] = c.turbulent_kinetic_energy( - self.adv1.vel, detrend=True) - test_ds['tke_vec_demean'] = c.turbulent_kinetic_energy( - self.adv1.vel, detrend=False) - test_ds['psd'] = c.power_spectral_density( - self.adv1.vel, freq_units='Hz') + test_ds["acov"] = c.autocovariance(self.adv1.vel) + test_ds["tke_vec_detrend"] = c.turbulent_kinetic_energy( + self.adv1.vel, detrend=True + ) + test_ds["tke_vec_demean"] = c.turbulent_kinetic_energy( + self.adv1.vel, detrend=False + ) + test_ds["psd"] = c.power_spectral_density(self.adv1.vel, freq_units="Hz") # Test ADCP single vector spectra, cross-spectra to test radians code - test_ds_adp['psd_b5'] = c2.power_spectral_density( - self.adp.vel_b5.isel(range_b5=5), freq_units='rad', window='hamm') - test_ds_adp['tke_b5'] = c2.turbulent_kinetic_energy(self.adp.vel_b5) + test_ds_adp["psd_b5"] = c2.power_spectral_density( + self.adp.vel_b5.isel(range_b5=5), freq_units="rad", window="hamm" + ) + test_ds_adp["tke_b5"] = c2.turbulent_kinetic_energy(self.adp.vel_b5) if make_data: - save(test_ds, 'vector_data01_func.nc') - save(test_ds_adp, 'BenchFile01_func.nc') + save(test_ds, "vector_data01_func.nc") + save(test_ds_adp, "BenchFile01_func.nc") return - assert_allclose(test_ds, load('vector_data01_func.nc'), atol=1e-6) - assert_allclose(test_ds_adp, load('BenchFile01_func.nc'), atol=1e-6) + assert_allclose(test_ds, load("vector_data01_func.nc"), atol=1e-6) + assert_allclose(test_ds_adp, load("BenchFile01_func.nc"), atol=1e-6) def test_fft_freq(self): - f = self.adv_tool._fft_freq(units='Hz') - omega = self.adv_tool._fft_freq(units='rad/s') + f = self.adv_tool._fft_freq(units="Hz") + omega = self.adv_tool._fft_freq(units="rad/s") - np.testing.assert_equal(f, np.arange(1, 17, 1, dtype='float')) - np.testing.assert_equal(omega, np.arange( - 1, 17, 1, dtype='float')*(2*np.pi)) + np.testing.assert_equal(f, np.arange(1, 17, 1, dtype="float")) + np.testing.assert_equal(omega, np.arange(1, 17, 1, dtype="float") * (2 * np.pi)) def test_adv_turbulence(self): dat = tv.dat.copy(deep=True) @@ -89,59 +94,71 @@ def test_adv_turbulence(self): tdat = bnr(dat) acov = bnr.autocovariance(dat.vel) - assert_identical(tdat, avm.turbulence_statistics( - dat, n_bin=20.0, fs=dat.fs)) - - tdat['stress_detrend'] = bnr.reynolds_stress(dat.vel) - tdat['stress_demean'] = bnr.reynolds_stress(dat.vel, detrend=False) - tdat['csd'] = bnr.cross_spectral_density( - dat.vel, freq_units='rad', window='hamm', n_fft_coh=10) - tdat['LT83'] = bnr.dissipation_rate_LT83(tdat.psd, tdat.velds.U_mag) - tdat['SF'] = bnr.dissipation_rate_SF(dat.vel[0], tdat.velds.U_mag) - tdat['TE01'] = bnr.dissipation_rate_TE01(dat, tdat) - tdat['L'] = bnr.integral_length_scales(acov, tdat.velds.U_mag) + assert_identical(tdat, avm.turbulence_statistics(dat, n_bin=20.0, fs=dat.fs)) + + tdat["stress_detrend"] = bnr.reynolds_stress(dat.vel) + tdat["stress_demean"] = bnr.reynolds_stress(dat.vel, detrend=False) + tdat["csd"] = bnr.cross_spectral_density( + dat.vel, freq_units="rad", window="hamm", n_fft_coh=10 + ) + tdat["LT83"] = bnr.dissipation_rate_LT83(tdat.psd, tdat.velds.U_mag) + tdat["SF"] = bnr.dissipation_rate_SF(dat.vel[0], tdat.velds.U_mag) + tdat["TE01"] = bnr.dissipation_rate_TE01(dat, tdat) + tdat["L"] = bnr.integral_length_scales(acov, tdat.velds.U_mag) slope_check = bnr.check_turbulence_cascade_slope( - tdat['psd'][-1].mean('time'), freq_range=[10, 100]) + tdat["psd"][-1].mean("time"), freq_range=[10, 100] + ) if make_data: - save(tdat, 'vector_data01_bin.nc') + save(tdat, "vector_data01_bin.nc") return assert np.round(slope_check[0].values, 4), 0.1713 - assert_allclose(tdat, load('vector_data01_bin.nc'), atol=1e-6) - + assert_allclose(tdat, load("vector_data01_bin.nc"), atol=1e-6) def test_adcp_turbulence(self): dat = tr.dat_sig_i.copy(deep=True) - bnr = apm.ADPBinner(n_bin=20.0, fs=dat.fs, diff_style='centered') + bnr = apm.ADPBinner(n_bin=20.0, fs=dat.fs, diff_style="centered") tdat = bnr.bin_average(dat) - tdat['dudz'] = bnr.dudz(tdat.vel) - tdat['dvdz'] = bnr.dvdz(tdat.vel) - tdat['dwdz'] = bnr.dwdz(tdat.vel) - tdat['tau2'] = bnr.shear_squared(tdat.vel) - tdat['psd'] = bnr.power_spectral_density(dat['vel'].isel( - dir=2, range=len(dat.range)//2), freq_units='Hz') - tdat['noise'] = bnr.doppler_noise_level(tdat['psd'], pct_fN=0.8) - tdat['stress_vec4'] = bnr.reynolds_stress_4beam( - dat, noise=tdat['noise'], orientation='up', beam_angle=25) - tdat['tke_vec5'], tdat['stress_vec5'] = bnr.stress_tensor_5beam( - dat, noise=tdat['noise'], orientation='up', beam_angle=25, tke_only=False) - tdat['tke'] = bnr.total_turbulent_kinetic_energy( - dat, noise=tdat['noise'], orientation='up', beam_angle=25) + tdat["dudz"] = bnr.dudz(tdat.vel) + tdat["dvdz"] = bnr.dvdz(tdat.vel) + tdat["dwdz"] = bnr.dwdz(tdat.vel) + tdat["tau2"] = bnr.shear_squared(tdat.vel) + tdat["psd"] = bnr.power_spectral_density( + dat["vel"].isel(dir=2, range=len(dat.range) // 2), freq_units="Hz" + ) + tdat["noise"] = bnr.doppler_noise_level(tdat["psd"], pct_fN=0.8) + tdat["stress_vec4"] = bnr.reynolds_stress_4beam( + dat, noise=tdat["noise"], orientation="up", beam_angle=25 + ) + tdat["tke_vec5"], tdat["stress_vec5"] = bnr.stress_tensor_5beam( + dat, noise=tdat["noise"], orientation="up", beam_angle=25, tke_only=False + ) + tdat["tke"] = bnr.total_turbulent_kinetic_energy( + dat, noise=tdat["noise"], orientation="up", beam_angle=25 + ) # This is "negative" for this code check - tdat['wpwp'] = bnr.turbulent_kinetic_energy(dat['vel_b5'], noise=tdat['noise']) - tdat['dissipation_rate_LT83'] = bnr.dissipation_rate_LT83( - tdat['psd'], tdat.velds.U_mag.isel(range=len(dat.range)//2), freq_range=[0.2, 0.4]) - tdat['dissipation_rate_SF'], tdat['noise_SF'], tdat['D_SF'] = bnr.dissipation_rate_SF( - dat.vel.isel(dir=2), r_range=[1, 5]) - tdat['friction_vel'] = bnr.friction_velocity( - tdat, upwp_=tdat['stress_vec5'].sel(tau='upwp_'), z_inds=slice(1, 5), H=50) + tdat["wpwp"] = bnr.turbulent_kinetic_energy(dat["vel_b5"], noise=tdat["noise"]) + tdat["dissipation_rate_LT83"] = bnr.dissipation_rate_LT83( + tdat["psd"], + tdat.velds.U_mag.isel(range=len(dat.range) // 2), + freq_range=[0.2, 0.4], + ) + ( + tdat["dissipation_rate_SF"], + tdat["noise_SF"], + tdat["D_SF"], + ) = bnr.dissipation_rate_SF(dat.vel.isel(dir=2), r_range=[1, 5]) + tdat["friction_vel"] = bnr.friction_velocity( + tdat, upwp_=tdat["stress_vec5"].sel(tau="upwp_"), z_inds=slice(1, 5), H=50 + ) slope_check = bnr.check_turbulence_cascade_slope( - tdat['psd'].mean('time'), freq_range=[0.4, 4]) + tdat["psd"].mean("time"), freq_range=[0.4, 4] + ) if make_data: - save(tdat, 'Sig1000_IMU_bin.nc') + save(tdat, "Sig1000_IMU_bin.nc") return assert np.round(slope_check[0].values, 4), -1.0682 - assert_allclose(tdat, load('Sig1000_IMU_bin.nc'), atol=1e-6) + assert_allclose(tdat, load("Sig1000_IMU_bin.nc"), atol=1e-6) diff --git a/mhkit/tests/dolfyn/test_api.py b/mhkit/tests/dolfyn/test_api.py index 57320cb71..272ff1215 100644 --- a/mhkit/tests/dolfyn/test_api.py +++ b/mhkit/tests/dolfyn/test_api.py @@ -3,22 +3,24 @@ make_data = False -vec = load('vector_data01.nc') -sig = load('BenchFile01.nc') -rdi = load('RDI_test01.nc') +vec = load("vector_data01.nc") +sig = load("BenchFile01.nc") +rdi = load("RDI_test01.nc") class api_testcase(unittest.TestCase): def test_repr(self): _str = [] - for dat, fnm in [(vec, rfnm('vector_data01.repr.txt')), - (sig, rfnm('BenchFile01.repr.txt')), - (rdi, rfnm('RDI_test01.repr.txt')), ]: + for dat, fnm in [ + (vec, rfnm("vector_data01.repr.txt")), + (sig, rfnm("BenchFile01.repr.txt")), + (rdi, rfnm("RDI_test01.repr.txt")), + ]: _str = dat.velds.__repr__() if make_data: - with open(fnm, 'w') as fl: + with open(fnm, "w") as fl: fl.write(_str) else: - with open(fnm, 'r') as fl: + with open(fnm, "r") as fl: test_str = fl.read() assert test_str == _str diff --git a/mhkit/tests/dolfyn/test_clean.py b/mhkit/tests/dolfyn/test_clean.py index e237bd569..17c3d3f3e 100644 --- a/mhkit/tests/dolfyn/test_clean.py +++ b/mhkit/tests/dolfyn/test_clean.py @@ -15,50 +15,48 @@ def test_GN2002(self): td_imu = tv.dat_imu.copy(deep=True) mask = avm.clean.GN2002(td.vel, npt=20) - td['vel'] = avm.clean.clean_fill( - td.vel, mask, method='cubic', maxgap=6) - td['vel_clean_1D'] = avm.clean.fill_nan_ensemble_mean( - td.vel[0], mask[0], fs=1, window=45) - td['vel_clean_2D'] = avm.clean.fill_nan_ensemble_mean( - td.vel, mask, fs=1, window=45) + td["vel"] = avm.clean.clean_fill(td.vel, mask, method="cubic", maxgap=6) + td["vel_clean_1D"] = avm.clean.fill_nan_ensemble_mean( + td.vel[0], mask[0], fs=1, window=45 + ) + td["vel_clean_2D"] = avm.clean.fill_nan_ensemble_mean( + td.vel, mask, fs=1, window=45 + ) mask = avm.clean.GN2002(td_imu.vel, npt=20) - td_imu['vel'] = avm.clean.clean_fill( - td_imu.vel, mask, method='cubic', maxgap=6) + td_imu["vel"] = avm.clean.clean_fill(td_imu.vel, mask, method="cubic", maxgap=6) if make_data: - save(td, 'vector_data01_GN.nc') - save(td_imu, 'vector_data_imu01_GN.nc') + save(td, "vector_data01_GN.nc") + save(td_imu, "vector_data_imu01_GN.nc") return - assert_allclose(td, load('vector_data01_GN.nc'), atol=1e-6) - assert_allclose(td_imu, load('vector_data_imu01_GN.nc'), atol=1e-6) + assert_allclose(td, load("vector_data01_GN.nc"), atol=1e-6) + assert_allclose(td_imu, load("vector_data_imu01_GN.nc"), atol=1e-6) def test_spike_thresh(self): td = tv.dat_imu.copy(deep=True) mask = avm.clean.spike_thresh(td.vel, thresh=10) - td['vel'] = avm.clean.clean_fill( - td.vel, mask, method='cubic', maxgap=6) + td["vel"] = avm.clean.clean_fill(td.vel, mask, method="cubic", maxgap=6) if make_data: - save(td, 'vector_data01_sclean.nc') + save(td, "vector_data01_sclean.nc") return - assert_allclose(td, load('vector_data01_sclean.nc'), atol=1e-6) + assert_allclose(td, load("vector_data01_sclean.nc"), atol=1e-6) def test_range_limit(self): td = tv.dat_imu.copy(deep=True) mask = avm.clean.range_limit(td.vel) - td['vel'] = avm.clean.clean_fill( - td.vel, mask, method='cubic', maxgap=6) + td["vel"] = avm.clean.clean_fill(td.vel, mask, method="cubic", maxgap=6) if make_data: - save(td, 'vector_data01_rclean.nc') + save(td, "vector_data01_rclean.nc") return - assert_allclose(td, load('vector_data01_rclean.nc'), atol=1e-6) + assert_allclose(td, load("vector_data01_rclean.nc"), atol=1e-6) def test_clean_upADCP(self): td_awac = tp.dat_awac.copy(deep=True) @@ -73,22 +71,22 @@ def test_clean_upADCP(self): td_sig = apm.clean.correlation_filter(td_sig, thresh=50) if make_data: - save(td_awac, 'AWAC_test01_clean.nc') - save(td_sig, 'Sig1000_tidal_clean.nc') + save(td_awac, "AWAC_test01_clean.nc") + save(td_sig, "Sig1000_tidal_clean.nc") return - assert_allclose(td_awac, load('AWAC_test01_clean.nc'), atol=1e-6) - assert_allclose(td_sig, load('Sig1000_tidal_clean.nc'), atol=1e-6) + assert_allclose(td_awac, load("AWAC_test01_clean.nc"), atol=1e-6) + assert_allclose(td_sig, load("Sig1000_tidal_clean.nc"), atol=1e-6) def test_clean_downADCP(self): td = tp.dat_sig_ie.copy(deep=True) # First remove bad data - td['vel'] = apm.clean.val_exceeds_thresh(td.vel, thresh=3) - td['vel'] = apm.clean.fillgaps_time(td.vel) - td['vel_b5'] = apm.clean.fillgaps_time(td.vel_b5) - td['vel'] = apm.clean.fillgaps_depth(td.vel) - td['vel_b5'] = apm.clean.fillgaps_depth(td.vel_b5) + td["vel"] = apm.clean.val_exceeds_thresh(td.vel, thresh=3) + td["vel"] = apm.clean.fillgaps_time(td.vel) + td["vel_b5"] = apm.clean.fillgaps_time(td.vel_b5) + td["vel"] = apm.clean.fillgaps_depth(td.vel) + td["vel_b5"] = apm.clean.fillgaps_depth(td.vel_b5) # Then clean below seabed apm.clean.set_range_offset(td, 0.5) @@ -96,24 +94,24 @@ def test_clean_downADCP(self): td = apm.clean.nan_beyond_surface(td) if make_data: - save(td, 'Sig500_Echo_clean.nc') + save(td, "Sig500_Echo_clean.nc") return - assert_allclose(td, load('Sig500_Echo_clean.nc'), atol=1e-6) + assert_allclose(td, load("Sig500_Echo_clean.nc"), atol=1e-6) def test_orient_filter(self): td_sig = tp.dat_sig_i.copy(deep=True) td_sig = apm.clean.medfilt_orient(td_sig) - apm.rotate2(td_sig, 'earth', inplace=True) + apm.rotate2(td_sig, "earth", inplace=True) td_rdi = tp.dat_rdi.copy(deep=True) td_rdi = apm.clean.medfilt_orient(td_rdi) - apm.rotate2(td_rdi, 'earth', inplace=True) + apm.rotate2(td_rdi, "earth", inplace=True) if make_data: - save(td_sig, 'Sig1000_IMU_ofilt.nc') - save(td_rdi, 'RDI_test01_ofilt.nc') + save(td_sig, "Sig1000_IMU_ofilt.nc") + save(td_rdi, "RDI_test01_ofilt.nc") return - assert_allclose(td_sig, load('Sig1000_IMU_ofilt.nc'), atol=1e-6) - assert_allclose(td_rdi, load('RDI_test01_ofilt.nc'), atol=1e-6) + assert_allclose(td_sig, load("Sig1000_IMU_ofilt.nc"), atol=1e-6) + assert_allclose(td_rdi, load("RDI_test01_ofilt.nc"), atol=1e-6) diff --git a/mhkit/tests/dolfyn/test_motion.py b/mhkit/tests/dolfyn/test_motion.py index 47c193a95..e066058e0 100644 --- a/mhkit/tests/dolfyn/test_motion.py +++ b/mhkit/tests/dolfyn/test_motion.py @@ -3,7 +3,11 @@ from mhkit.dolfyn.adv.motion import correct_motion from . import test_read_adv as tv -from mhkit.tests.dolfyn.base import load_netcdf as load, save_netcdf as save, assert_allclose +from mhkit.tests.dolfyn.base import ( + load_netcdf as load, + save_netcdf as save, + assert_allclose, +) from mhkit.dolfyn.adv import api from mhkit.dolfyn.io.api import read_example as read import unittest @@ -29,50 +33,49 @@ def test_motion_adv(self): tdm0 = tv.dat_imu.copy(deep=True) tdm0.velds.set_declination(0.0, inplace=True) tdm0 = api.correct_motion(tdm0) - tdm0.attrs.pop('declination') - tdm0.attrs.pop('declination_in_orientmat') + tdm0.attrs.pop("declination") + tdm0.attrs.pop("declination_in_orientmat") # test motion-corrected data rotation tdmE = tv.dat_imu.copy(deep=True) tdmE.velds.set_declination(10.0, inplace=True) - tdmE.velds.rotate2('earth', inplace=True) + tdmE.velds.rotate2("earth", inplace=True) tdmE = api.correct_motion(tdmE) # ensure trailing nans are removed from AHRS data - ahrs = read('vector_data_imu01.VEC', userdata=True) - for var in ['accel', 'angrt', 'mag']: - assert not ahrs[var].isnull().any( - ), "nan's in {} variable".format(var) + ahrs = read("vector_data_imu01.VEC", userdata=True) + for var in ["accel", "angrt", "mag"]: + assert not ahrs[var].isnull().any(), "nan's in {} variable".format(var) if make_data: - save(tdm, 'vector_data_imu01_mc.nc') - save(tdm10, 'vector_data_imu01_mcDeclin10.nc') - save(tdmj, 'vector_data_imu01-json_mc.nc') + save(tdm, "vector_data_imu01_mc.nc") + save(tdm10, "vector_data_imu01_mcDeclin10.nc") + save(tdmj, "vector_data_imu01-json_mc.nc") return - cdm10 = load('vector_data_imu01_mcDeclin10.nc') + cdm10 = load("vector_data_imu01_mcDeclin10.nc") - assert_allclose(tdm, load('vector_data_imu01_mc.nc'), atol=1e-7) + assert_allclose(tdm, load("vector_data_imu01_mc.nc"), atol=1e-7) assert_allclose(tdm10, tdmj, atol=1e-7) assert_allclose(tdm0, tdm, atol=1e-7) assert_allclose(tdm10, cdm10, atol=1e-7) assert_allclose(tdmE, cdm10, atol=1e-7) - assert_allclose(tdmj, load('vector_data_imu01-json_mc.nc'), atol=1e-7) + assert_allclose(tdmj, load("vector_data_imu01-json_mc.nc"), atol=1e-7) def test_sep_probes(self): tdm = tv.dat_imu.copy(deep=True) tdm = api.correct_motion(tdm, separate_probes=True) if make_data: - save(tdm, 'vector_data_imu01_mcsp.nc') + save(tdm, "vector_data_imu01_mcsp.nc") return - assert_allclose(tdm, load('vector_data_imu01_mcsp.nc'), atol=1e-7) + assert_allclose(tdm, load("vector_data_imu01_mcsp.nc"), atol=1e-7) def test_duty_cycle(self): - tdc = load('vector_duty_cycle.nc') + tdc = load("vector_duty_cycle.nc") tdc.velds.set_inst2head_rotmat(np.eye(3)) - tdc.attrs['inst2head_vec'] = [0.5, 0, 0.1] + tdc.attrs["inst2head_vec"] = [0.5, 0, 0.1] # with duty cycle code td = correct_motion(tdc, accel_filtfreq=0.03, to_earth=False) @@ -80,16 +83,16 @@ def test_duty_cycle(self): # Wrapped function n_burst = 50 - n_ensembles = len(tdc.time)//n_burst + n_ensembles = len(tdc.time) // n_burst cd = xr.Dataset() - tdc.attrs.pop('duty_cycle_n_burst') + tdc.attrs.pop("duty_cycle_n_burst") for i in range(n_ensembles): - cd0 = tdc.isel(time=slice(n_burst*i, n_burst*i+n_burst)) + cd0 = tdc.isel(time=slice(n_burst * i, n_burst * i + n_burst)) cd0 = correct_motion(cd0, accel_filtfreq=0.03, to_earth=False) - cd = xr.merge((cd, cd0), combine_attrs='no_conflicts') - cd.attrs['duty_cycle_n_burst'] = n_burst + cd = xr.merge((cd, cd0), combine_attrs="no_conflicts") + cd.attrs["duty_cycle_n_burst"] = n_burst - cd_ENU = cd.velds.rotate2('earth', inplace=False) + cd_ENU = cd.velds.rotate2("earth", inplace=False) assert_allclose(td, cd, atol=1e-7) assert_allclose(td_ENU, cd_ENU, atol=1e-7) diff --git a/mhkit/tests/dolfyn/test_orient.py b/mhkit/tests/dolfyn/test_orient.py index 72afb4e92..1cee3aed4 100644 --- a/mhkit/tests/dolfyn/test_orient.py +++ b/mhkit/tests/dolfyn/test_orient.py @@ -8,12 +8,25 @@ def check_hpr(h, p, r, omatin): omat = euler2orient(h, p, r) - assert_allclose(omat, omatin, atol=1e-13, err_msg='Orientation matrix different than expected!\nExpected:\n{}\nGot:\n{}' - .format(np.array(omatin), omat)) + assert_allclose( + omat, + omatin, + atol=1e-13, + err_msg="Orientation matrix different than expected!\nExpected:\n{}\nGot:\n{}".format( + np.array(omatin), omat + ), + ) hpr = orient2euler(omat) - assert_allclose(hpr, [h, p, r], atol=1e-13, err_msg="Angles different than specified, orient2euler and euler2orient are " - "antisymmetric!\nExpected:\n{}\nGot:\n{}" - .format(hpr, np.array([h, p, r]), )) + assert_allclose( + hpr, + [h, p, r], + atol=1e-13, + err_msg="Angles different than specified, orient2euler and euler2orient are " + "antisymmetric!\nExpected:\n{}\nGot:\n{}".format( + hpr, + np.array([h, p, r]), + ), + ) class orient_testcase(unittest.TestCase): @@ -42,67 +55,133 @@ def test_hpr_defs(self): DOCUMENTATION. """ - check_hpr(0, 0, 0, [[0, 1, 0], - [-1, 0, 0], - [0, 0, 1], ]) - - check_hpr(90, 0, 0, [[1, 0, 0], - [0, 1, 0], - [0, 0, 1], ]) - - check_hpr(90, 0, 90, [[1, 0, 0], - [0, 0, 1], - [0, -1, 0], ]) - - sq2 = 1. / np.sqrt(2) - check_hpr(45, 0, 0, [[sq2, sq2, 0], - [-sq2, sq2, 0], - [0, 0, 1], ]) - - check_hpr(0, 45, 0, [[0, sq2, sq2], - [-1, 0, 0], - [0, -sq2, sq2], ]) - - check_hpr(0, 0, 45, [[0, 1, 0], - [-sq2, 0, sq2], - [sq2, 0, sq2], ]) - - check_hpr(90, 45, 90, [[sq2, 0, sq2], - [-sq2, 0, sq2], - [0, -1, 0], ]) + check_hpr( + 0, + 0, + 0, + [ + [0, 1, 0], + [-1, 0, 0], + [0, 0, 1], + ], + ) + + check_hpr( + 90, + 0, + 0, + [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + ], + ) + + check_hpr( + 90, + 0, + 90, + [ + [1, 0, 0], + [0, 0, 1], + [0, -1, 0], + ], + ) + + sq2 = 1.0 / np.sqrt(2) + check_hpr( + 45, + 0, + 0, + [ + [sq2, sq2, 0], + [-sq2, sq2, 0], + [0, 0, 1], + ], + ) + + check_hpr( + 0, + 45, + 0, + [ + [0, sq2, sq2], + [-1, 0, 0], + [0, -sq2, sq2], + ], + ) + + check_hpr( + 0, + 0, + 45, + [ + [0, 1, 0], + [-sq2, 0, sq2], + [sq2, 0, sq2], + ], + ) + + check_hpr( + 90, + 45, + 90, + [ + [sq2, 0, sq2], + [-sq2, 0, sq2], + [0, -1, 0], + ], + ) c30 = np.cos(np.deg2rad(30)) s30 = np.sin(np.deg2rad(30)) - check_hpr(30, 0, 0, [[s30, c30, 0], - [-c30, s30, 0], - [0, 0, 1], ]) + check_hpr( + 30, + 0, + 0, + [ + [s30, c30, 0], + [-c30, s30, 0], + [0, 0, 1], + ], + ) def test_pr_declination(self): # Test to confirm that pitch and roll don't change when you set # declination declin = 15.37 - dat = load('vector_data_imu01.nc') - h0, p0, r0 = orient2euler(dat['orientmat'].values) + dat = load("vector_data_imu01.nc") + h0, p0, r0 = orient2euler(dat["orientmat"].values) set_declination(dat, declin, inplace=True) - h1, p1, r1 = orient2euler(dat['orientmat'].values) - - assert_allclose(p0, p1, atol=1e-5, - err_msg="Pitch changes when setting declination") - assert_allclose(r0, r1, atol=1e-5, - err_msg="Roll changes when setting declination") - assert_allclose(h0 + declin, h1, atol=1e-5, err_msg="incorrect heading change when " - "setting declination") + h1, p1, r1 = orient2euler(dat["orientmat"].values) + + assert_allclose( + p0, p1, atol=1e-5, err_msg="Pitch changes when setting declination" + ) + assert_allclose( + r0, r1, atol=1e-5, err_msg="Roll changes when setting declination" + ) + assert_allclose( + h0 + declin, + h1, + atol=1e-5, + err_msg="incorrect heading change when " "setting declination", + ) def test_q_hpr(self): - dat = load('Sig1000_IMU.nc') + dat = load("Sig1000_IMU.nc") dcm = quaternion2orient(dat.quaternions) - assert_allclose(dat.orientmat, dcm, atol=5e-4, - err_msg="Disagreement b/t quaternion-calc'd & HPR-calc'd orientmat") + assert_allclose( + dat.orientmat, + dcm, + atol=5e-4, + err_msg="Disagreement b/t quaternion-calc'd & HPR-calc'd orientmat", + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_read_adp.py b/mhkit/tests/dolfyn/test_read_adp.py index cfd7f306b..055d5648b 100644 --- a/mhkit/tests/dolfyn/test_read_adp.py +++ b/mhkit/tests/dolfyn/test_read_adp.py @@ -12,54 +12,54 @@ load = tb.load_netcdf save = tb.save_netcdf -dat_rdi = load('RDI_test01.nc') -dat_rdi_7f79 = load('RDI_7f79.nc') -dat_rdi_bt = load('RDI_withBT.nc') -dat_vm_ws = load('vmdas01_wh.nc') -dat_vm_os = load('vmdas02_os.nc') -dat_wr1 = load('winriver01.nc') -dat_wr2 = load('winriver02.nc') -dat_rp = load('RiverPro_test01.nc') -dat_trsc = load('winriver02_transect.nc') - -dat_awac = load('AWAC_test01.nc') -dat_awac_ud = load('AWAC_test01_ud.nc') -dat_hwac = load('H-AWAC_test01.nc') -dat_sig = load('BenchFile01.nc') -dat_sig_i = load('Sig1000_IMU.nc') -dat_sig_i_ud = load('Sig1000_IMU_ud.nc') -dat_sig_ieb = load('VelEchoBT01.nc') -dat_sig_ie = load('Sig500_Echo.nc') -dat_sig_tide = load('Sig1000_tidal.nc') -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_rdi = load("RDI_test01.nc") +dat_rdi_7f79 = load("RDI_7f79.nc") +dat_rdi_bt = load("RDI_withBT.nc") +dat_vm_ws = load("vmdas01_wh.nc") +dat_vm_os = load("vmdas02_os.nc") +dat_wr1 = load("winriver01.nc") +dat_wr2 = load("winriver02.nc") +dat_rp = load("RiverPro_test01.nc") +dat_trsc = load("winriver02_transect.nc") + +dat_awac = load("AWAC_test01.nc") +dat_awac_ud = load("AWAC_test01_ud.nc") +dat_hwac = load("H-AWAC_test01.nc") +dat_sig = load("BenchFile01.nc") +dat_sig_i = load("Sig1000_IMU.nc") +dat_sig_i_ud = load("Sig1000_IMU_ud.nc") +dat_sig_ieb = load("VelEchoBT01.nc") +dat_sig_ie = load("Sig500_Echo.nc") +dat_sig_tide = load("Sig1000_tidal.nc") +dat_sig_skip = load("Sig_SkippedPings01.nc") +dat_sig_badt = load("Sig1000_BadTime01.nc") +dat_sig5_leiw = load("Sig500_last_ensemble_is_whole.nc") class io_adp_testcase(unittest.TestCase): def test_io_rdi(self): - warnings.simplefilter('ignore', UserWarning) + warnings.simplefilter("ignore", UserWarning) nens = 100 - td_rdi = read('RDI_test01.000') - td_7f79 = read('RDI_7f79.000') - td_rdi_bt = read('RDI_withBT.000', nens=nens) - td_vm = read('vmdas01_wh.ENX', nens=nens) - td_os = read('vmdas02_os.ENR', nens=nens) - td_wr1 = read('winriver01.PD0') - td_wr2 = read('winriver02.PD0') - td_rp = read('RiverPro_test01.PD0', nens=nens) - td_transect = read('winriver02_transect.PD0', nens=nens) + td_rdi = read("RDI_test01.000") + td_7f79 = read("RDI_7f79.000") + td_rdi_bt = read("RDI_withBT.000", nens=nens) + td_vm = read("vmdas01_wh.ENX", nens=nens) + td_os = read("vmdas02_os.ENR", nens=nens) + td_wr1 = read("winriver01.PD0") + td_wr2 = read("winriver02.PD0") + td_rp = read("RiverPro_test01.PD0", nens=nens) + td_transect = read("winriver02_transect.PD0", nens=nens) if make_data: - save(td_rdi, 'RDI_test01.nc') - save(td_7f79, 'RDI_7f79.nc') - save(td_rdi_bt, 'RDI_withBT.nc') - save(td_vm, 'vmdas01_wh.nc') - save(td_os, 'vmdas02_os.nc') - save(td_wr1, 'winriver01.nc') - save(td_wr2, 'winriver02.nc') - save(td_rp, 'RiverPro_test01.nc') - save(td_transect, 'winriver02_transect.nc') + save(td_rdi, "RDI_test01.nc") + save(td_7f79, "RDI_7f79.nc") + save(td_rdi_bt, "RDI_withBT.nc") + save(td_vm, "vmdas01_wh.nc") + save(td_os, "vmdas02_os.nc") + save(td_wr1, "winriver01.nc") + save(td_wr2, "winriver02.nc") + save(td_rp, "RiverPro_test01.nc") + save(td_transect, "winriver02_transect.nc") return assert_allclose(td_rdi, dat_rdi, atol=1e-6) @@ -75,14 +75,14 @@ def test_io_rdi(self): def test_io_nortek(self): nens = 100 with pytest.warns(UserWarning): - td_awac = read('AWAC_test01.wpr', userdata=False, nens=[0, nens]) - td_awac_ud = read('AWAC_test01.wpr', nens=nens) - td_hwac = read('H-AWAC_test01.wpr') + td_awac = read("AWAC_test01.wpr", userdata=False, nens=[0, nens]) + td_awac_ud = read("AWAC_test01.wpr", nens=nens) + td_hwac = read("H-AWAC_test01.wpr") if make_data: - save(td_awac, 'AWAC_test01.nc') - save(td_awac_ud, 'AWAC_test01_ud.nc') - save(td_hwac, 'H-AWAC_test01.nc') + save(td_awac, "AWAC_test01.nc") + save(td_awac_ud, "AWAC_test01_ud.nc") + save(td_hwac, "H-AWAC_test01.nc") return assert_allclose(td_awac, dat_awac, atol=1e-6) @@ -91,44 +91,43 @@ def test_io_nortek(self): def test_io_nortek2(self): nens = 100 - td_sig = read('BenchFile01.ad2cp', nens=nens) - td_sig_i = read('Sig1000_IMU.ad2cp', userdata=False, nens=nens) - td_sig_i_ud = read('Sig1000_IMU.ad2cp', nens=nens) - 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) + td_sig = read("BenchFile01.ad2cp", nens=nens) + td_sig_i = read("Sig1000_IMU.ad2cp", userdata=False, nens=nens) + td_sig_i_ud = read("Sig1000_IMU.ad2cp", nens=nens) + 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) with pytest.warns(UserWarning): # This issues a warning... - td_sig_skip = read('Sig_SkippedPings01.ad2cp') + td_sig_skip = read("Sig_SkippedPings01.ad2cp") with pytest.warns(UserWarning): - td_sig_badt = sig.read_signature( - tb.rfnm('Sig1000_BadTime01.ad2cp')) + td_sig_badt = sig.read_signature(tb.rfnm("Sig1000_BadTime01.ad2cp")) # Make sure we read all the way to the end of the file. # This file ends exactly at the end of an ensemble. - td_sig5_leiw = read('Sig500_last_ensemble_is_whole.ad2cp') + td_sig5_leiw = read("Sig500_last_ensemble_is_whole.ad2cp") - os.remove(tb.exdt('BenchFile01.ad2cp.index')) - os.remove(tb.exdt('Sig1000_IMU.ad2cp.index')) - os.remove(tb.exdt('VelEchoBT01.ad2cp.index')) - os.remove(tb.exdt('Sig500_Echo.ad2cp.index')) - os.remove(tb.exdt('Sig1000_tidal.ad2cp.index')) - 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("BenchFile01.ad2cp.index")) + os.remove(tb.exdt("Sig1000_IMU.ad2cp.index")) + os.remove(tb.exdt("VelEchoBT01.ad2cp.index")) + os.remove(tb.exdt("Sig500_Echo.ad2cp.index")) + os.remove(tb.exdt("Sig1000_tidal.ad2cp.index")) + 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")) if make_data: - save(td_sig, 'BenchFile01.nc') - save(td_sig_i, 'Sig1000_IMU.nc') - save(td_sig_i_ud, 'Sig1000_IMU_ud.nc') - save(td_sig_ieb, 'VelEchoBT01.nc') - save(td_sig_ie, 'Sig500_Echo.nc') - save(td_sig_tide, 'Sig1000_tidal.nc') - 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, "BenchFile01.nc") + save(td_sig_i, "Sig1000_IMU.nc") + save(td_sig_i_ud, "Sig1000_IMU_ud.nc") + save(td_sig_ieb, "VelEchoBT01.nc") + save(td_sig_ie, "Sig500_Echo.nc") + save(td_sig_tide, "Sig1000_tidal.nc") + save(td_sig_skip, "Sig_SkippedPings01.nc") + save(td_sig_badt, "Sig1000_BadTime01.nc") + save(td_sig5_leiw, "Sig500_last_ensemble_is_whole.nc") return assert_allclose(td_sig, dat_sig, atol=1e-6) @@ -143,22 +142,24 @@ def test_io_nortek2(self): def test_nortek2_crop(self): # Test file cropping function - crop_ensembles(infile=tb.exdt('Sig500_Echo.ad2cp'), - outfile=tb.exdt('Sig500_Echo_crop.ad2cp'), - range=[50, 100]) - td_sig_ie_crop = read('Sig500_Echo_crop.ad2cp') + crop_ensembles( + infile=tb.exdt("Sig500_Echo.ad2cp"), + outfile=tb.exdt("Sig500_Echo_crop.ad2cp"), + range=[50, 100], + ) + td_sig_ie_crop = read("Sig500_Echo_crop.ad2cp") if make_data: - save(td_sig_ie_crop, 'Sig500_Echo_crop.nc') + save(td_sig_ie_crop, "Sig500_Echo_crop.nc") return - os.remove(tb.exdt('Sig500_Echo.ad2cp.index')) - os.remove(tb.exdt('Sig500_Echo_crop.ad2cp')) - os.remove(tb.exdt('Sig500_Echo_crop.ad2cp.index')) + os.remove(tb.exdt("Sig500_Echo.ad2cp.index")) + os.remove(tb.exdt("Sig500_Echo_crop.ad2cp")) + os.remove(tb.exdt("Sig500_Echo_crop.ad2cp.index")) - cd_sig_ie_crop = load('Sig500_Echo_crop.nc') + cd_sig_ie_crop = load("Sig500_Echo_crop.nc") assert_allclose(td_sig_ie_crop, cd_sig_ie_crop, atol=1e-6) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_read_adv.py b/mhkit/tests/dolfyn/test_read_adv.py index f1d03c7af..9143099a6 100644 --- a/mhkit/tests/dolfyn/test_read_adv.py +++ b/mhkit/tests/dolfyn/test_read_adv.py @@ -9,32 +9,34 @@ save = tb.save_netcdf assert_allclose = tb.assert_allclose -dat = load('vector_data01') -dat_imu = load('vector_data_imu01') -dat_imu_json = load('vector_data_imu01-json') -dat_burst = load('vector_burst_mode01') +dat = load("vector_data01") +dat_imu = load("vector_data_imu01") +dat_imu_json = load("vector_data_imu01-json") +dat_burst = load("vector_burst_mode01") class io_adv_testcase(unittest.TestCase): def test_io_adv(self): nens = 100 - td = read('vector_data01.VEC', nens=nens) - tdm = read('vector_data_imu01.VEC', userdata=False, nens=nens) - tdb = read('vector_burst_mode01.VEC', nens=nens) - tdm2 = read('vector_data_imu01.VEC', - userdata=tb.exdt('vector_data_imu01.userdata.json'), - nens=nens) + td = read("vector_data01.VEC", nens=nens) + tdm = read("vector_data_imu01.VEC", userdata=False, nens=nens) + tdb = read("vector_burst_mode01.VEC", nens=nens) + tdm2 = read( + "vector_data_imu01.VEC", + userdata=tb.exdt("vector_data_imu01.userdata.json"), + nens=nens, + ) # These values are not correct for this data but I'm adding them for # test purposes only. set_inst2head_rotmat(tdm, np.eye(3), inplace=True) - tdm.attrs['inst2head_vec'] = [-1.0, 0.5, 0.2] + tdm.attrs["inst2head_vec"] = [-1.0, 0.5, 0.2] if make_data: - save(td, 'vector_data01.nc') - save(tdm, 'vector_data_imu01.nc') - save(tdb, 'vector_burst_mode01.nc') - save(tdm2, 'vector_data_imu01-json.nc') + save(td, "vector_data01.nc") + save(tdm, "vector_data_imu01.nc") + save(tdb, "vector_burst_mode01.nc") + save(tdm2, "vector_data_imu01-json.nc") return assert_allclose(td, dat, atol=1e-6) @@ -43,5 +45,5 @@ def test_io_adv(self): assert_allclose(tdm2, dat_imu_json, atol=1e-6) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_read_io.py b/mhkit/tests/dolfyn/test_read_io.py index 16f1b2c6a..1bcd82b2e 100644 --- a/mhkit/tests/dolfyn/test_read_io.py +++ b/mhkit/tests/dolfyn/test_read_io.py @@ -1,6 +1,13 @@ from . import test_read_adp as tp from . import test_read_adv as tv -from mhkit.tests.dolfyn.base import assert_allclose, save_netcdf, save_matlab, load_matlab, exdt, rfnm +from mhkit.tests.dolfyn.base import ( + assert_allclose, + save_netcdf, + save_matlab, + load_matlab, + exdt, + rfnm, +) import mhkit.dolfyn.io.rdi as wh import mhkit.dolfyn.io.nortek as awac import mhkit.dolfyn.io.nortek2 as sig @@ -16,33 +23,33 @@ class io_testcase(unittest.TestCase): def test_save(self): ds = tv.dat.copy(deep=True) - save_netcdf(ds, 'test_save') - save_matlab(ds, 'test_save') + save_netcdf(ds, "test_save") + save_matlab(ds, "test_save") - assert os.path.exists(rfnm('test_save.nc')) - assert os.path.exists(rfnm('test_save.mat')) + assert os.path.exists(rfnm("test_save.nc")) + assert os.path.exists(rfnm("test_save.mat")) def test_matlab_io(self): nens = 100 - td_vec = read('vector_data_imu01.VEC', nens=nens) - td_rdi_bt = read('RDI_withBT.000', nens=nens) + td_vec = read("vector_data_imu01.VEC", nens=nens) + td_rdi_bt = read("RDI_withBT.000", nens=nens) # This read should trigger a warning about the declination being # defined in two places (in the binary .ENX files), and in the # .userdata.json file. NOTE: DOLfYN defaults to using what is in # the .userdata.json file. - with pytest.warns(UserWarning, match='magnetic_var_deg'): - td_vm = read('vmdas01_wh.ENX', nens=nens) + with pytest.warns(UserWarning, match="magnetic_var_deg"): + td_vm = read("vmdas01_wh.ENX", nens=nens) if make_data: - save_matlab(td_vec, 'dat_vec') - save_matlab(td_rdi_bt, 'dat_rdi_bt') - save_matlab(td_vm, 'dat_vm') + save_matlab(td_vec, "dat_vec") + save_matlab(td_rdi_bt, "dat_rdi_bt") + save_matlab(td_vm, "dat_vm") return - mat_vec = load_matlab('dat_vec.mat') - mat_rdi_bt = load_matlab('dat_rdi_bt.mat') - mat_vm = load_matlab('dat_vm.mat') + mat_vec = load_matlab("dat_vec.mat") + mat_rdi_bt = load_matlab("dat_rdi_bt.mat") + mat_vm = load_matlab("dat_vm.mat") assert_allclose(td_vec, mat_vec, atol=1e-6) assert_allclose(td_rdi_bt, mat_rdi_bt, atol=1e-6) @@ -50,18 +57,18 @@ def test_matlab_io(self): def test_debugging(self): def read_txt(fname, loc): - with open(loc(fname), 'r') as f: + with open(loc(fname), "r") as f: string = f.read() return string def clip_file(fname): log = read_txt(fname, exdt) - newlines = [i for i, ltr in enumerate(log) if ltr == '\n'] + newlines = [i for i, ltr in enumerate(log) if ltr == "\n"] try: - log = log[:newlines[100]+1] + log = log[: newlines[100] + 1] except: pass - with open(rfnm(fname), 'w') as f: + with open(rfnm(fname), "w") as f: f.write(log) def read_file_and_test(fname): @@ -71,32 +78,36 @@ def read_file_and_test(fname): os.remove(exdt(fname)) nens = 100 - wh.read_rdi(exdt('RDI_withBT.000'), nens, debug_level=3) - awac.read_nortek(exdt('AWAC_test01.wpr'), nens, debug=True, do_checksum=True) - awac.read_nortek(exdt('vector_data_imu01.VEC'), nens, debug=True, do_checksum=True) - sig.read_signature(exdt('Sig500_Echo.ad2cp'), nens, rebuild_index=True, debug=True) - os.remove(exdt('Sig500_Echo.ad2cp.index')) + wh.read_rdi(exdt("RDI_withBT.000"), nens, debug_level=3) + awac.read_nortek(exdt("AWAC_test01.wpr"), nens, debug=True, do_checksum=True) + awac.read_nortek( + exdt("vector_data_imu01.VEC"), nens, debug=True, do_checksum=True + ) + sig.read_signature( + exdt("Sig500_Echo.ad2cp"), nens, rebuild_index=True, debug=True + ) + os.remove(exdt("Sig500_Echo.ad2cp.index")) if make_data: - clip_file('RDI_withBT.dolfyn.log') - clip_file('AWAC_test01.dolfyn.log') - clip_file('vector_data_imu01.dolfyn.log') - clip_file('Sig500_Echo.dolfyn.log') + clip_file("RDI_withBT.dolfyn.log") + clip_file("AWAC_test01.dolfyn.log") + clip_file("vector_data_imu01.dolfyn.log") + clip_file("Sig500_Echo.dolfyn.log") return - read_file_and_test('RDI_withBT.dolfyn.log') - read_file_and_test('AWAC_test01.dolfyn.log') - read_file_and_test('vector_data_imu01.dolfyn.log') - read_file_and_test('Sig500_Echo.dolfyn.log') + read_file_and_test("RDI_withBT.dolfyn.log") + read_file_and_test("AWAC_test01.dolfyn.log") + read_file_and_test("vector_data_imu01.dolfyn.log") + read_file_and_test("Sig500_Echo.dolfyn.log") def test_read_warnings(self): with self.assertRaises(Exception): - wh.read_rdi(exdt('H-AWAC_test01.wpr')) + wh.read_rdi(exdt("H-AWAC_test01.wpr")) with self.assertRaises(Exception): - awac.read_nortek(exdt('BenchFile01.ad2cp')) + awac.read_nortek(exdt("BenchFile01.ad2cp")) with self.assertRaises(Exception): - sig.read_signature(exdt('AWAC_test01.wpr')) + sig.read_signature(exdt("AWAC_test01.wpr")) with self.assertRaises(IOError): - read(rfnm('AWAC_test01.nc')) + read(rfnm("AWAC_test01.nc")) with self.assertRaises(Exception): - save_netcdf(tp.dat_rdi, 'test_save.fail') + save_netcdf(tp.dat_rdi, "test_save.fail") diff --git a/mhkit/tests/dolfyn/test_rotate_adp.py b/mhkit/tests/dolfyn/test_rotate_adp.py index 4ec21353d..5fa67f05e 100644 --- a/mhkit/tests/dolfyn/test_rotate_adp.py +++ b/mhkit/tests/dolfyn/test_rotate_adp.py @@ -4,28 +4,28 @@ import numpy as np import numpy.testing as npt import unittest + make_data = False class rotate_adp_testcase(unittest.TestCase): def test_rotate_beam2inst(self): - - td_rdi = rotate2(tr.dat_rdi, 'inst', inplace=False) - td_sig = rotate2(tr.dat_sig, 'inst', inplace=False) - td_sig_i = rotate2(tr.dat_sig_i, 'inst', inplace=False) - td_sig_ieb = rotate2(tr.dat_sig_ieb, 'inst', inplace=False) + td_rdi = rotate2(tr.dat_rdi, "inst", inplace=False) + td_sig = rotate2(tr.dat_sig, "inst", inplace=False) + td_sig_i = rotate2(tr.dat_sig_i, "inst", inplace=False) + td_sig_ieb = rotate2(tr.dat_sig_ieb, "inst", inplace=False) if make_data: - save(td_rdi, 'RDI_test01_rotate_beam2inst.nc') - save(td_sig, 'BenchFile01_rotate_beam2inst.nc') - save(td_sig_i, 'Sig1000_IMU_rotate_beam2inst.nc') - save(td_sig_ieb, 'VelEchoBT01_rotate_beam2inst.nc') + save(td_rdi, "RDI_test01_rotate_beam2inst.nc") + save(td_sig, "BenchFile01_rotate_beam2inst.nc") + save(td_sig_i, "Sig1000_IMU_rotate_beam2inst.nc") + save(td_sig_ieb, "VelEchoBT01_rotate_beam2inst.nc") return - cd_rdi = load('RDI_test01_rotate_beam2inst.nc') - cd_sig = load('BenchFile01_rotate_beam2inst.nc') - cd_sig_i = load('Sig1000_IMU_rotate_beam2inst.nc') - cd_sig_ieb = load('VelEchoBT01_rotate_beam2inst.nc') + cd_rdi = load("RDI_test01_rotate_beam2inst.nc") + cd_sig = load("BenchFile01_rotate_beam2inst.nc") + cd_sig_i = load("Sig1000_IMU_rotate_beam2inst.nc") + cd_sig_ieb = load("VelEchoBT01_rotate_beam2inst.nc") assert_allclose(td_rdi, cd_rdi, atol=1e-5) assert_allclose(td_sig, cd_sig, atol=1e-5) @@ -33,32 +33,31 @@ def test_rotate_beam2inst(self): assert_allclose(td_sig_ieb, cd_sig_ieb, atol=1e-5) def test_rotate_inst2beam(self): - - td = load('RDI_test01_rotate_beam2inst.nc') - rotate2(td, 'beam', inplace=True) - td_awac = load('AWAC_test01_earth2inst.nc') - rotate2(td_awac, 'beam', inplace=True) - td_sig = load('BenchFile01_rotate_beam2inst.nc') - rotate2(td_sig, 'beam', inplace=True) - td_sig_i = load('Sig1000_IMU_rotate_beam2inst.nc') - rotate2(td_sig_i, 'beam', inplace=True) - td_sig_ie = load('Sig500_Echo_earth2inst.nc') - rotate2(td_sig_ie, 'beam', inplace=True) + td = load("RDI_test01_rotate_beam2inst.nc") + rotate2(td, "beam", inplace=True) + td_awac = load("AWAC_test01_earth2inst.nc") + rotate2(td_awac, "beam", inplace=True) + td_sig = load("BenchFile01_rotate_beam2inst.nc") + rotate2(td_sig, "beam", inplace=True) + td_sig_i = load("Sig1000_IMU_rotate_beam2inst.nc") + rotate2(td_sig_i, "beam", inplace=True) + td_sig_ie = load("Sig500_Echo_earth2inst.nc") + rotate2(td_sig_ie, "beam", inplace=True) if make_data: - save(td_awac, 'AWAC_test01_inst2beam.nc') - save(td_sig_ie, 'Sig500_Echo_inst2beam.nc') + save(td_awac, "AWAC_test01_inst2beam.nc") + save(td_sig_ie, "Sig500_Echo_inst2beam.nc") return cd_td = tr.dat_rdi.copy(deep=True) - cd_awac = load('AWAC_test01_inst2beam.nc') + cd_awac = load("AWAC_test01_inst2beam.nc") cd_sig = tr.dat_sig.copy(deep=True) cd_sig_i = tr.dat_sig_i.copy(deep=True) - cd_sig_ie = load('Sig500_Echo_inst2beam.nc') + cd_sig_ie = load("Sig500_Echo_inst2beam.nc") # # The reverse RDI rotation doesn't work b/c of NaN's in one beam # # that propagate to others, so we impose that here. - cd_td['vel'].values[:, np.isnan(cd_td['vel'].values).any(0)] = np.NaN + cd_td["vel"].values[:, np.isnan(cd_td["vel"].values).any(0)] = np.NaN assert_allclose(td, cd_td, atol=1e-5) assert_allclose(td_awac, cd_awac, atol=1e-5) @@ -69,38 +68,35 @@ def test_rotate_inst2beam(self): def test_rotate_inst2earth(self): # AWAC & Sig500 are loaded in earth td_awac = tr.dat_awac.copy(deep=True) - rotate2(td_awac, 'inst', inplace=True) + rotate2(td_awac, "inst", inplace=True) td_sig_ie = tr.dat_sig_ie.copy(deep=True) - rotate2(td_sig_ie, 'inst', inplace=True) + rotate2(td_sig_ie, "inst", inplace=True) td_sig_o = td_sig_ie.copy(deep=True) - td = rotate2(tr.dat_rdi, 'earth', inplace=False) - tdwr2 = rotate2(tr.dat_wr2, 'earth', inplace=False) - td_sig = load('BenchFile01_rotate_beam2inst.nc') - rotate2(td_sig, 'earth', inplace=True) - td_sig_i = load('Sig1000_IMU_rotate_beam2inst.nc') - rotate2(td_sig_i, 'earth', inplace=True) + td = rotate2(tr.dat_rdi, "earth", inplace=False) + tdwr2 = rotate2(tr.dat_wr2, "earth", inplace=False) + td_sig = load("BenchFile01_rotate_beam2inst.nc") + rotate2(td_sig, "earth", inplace=True) + td_sig_i = load("Sig1000_IMU_rotate_beam2inst.nc") + rotate2(td_sig_i, "earth", inplace=True) if make_data: - save(td_awac, 'AWAC_test01_earth2inst.nc') - save(td, 'RDI_test01_rotate_inst2earth.nc') - save(tdwr2, 'winriver02_rotate_ship2earth.nc') - save(td_sig, 'BenchFile01_rotate_inst2earth.nc') - save(td_sig_i, 'Sig1000_IMU_rotate_inst2earth.nc') - save(td_sig_ie, 'Sig500_Echo_earth2inst.nc') + save(td_awac, "AWAC_test01_earth2inst.nc") + save(td, "RDI_test01_rotate_inst2earth.nc") + save(tdwr2, "winriver02_rotate_ship2earth.nc") + save(td_sig, "BenchFile01_rotate_inst2earth.nc") + save(td_sig_i, "Sig1000_IMU_rotate_inst2earth.nc") + save(td_sig_ie, "Sig500_Echo_earth2inst.nc") return - td_awac = rotate2(load('AWAC_test01_earth2inst.nc'), - 'earth', inplace=False) - td_sig_ie = rotate2(load('Sig500_Echo_earth2inst.nc'), - 'earth', inplace=False) - td_sig_o = rotate2(td_sig_o.drop_vars( - 'orientmat'), 'earth', inplace=False) + td_awac = rotate2(load("AWAC_test01_earth2inst.nc"), "earth", inplace=False) + td_sig_ie = rotate2(load("Sig500_Echo_earth2inst.nc"), "earth", inplace=False) + td_sig_o = rotate2(td_sig_o.drop_vars("orientmat"), "earth", inplace=False) - cd = load('RDI_test01_rotate_inst2earth.nc') - cdwr2 = load('winriver02_rotate_ship2earth.nc') - cd_sig = load('BenchFile01_rotate_inst2earth.nc') - cd_sig_i = load('Sig1000_IMU_rotate_inst2earth.nc') + cd = load("RDI_test01_rotate_inst2earth.nc") + cdwr2 = load("winriver02_rotate_ship2earth.nc") + cd_sig = load("BenchFile01_rotate_inst2earth.nc") + cd_sig_i = load("Sig1000_IMU_rotate_inst2earth.nc") assert_allclose(td, cd, atol=1e-5) assert_allclose(tdwr2, cdwr2, atol=1e-5) @@ -111,66 +107,66 @@ def test_rotate_inst2earth(self): npt.assert_allclose(td_sig_o.vel, tr.dat_sig_ie.vel, atol=1e-5) def test_rotate_earth2inst(self): - - td_rdi = load('RDI_test01_rotate_inst2earth.nc') - rotate2(td_rdi, 'inst', inplace=True) - tdwr2 = load('winriver02_rotate_ship2earth.nc') - rotate2(tdwr2, 'inst', inplace=True) + td_rdi = load("RDI_test01_rotate_inst2earth.nc") + rotate2(td_rdi, "inst", inplace=True) + tdwr2 = load("winriver02_rotate_ship2earth.nc") + rotate2(tdwr2, "inst", inplace=True) td_awac = tr.dat_awac.copy(deep=True) - rotate2(td_awac, 'inst', inplace=True) # AWAC is in earth coords - td_sig = load('BenchFile01_rotate_inst2earth.nc') - rotate2(td_sig, 'inst', inplace=True) - td_sig_i = load('Sig1000_IMU_rotate_inst2earth.nc') - rotate2(td_sig_i, 'inst', inplace=True) + rotate2(td_awac, "inst", inplace=True) # AWAC is in earth coords + td_sig = load("BenchFile01_rotate_inst2earth.nc") + rotate2(td_sig, "inst", inplace=True) + td_sig_i = load("Sig1000_IMU_rotate_inst2earth.nc") + rotate2(td_sig_i, "inst", inplace=True) - cd_rdi = load('RDI_test01_rotate_beam2inst.nc') + cd_rdi = load("RDI_test01_rotate_beam2inst.nc") cd_wr2 = tr.dat_wr2 # ship and inst are considered equivalent in dolfy - cd_wr2.attrs['coord_sys'] = 'inst' - cd_awac = load('AWAC_test01_earth2inst.nc') - cd_sig = load('BenchFile01_rotate_beam2inst.nc') - cd_sig_i = load('Sig1000_IMU_rotate_beam2inst.nc') + cd_wr2.attrs["coord_sys"] = "inst" + cd_awac = load("AWAC_test01_earth2inst.nc") + cd_sig = load("BenchFile01_rotate_beam2inst.nc") + cd_sig_i = load("Sig1000_IMU_rotate_beam2inst.nc") assert_allclose(td_rdi, cd_rdi, atol=1e-5) assert_allclose(tdwr2, cd_wr2, atol=1e-5) assert_allclose(td_awac, cd_awac, atol=1e-5) assert_allclose(td_sig, cd_sig, atol=1e-5) # known failure due to orientmat, see test_vs_nortek - #assert_allclose(td_sig_i, cd_sig_i, atol=1e-3) - npt.assert_allclose(td_sig_i.accel.values, - cd_sig_i.accel.values, atol=1e-3) + # assert_allclose(td_sig_i, cd_sig_i, atol=1e-3) + npt.assert_allclose(td_sig_i.accel.values, cd_sig_i.accel.values, atol=1e-3) def test_rotate_earth2principal(self): - - td_rdi = load('RDI_test01_rotate_inst2earth.nc') - td_sig = load('BenchFile01_rotate_inst2earth.nc') + td_rdi = load("RDI_test01_rotate_inst2earth.nc") + td_sig = load("BenchFile01_rotate_inst2earth.nc") td_awac = tr.dat_awac.copy(deep=True) - td_rdi.attrs['principal_heading'] = calc_principal_heading( - td_rdi.vel.mean('range')) - td_sig.attrs['principal_heading'] = calc_principal_heading( - td_sig.vel.mean('range')) - td_awac.attrs['principal_heading'] = calc_principal_heading(td_awac.vel.mean('range'), - tidal_mode=False) - rotate2(td_rdi, 'principal', inplace=True) - rotate2(td_sig, 'principal', inplace=True) - rotate2(td_awac, 'principal', inplace=True) + td_rdi.attrs["principal_heading"] = calc_principal_heading( + td_rdi.vel.mean("range") + ) + td_sig.attrs["principal_heading"] = calc_principal_heading( + td_sig.vel.mean("range") + ) + td_awac.attrs["principal_heading"] = calc_principal_heading( + td_awac.vel.mean("range"), tidal_mode=False + ) + rotate2(td_rdi, "principal", inplace=True) + rotate2(td_sig, "principal", inplace=True) + rotate2(td_awac, "principal", inplace=True) if make_data: - save(td_rdi, 'RDI_test01_rotate_earth2principal.nc') - save(td_sig, 'BenchFile01_rotate_earth2principal.nc') - save(td_awac, 'AWAC_test01_earth2principal.nc') + save(td_rdi, "RDI_test01_rotate_earth2principal.nc") + save(td_sig, "BenchFile01_rotate_earth2principal.nc") + save(td_awac, "AWAC_test01_earth2principal.nc") return - cd_rdi = load('RDI_test01_rotate_earth2principal.nc') - cd_sig = load('BenchFile01_rotate_earth2principal.nc') - cd_awac = load('AWAC_test01_earth2principal.nc') + cd_rdi = load("RDI_test01_rotate_earth2principal.nc") + cd_sig = load("BenchFile01_rotate_earth2principal.nc") + cd_awac = load("AWAC_test01_earth2principal.nc") assert_allclose(td_rdi, cd_rdi, atol=1e-5) assert_allclose(td_awac, cd_awac, atol=1e-5) assert_allclose(td_sig, cd_sig, atol=1e-5) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_rotate_adv.py b/mhkit/tests/dolfyn/test_rotate_adv.py index c67f42a2a..b967c838d 100644 --- a/mhkit/tests/dolfyn/test_rotate_adv.py +++ b/mhkit/tests/dolfyn/test_rotate_adv.py @@ -1,11 +1,16 @@ from . import test_read_adv as tr from .base import load_netcdf as load, save_netcdf as save, assert_allclose -from mhkit.dolfyn.rotate.api import rotate2, calc_principal_heading, \ - set_declination, set_inst2head_rotmat +from mhkit.dolfyn.rotate.api import ( + rotate2, + calc_principal_heading, + set_declination, + set_inst2head_rotmat, +) from mhkit.dolfyn.rotate.base import euler2orient, orient2euler import numpy as np import numpy.testing as npt import unittest + make_data = False @@ -14,14 +19,14 @@ def test_heading(self): td = tr.dat_imu.copy(deep=True) head, pitch, roll = orient2euler(td) - td['pitch'].values = pitch - td['roll'].values = roll - td['heading'].values = head + td["pitch"].values = pitch + td["roll"].values = roll + td["heading"].values = head if make_data: - save(td, 'vector_data_imu01_head_pitch_roll.nc') + save(td, "vector_data_imu01_head_pitch_roll.nc") return - cd = load('vector_data_imu01_head_pitch_roll.nc') + cd = load("vector_data_imu01_head_pitch_roll.nc") assert_allclose(td, cd, atol=1e-6) @@ -30,9 +35,7 @@ def test_inst2head_rotmat(self): td = tr.dat.copy(deep=True) # Swap x,y, reverse z - set_inst2head_rotmat(td, [[0, 1, 0], - [1, 0, 0], - [0, 0, -1]], inplace=True) + set_inst2head_rotmat(td, [[0, 1, 0], [1, 0, 0], [0, 0, -1]], inplace=True) # Coords don't get altered here npt.assert_allclose(td.vel[0].values, tr.dat.vel[1].values, atol=1e-6) @@ -41,7 +44,7 @@ def test_inst2head_rotmat(self): # Validation for non-symmetric rotations td = tr.dat.copy(deep=True) - R = euler2orient(20, 30, 60, units='degrees') # arbitrary angles + R = euler2orient(20, 30, 60, units="degrees") # arbitrary angles td = set_inst2head_rotmat(td, R, inplace=False) vel1 = td.vel # validate that a head->inst rotation occurs (transpose of inst2head_rotmat) @@ -51,64 +54,64 @@ def test_inst2head_rotmat(self): def test_rotate_inst2earth(self): td = tr.dat.copy(deep=True) - rotate2(td, 'earth', inplace=True) + rotate2(td, "earth", inplace=True) tdm = tr.dat_imu.copy(deep=True) - rotate2(tdm, 'earth', inplace=True) + rotate2(tdm, "earth", inplace=True) tdo = tr.dat.copy(deep=True) - omat = tdo['orientmat'] - tdo = rotate2(tdo.drop_vars('orientmat'), 'earth', inplace=False) - tdo['orientmat'] = omat + omat = tdo["orientmat"] + tdo = rotate2(tdo.drop_vars("orientmat"), "earth", inplace=False) + tdo["orientmat"] = omat if make_data: - save(td, 'vector_data01_rotate_inst2earth.nc') - save(tdm, 'vector_data_imu01_rotate_inst2earth.nc') + save(td, "vector_data01_rotate_inst2earth.nc") + save(tdm, "vector_data_imu01_rotate_inst2earth.nc") return - cd = load('vector_data01_rotate_inst2earth.nc') - cdm = load('vector_data_imu01_rotate_inst2earth.nc') + cd = load("vector_data01_rotate_inst2earth.nc") + cdm = load("vector_data_imu01_rotate_inst2earth.nc") assert_allclose(td, cd, atol=1e-6) assert_allclose(tdm, cdm, atol=1e-6) assert_allclose(tdo, cd, atol=1e-6) def test_rotate_earth2inst(self): - td = load('vector_data01_rotate_inst2earth.nc') - rotate2(td, 'inst', inplace=True) - tdm = load('vector_data_imu01_rotate_inst2earth.nc') - rotate2(tdm, 'inst', inplace=True) + td = load("vector_data01_rotate_inst2earth.nc") + rotate2(td, "inst", inplace=True) + tdm = load("vector_data_imu01_rotate_inst2earth.nc") + rotate2(tdm, "inst", inplace=True) cd = tr.dat.copy(deep=True) cdm = tr.dat_imu.copy(deep=True) # The heading/pitch/roll data gets modified during rotation, so it # doesn't go back to what it was. - cdm = cdm.drop_vars(['heading', 'pitch', 'roll']) - tdm = tdm.drop_vars(['heading', 'pitch', 'roll']) + cdm = cdm.drop_vars(["heading", "pitch", "roll"]) + tdm = tdm.drop_vars(["heading", "pitch", "roll"]) assert_allclose(td, cd, atol=1e-6) assert_allclose(tdm, cdm, atol=1e-6) def test_rotate_inst2beam(self): td = tr.dat.copy(deep=True) - rotate2(td, 'beam', inplace=True) + rotate2(td, "beam", inplace=True) tdm = tr.dat_imu.copy(deep=True) - rotate2(tdm, 'beam', inplace=True) + rotate2(tdm, "beam", inplace=True) if make_data: - save(td, 'vector_data01_rotate_inst2beam.nc') - save(tdm, 'vector_data_imu01_rotate_inst2beam.nc') + save(td, "vector_data01_rotate_inst2beam.nc") + save(tdm, "vector_data_imu01_rotate_inst2beam.nc") return - cd = load('vector_data01_rotate_inst2beam.nc') - cdm = load('vector_data_imu01_rotate_inst2beam.nc') + cd = load("vector_data01_rotate_inst2beam.nc") + cdm = load("vector_data_imu01_rotate_inst2beam.nc") assert_allclose(td, cd, atol=1e-6) assert_allclose(tdm, cdm, atol=1e-6) def test_rotate_beam2inst(self): - td = load('vector_data01_rotate_inst2beam.nc') - rotate2(td, 'inst', inplace=True) - tdm = load('vector_data_imu01_rotate_inst2beam.nc') - rotate2(tdm, 'inst', inplace=True) + td = load("vector_data01_rotate_inst2beam.nc") + rotate2(td, "inst", inplace=True) + tdm = load("vector_data_imu01_rotate_inst2beam.nc") + rotate2(tdm, "inst", inplace=True) cd = tr.dat.copy(deep=True) cdm = tr.dat_imu.copy(deep=True) @@ -117,59 +120,59 @@ def test_rotate_beam2inst(self): assert_allclose(tdm, cdm, atol=1e-5) def test_rotate_earth2principal(self): - td = load('vector_data01_rotate_inst2earth.nc') - td.attrs['principal_heading'] = calc_principal_heading(td['vel']) - rotate2(td, 'principal', inplace=True) - tdm = load('vector_data_imu01_rotate_inst2earth.nc') - tdm.attrs['principal_heading'] = calc_principal_heading(tdm['vel']) - rotate2(tdm, 'principal', inplace=True) + td = load("vector_data01_rotate_inst2earth.nc") + td.attrs["principal_heading"] = calc_principal_heading(td["vel"]) + rotate2(td, "principal", inplace=True) + tdm = load("vector_data_imu01_rotate_inst2earth.nc") + tdm.attrs["principal_heading"] = calc_principal_heading(tdm["vel"]) + rotate2(tdm, "principal", inplace=True) if make_data: - save(td, 'vector_data01_rotate_earth2principal.nc') - save(tdm, 'vector_data_imu01_rotate_earth2principal.nc') + save(td, "vector_data01_rotate_earth2principal.nc") + save(tdm, "vector_data_imu01_rotate_earth2principal.nc") return - cd = load('vector_data01_rotate_earth2principal.nc') - cdm = load('vector_data_imu01_rotate_earth2principal.nc') + cd = load("vector_data01_rotate_earth2principal.nc") + cdm = load("vector_data_imu01_rotate_earth2principal.nc") assert_allclose(td, cd, atol=1e-6) assert_allclose(tdm, cdm, atol=1e-6) def test_rotate_earth2principal_set_declination(self): declin = 3.875 - td = load('vector_data01_rotate_inst2earth.nc') + td = load("vector_data01_rotate_inst2earth.nc") td0 = td.copy(deep=True) - td.attrs['principal_heading'] = calc_principal_heading(td['vel']) - rotate2(td, 'principal', inplace=True) + td.attrs["principal_heading"] = calc_principal_heading(td["vel"]) + rotate2(td, "principal", inplace=True) set_declination(td, declin, inplace=True) - rotate2(td, 'earth', inplace=True) + rotate2(td, "earth", inplace=True) set_declination(td0, -1, inplace=True) set_declination(td0, declin, inplace=True) - td0.attrs['principal_heading'] = calc_principal_heading(td0['vel']) - rotate2(td0, 'earth', inplace=True) + td0.attrs["principal_heading"] = calc_principal_heading(td0["vel"]) + rotate2(td0, "earth", inplace=True) assert_allclose(td0, td, atol=1e-6) def test_rotate_warnings(self): warn1 = tr.dat.copy(deep=True) warn2 = tr.dat.copy(deep=True) - warn2.attrs['coord_sys'] = 'flow' + warn2.attrs["coord_sys"] = "flow" warn3 = tr.dat.copy(deep=True) - warn3.attrs['inst_model'] = 'ADV' + warn3.attrs["inst_model"] = "ADV" warn4 = tr.dat.copy(deep=True) - warn4.attrs['inst_model'] = 'adv' + warn4.attrs["inst_model"] = "adv" with self.assertRaises(Exception): - rotate2(warn1, 'ship') + rotate2(warn1, "ship") with self.assertRaises(Exception): - rotate2(warn2, 'earth') + rotate2(warn2, "earth") with self.assertRaises(Exception): set_inst2head_rotmat(warn3, np.eye(3)) with self.assertRaises(Exception): set_inst2head_rotmat(warn4, np.eye(3)) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_shortcuts.py b/mhkit/tests/dolfyn/test_shortcuts.py index 513660d1d..948736603 100644 --- a/mhkit/tests/dolfyn/test_shortcuts.py +++ b/mhkit/tests/dolfyn/test_shortcuts.py @@ -14,27 +14,26 @@ class analysis_testcase(unittest.TestCase): @classmethod def setUpClass(self): dat = tv.dat.copy(deep=True) - self.dat = rotate2(dat, 'earth', inplace=False) - self.tdat = avm.turbulence_statistics( - self.dat, n_bin=20.0, fs=self.dat.fs) + self.dat = rotate2(dat, "earth", inplace=False) + self.tdat = avm.turbulence_statistics(self.dat, n_bin=20.0, fs=self.dat.fs) short = xr.Dataset() - short['u'] = self.tdat.velds.u - short['v'] = self.tdat.velds.v - short['w'] = self.tdat.velds.w - short['U'] = self.tdat.velds.U - short['U_mag'] = self.tdat.velds.U_mag - short['U_dir'] = self.tdat.velds.U_dir + short["u"] = self.tdat.velds.u + short["v"] = self.tdat.velds.v + short["w"] = self.tdat.velds.w + short["U"] = self.tdat.velds.U + short["U_mag"] = self.tdat.velds.U_mag + short["U_dir"] = self.tdat.velds.U_dir short["upup_"] = self.tdat.velds.upup_ short["vpvp_"] = self.tdat.velds.vpvp_ short["wpwp_"] = self.tdat.velds.wpwp_ short["upvp_"] = self.tdat.velds.upvp_ short["upwp_"] = self.tdat.velds.upwp_ short["vpwp_"] = self.tdat.velds.vpwp_ - short['tke'] = self.tdat.velds.tke - short['I'] = self.tdat.velds.I - short['E_coh'] = self.tdat.velds.E_coh - short['I_tke'] = self.tdat.velds.I_tke + short["tke"] = self.tdat.velds.tke + short["I"] = self.tdat.velds.I + short["E_coh"] = self.tdat.velds.E_coh + short["I_tke"] = self.tdat.velds.I_tke self.short = short @classmethod @@ -44,15 +43,15 @@ def tearDownClass(self): def test_shortcuts(self): ds = self.short.copy(deep=True) if make_data: - save(ds, 'vector_data01_u.nc') + save(ds, "vector_data01_u.nc") return - assert_allclose(ds, load('vector_data01_u.nc'), atol=1e-6) + assert_allclose(ds, load("vector_data01_u.nc"), atol=1e-6) def test_save_complex_data(self): # netcdf4 cannot natively handle complex values # This test is a sanity check that ensures this code's # workaround functions ds_save = self.short.copy(deep=True) - save(ds_save, 'test_save.nc') - assert os.path.exists(rfnm('test_save.nc')) + save(ds_save, "test_save.nc") + assert os.path.exists(rfnm("test_save.nc")) diff --git a/mhkit/tests/dolfyn/test_time.py b/mhkit/tests/dolfyn/test_time.py index c7fecfdf2..9c1ae7597 100644 --- a/mhkit/tests/dolfyn/test_time.py +++ b/mhkit/tests/dolfyn/test_time.py @@ -20,11 +20,12 @@ def test_time_conversion(self): assert_equal(dt[0], datetime(2012, 6, 12, 12, 0, 2, 687283)) assert_equal(dt1, [datetime(2012, 6, 12, 12, 0, 2, 687283)]) assert_equal(dt_off[0], datetime(2012, 6, 12, 5, 0, 2, 687283)) - assert_equal(t_str[0], '2012-06-12 12:00:02.687283') + assert_equal(t_str[0], "2012-06-12 12:00:02.687283") # Validated based on data in ad2cp.index file - assert_equal(time.dt642date(dat_sig.time[0])[0], - datetime(2017, 7, 24, 17, 0, 0, 63500)) + assert_equal( + time.dt642date(dat_sig.time[0])[0], datetime(2017, 7, 24, 17, 0, 0, 63500) + ) # This should always be true assert_equal(time.epoch2date([0])[0], datetime(1970, 1, 1, 0, 0)) @@ -48,5 +49,5 @@ def test_datenum(self): assert_equal(dn[0], 735032.5000311028) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index 611512f48..e917022bf 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -8,7 +8,7 @@ class tools_testcase(unittest.TestCase): @classmethod def setUpClass(self): self.array = np.arange(10, dtype=float) - self.nan = np.zeros(3)*np.NaN + self.nan = np.zeros(3) * np.NaN @classmethod def tearDownClass(self): @@ -26,24 +26,30 @@ def test_group(self): assert_equal(d, out) def test_slice(self): - tensor = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], - [[10, 11, 12], [13, 14, 15], [16, 17, 18]], - [[19, 20, 21], [22, 23, 24], [25, 26, 27]]]) + tensor = np.array( + [ + [[1, 2, 3], [4, 5, 6], [7, 8, 9]], + [[10, 11, 12], [13, 14, 15], [16, 17, 18]], + [[19, 20, 21], [22, 23, 24], [25, 26, 27]], + ] + ) out = np.zeros((3, 3, 3)) slices = list() for slc in tools.slice1d_along_axis((3, 3, 3), axis=-1): slices.append(slc) out[slc] = tensor[slc] - slc_out = [(0, 0, slice(None, None, None)), - (0, 1, slice(None, None, None)), - (0, 2, slice(None, None, None)), - (1, 0, slice(None, None, None)), - (1, 1, slice(None, None, None)), - (1, 2, slice(None, None, None)), - (2, 0, slice(None, None, None)), - (2, 1, slice(None, None, None)), - (2, 2, slice(None, None, None))] + slc_out = [ + (0, 0, slice(None, None, None)), + (0, 1, slice(None, None, None)), + (0, 2, slice(None, None, None)), + (1, 0, slice(None, None, None)), + (1, 1, slice(None, None, None)), + (1, 2, slice(None, None, None)), + (2, 0, slice(None, None, None)), + (2, 1, slice(None, None, None)), + (2, 2, slice(None, None, None)), + ] assert_equal(slc_out, slices) assert_allclose(tensor, out, atol=1e-10) @@ -53,10 +59,60 @@ def test_fillgaps(self): d1 = tools.fillgaps(arr.copy()) d2 = tools.fillgaps(arr.copy(), maxgap=1) - out1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6.75, 4.5, 2.25, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - out2 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, np.nan, np.nan, np.nan, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) + out1 = np.array( + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 6.75, + 4.5, + 2.25, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + ] + ) + out2 = np.array( + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + np.nan, + np.nan, + np.nan, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + ] + ) assert_allclose(d1, out1, atol=1e-10) assert_allclose(d2, out2, atol=1e-10) @@ -68,10 +124,66 @@ def test_interpgaps(self): d1 = tools.interpgaps(arr.copy(), t, extrapFlg=True) d2 = tools.interpgaps(arr.copy(), t, maxgap=1) - out1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6.75, 4.5, 2.25, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9]) - out2 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, np.nan, np.nan, np.nan, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, np.nan, np.nan, np.nan]) + out1 = np.array( + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 6.75, + 4.5, + 2.25, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 9, + 9, + 9, + ] + ) + out2 = np.array( + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + np.nan, + np.nan, + np.nan, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + np.nan, + np.nan, + np.nan, + ] + ) assert_allclose(d1, out1, atol=1e-10) assert_allclose(d2, out2, atol=1e-10) @@ -82,20 +194,70 @@ def test_medfiltnan(self): d = tools.medfiltnan(a, [1, 5], thresh=3) - out = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 8, 9, np.nan, np.nan, np.nan, 2, 3, 4, 5, - 6, 7, 7, 7], - [0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 8, 9, np.nan, np.nan, np.nan, 2, 3, 4, 5, - 6, 7, 7, 7]]) + out = np.array( + [ + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 7, + 7, + 8, + 9, + np.nan, + np.nan, + np.nan, + 2, + 3, + 4, + 5, + 6, + 7, + 7, + 7, + ], + [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 7, + 7, + 8, + 9, + np.nan, + np.nan, + np.nan, + 2, + 3, + 4, + 5, + 6, + 7, + 7, + 7, + ], + ] + ) assert_allclose(d, out, atol=1e-10) def test_deg_conv(self): d = tools.convert_degrees(self.array) - out = np.array([90., 89., 88., 87., 86., 85., 84., 83., 82., 81.]) + out = np.array([90.0, 89.0, 88.0, 87.0, 86.0, 85.0, 84.0, 83.0, 82.0, 81.0]) assert_allclose(d, out, atol=1e-10) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/dolfyn/test_vs_nortek.py b/mhkit/tests/dolfyn/test_vs_nortek.py index ac54e99e1..f1abdd406 100644 --- a/mhkit/tests/dolfyn/test_vs_nortek.py +++ b/mhkit/tests/dolfyn/test_vs_nortek.py @@ -14,42 +14,40 @@ def load_nortek_matfile(filename): - data = sio.loadmat(filename, - struct_as_record=False, - squeeze_me=True) - d = data['Data'] + data = sio.loadmat(filename, struct_as_record=False, squeeze_me=True) + d = data["Data"] # print(d._fieldnames) - burst = 'Burst' - bt = 'BottomTrack' + burst = "Burst" + bt = "BottomTrack" - beam = ['_VelBeam1', '_VelBeam2', '_VelBeam3', '_VelBeam4'] - b5 = 'IBurst_VelBeam5' - inst = ['_VelX', '_VelY', '_VelZ1', '_VelZ2'] - earth = ['_VelEast', '_VelNorth', '_VelUp1', '_VelUp2'] - axis = {'beam': beam, 'inst': inst, 'earth': earth} - AHRS = 'Burst_AHRSRotationMatrix' # , 'IBurst_AHRSRotationMatrix'] + beam = ["_VelBeam1", "_VelBeam2", "_VelBeam3", "_VelBeam4"] + b5 = "IBurst_VelBeam5" + inst = ["_VelX", "_VelY", "_VelZ1", "_VelZ2"] + earth = ["_VelEast", "_VelNorth", "_VelUp1", "_VelUp2"] + axis = {"beam": beam, "inst": inst, "earth": earth} + AHRS = "Burst_AHRSRotationMatrix" # , 'IBurst_AHRSRotationMatrix'] - vel = {'beam': {}, 'inst': {}, 'earth': {}} + vel = {"beam": {}, "inst": {}, "earth": {}} for ky in vel.keys(): for i in range(len(axis[ky])): - vel[ky][i] = np.transpose(getattr(d, burst+axis[ky][i])) - vel[ky] = np.stack((vel[ky][0], vel[ky][1], - vel[ky][2], vel[ky][3]), axis=0) + vel[ky][i] = np.transpose(getattr(d, burst + axis[ky][i])) + vel[ky] = np.stack((vel[ky][0], vel[ky][1], vel[ky][2], vel[ky][3]), axis=0) if AHRS in d._fieldnames: - vel['omat'] = np.transpose(getattr(d, AHRS)) + vel["omat"] = np.transpose(getattr(d, AHRS)) if b5 in d._fieldnames: - vel['b5'] = np.transpose(getattr(d, b5)) - #vel['omat5'] = getattr(d, AHRS[1]) + vel["b5"] = np.transpose(getattr(d, b5)) + # vel['omat5'] = getattr(d, AHRS[1]) - if bt+beam[0] in d._fieldnames: - vel_bt = {'beam': {}, 'inst': {}, 'earth': {}} + if bt + beam[0] in d._fieldnames: + vel_bt = {"beam": {}, "inst": {}, "earth": {}} for ky in vel_bt.keys(): for i in range(len(axis[ky])): - vel_bt[ky][i] = np.transpose(getattr(d, bt+axis[ky][i])) - vel_bt[ky] = np.stack((vel_bt[ky][0], vel_bt[ky][1], - vel_bt[ky][2], vel_bt[ky][3]), axis=0) + vel_bt[ky][i] = np.transpose(getattr(d, bt + axis[ky][i])) + vel_bt[ky] = np.stack( + (vel_bt[ky][0], vel_bt[ky][1], vel_bt[ky][2], vel_bt[ky][3]), axis=0 + ) return vel, vel_bt else: @@ -62,60 +60,61 @@ def rotate(axis): # Sig1000_IMU.ad2cp no userdata td_sig_i = rotate2(tr.dat_sig_i, axis, inplace=False) # VelEchoBT01.ad2cp - td_sig_ieb = rotate2(tr.dat_sig_ieb, axis, - inplace=False) + td_sig_ieb = rotate2(tr.dat_sig_ieb, axis, inplace=False) # Sig500_Echo.ad2cp - td_sig_ie = rotate2(tr.dat_sig_ie, axis, - inplace=False) + td_sig_ie = rotate2(tr.dat_sig_ie, axis, inplace=False) - td_sig_vel = load_nortek_matfile(base.rfnm('BenchFile01.mat')) - td_sig_i_vel = load_nortek_matfile(base.rfnm('Sig1000_IMU.mat')) - td_sig_ieb_vel, vel_bt = load_nortek_matfile(base.rfnm('VelEchoBT01.mat')) - td_sig_ie_vel = load_nortek_matfile(base.rfnm('Sig500_Echo.mat')) + td_sig_vel = load_nortek_matfile(base.rfnm("BenchFile01.mat")) + td_sig_i_vel = load_nortek_matfile(base.rfnm("Sig1000_IMU.mat")) + td_sig_ieb_vel, vel_bt = load_nortek_matfile(base.rfnm("VelEchoBT01.mat")) + td_sig_ie_vel = load_nortek_matfile(base.rfnm("Sig500_Echo.mat")) nens = 100 # ARHS inst2earth orientation matrix check # Checks the 1,1 element because the nortek orientmat's shape is [9,:] as # opposed to [3,3,:] - if axis == 'inst': - assert_allclose(td_sig_i.orientmat[0][0].values, - td_sig_i_vel['omat'][0, :nens], atol=1e-7) - assert_allclose(td_sig_ieb.orientmat[0][0].values, - td_sig_ieb_vel['omat'][0, :][..., :nens], atol=1e-7) + if axis == "inst": + assert_allclose( + td_sig_i.orientmat[0][0].values, td_sig_i_vel["omat"][0, :nens], atol=1e-7 + ) + assert_allclose( + td_sig_ieb.orientmat[0][0].values, + td_sig_ieb_vel["omat"][0, :][..., :nens], + atol=1e-7, + ) # 4-beam velocity assert_allclose(td_sig.vel.values, td_sig_vel[axis][..., :nens], atol=1e-5) - assert_allclose(td_sig_i.vel.values, - td_sig_i_vel[axis][..., :nens], atol=5e-3) - assert_allclose(td_sig_ieb.vel.values, - td_sig_ieb_vel[axis][..., :nens], atol=5e-3) - assert_allclose(td_sig_ie.vel.values, - td_sig_ie_vel[axis][..., :nens], atol=1e-5) + assert_allclose(td_sig_i.vel.values, td_sig_i_vel[axis][..., :nens], atol=5e-3) + assert_allclose(td_sig_ieb.vel.values, td_sig_ieb_vel[axis][..., :nens], atol=5e-3) + assert_allclose(td_sig_ie.vel.values, td_sig_ie_vel[axis][..., :nens], atol=1e-5) # 5th-beam velocity - if axis == 'beam': - assert_allclose(td_sig_i.vel_b5.values, - td_sig_i_vel['b5'][..., :nens], atol=1e-5) - assert_allclose(td_sig_ieb.vel_b5.values, - td_sig_ieb_vel['b5'][..., :nens], atol=1e-5) - assert_allclose(td_sig_ie.vel_b5.values, - td_sig_ie_vel['b5'][..., :nens], atol=1e-5) + if axis == "beam": + assert_allclose( + td_sig_i.vel_b5.values, td_sig_i_vel["b5"][..., :nens], atol=1e-5 + ) + assert_allclose( + td_sig_ieb.vel_b5.values, td_sig_ieb_vel["b5"][..., :nens], atol=1e-5 + ) + assert_allclose( + td_sig_ie.vel_b5.values, td_sig_ie_vel["b5"][..., :nens], atol=1e-5 + ) # bottom-track - assert_allclose(td_sig_ieb.vel_bt.values, - vel_bt[axis][..., :nens], atol=5e-3) + assert_allclose(td_sig_ieb.vel_bt.values, vel_bt[axis][..., :nens], atol=5e-3) class nortek_testcase(unittest.TestCase): def test_rotate2_beam(self): - rotate('beam') + rotate("beam") def test_rotate2_inst(self): - rotate('inst') + rotate("inst") def test_rotate2_earth(self): - rotate('earth') + rotate("earth") -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/loads/test_extreme.py b/mhkit/tests/loads/test_extreme.py index 0454296f9..e0ede2e93 100644 --- a/mhkit/tests/loads/test_extreme.py +++ b/mhkit/tests/loads/test_extreme.py @@ -44,8 +44,7 @@ def _example_crest_analysis(self, t, signal): def test_global_peaks(self): peaks_t, peaks_val = loads.extreme.global_peaks(self.t, self.signal) - test_crests, test_crests_ind = self._example_crest_analysis( - self.t, self.signal) + test_crests, test_crests_ind = self._example_crest_analysis(self.t, self.signal) assert_allclose(peaks_t, self.t[test_crests_ind]) assert_allclose(peaks_val, test_crests) diff --git a/mhkit/tests/loads/test_loads.py b/mhkit/tests/loads/test_loads.py index 5befa99d9..748f7ee4b 100644 --- a/mhkit/tests/loads/test_loads.py +++ b/mhkit/tests/loads/test_loads.py @@ -13,123 +13,136 @@ import os testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir,relpath('../../../examples/data/loads'))) +datadir = normpath(join(testdir, relpath("../../../examples/data/loads"))) -class TestLoads(unittest.TestCase): +class TestLoads(unittest.TestCase): @classmethod def setUpClass(self): - loads_data_file = join(datadir, "loads_data_dict.json") - with open(loads_data_file, 'r') as fp: + with open(loads_data_file, "r") as fp: data_dict = json.load(fp) # convert dictionaries into dataframes - data = { - key: pd.DataFrame(data_dict[key]) - for key in data_dict - } + data = {key: pd.DataFrame(data_dict[key]) for key in data_dict} self.data = data self.fatigue_tower = 3804 self.fatigue_blade = 1388 # import blade cal data - blade_data = pd.read_csv(join(datadir,'blade_cal.csv'),header=None) - blade_data.columns = ['flap_raw','edge_raw','flap_scaled','edge_scaled'] + blade_data = pd.read_csv(join(datadir, "blade_cal.csv"), header=None) + blade_data.columns = ["flap_raw", "edge_raw", "flap_scaled", "edge_scaled"] self.blade_data = blade_data - self.flap_offset = 9.19906E-05 + self.flap_offset = 9.19906e-05 self.edge_offset = -0.000310854 - self.blade_matrix = [1034671.4,-126487.28,82507.959,1154090.7] + self.blade_matrix = [1034671.4, -126487.28, 82507.959, 1154090.7] def test_bin_statistics(self): # create array containg wind speeds to use as bin edges - bin_edges = np.arange(3,26,1) + bin_edges = np.arange(3, 26, 1) # Apply function to calculate means - load_means =self.data['means'] - bin_against = load_means['uWind_80m'] - [b_means, b_means_std] = loads.general.bin_statistics(load_means, bin_against, bin_edges) + load_means = self.data["means"] + bin_against = load_means["uWind_80m"] + [b_means, b_means_std] = loads.general.bin_statistics( + load_means, bin_against, bin_edges + ) - assert_frame_equal(self.data['bin_means'],b_means) - assert_frame_equal(self.data['bin_means_std'],b_means_std) + assert_frame_equal(self.data["bin_means"], b_means) + assert_frame_equal(self.data["bin_means_std"], b_means_std) def test_blade_moments(self): - flap_raw = self.blade_data['flap_raw'] + flap_raw = self.blade_data["flap_raw"] flap_offset = self.flap_offset - edge_raw = self.blade_data['edge_raw'] + edge_raw = self.blade_data["edge_raw"] edge_offset = self.edge_offset - M_flap, M_edge = loads.general.blade_moments(self.blade_matrix,flap_offset,flap_raw,edge_offset,edge_raw) - - for i,j in zip(M_flap,self.blade_data['flap_scaled']): - self.assertAlmostEqual(i,j,places=1) - for i,j in zip(M_edge,self.blade_data['edge_scaled']): - self.assertAlmostEqual(i,j,places=1) + M_flap, M_edge = loads.general.blade_moments( + self.blade_matrix, flap_offset, flap_raw, edge_offset, edge_raw + ) + for i, j in zip(M_flap, self.blade_data["flap_scaled"]): + self.assertAlmostEqual(i, j, places=1) + for i, j in zip(M_edge, self.blade_data["edge_scaled"]): + self.assertAlmostEqual(i, j, places=1) def test_damage_equivalent_loads(self): - loads_data = self.data['loads'] - tower_load = loads_data['TB_ForeAft'] - blade_load = loads_data['BL1_FlapMom'] - DEL_tower = loads.general.damage_equivalent_load(tower_load, 4,bin_num=100,data_length=600) - DEL_blade = loads.general.damage_equivalent_load(blade_load,10,bin_num=100,data_length=600) - - self.assertAlmostEqual(DEL_tower,self.fatigue_tower,delta=self.fatigue_tower*0.04) - self.assertAlmostEqual(DEL_blade,self.fatigue_blade,delta=self.fatigue_blade*0.04) - + loads_data = self.data["loads"] + tower_load = loads_data["TB_ForeAft"] + blade_load = loads_data["BL1_FlapMom"] + DEL_tower = loads.general.damage_equivalent_load( + tower_load, 4, bin_num=100, data_length=600 + ) + DEL_blade = loads.general.damage_equivalent_load( + blade_load, 10, bin_num=100, data_length=600 + ) + + self.assertAlmostEqual( + DEL_tower, self.fatigue_tower, delta=self.fatigue_tower * 0.04 + ) + self.assertAlmostEqual( + DEL_blade, self.fatigue_blade, delta=self.fatigue_blade * 0.04 + ) def test_plot_statistics(self): # Define path - savepath = abspath(join(testdir, 'test_scatplotter.png')) + savepath = abspath(join(testdir, "test_scatplotter.png")) # Generate plot - loads.graphics.plot_statistics( self.data['means']['uWind_80m'], - self.data['means']['TB_ForeAft'], - self.data['maxs']['TB_ForeAft'], - self.data['mins']['TB_ForeAft'], - y_stdev=self.data['std']['TB_ForeAft'], - x_label='Wind Speed [m/s]', - y_label='Tower Base Mom [kNm]', - save_path=savepath) + loads.graphics.plot_statistics( + self.data["means"]["uWind_80m"], + self.data["means"]["TB_ForeAft"], + self.data["maxs"]["TB_ForeAft"], + self.data["mins"]["TB_ForeAft"], + y_stdev=self.data["std"]["TB_ForeAft"], + x_label="Wind Speed [m/s]", + y_label="Tower Base Mom [kNm]", + save_path=savepath, + ) self.assertTrue(isfile(savepath)) - def test_plot_bin_statistics(self): # Define signal name, path, and bin centers - savepath = abspath(join(testdir, 'test_binplotter.png')) - bin_centers = np.arange(3.5,25.5,step=1) - signal_name = 'TB_ForeAft' + savepath = abspath(join(testdir, "test_binplotter.png")) + bin_centers = np.arange(3.5, 25.5, step=1) + signal_name = "TB_ForeAft" # Specify inputs to be used in plotting - bin_mean = self.data['bin_means'][signal_name] - bin_max = self.data['bin_maxs'][signal_name] - bin_min = self.data['bin_mins'][signal_name] - bin_mean_std = self.data['bin_means_std'][signal_name] - bin_max_std = self.data['bin_maxs_std'][signal_name] - bin_min_std = self.data['bin_mins_std'][signal_name] + bin_mean = self.data["bin_means"][signal_name] + bin_max = self.data["bin_maxs"][signal_name] + bin_min = self.data["bin_mins"][signal_name] + bin_mean_std = self.data["bin_means_std"][signal_name] + bin_max_std = self.data["bin_maxs_std"][signal_name] + bin_min_std = self.data["bin_mins_std"][signal_name] # Generate plot - loads.graphics.plot_bin_statistics(bin_centers, - bin_mean, bin_max, bin_min, - bin_mean_std, bin_max_std, bin_min_std, - x_label='Wind Speed [m/s]', - y_label=signal_name, - title='Binned Stats', - save_path=savepath) + loads.graphics.plot_bin_statistics( + bin_centers, + bin_mean, + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + x_label="Wind Speed [m/s]", + y_label=signal_name, + title="Binned Stats", + save_path=savepath, + ) self.assertTrue(isfile(savepath)) -class TestWDRT(unittest.TestCase): +class TestWDRT(unittest.TestCase): @classmethod def setUpClass(self): mler_file = join(datadir, "mler.csv") - mler_data = pd.read_csv(mler_file,index_col=None) - mler_tsfile = join(datadir,"mler_ts.csv") - mler_ts = pd.read_csv(mler_tsfile,index_col=0) + mler_data = pd.read_csv(mler_file, index_col=None) + mler_tsfile = join(datadir, "mler_ts.csv") + mler_ts = pd.read_csv(mler_tsfile, index_col=0) self.mler_ts = mler_ts - self.wave_freq = np.linspace( 0.,1,500) + self.wave_freq = np.linspace(0.0, 1, 500) self.mler = mler_data self.sim = loads.extreme.mler_simulation() @@ -138,45 +151,64 @@ def test_mler_coefficients(self): Tp = 15.1 # time period of waves pm = resource.pierson_moskowitz_spectrum(self.wave_freq, Tp, Hs) mler_data = loads.extreme.mler_coefficients( - self.mler['RAO'].astype(complex), pm, 1) + self.mler["RAO"].astype(complex), pm, 1 + ) mler_data.reset_index(drop=True, inplace=True) - assert_series_equal(mler_data['WaveSpectrum'], self.mler['Res_Spec'], - check_exact=False, check_names=False, atol=0.001) - assert_series_equal(mler_data['Phase'], self.mler['phase'], - check_exact=False, check_names=False, rtol=0.001) + assert_series_equal( + mler_data["WaveSpectrum"], + self.mler["Res_Spec"], + check_exact=False, + check_names=False, + atol=0.001, + ) + assert_series_equal( + mler_data["Phase"], + self.mler["phase"], + check_exact=False, + check_names=False, + rtol=0.001, + ) def test_mler_simulation(self): T = np.linspace(-150, 150, 301) X = np.linspace(-300, 300, 601) sim = loads.extreme.mler_simulation() - assert_array_almost_equal(sim['X'], X) - assert_array_almost_equal(sim['T'], T) + assert_array_almost_equal(sim["X"], X) + assert_array_almost_equal(sim["T"], T) def test_mler_wave_amp_normalize(self): - wave_freq = np.linspace(0., 1, 500) + wave_freq = np.linspace(0.0, 1, 500) mler = pd.DataFrame(index=wave_freq) - mler['WaveSpectrum'] = self.mler['Res_Spec'].values - mler['Phase'] = self.mler['phase'].values + mler["WaveSpectrum"] = self.mler["Res_Spec"].values + mler["Phase"] = self.mler["phase"].values k = resource.wave_number(wave_freq, 70) k = k.fillna(0) mler_norm = loads.extreme.mler_wave_amp_normalize( - 4.5*1.9, mler, self.sim, k.k.values) + 4.5 * 1.9, mler, self.sim, k.k.values + ) mler_norm.reset_index(drop=True, inplace=True) - assert_series_equal(mler_norm['WaveSpectrum'], self.mler['Norm_Spec'],check_exact=False,atol=0.001,check_names=False) + assert_series_equal( + mler_norm["WaveSpectrum"], + self.mler["Norm_Spec"], + check_exact=False, + atol=0.001, + check_names=False, + ) def test_mler_export_time_series(self): - wave_freq = np.linspace(0., 1, 500) + wave_freq = np.linspace(0.0, 1, 500) mler = pd.DataFrame(index=wave_freq) - mler['WaveSpectrum'] = self.mler['Norm_Spec'].values - mler['Phase'] = self.mler['phase'].values + mler["WaveSpectrum"] = self.mler["Norm_Spec"].values + mler["Phase"] = self.mler["phase"].values k = resource.wave_number(wave_freq, 70) k = k.fillna(0) - RAO = self.mler['RAO'].astype(complex) + RAO = self.mler["RAO"].astype(complex) mler_ts = loads.extreme.mler_export_time_series( - RAO.values, mler, self.sim, k.k.values) + RAO.values, mler, self.sim, k.k.values + ) assert_frame_equal(self.mler_ts, mler_ts, atol=0.0001) @@ -188,8 +220,7 @@ def test_return_year_value(self): for y in return_years: for stp in short_term_periods: with self.subTest(year=y, short_term=stp): - val = loads.extreme.return_year_value( - dist.ppf, y, stp) + val = loads.extreme.return_year_value(dist.ppf, y, stp) want = 4.5839339 self.assertAlmostEqual(want, val, 5) @@ -200,20 +231,29 @@ def test_longterm_extreme(self): w = [0.5, 0.5] lte = loads.extreme.full_seastate_long_term_extreme(ste, w) x = np.random.rand() - assert_allclose(lte.cdf(x), w[0]*ste[0].cdf(x) + w[1]*ste[1].cdf(x)) + assert_allclose(lte.cdf(x), w[0] * ste[0].cdf(x) + w[1] * ste[1].cdf(x)) def test_shortterm_extreme(self): - methods = ['peaks_weibull', 'peaks_weibull_tail_fit', - 'peaks_over_threshold', 'block_maxima_gev', - 'block_maxima_gumbel'] + methods = [ + "peaks_weibull", + "peaks_weibull_tail_fit", + "peaks_over_threshold", + "block_maxima_gev", + "block_maxima_gumbel", + ] filename = "time_series_for_extremes.txt" data = np.loadtxt(os.path.join(datadir, filename)) t = data[:, 0] data = data[:, 1] t_st = 1.0 * 60 * 60 x = 1.6 - cdfs_1 = [0.006750456316537166, 0.5921659393757381, 0.6156789503874247, - 0.6075807789811315, 0.9033574618279865] + cdfs_1 = [ + 0.006750456316537166, + 0.5921659393757381, + 0.6156789503874247, + 0.6075807789811315, + 0.9033574618279865, + ] for method, cdf_1 in zip(methods, cdfs_1): ste = loads.extreme.ste(t, data, t_st, method) assert_allclose(ste.cdf(x), cdf_1) @@ -226,5 +266,6 @@ def test_automatic_threshold(self): assert np.isclose(pct, 0.9913) assert np.isclose(threshold, 1.032092) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/mooring/test_mooring.py b/mhkit/tests/mooring/test_mooring.py index 1ba09f42d..d09a7aff2 100644 --- a/mhkit/tests/mooring/test_mooring.py +++ b/mhkit/tests/mooring/test_mooring.py @@ -5,41 +5,55 @@ import mhkit.mooring as mooring testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir, '..', '..', '..', - 'examples', 'data', 'mooring')) +datadir = normpath(join(testdir, "..", "..", "..", "examples", "data", "mooring")) class TestMooring(unittest.TestCase): - def test_moordyn_out(self): - fpath = join(datadir, 'Test.MD.out') + fpath = join(datadir, "Test.MD.out") inputpath = join(datadir, "TestInput.MD.dat") ds = mooring.io.read_moordyn(fpath, input_file=inputpath) isinstance(ds, xr.Dataset) def test_lay_length(self): - fpath = join(datadir, 'line1_test.nc') + fpath = join(datadir, "line1_test.nc") ds = xr.open_dataset(fpath) laylengths = mooring.lay_length(ds, depth=-56, tolerance=0.25) laylength = laylengths.mean().values self.assertAlmostEqual(laylength, 45.0, 1) def test_animate_3d(self): - fpath = join(datadir, 'line1_test.nc') + fpath = join(datadir, "line1_test.nc") ds = xr.open_dataset(fpath) dsani = ds.sel(Time=slice(0, 10)) - ani = mooring.graphics.animate(dsani, dimension='3d', interval=10, repeat=True, - xlabel='X-axis', ylabel='Y-axis', zlabel='Depth [m]', title='Mooring Line Example') + ani = mooring.graphics.animate( + dsani, + dimension="3d", + interval=10, + repeat=True, + xlabel="X-axis", + ylabel="Y-axis", + zlabel="Depth [m]", + title="Mooring Line Example", + ) isinstance(ani, FuncAnimation) def test_animate_2d(self): - fpath = join(datadir, 'line1_test.nc') + fpath = join(datadir, "line1_test.nc") ds = xr.open_dataset(fpath) dsani = ds.sel(Time=slice(0, 10)) - ani2d = mooring.graphics.animate(dsani, dimension='2d', xaxis='x', yaxis='z', repeat=True, - xlabel='X-axis', ylabel='Depth [m]', title='Mooring Line Example') + ani2d = mooring.graphics.animate( + dsani, + dimension="2d", + xaxis="x", + yaxis="z", + repeat=True, + xlabel="X-axis", + ylabel="Depth [m]", + title="Mooring Line Example", + ) isinstance(ani2d, FuncAnimation) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/power/test_power.py b/mhkit/tests/power/test_power.py index ecc1cfa0f..d5e54f2c9 100644 --- a/mhkit/tests/power/test_power.py +++ b/mhkit/tests/power/test_power.py @@ -1,4 +1,3 @@ - from os.path import abspath, dirname, join, isfile, normpath, relpath import mhkit.power as power import pandas as pd @@ -8,20 +7,19 @@ testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir, relpath('../../../examples/data/power'))) +datadir = normpath(join(testdir, relpath("../../../examples/data/power"))) class TestDevice(unittest.TestCase): - @classmethod def setUpClass(self): self.t = 600 fs = 1000 sample_frequency = 1000 # = fs - self.samples = np.linspace(0, self.t, int(fs*self.t), endpoint=False) + self.samples = np.linspace(0, self.t, int(fs * self.t), endpoint=False) self.frequency = 60 - self.freq_array = np.ones(len(self.samples))*60 - harmonics_int = np.arange(0, 60*60, 5) + self.freq_array = np.ones(len(self.samples)) * 60 + harmonics_int = np.arange(0, 60 * 60, 5) self.harmonics_int = harmonics_int # since this is an idealized sin wave, the interharmonics should be zero self.interharmonic = np.zeros(len(harmonics_int)) @@ -31,7 +29,9 @@ def setUpClass(self): # harmonic groups should be equal to every 12th harmonic in this idealized example self.harmonic_groups = self.harmonics_vals[0::12] - self.thcd = 0.0 # Since this is an idealized sin wave, there should be no distortion + self.thcd = ( + 0.0 # Since this is an idealized sin wave, there should be no distortion + ) self.signal = np.sin(2 * np.pi * self.frequency * self.samples) @@ -43,7 +43,6 @@ def tearDownClass(self): pass def test_harmonics_sine_wave(self): - current = pd.Series(self.signal, index=self.samples) harmonics = power.quality.harmonics(current, 1000, self.frequency) @@ -52,29 +51,26 @@ def test_harmonics_sine_wave(self): def test_harmonic_subgroup_sine_wave(self): current = pd.Series(self.signal, index=self.samples) - harmonics = pd.DataFrame(self.harmonics_vals, - index=self.harmonics_int) + harmonics = pd.DataFrame(self.harmonics_vals, index=self.harmonics_int) hsg = power.quality.harmonic_subgroups(harmonics, self.frequency) for i, j in zip(hsg.values, self.harmonic_groups): self.assertAlmostEqual(i[0], j, 1) def test_TCHD_sine_wave(self): current = pd.Series(self.signal, index=self.samples) - harmonics = pd.DataFrame(self.harmonics_vals, - index=self.harmonics_int) + harmonics = pd.DataFrame(self.harmonics_vals, index=self.harmonics_int) hsg = power.quality.harmonic_subgroups(harmonics, self.frequency) TCHD = power.quality.total_harmonic_current_distortion( - hsg, 18.8) # had to just put a random rated current in here + hsg, 18.8 + ) # had to just put a random rated current in here self.assertAlmostEqual(TCHD.values[0], self.thcd) def test_interharmonics_sine_wave(self): current = pd.Series(self.signal, index=self.samples) - harmonics = pd.DataFrame(self.harmonics_vals, - index=self.harmonics_int) + harmonics = pd.DataFrame(self.harmonics_vals, index=self.harmonics_int) - inter_harmonics = power.quality.interharmonics( - harmonics, self.frequency) + inter_harmonics = power.quality.interharmonics(harmonics, self.frequency) for i, j in zip(inter_harmonics.values, self.interharmonic): self.assertAlmostEqual(i[0], j, 1) @@ -87,36 +83,31 @@ def test_instfreq(self): self.assertAlmostEqual(i[0], self.frequency, 1) def test_dc_power_DataFrame(self): - current = pd.DataFrame(self.current_data, columns=['A1', 'A2', 'A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1', 'V2', 'V3']) + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) P = power.characteristics.dc_power(voltage, current) - self.assertEqual(P.sum()['Gross'], - (voltage.values * current.values).sum()) + self.assertEqual(P.sum()["Gross"], (voltage.values * current.values).sum()) def test_dc_power_Series(self): - current = pd.DataFrame(self.current_data, columns=['A1', 'A2', 'A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1', 'V2', 'V3']) - P = power.characteristics.dc_power(voltage['V1'], current['A1']) - self.assertEqual(P.sum()['Gross'], sum(voltage['V1'] * current['A1'])) + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) + P = power.characteristics.dc_power(voltage["V1"], current["A1"]) + self.assertEqual(P.sum()["Gross"], sum(voltage["V1"] * current["A1"])) def test_ac_power_three_phase(self): - current = pd.DataFrame(self.current_data, columns=['A1', 'A2', 'A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1', 'V2', 'V3']) - - P1 = power.characteristics.ac_power_three_phase( - voltage, current, 1, False) - P1b = power.characteristics.ac_power_three_phase( - voltage, current, 0.5, False) - P2 = power.characteristics.ac_power_three_phase( - voltage, current, 1, True) - P2b = power.characteristics.ac_power_three_phase( - voltage, current, 0.5, True) + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) + + P1 = power.characteristics.ac_power_three_phase(voltage, current, 1, False) + P1b = power.characteristics.ac_power_three_phase(voltage, current, 0.5, False) + P2 = power.characteristics.ac_power_three_phase(voltage, current, 1, True) + P2b = power.characteristics.ac_power_three_phase(voltage, current, 0.5, True) self.assertEqual(P1.sum().iloc[0], 584) - self.assertEqual(P1b.sum().iloc[0], 584/2) + self.assertEqual(P1b.sum().iloc[0], 584 / 2) self.assertAlmostEqual(P2.sum().iloc[0], 1011.518, 2) - self.assertAlmostEqual(P2b.sum().iloc[0], 1011.518/2, 2) + self.assertAlmostEqual(P2b.sum().iloc[0], 1011.518 / 2, 2) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/river/test_io.py b/mhkit/tests/river/test_io.py index 305c0e404..ba765f7d0 100644 --- a/mhkit/tests/river/test_io.py +++ b/mhkit/tests/river/test_io.py @@ -13,21 +13,19 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir, '..', '..', '..', - 'examples', 'data', 'river')) +datadir = normpath(join(testdir, "..", "..", "..", "examples", "data", "river")) class TestIO(unittest.TestCase): - @classmethod def setUpClass(self): - d3ddatadir = normpath(join(datadir, 'd3d')) + d3ddatadir = normpath(join(datadir, "d3d")) - filename = 'turbineTest_map.nc' + filename = "turbineTest_map.nc" self.d3d_flume_data = netCDF4.Dataset(join(d3ddatadir, filename)) @classmethod @@ -35,97 +33,92 @@ def tearDownClass(self): pass def test_load_usgs_data_instantaneous(self): - file_name = join(datadir, 'USGS_08313000_Jan2019_instantaneous.json') + file_name = join(datadir, "USGS_08313000_Jan2019_instantaneous.json") data = river.io.usgs.read_usgs_file(file_name) - self.assertEqual(data.columns, ['Discharge, cubic feet per second']) + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) self.assertEqual(data.shape, (2972, 1)) # 4 data points are missing def test_load_usgs_data_daily(self): - file_name = join(datadir, 'USGS_08313000_Jan2019_daily.json') + file_name = join(datadir, "USGS_08313000_Jan2019_daily.json") data = river.io.usgs.read_usgs_file(file_name) - expected_index = pd.date_range('2019-01-01', '2019-01-31', freq='D') - self.assertEqual(data.columns, ['Discharge, cubic feet per second']) - self.assertEqual( - (data.index == expected_index.tz_localize('UTC')).all(), True) + expected_index = pd.date_range("2019-01-01", "2019-01-31", freq="D") + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) + self.assertEqual((data.index == expected_index.tz_localize("UTC")).all(), True) self.assertEqual(data.shape, (31, 1)) def test_request_usgs_data_daily(self): - data = river.io.usgs.request_usgs_data(station="15515500", - parameter='00060', - start_date='2009-08-01', - end_date='2009-08-10', - data_type='Daily') - self.assertEqual(data.columns, ['Discharge, cubic feet per second']) + data = river.io.usgs.request_usgs_data( + station="15515500", + parameter="00060", + start_date="2009-08-01", + end_date="2009-08-10", + data_type="Daily", + ) + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) self.assertEqual(data.shape, (10, 1)) def test_request_usgs_data_instant(self): - data = river.io.usgs.request_usgs_data(station="15515500", - parameter='00060', - start_date='2009-08-01', - end_date='2009-08-10', - data_type='Instantaneous') - self.assertEqual(data.columns, ['Discharge, cubic feet per second']) + data = river.io.usgs.request_usgs_data( + station="15515500", + parameter="00060", + start_date="2009-08-01", + end_date="2009-08-10", + data_type="Instantaneous", + ) + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) # Every 15 minutes or 4 times per hour - self.assertEqual(data.shape, (10*24*4, 1)) + self.assertEqual(data.shape, (10 * 24 * 4, 1)) def test_get_all_time(self): data = self.d3d_flume_data seconds_run = river.io.d3d.get_all_time(data) seconds_run_expected = np.ndarray( - shape=(5,), buffer=np.array([0, 60, 120, 180, 240]), dtype=int) + shape=(5,), buffer=np.array([0, 60, 120, 180, 240]), dtype=int + ) np.testing.assert_array_equal(seconds_run, seconds_run_expected) def test_convert_time(self): data = self.d3d_flume_data time_index = 2 - seconds_run = river.io.d3d.index_to_seconds( - data, time_index=time_index) + seconds_run = river.io.d3d.index_to_seconds(data, time_index=time_index) seconds_run_expected = 120 self.assertEqual(seconds_run, seconds_run_expected) seconds_run = 60 - time_index = river.io.d3d.seconds_to_index( - data, seconds_run=seconds_run) + time_index = river.io.d3d.seconds_to_index(data, seconds_run=seconds_run) time_index_expected = 1 self.assertEqual(time_index, time_index_expected) seconds_run = 62 - time_index = river.io.d3d.seconds_to_index( - data, seconds_run=seconds_run) + time_index = river.io.d3d.seconds_to_index(data, seconds_run=seconds_run) time_index_expected = 1 - output_expected = f'ERROR: invalid seconds_run. Closest seconds_run found {time_index_expected}' + output_expected = f"ERROR: invalid seconds_run. Closest seconds_run found {time_index_expected}" self.assertWarns(UserWarning) def test_layer_data(self): data = self.d3d_flume_data - variable = ['ucx', 's1'] + variable = ["ucx", "s1"] for var in variable: layer = 2 time_index = 3 - layer_data = river.io.d3d.get_layer_data( - data, var, layer, time_index) + layer_data = river.io.d3d.get_layer_data(data, var, layer, time_index) layer_compare = 2 time_index_compare = 4 - layer_data_expected = river.io.d3d.get_layer_data(data, - var, layer_compare, - time_index_compare) - - assert_array_almost_equal( - layer_data.x, layer_data_expected.x, decimal=2) - assert_array_almost_equal( - layer_data.y, layer_data_expected.y, decimal=2) - assert_array_almost_equal( - layer_data.v, layer_data_expected.v, decimal=2) + layer_data_expected = river.io.d3d.get_layer_data( + data, var, layer_compare, time_index_compare + ) + assert_array_almost_equal(layer_data.x, layer_data_expected.x, decimal=2) + assert_array_almost_equal(layer_data.y, layer_data_expected.y, decimal=2) + assert_array_almost_equal(layer_data.v, layer_data_expected.v, decimal=2) def test_create_points_three_points(self): """ Test the scenario where all three inputs (x, y, z) are points. """ - x, y, z = 1,2,3 + x, y, z = 1, 2, 3 - expected = pd.DataFrame([[x,y,z]], columns=[ - 'x', 'y', 'waterdepth']) + expected = pd.DataFrame([[x, y, z]], columns=["x", "y", "waterdepth"]) points = river.io.d3d.create_points(x, y, z) assert_array_almost_equal(points.values, expected.values, decimal=2) @@ -135,32 +128,28 @@ def test_create_points_invalid_input(self): Test scenarios where invalid inputs are provided to the function. """ with self.assertRaises(TypeError): - river.io.d3d.create_points('invalid', 2, 3) + river.io.d3d.create_points("invalid", 2, 3) def test_create_points_two_arrays_one_point(self): """ Test with two arrays and one point. """ result = river.io.d3d.create_points(np.array([1, 2]), np.array([3]), 4) - expected = pd.DataFrame({ - 'x': [1, 2], - 'y': [3, 3], - 'waterdepth': [4, 4] - }) + expected = pd.DataFrame({"x": [1, 2], "y": [3, 3], "waterdepth": [4, 4]}) pd.testing.assert_frame_equal(result, expected, check_dtype=False) - + def test_create_points_user_made_two_arrays_one_point(self): """ - Test the scenario where all three inputs (x, y, z) are created from + Test the scenario where all three inputs (x, y, z) are created from points. """ x, y, z = np.linspace(1, 3, num=3), np.linspace(1, 3, num=3), 1 # Adjust the order of the expected values - expected_data = [[i, j, 1] - for j in y for i in x] # Notice the swapped loop order - expected = pd.DataFrame(expected_data, columns=[ - 'x', 'y', 'waterdepth']) + expected_data = [ + [i, j, 1] for j in y for i in x + ] # Notice the swapped loop order + expected = pd.DataFrame(expected_data, columns=["x", "y", "waterdepth"]) points = river.io.d3d.create_points(x, y, z) assert_array_almost_equal(points.values, expected.values, decimal=2) @@ -171,7 +160,8 @@ def test_create_points_mismatched_array_lengths(self): """ with self.assertRaises(ValueError): river.io.d3d.create_points( - np.array([1, 2, 3]), np.array([1, 2]), np.array([3, 4])) + np.array([1, 2, 3]), np.array([1, 2]), np.array([3, 4]) + ) def test_create_pointsempty_arrays(self): """ @@ -188,11 +178,9 @@ def test_create_points_mixed_data_types(self): y = pd.Series([3, 4]) z = xr.DataArray([5, 6]) result = river.io.d3d.create_points(x, y, z) - expected = pd.DataFrame({ - 'x': [1, 2, 1, 2], - 'y': [3, 4, 3, 4], - 'waterdepth': [5, 5, 6, 6] - }) + expected = pd.DataFrame( + {"x": [1, 2, 1, 2], "y": [3, 4, 3, 4], "waterdepth": [5, 5, 6, 6]} + ) pd.testing.assert_frame_equal(result, expected, check_dtype=False) @@ -201,43 +189,48 @@ def test_create_points_array_like_inputs(self): Test array-like inputs such as lists. """ result = river.io.d3d.create_points([1, 2], [3, 4], [5, 6]) - expected = pd.DataFrame({ - 'x': [1, 2, 1, 2], - 'y': [3, 4, 3, 4], - 'waterdepth': [5, 5, 6, 6] - }) + expected = pd.DataFrame( + {"x": [1, 2, 1, 2], "y": [3, 4, 3, 4], "waterdepth": [5, 5, 6, 6]} + ) pd.testing.assert_frame_equal(result, expected, check_dtype=False) def test_variable_interpolation(self): data = self.d3d_flume_data - variables = ['ucx', 'turkin1'] + variables = ["ucx", "turkin1"] transformes_data = river.io.d3d.variable_interpolation( - data, variables, points='faces', edges='nearest') - self.assertEqual(np.size(transformes_data['ucx']), np.size( - transformes_data['turkin1'])) + data, variables, points="faces", edges="nearest" + ) + self.assertEqual( + np.size(transformes_data["ucx"]), np.size(transformes_data["turkin1"]) + ) transformes_data = river.io.d3d.variable_interpolation( - data, variables, points='cells', edges='nearest') - self.assertEqual(np.size(transformes_data['ucx']), np.size( - transformes_data['turkin1'])) + data, variables, points="cells", edges="nearest" + ) + self.assertEqual( + np.size(transformes_data["ucx"]), np.size(transformes_data["turkin1"]) + ) x = np.linspace(1, 3, num=3) y = np.linspace(1, 3, num=3) waterdepth = 1 points = river.io.d3d.create_points(x, y, waterdepth) transformes_data = river.io.d3d.variable_interpolation( - data, variables, points=points) - self.assertEqual(np.size(transformes_data['ucx']), np.size( - transformes_data['turkin1'])) + data, variables, points=points + ) + self.assertEqual( + np.size(transformes_data["ucx"]), np.size(transformes_data["turkin1"]) + ) def test_get_all_data_points(self): data = self.d3d_flume_data - variable = 'ucx' + variable = "ucx" time_step = 3 output = river.io.d3d.get_all_data_points(data, variable, time_step) size_output = np.size(output) time_step_compair = 4 output_expected = river.io.d3d.get_all_data_points( - data, variable, time_step_compair) + data, variable, time_step_compair + ) size_output_expected = np.size(output_expected) self.assertEqual(size_output, size_output_expected) @@ -247,7 +240,10 @@ def test_unorm(self): z = np.linspace(1, 3, num=3) unorm = river.io.d3d.unorm(x, y, z) unorm_expected = [ - np.sqrt(1**2+1**2+1**2), np.sqrt(2**2+2**2+2**2), np.sqrt(3**2+3**2+3**2)] + np.sqrt(1**2 + 1**2 + 1**2), + np.sqrt(2**2 + 2**2 + 2**2), + np.sqrt(3**2 + 3**2 + 3**2), + ] assert_array_almost_equal(unorm, unorm_expected, decimal=2) def test_turbulent_intensity(self): @@ -257,54 +253,62 @@ def test_turbulent_intensity(self): y_test = np.linspace(3, 3, num=10) waterdepth_test = np.linspace(1, 1, num=10) - test_points = np.array([[x, y, waterdepth] for x, y, waterdepth in zip( - x_test, y_test, waterdepth_test)]) - points = pd.DataFrame(test_points, columns=['x', 'y', 'waterdepth']) + test_points = np.array( + [ + [x, y, waterdepth] + for x, y, waterdepth in zip(x_test, y_test, waterdepth_test) + ] + ) + points = pd.DataFrame(test_points, columns=["x", "y", "waterdepth"]) TI = river.io.d3d.turbulent_intensity(data, points, time_index) - TI_vars = ['turkin1', 'ucx', 'ucy', 'ucz'] + TI_vars = ["turkin1", "ucx", "ucy", "ucz"] TI_data_raw = {} for var in TI_vars: # get all data - var_data_df = river.io.d3d.get_all_data_points( - data, var, time_index) + var_data_df = river.io.d3d.get_all_data_points(data, var, time_index) TI_data_raw[var] = var_data_df TI_data = points.copy(deep=True) for var in TI_vars: - TI_data[var] = interp.griddata(TI_data_raw[var][['x', 'y', 'waterdepth']], - TI_data_raw[var][var], points[['x', 'y', 'waterdepth']]) + TI_data[var] = interp.griddata( + TI_data_raw[var][["x", "y", "waterdepth"]], + TI_data_raw[var][var], + points[["x", "y", "waterdepth"]], + ) idx = np.where(np.isnan(TI_data[var])) if len(idx[0]): for i in idx[0]: - TI_data[var][i] = interp.griddata(TI_data_raw[var][['x', 'y', 'waterdepth']], - TI_data_raw[var][var], - [points['x'][i], points['y'] - [i], points['waterdepth'][i]], - method='nearest') - - u_mag = river.io.d3d.unorm( - TI_data['ucx'], TI_data['ucy'], TI_data['ucz']) + TI_data[var][i] = interp.griddata( + TI_data_raw[var][["x", "y", "waterdepth"]], + TI_data_raw[var][var], + [points["x"][i], points["y"][i], points["waterdepth"][i]], + method="nearest", + ) + + u_mag = river.io.d3d.unorm(TI_data["ucx"], TI_data["ucy"], TI_data["ucz"]) turbulent_intensity_expected = ( - np.sqrt(2/3*TI_data['turkin1'])/u_mag)*100 + np.sqrt(2 / 3 * TI_data["turkin1"]) / u_mag + ) * 100 assert_array_almost_equal( - TI.turbulent_intensity, turbulent_intensity_expected, decimal=2) + TI.turbulent_intensity, turbulent_intensity_expected, decimal=2 + ) - TI = river.io.d3d.turbulent_intensity(data, points='faces') - TI_size = np.size(TI['turbulent_intensity']) - turkin1 = river.io.d3d.get_all_data_points(data, 'turkin1', time_index) - turkin1_size = np.size(turkin1['turkin1']) + TI = river.io.d3d.turbulent_intensity(data, points="faces") + TI_size = np.size(TI["turbulent_intensity"]) + turkin1 = river.io.d3d.get_all_data_points(data, "turkin1", time_index) + turkin1_size = np.size(turkin1["turkin1"]) self.assertEqual(TI_size, turkin1_size) - TI = river.io.d3d.turbulent_intensity(data, points='cells') - TI_size = np.size(TI['turbulent_intensity']) - ucx = river.io.d3d.get_all_data_points(data, 'ucx', time_index) - ucx_size = np.size(ucx['ucx']) + TI = river.io.d3d.turbulent_intensity(data, points="cells") + TI_size = np.size(TI["turbulent_intensity"]) + ucx = river.io.d3d.get_all_data_points(data, "ucx", time_index) + ucx_size = np.size(ucx["ucx"]) self.assertEqual(TI_size, ucx_size) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/river/test_performance.py b/mhkit/tests/river/test_performance.py index d1ef596a0..34c1d6147 100644 --- a/mhkit/tests/river/test_performance.py +++ b/mhkit/tests/river/test_performance.py @@ -12,10 +12,11 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) -if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir,'..','..','..','examples','data','river')) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, "..", "..", "..", "examples", "data", "river")) class TestPerformance(unittest.TestCase): @@ -24,26 +25,26 @@ def setUpClass(self): self.diameter = 1 self.height = 2 self.width = 3 - self.diameters = [1,2,3,4] + self.diameters = [1, 2, 3, 4] @classmethod def tearDownClass(self): pass - + def test_circular(self): - eq, ca = river.performance.circular(self.diameter) + eq, ca = river.performance.circular(self.diameter) self.assertEqual(eq, self.diameter) - self.assertEqual(ca, 0.25*np.pi*self.diameter**2.) + self.assertEqual(ca, 0.25 * np.pi * self.diameter**2.0) def test_ducted(self): - eq, ca =river.performance.ducted(self.diameter) + eq, ca = river.performance.ducted(self.diameter) self.assertEqual(eq, self.diameter) - self.assertEqual(ca, 0.25*np.pi*self.diameter**2.) - + self.assertEqual(ca, 0.25 * np.pi * self.diameter**2.0) + def test_rectangular(self): eq, ca = river.performance.rectangular(self.height, self.width) self.assertAlmostEqual(eq, 2.76, places=2) - self.assertAlmostEqual(ca, self.height*self.width, places=2) + self.assertAlmostEqual(ca, self.height * self.width, places=2) def test_multiple_circular(self): eq, ca = river.performance.multiple_circular(self.diameters) @@ -51,30 +52,33 @@ def test_multiple_circular(self): self.assertAlmostEqual(ca, 23.56, places=2) def test_tip_speed_ratio(self): - rotor_speed = [15,16,17,18] # create array of rotor speeds - rotor_diameter = 77 # diameter of rotor for GE 1.5 - inflow_speed = [13,13,13,13] # array of wind speeds - TSR_answer = [4.7,5.0,5.3,5.6] - - TSR = river.performance.tip_speed_ratio(np.asarray(rotor_speed)/60,rotor_diameter,inflow_speed) + rotor_speed = [15, 16, 17, 18] # create array of rotor speeds + rotor_diameter = 77 # diameter of rotor for GE 1.5 + inflow_speed = [13, 13, 13, 13] # array of wind speeds + TSR_answer = [4.7, 5.0, 5.3, 5.6] - for i,j in zip(TSR,TSR_answer): - self.assertAlmostEqual(i,j,delta=0.05) + TSR = river.performance.tip_speed_ratio( + np.asarray(rotor_speed) / 60, rotor_diameter, inflow_speed + ) + + for i, j in zip(TSR, TSR_answer): + self.assertAlmostEqual(i, j, delta=0.05) def test_power_coefficient(self): # data obtained from power performance report of wind turbine - inflow_speed = [4,6,8,10,12,14,16,18,20] - power_out = np.asarray([59,304,742,1200,1400,1482,1497,1497,1511]) + inflow_speed = [4, 6, 8, 10, 12, 14, 16, 18, 20] + power_out = np.asarray([59, 304, 742, 1200, 1400, 1482, 1497, 1497, 1511]) capture_area = 4656.63 rho = 1.225 - Cp_answer = [0.320,0.493,0.508,0.421,0.284,0.189,0.128,0.090,0.066] - - Cp = river.performance.power_coefficient(power_out*1000,inflow_speed,capture_area,rho) + Cp_answer = [0.320, 0.493, 0.508, 0.421, 0.284, 0.189, 0.128, 0.090, 0.066] + + Cp = river.performance.power_coefficient( + power_out * 1000, inflow_speed, capture_area, rho + ) - for i,j in zip(Cp,Cp_answer): - self.assertAlmostEqual(i,j,places=2) + for i, j in zip(Cp, Cp_answer): + self.assertAlmostEqual(i, j, places=2) - -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main() diff --git a/mhkit/tests/river/test_resource.py b/mhkit/tests/river/test_resource.py index 6e42da2a6..4e4a6dec6 100644 --- a/mhkit/tests/river/test_resource.py +++ b/mhkit/tests/river/test_resource.py @@ -12,24 +12,24 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir, '..', '..', '..', - 'examples', 'data', 'river')) +datadir = normpath(join(testdir, "..", "..", "..", "examples", "data", "river")) class TestResource(unittest.TestCase): - @classmethod def setUpClass(self): - self.data = pd.read_csv(join(datadir, 'tanana_discharge_data.csv'), index_col=0, - parse_dates=True) - self.data.columns = ['Q'] + self.data = pd.read_csv( + join(datadir, "tanana_discharge_data.csv"), index_col=0, parse_dates=True + ) + self.data.columns = ["Q"] - self.results = pd.read_csv(join(datadir, 'tanana_test_results.csv'), index_col=0, - parse_dates=True) + self.results = pd.read_csv( + join(datadir, "tanana_test_results.csv"), index_col=0, parse_dates=True + ) @classmethod def tearDownClass(self): @@ -48,8 +48,8 @@ def test_exceedance_probability(self): # if N=9, max F = 100((max(Q)+1)/10) = 90% # if N=9, min F = 100((min(Q)+1)/10) = 10% f = river.resource.exceedance_probability(Q) - self.assertEqual(f.min().values, 10.) - self.assertEqual(f.max().values, 90.) + self.assertEqual(f.min().values, 10.0) + self.assertEqual(f.max().values, 90.0) def test_polynomial_fit(self): # Calculate a first order polynomial on an x=y line @@ -65,129 +65,123 @@ def test_discharge_to_velocity(self): # Create arbitrary discharge between 0 and 8(N=9) Q = pd.Series(np.arange(9)) # Calculate a first order polynomial on an DV_Curve x=y line 10 times greater than the Q values - p, r2 = river.resource.polynomial_fit(np.arange(9), 10*np.arange(9), 1) + p, r2 = river.resource.polynomial_fit(np.arange(9), 10 * np.arange(9), 1) # Becuase the polynomial line fits perfect we should expect the V to equal 10*Q V = river.resource.discharge_to_velocity(Q, p) - self.assertAlmostEqual(np.sum(10*Q - V['V']), 0.00, places=2) + self.assertAlmostEqual(np.sum(10 * Q - V["V"]), 0.00, places=2) def test_velocity_to_power(self): # Calculate a first order polynomial on an DV_Curve x=y line 10 times greater than the Q values - p, r2 = river.resource.polynomial_fit(np.arange(9), 10*np.arange(9), 1) + p, r2 = river.resource.polynomial_fit(np.arange(9), 10 * np.arange(9), 1) # Becuase the polynomial line fits perfect we should expect the V to equal 10*Q V = river.resource.discharge_to_velocity(pd.Series(np.arange(9)), p) # Calculate a first order polynomial on an VP_Curve x=y line 10 times greater than the V values - p2, r22 = river.resource.polynomial_fit( - np.arange(9), 10*np.arange(9), 1) + p2, r22 = river.resource.polynomial_fit(np.arange(9), 10 * np.arange(9), 1) # Set cut in/out to exclude 1 bin on either end of V range - cut_in = V['V'][1] - cut_out = V['V'].iloc[-2] + cut_in = V["V"][1] + cut_out = V["V"].iloc[-2] # Power should be 10x greater and exclude the ends of V - P = river.resource.velocity_to_power(V['V'], p2, cut_in, cut_out) + P = river.resource.velocity_to_power(V["V"], p2, cut_in, cut_out) # Cut in power zero - self.assertAlmostEqual(P['P'][0], 0.00, places=2) + self.assertAlmostEqual(P["P"][0], 0.00, places=2) # Cut out power zero - self.assertAlmostEqual(P['P'].iloc[-1], 0.00, places=2) + self.assertAlmostEqual(P["P"].iloc[-1], 0.00, places=2) # Middle 10x greater than velocity - self.assertAlmostEqual( - (P['P'][1:-1] - 10*V['V'][1:-1]).sum(), 0.00, places=2) + self.assertAlmostEqual((P["P"][1:-1] - 10 * V["V"][1:-1]).sum(), 0.00, places=2) def test_energy_produced(self): # If power is always X then energy produced with be x*seconds X = 1 seconds = 1 - P = pd.Series(X*np.ones(10)) + P = pd.Series(X * np.ones(10)) EP = river.resource.energy_produced(P, seconds) - self.assertAlmostEqual(EP, X*seconds, places=1) + self.assertAlmostEqual(EP, X * seconds, places=1) # for a normal distribution of Power EP = mean *seconds mu = 5 sigma = 1 power_dist = pd.Series(np.random.normal(mu, sigma, 10000)) EP2 = river.resource.energy_produced(power_dist, seconds) - self.assertAlmostEqual(EP2, mu*seconds, places=1) + self.assertAlmostEqual(EP2, mu * seconds, places=1) def test_plot_flow_duration_curve(self): - filename = abspath(join(plotdir, 'river_plot_flow_duration_curve.png')) + filename = abspath(join(plotdir, "river_plot_flow_duration_curve.png")) if isfile(filename): os.remove(filename) f = river.resource.exceedance_probability(self.data.Q) plt.figure() - river.graphics.plot_flow_duration_curve(self.data['Q'], f['F']) - plt.savefig(filename, format='png') + river.graphics.plot_flow_duration_curve(self.data["Q"], f["F"]) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_power_duration_curve(self): - filename = abspath( - join(plotdir, 'river_plot_power_duration_curve.png')) + filename = abspath(join(plotdir, "river_plot_power_duration_curve.png")) if isfile(filename): os.remove(filename) f = river.resource.exceedance_probability(self.data.Q) plt.figure() - river.graphics.plot_flow_duration_curve( - self.results['P_control'], f['F']) - plt.savefig(filename, format='png') + river.graphics.plot_flow_duration_curve(self.results["P_control"], f["F"]) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_velocity_duration_curve(self): - filename = abspath( - join(plotdir, 'river_plot_velocity_duration_curve.png')) + filename = abspath(join(plotdir, "river_plot_velocity_duration_curve.png")) if isfile(filename): os.remove(filename) f = river.resource.exceedance_probability(self.data.Q) plt.figure() - river.graphics.plot_velocity_duration_curve( - self.results['V_control'], f['F']) - plt.savefig(filename, format='png') + river.graphics.plot_velocity_duration_curve(self.results["V_control"], f["F"]) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_discharge_timeseries(self): - filename = abspath( - join(plotdir, 'river_plot_discharge_timeseries.png')) + filename = abspath(join(plotdir, "river_plot_discharge_timeseries.png")) if isfile(filename): os.remove(filename) plt.figure() - river.graphics.plot_discharge_timeseries(self.data['Q']) - plt.savefig(filename, format='png') + river.graphics.plot_discharge_timeseries(self.data["Q"]) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_discharge_vs_velocity(self): - filename = abspath( - join(plotdir, 'river_plot_discharge_vs_velocity.png')) + filename = abspath(join(plotdir, "river_plot_discharge_vs_velocity.png")) if isfile(filename): os.remove(filename) plt.figure() river.graphics.plot_discharge_vs_velocity( - self.data['Q'], self.results['V_control']) - plt.savefig(filename, format='png') + self.data["Q"], self.results["V_control"] + ) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_velocity_vs_power(self): - filename = abspath(join(plotdir, 'river_plot_velocity_vs_power.png')) + filename = abspath(join(plotdir, "river_plot_velocity_vs_power.png")) if isfile(filename): os.remove(filename) plt.figure() river.graphics.plot_velocity_vs_power( - self.results['V_control'], self.results['P_control']) - plt.savefig(filename, format='png') + self.results["V_control"], self.results["P_control"] + ) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/tidal/test_io.py b/mhkit/tests/tidal/test_io.py index 3d568cbaa..09060daa9 100644 --- a/mhkit/tests/tidal/test_io.py +++ b/mhkit/tests/tidal/test_io.py @@ -22,15 +22,14 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir, relpath('../../../examples/data/tidal'))) +datadir = normpath(join(testdir, relpath("../../../examples/data/tidal"))) class TestIO(unittest.TestCase): - @classmethod def setUpClass(self): pass @@ -45,9 +44,9 @@ def test_load_noaa_data(self): JSON file and returns a DataFrame and metadata with the correct shape and columns. """ - file_name = join(datadir, 's08010.json') + file_name = join(datadir, "s08010.json") data, metadata = tidal.io.noaa.read_noaa_json(file_name) - self.assertTrue(np.all(data.columns == ['s', 'd', 'b'])) + self.assertTrue(np.all(data.columns == ["s", "d", "b"])) self.assertEqual(data.shape, (18890, 3)) def test_request_noaa_data_basic(self): @@ -57,30 +56,30 @@ def test_request_noaa_data_basic(self): correct shape and columns. """ data, metadata = tidal.io.noaa.request_noaa_data( - station='s08010', - parameter='currents', - start_date='20180101', - end_date='20180102', + station="s08010", + parameter="currents", + start_date="20180101", + end_date="20180102", proxy=None, - write_json=None + write_json=None, ) - self.assertTrue(np.all(data.columns == ['s', 'd', 'b'])) + self.assertTrue(np.all(data.columns == ["s", "d", "b"])) self.assertEqual(data.shape, (183, 3)) def test_request_noaa_data_write_json(self): """ Test the request_noaa_data function with the write_json parameter - and verify that the returned JSON file has the correct structure + and verify that the returned JSON file has the correct structure and can be loaded back into a dictionary. """ - test_json_file = 'test_noaa_data.json' + test_json_file = "test_noaa_data.json" _, _ = tidal.io.noaa.request_noaa_data( - station='s08010', - parameter='currents', - start_date='20180101', - end_date='20180102', + station="s08010", + parameter="currents", + start_date="20180101", + end_date="20180102", proxy=None, - write_json=test_json_file + write_json=test_json_file, ) self.assertTrue(os.path.isfile(test_json_file)) @@ -89,10 +88,10 @@ def test_request_noaa_data_write_json(self): os.remove(test_json_file) # Clean up the test JSON file - self.assertIn('metadata', loaded_data) - self.assertIn('s', loaded_data['columns']) - self.assertIn('d', loaded_data['columns']) - self.assertIn('b', loaded_data['columns']) + self.assertIn("metadata", loaded_data) + self.assertIn("s", loaded_data["columns"]) + self.assertIn("d", loaded_data["columns"]) + self.assertIn("b", loaded_data["columns"]) def test_request_noaa_data_invalid_dates(self): """ @@ -101,12 +100,12 @@ def test_request_noaa_data_invalid_dates(self): """ with self.assertRaises(ValueError): tidal.io.noaa.request_noaa_data( - station='s08010', - parameter='currents', - start_date='2018-01-01', # Invalid date format - end_date='20180102', + station="s08010", + parameter="currents", + start_date="2018-01-01", # Invalid date format + end_date="20180102", proxy=None, - write_json=None + write_json=None, ) def test_request_noaa_data_end_before_start(self): @@ -116,14 +115,14 @@ def test_request_noaa_data_end_before_start(self): """ with self.assertRaises(ValueError): tidal.io.noaa.request_noaa_data( - station='s08010', - parameter='currents', - start_date='20180102', - end_date='20180101', # End date before start date + station="s08010", + parameter="currents", + start_date="20180102", + end_date="20180101", # End date before start date proxy=None, - write_json=None + write_json=None, ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/tidal/test_performance.py b/mhkit/tests/tidal/test_performance.py index b06984e59..f1d815db1 100644 --- a/mhkit/tests/tidal/test_performance.py +++ b/mhkit/tests/tidal/test_performance.py @@ -8,110 +8,125 @@ from mhkit.dolfyn import load testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) -if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir,relpath('../../../examples/data/tidal'))) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, relpath("../../../examples/data/tidal"))) class TestResource(unittest.TestCase): - @classmethod def setUpClass(self): - filename = join(datadir, 'adcp.principal.a1.20200815.nc') + filename = join(datadir, "adcp.principal.a1.20200815.nc") self.ds = load(filename) # Emulate power data - self.power = abs(self.ds['vel'][0,10]**3 * 1e5) + self.power = abs(self.ds["vel"][0, 10] ** 3 * 1e5) @classmethod def tearDownClass(self): pass - def test_power_curve(self,): + def test_power_curve( + self, + ): df93_circ = performance.power_curve( power=self.power, - velocity=self.ds['vel'].sel(dir='streamwise'), + velocity=self.ds["vel"].sel(dir="streamwise"), hub_height=4.2, - doppler_cell_size=0.5, - sampling_frequency=1, + doppler_cell_size=0.5, + sampling_frequency=1, window_avg_time=600, - turbine_profile='circular', + turbine_profile="circular", diameter=3, height=None, - width=None) - test_circ = np.array([1.26250990e+00, - 1.09230978e+00, - 1.89122103e+05, - 1.03223668e+04, - 2.04261423e+05, - 1.72095731e+05]) + width=None, + ) + test_circ = np.array( + [ + 1.26250990e00, + 1.09230978e00, + 1.89122103e05, + 1.03223668e04, + 2.04261423e05, + 1.72095731e05, + ] + ) df93_rect = performance.power_curve( power=self.power, - velocity=self.ds['vel'].sel(dir='streamwise'), + velocity=self.ds["vel"].sel(dir="streamwise"), hub_height=4.2, - doppler_cell_size=0.5, - sampling_frequency=1, + doppler_cell_size=0.5, + sampling_frequency=1, window_avg_time=600, - turbine_profile='rectangular', + turbine_profile="rectangular", diameter=None, height=1, - width=3) - test_rect = np.array([1.15032239e+00, - 3.75747621e-01, - 1.73098627e+05, - 3.04090212e+04, - 2.09073742e+05, - 1.27430552e+05]) - + width=3, + ) + test_rect = np.array( + [ + 1.15032239e00, + 3.75747621e-01, + 1.73098627e05, + 3.04090212e04, + 2.09073742e05, + 1.27430552e05, + ] + ) + assert_allclose(df93_circ.values[-2], test_circ, atol=1e-5) assert_allclose(df93_rect.values[-3], test_rect, atol=1e-5) def test_velocity_profiles(self): df94 = performance.velocity_profiles( - velocity=self.ds['vel'].sel(dir='streamwise'), + velocity=self.ds["vel"].sel(dir="streamwise"), hub_height=4.2, water_depth=10, - sampling_frequency=1, + sampling_frequency=1, window_avg_time=600, - function='mean') + function="mean", + ) df95a = performance.velocity_profiles( - velocity=self.ds['vel'].sel(dir='streamwise'), + velocity=self.ds["vel"].sel(dir="streamwise"), hub_height=4.2, water_depth=10, sampling_frequency=1, window_avg_time=600, - function='rms') + function="rms", + ) df95b = performance.velocity_profiles( - velocity=self.ds['vel'].sel(dir='streamwise'), - hub_height=4.2, + velocity=self.ds["vel"].sel(dir="streamwise"), + hub_height=4.2, water_depth=10, - sampling_frequency=1, + sampling_frequency=1, window_avg_time=600, - function='std') - + function="std", + ) + test_df94 = np.array([0.32782955, 0.69326691, 1.00948623]) - test_df95a = np.array([0.3329345 , 0.69936798, 1.01762123]) + test_df95a = np.array([0.3329345, 0.69936798, 1.01762123]) test_df95b = np.array([0.05635571, 0.08671777, 0.12735139]) assert_allclose(df94.values[1], test_df94, atol=1e-5) assert_allclose(df95a.values[1], test_df95a, atol=1e-5) assert_allclose(df95b.values[1], test_df95b, atol=1e-5) - def test_power_efficiency(self): df97 = performance.device_efficiency( self.power, - velocity=self.ds['vel'].sel(dir='streamwise'), - water_density=self.ds['water_density'], - capture_area=np.pi*1.5**2, + velocity=self.ds["vel"].sel(dir="streamwise"), + water_density=self.ds["water_density"], + capture_area=np.pi * 1.5**2, hub_height=4.2, sampling_frequency=1, - window_avg_time=600) - + window_avg_time=600, + ) + test_df97 = np.array(24.79197) - assert_allclose(df97.values[-1,-1], test_df97, atol=1e-5) + assert_allclose(df97.values[-1, -1], test_df97, atol=1e-5) -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main() diff --git a/mhkit/tests/tidal/test_resource.py b/mhkit/tests/tidal/test_resource.py index a7adc996c..7b5b6ad11 100644 --- a/mhkit/tests/tidal/test_resource.py +++ b/mhkit/tests/tidal/test_resource.py @@ -7,103 +7,108 @@ import mhkit.tidal as tidal testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) -if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir,relpath('../../../examples/data/tidal'))) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, relpath("../../../examples/data/tidal"))) class TestResource(unittest.TestCase): - @classmethod def setUpClass(self): - file_name = join(datadir, 's08010.json') + file_name = join(datadir, "s08010.json") self.data, self.metadata = tidal.io.noaa.read_noaa_json(file_name) - self.data.s = self.data.s / 100. # convert to m/s + self.data.s = self.data.s / 100.0 # convert to m/s self.flood = 171.5 self.ebb = 354.5 - @classmethod def tearDownClass(self): pass - + def test_exceedance_probability(self): - df = pd.DataFrame.from_records( {'vals': np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9])} ) - df['F'] = tidal.resource.exceedance_probability(df.vals) - self.assertEqual(df['F'].min(), 10) - self.assertEqual(df['F'].max(), 90) - - - def test_principal_flow_directions(self): - width_direction=10 - direction1, direction2 = tidal.resource.principal_flow_directions(self.data.d, width_direction) - self.assertEqual(direction1,172.0) - self.assertEqual(round(direction2,1),round(352.3,1)) - + df = pd.DataFrame.from_records({"vals": np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])}) + df["F"] = tidal.resource.exceedance_probability(df.vals) + self.assertEqual(df["F"].min(), 10) + self.assertEqual(df["F"].max(), 90) + + def test_principal_flow_directions(self): + width_direction = 10 + direction1, direction2 = tidal.resource.principal_flow_directions( + self.data.d, width_direction + ) + self.assertEqual(direction1, 172.0) + self.assertEqual(round(direction2, 1), round(352.3, 1)) + def test_plot_current_timeseries(self): - filename = abspath(join(plotdir, 'tidal_plot_current_timeseries.png')) + filename = abspath(join(plotdir, "tidal_plot_current_timeseries.png")) if isfile(filename): os.remove(filename) - + plt.figure() tidal.graphics.plot_current_timeseries(self.data.d, self.data.s, 172) - plt.savefig(filename, format='png') + plt.savefig(filename, format="png") plt.close() - + self.assertTrue(isfile(filename)) - + def test_plot_joint_probability_distribution(self): - filename = abspath(join(plotdir, 'tidal_plot_joint_probability_distribution.png')) + filename = abspath( + join(plotdir, "tidal_plot_joint_probability_distribution.png") + ) if isfile(filename): os.remove(filename) - + plt.figure() - tidal.graphics.plot_joint_probability_distribution(self.data.d, self.data.s, 1, 0.1) - plt.savefig(f'{filename}') + tidal.graphics.plot_joint_probability_distribution( + self.data.d, self.data.s, 1, 0.1 + ) + plt.savefig(f"{filename}") plt.close() - + self.assertTrue(isfile(filename)) - + def test_plot_rose(self): - filename = abspath(join(plotdir, 'tidal_plot_rose.png')) + filename = abspath(join(plotdir, "tidal_plot_rose.png")) if isfile(filename): os.remove(filename) - + plt.figure() tidal.graphics.plot_rose(self.data.d, self.data.s, 1, 0.1) - plt.savefig(f'{filename}') + plt.savefig(f"{filename}") plt.close() - + self.assertTrue(isfile(filename)) def test_tidal_phase_probability(self): - filename = abspath(join(plotdir, 'tidal_plot_tidal_phase_probability.png')) + filename = abspath(join(plotdir, "tidal_plot_tidal_phase_probability.png")) if isfile(filename): os.remove(filename) - + plt.figure() - tidal.graphics.tidal_phase_probability(self.data.d, self.data.s, - self.flood, self.ebb) - plt.savefig(f'{filename}') + tidal.graphics.tidal_phase_probability( + self.data.d, self.data.s, self.flood, self.ebb + ) + plt.savefig(f"{filename}") plt.close() - + self.assertTrue(isfile(filename)) - + def test_tidal_phase_exceedance(self): - filename = abspath(join(plotdir, 'tidal_plot_tidal_phase_exceedance.png')) + filename = abspath(join(plotdir, "tidal_plot_tidal_phase_exceedance.png")) if isfile(filename): os.remove(filename) - + plt.figure() - tidal.graphics.tidal_phase_exceedance(self.data.d, self.data.s, - self.flood, self.ebb) - plt.savefig(f'{filename}') + tidal.graphics.tidal_phase_exceedance( + self.data.d, self.data.s, self.flood, self.ebb + ) + plt.savefig(f"{filename}") plt.close() - - self.assertTrue(isfile(filename)) + self.assertTrue(isfile(filename)) -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main() diff --git a/mhkit/tests/utils/test_cache.py b/mhkit/tests/utils/test_cache.py index 3c4124311..cfb2c0053 100644 --- a/mhkit/tests/utils/test_cache.py +++ b/mhkit/tests/utils/test_cache.py @@ -42,7 +42,7 @@ class TestCacheUtils(unittest.TestCase): """ Unit tests for cache utility functions. - This test class provides a suite of tests to validate the functionality of caching utilities, + This test class provides a suite of tests to validate the functionality of caching utilities, ensuring data is correctly cached, retrieved, and cleared. It specifically tests: 1. The creation of cache files by the `handle_caching` function. @@ -50,8 +50,8 @@ class TestCacheUtils(unittest.TestCase): 3. The appropriate file extension used when caching CDIP data. 4. The effective clearing of specified cache directories. - During the setup phase, a test cache directory is created, and sample data is prepared. - Upon completion of tests, the teardown phase ensures the test cache directory is removed, + During the setup phase, a test cache directory is created, and sample data is prepared. + Upon completion of tests, the teardown phase ensures the test cache directory is removed, leaving the environment clean. Attributes: @@ -63,14 +63,16 @@ class TestCacheUtils(unittest.TestCase): data : pandas DataFrame Sample data to be used for caching in tests. """ + @classmethod def setUpClass(cls): - - cls.cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "test_cache") + cls.cache_dir = os.path.join( + os.path.expanduser("~"), ".cache", "mhkit", "test_cache" + ) cls.hash_params = "test_params" - cls.data = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}, - index=pd.date_range("20220101", periods=3)) + cls.data = pd.DataFrame( + {"A": [1, 2, 3], "B": [4, 5, 6]}, index=pd.date_range("20220101", periods=3) + ) @classmethod def tearDownClass(cls): @@ -92,8 +94,9 @@ def test_handle_caching_creates_cache(self): """ handle_caching(self.hash_params, self.cache_dir, data=self.data) - cache_filename = hashlib.md5( - self.hash_params.encode('utf-8')).hexdigest() + ".json" + cache_filename = ( + hashlib.md5(self.hash_params.encode("utf-8")).hexdigest() + ".json" + ) cache_filepath = os.path.join(self.cache_dir, cache_filename) assert os.path.isfile(cache_filepath) @@ -112,8 +115,7 @@ def test_handle_caching_retrieves_data(self): """ handle_caching(self.hash_params, self.cache_dir, data=self.data) retrieved_data, _, _ = handle_caching(self.hash_params, self.cache_dir) - pd.testing.assert_frame_equal( - self.data, retrieved_data, check_freq=False) + pd.testing.assert_frame_equal(self.data, retrieved_data, check_freq=False) def test_handle_caching_cdip_file_extension(self): """ @@ -131,8 +133,9 @@ def test_handle_caching_cdip_file_extension(self): cache_dir = os.path.join(self.cache_dir, "cdip") handle_caching(self.hash_params, cache_dir, data=self.data) - cache_filename = hashlib.md5( - self.hash_params.encode('utf-8')).hexdigest() + ".pkl" + cache_filename = ( + hashlib.md5(self.hash_params.encode("utf-8")).hexdigest() + ".pkl" + ) cache_filepath = os.path.join(cache_dir, cache_filename) assert os.path.isfile(cache_filepath) @@ -169,5 +172,5 @@ def test_clear_cache(self): shutil.rmtree(temp_dir) # Clean up temporary directory -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/utils/test_upcrossing.py b/mhkit/tests/utils/test_upcrossing.py index 986774de3..e389fc39a 100644 --- a/mhkit/tests/utils/test_upcrossing.py +++ b/mhkit/tests/utils/test_upcrossing.py @@ -87,7 +87,8 @@ def test_custom(self): want, _, _, _ = self._example_analysis(self.t, self.signal) # create a similar function to finding the peaks - def f(ind1, ind2): return np.max(self.signal[ind1:ind2]) + def f(ind1, ind2): + return np.max(self.signal[ind1:ind2]) got = custom(self.t, self.signal, f) @@ -135,7 +136,8 @@ def test_custom_with_inds(self): inds = upcrossing(self.t, self.signal) # create a similar function to finding the peaks - def f(ind1, ind2): return np.max(self.signal[ind1:ind2]) + def f(ind1, ind2): + return np.max(self.signal[ind1:ind2]) got = custom(self.t, self.signal, f, inds) diff --git a/mhkit/tests/utils/test_utils.py b/mhkit/tests/utils/test_utils.py index 07e1ed029..06a40f9de 100644 --- a/mhkit/tests/utils/test_utils.py +++ b/mhkit/tests/utils/test_utils.py @@ -8,146 +8,157 @@ testdir = dirname(abspath(__file__)) -loads_datadir = normpath(join(testdir,relpath('../../../examples/data/loads'))) +loads_datadir = normpath(join(testdir, relpath("../../../examples/data/loads"))) -class TestGenUtils(unittest.TestCase): +class TestGenUtils(unittest.TestCase): @classmethod def setUpClass(self): loads_data_file = join(loads_datadir, "loads_data_dict.json") - with open(loads_data_file, 'r') as fp: + with open(loads_data_file, "r") as fp: data_dict = json.load(fp) # convert dictionaries into dataframes - data = { - key: pd.DataFrame(data_dict[key]) - for key in data_dict - } + data = {key: pd.DataFrame(data_dict[key]) for key in data_dict} self.data = data - self.freq = 50 # Hz - self.period = 600 # seconds - + self.freq = 50 # Hz + self.period = 600 # seconds def test_get_statistics(self): # load in file - df = self.data['loads'] + df = self.data["loads"] df.Timestamp = pd.to_datetime(df.Timestamp) - df.set_index('Timestamp',inplace=True) + df.set_index("Timestamp", inplace=True) # run function - means,maxs,mins,stdevs = utils.get_statistics(df,self.freq,period=self.period,vector_channels=['WD_Nacelle','WD_NacelleMod']) + means, maxs, mins, stdevs = utils.get_statistics( + df, + self.freq, + period=self.period, + vector_channels=["WD_Nacelle", "WD_NacelleMod"], + ) # check statistics - self.assertAlmostEqual(means.reset_index().loc[0,'uWind_80m'],7.773,2) # mean - self.assertAlmostEqual(maxs.reset_index().loc[0,'uWind_80m'],13.271,2) # max - self.assertAlmostEqual(mins.reset_index().loc[0,'uWind_80m'],3.221,2) # min - self.assertAlmostEqual(stdevs.reset_index().loc[0,'uWind_80m'],1.551,2) # standard deviation - self.assertAlmostEqual(means.reset_index().loc[0,'WD_Nacelle'],178.1796,2) # mean - vector - self.assertAlmostEqual(stdevs.reset_index().loc[0,'WD_Nacelle'],36.093,2) # standard devaition - vector + self.assertAlmostEqual( + means.reset_index().loc[0, "uWind_80m"], 7.773, 2 + ) # mean + self.assertAlmostEqual(maxs.reset_index().loc[0, "uWind_80m"], 13.271, 2) # max + self.assertAlmostEqual(mins.reset_index().loc[0, "uWind_80m"], 3.221, 2) # min + self.assertAlmostEqual( + stdevs.reset_index().loc[0, "uWind_80m"], 1.551, 2 + ) # standard deviation + self.assertAlmostEqual( + means.reset_index().loc[0, "WD_Nacelle"], 178.1796, 2 + ) # mean - vector + self.assertAlmostEqual( + stdevs.reset_index().loc[0, "WD_Nacelle"], 36.093, 2 + ) # standard devaition - vector # check timestamp - string_time = '2017-03-01 01:28:41' + string_time = "2017-03-01 01:28:41" time = pd.to_datetime(string_time) - self.assertTrue(means.index[0]==time) - + self.assertTrue(means.index[0] == time) + def test_vector_statistics(self): # load in vector variable - df = self.data['loads'] - vector_data = df['WD_Nacelle'] + df = self.data["loads"] + vector_data = df["WD_Nacelle"] vector_avg, vector_std = utils.vector_statistics(vector_data) # check answers - self.assertAlmostEqual(vector_avg,178.1796,2) # mean - vector - self.assertAlmostEqual(vector_std,36.093,2) # standard devaition - vector + self.assertAlmostEqual(vector_avg, 178.1796, 2) # mean - vector + self.assertAlmostEqual(vector_std, 36.093, 2) # standard devaition - vector def test_unwrap_vector(self): # create array of test values and corresponding expected answers - test = [-740,-400,-50,0,50,400,740] - correct = [340,320,310,0,50,40,20] + test = [-740, -400, -50, 0, 50, 400, 740] + correct = [340, 320, 310, 0, 50, 40, 20] # get answers from function answer = utils.unwrap_vector(test) - + # check if answer is correct - assert_frame_equal(pd.DataFrame(answer,dtype='int32'),pd.DataFrame(correct,dtype='int32')) + assert_frame_equal( + pd.DataFrame(answer, dtype="int32"), pd.DataFrame(correct, dtype="int32") + ) def test_matlab_to_datetime(self): # store matlab timestamp - mat_time = 7.367554921296296e+05 + mat_time = 7.367554921296296e05 # corresponding datetime - string_time = '2017-03-01 11:48:40' + string_time = "2017-03-01 11:48:40" time = pd.to_datetime(string_time) # test function answer = utils.matlab_to_datetime(mat_time) - answer2 = answer.round('s') # round to nearest second for comparison - + answer2 = answer.round("s") # round to nearest second for comparison + # check if answer is correct self.assertTrue(answer2 == time) def test_excel_to_datetime(self): # store excel timestamp - excel_time = 4.279549212962963e+04 + excel_time = 4.279549212962963e04 # corresponding datetime - string_time = '2017-03-01 11:48:40' + string_time = "2017-03-01 11:48:40" time = pd.to_datetime(string_time) # test function answer = utils.excel_to_datetime(excel_time) - answer2 = answer.round('s') # round to nearest second for comparison - + answer2 = answer.round("s") # round to nearest second for comparison + # check if answer is correct - self.assertTrue(answer2 == time) + self.assertTrue(answer2 == time) def test_magnitude_phase_2D(self): # float - magnitude=9 - x=y = np.sqrt(1/2*magnitude**2) + magnitude = 9 + x = y = np.sqrt(1 / 2 * magnitude**2) phase = np.arctan2(y, x) - mag, theta = utils.magnitude_phase(x,y) - + mag, theta = utils.magnitude_phase(x, y) + self.assertAlmostEqual(magnitude, mag) self.assertAlmostEqual(phase, theta) - - #list - xx = [x,x] - yy = [y,y] - mag, theta = utils.magnitude_phase(xx,yy) - self.assertTrue(all(mag==magnitude)) - self.assertTrue(all(theta==phase)) - - #series - xs = pd.Series(xx,index=range(len(xx))) - ys = pd.Series(yy,index=range(len(yy))) - - mag, theta = utils.magnitude_phase(xs,ys) - self.assertTrue(all(mag==magnitude)) - self.assertTrue(all(theta==phase)) - + + # list + xx = [x, x] + yy = [y, y] + mag, theta = utils.magnitude_phase(xx, yy) + self.assertTrue(all(mag == magnitude)) + self.assertTrue(all(theta == phase)) + + # series + xs = pd.Series(xx, index=range(len(xx))) + ys = pd.Series(yy, index=range(len(yy))) + + mag, theta = utils.magnitude_phase(xs, ys) + self.assertTrue(all(mag == magnitude)) + self.assertTrue(all(theta == phase)) + def test_magnitude_phase_3D(self): # float - magnitude=9 - x=y=z = np.sqrt(1/3*magnitude**2) + magnitude = 9 + x = y = z = np.sqrt(1 / 3 * magnitude**2) phase1 = np.arctan2(y, x) - phase2 = np.arctan2(np.sqrt(x**2+y**2),z) - mag, theta, phi = utils.magnitude_phase(x,y,z) - + phase2 = np.arctan2(np.sqrt(x**2 + y**2), z) + mag, theta, phi = utils.magnitude_phase(x, y, z) + self.assertAlmostEqual(magnitude, mag) self.assertAlmostEqual(phase1, theta) self.assertAlmostEqual(phase2, phi) - - #list - xx = [x,x] - yy = [y,y] - zz = [z,z] - mag, theta, phi = utils.magnitude_phase(xx,yy,zz) - self.assertTrue(all(mag==magnitude)) - self.assertTrue(all(theta==phase1)) - self.assertTrue(all(phi==phase2)) - - #series - xs = pd.Series(xx,index=range(len(xx))) - ys = pd.Series(yy,index=range(len(yy))) - zs = pd.Series(zz,index=range(len(zz))) - - mag, theta, phi = utils.magnitude_phase(xs,ys,zs) - self.assertTrue(all(mag==magnitude)) - self.assertTrue(all(theta==phase1)) - self.assertTrue(all(phi==phase2)) - - -if __name__ == '__main__': + + # list + xx = [x, x] + yy = [y, y] + zz = [z, z] + mag, theta, phi = utils.magnitude_phase(xx, yy, zz) + self.assertTrue(all(mag == magnitude)) + self.assertTrue(all(theta == phase1)) + self.assertTrue(all(phi == phase2)) + + # series + xs = pd.Series(xx, index=range(len(xx))) + ys = pd.Series(yy, index=range(len(yy))) + zs = pd.Series(zz, index=range(len(zz))) + + mag, theta, phi = utils.magnitude_phase(xs, ys, zs) + self.assertTrue(all(mag == magnitude)) + self.assertTrue(all(theta == phase1)) + self.assertTrue(all(phi == phase2)) + + +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/io/hindcast/test_hindcast.py b/mhkit/tests/wave/io/hindcast/test_hindcast.py index 1a19b66cc..d4707ba41 100644 --- a/mhkit/tests/wave/io/hindcast/test_hindcast.py +++ b/mhkit/tests/wave/io/hindcast/test_hindcast.py @@ -31,215 +31,196 @@ import xarray as xr testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir, '..', '..', '..', '..', - '..', 'examples', 'data', 'wave')) +datadir = normpath( + join(testdir, "..", "..", "..", "..", "..", "examples", "data", "wave") +) class TestWPTOhindcast(unittest.TestCase): - ''' + """ A test call designed to check the WPTO hindcast retrival - ''' + """ @classmethod def setUpClass(cls): - ''' + """ Intitialize the WPTO hindcast test with expected data - ''' + """ cls.my_swh = pd.read_csv( - join(datadir, 'hindcast/multi_year_hindcast.csv'), - index_col='time_index', - names=['time_index', 'significant_wave_height_0'], + join(datadir, "hindcast/multi_year_hindcast.csv"), + index_col="time_index", + names=["time_index", "significant_wave_height_0"], header=0, - dtype={'significant_wave_height_0': 'float32'} + dtype={"significant_wave_height_0": "float32"}, ) cls.my_swh.index = pd.to_datetime(cls.my_swh.index) cls.ml = pd.read_csv( - join(datadir, 'hindcast/single_year_hindcast_multiloc.csv'), - index_col='time_index', - names=[ - 'time_index', - 'mean_absolute_period_0', - 'mean_absolute_period_1' - ], + join(datadir, "hindcast/single_year_hindcast_multiloc.csv"), + index_col="time_index", + names=["time_index", "mean_absolute_period_0", "mean_absolute_period_1"], header=0, dtype={ - 'mean_absolute_period_0': 'float32', - 'mean_absolute_period_1': 'float32' - } + "mean_absolute_period_0": "float32", + "mean_absolute_period_1": "float32", + }, ) cls.ml.index = pd.to_datetime(cls.ml.index) cls.mp = pd.read_csv( - join(datadir, 'hindcast/multiparm.csv'), - index_col='time_index', - names=[ - 'time_index', - 'energy_period_87', - 'mean_zero-crossing_period_87' - ], + join(datadir, "hindcast/multiparm.csv"), + index_col="time_index", + names=["time_index", "energy_period_87", "mean_zero-crossing_period_87"], header=0, dtype={ - 'energy_period_87': 'float32', - 'mean_zero-crossing_period_87': 'float32' - } + "energy_period_87": "float32", + "mean_zero-crossing_period_87": "float32", + }, ) cls.mp.index = pd.to_datetime(cls.mp.index) cls.ml_meta = pd.read_csv( - join(datadir, 'hindcast/multiloc_meta.csv'), + join(datadir, "hindcast/multiloc_meta.csv"), index_col=0, names=[ None, - 'water_depth', - 'latitude', - 'longitude', - 'distance_to_shore', - 'timezone', - 'jurisdiction', - 'gid', + "water_depth", + "latitude", + "longitude", + "distance_to_shore", + "timezone", + "jurisdiction", + "gid", ], header=0, dtype={ - 'water_depth': 'float32', - 'latitude': 'float32', - 'longitude': 'float32', - 'distance_to_shore': 'float32', - 'timezone': 'int16', - 'gid': 'int64', - } + "water_depth": "float32", + "latitude": "float32", + "longitude": "float32", + "distance_to_shore": "float32", + "timezone": "int16", + "gid": "int64", + }, ) cls.my_meta = pd.read_csv( - join(datadir, 'hindcast/multi_year_meta.csv'), + join(datadir, "hindcast/multi_year_meta.csv"), names=[ - 'water_depth', - 'latitude', - 'longitude', - 'distance_to_shore', - 'timezone', - 'jurisdiction', - 'gid' + "water_depth", + "latitude", + "longitude", + "distance_to_shore", + "timezone", + "jurisdiction", + "gid", ], header=0, dtype={ - 'water_depth': 'float32', - 'latitude': 'float32', - 'longitude': 'float32', - 'distance_to_shore': 'float32', - 'timezone': 'int16', - 'gid': 'int64' - } + "water_depth": "float32", + "latitude": "float32", + "longitude": "float32", + "distance_to_shore": "float32", + "timezone": "int16", + "gid": "int64", + }, ) cls.mp_meta = pd.read_csv( - join(datadir, 'hindcast/multiparm_meta.csv'), + join(datadir, "hindcast/multiparm_meta.csv"), index_col=0, names=[ None, - 'water_depth', - 'latitude', - 'longitude', - 'distance_to_shore', - 'timezone', - 'jurisdiction', - 'gid', + "water_depth", + "latitude", + "longitude", + "distance_to_shore", + "timezone", + "jurisdiction", + "gid", ], header=0, dtype={ - 'water_depth': 'float32', - 'latitude': 'float32', - 'longitude': 'float32', - 'distance_to_shore': 'float32', - 'timezone': 'int16', - 'gid': 'int64', - } + "water_depth": "float32", + "latitude": "float32", + "longitude": "float32", + "distance_to_shore": "float32", + "timezone": "int16", + "gid": "int64", + }, ) cls.multi_year_dir_spectra = xr.open_dataset( - join(datadir, 'hindcast/multi_year_dir_spectra.nc')) + join(datadir, "hindcast/multi_year_dir_spectra.nc") + ) cls.multi_year_dir_spectra_meta = pd.read_csv( - join(datadir, 'hindcast/multi_year_dir_spectra_meta.csv'), + join(datadir, "hindcast/multi_year_dir_spectra_meta.csv"), dtype={ - 'water_depth': 'float32', - 'latitude': 'float32', - 'longitude': 'float32', - 'distance_to_shore': 'float32', - 'timezone': 'int16', - 'gid': 'int64' - }) + "water_depth": "float32", + "latitude": "float32", + "longitude": "float32", + "distance_to_shore": "float32", + "timezone": "int16", + "gid": "int64", + }, + ) def test_multi_year(self): - ''' + """ Test multiple years on a single data_type, lat_lon, and parameter - ''' - data_type = '3-hour' + """ + data_type = "3-hour" years = [1990, 1992] lat_lon = (44.624076, -124.280097) - parameters = 'significant_wave_height' - - wave_multiyear, meta = (wave.io.hindcast.hindcast - .request_wpto_point_data( - data_type, - parameters, - lat_lon, - years, - as_xarray=True - ) - ) + parameters = "significant_wave_height" + + wave_multiyear, meta = wave.io.hindcast.hindcast.request_wpto_point_data( + data_type, parameters, lat_lon, years, as_xarray=True + ) wave_multiyear_df = ( - wave_multiyear['significant_wave_height_0'] + wave_multiyear["significant_wave_height_0"] .to_dataframe() - .tz_localize('UTC') + .tz_localize("UTC") ) assert_frame_equal(self.my_swh, wave_multiyear_df) assert_frame_equal(self.my_meta, meta) def test_multi_parm(self): - ''' + """ Test multiple parameters on a single data_type, year, and lat_lon - ''' - data_type = '1-hour' + """ + data_type = "1-hour" years = [1996] lat_lon = (44.624076, -124.280097) - parameters = ['energy_period', 'mean_zero-crossing_period'] - wave_multiparm, meta = (wave.io.hindcast.hindcast - .request_wpto_point_data( - data_type, - parameters, - lat_lon, - years - ) - ) + parameters = ["energy_period", "mean_zero-crossing_period"] + wave_multiparm, meta = wave.io.hindcast.hindcast.request_wpto_point_data( + data_type, parameters, lat_lon, years + ) assert_frame_equal(self.mp, wave_multiparm) assert_frame_equal(self.mp_meta, meta) def test_multi_loc(self): - ''' + """ Test mutiple locations on point data and directional spectrum at a single data_type, year, and parameter. - ''' - data_type = '3-hour' + """ + data_type = "3-hour" years = [1995] lat_lon = ((44.624076, -124.280097), (43.489171, -125.152137)) - parameters = 'mean_absolute_period' + parameters = "mean_absolute_period" wave_multiloc, meta = wave.io.hindcast.hindcast.request_wpto_point_data( - data_type, - parameters, - lat_lon, - years + data_type, parameters, lat_lon, years + ) + ( + dir_multiyear, + meta_dir, + ) = wave.io.hindcast.hindcast.request_wpto_directional_spectrum( + lat_lon, year=str(years[0]) ) - dir_multiyear, meta_dir = (wave.io.hindcast.hindcast - .request_wpto_directional_spectrum(lat_lon, year=str(years[0])) - ) dir_multiyear = dir_multiyear.sel( - time_index=slice( - dir_multiyear.time_index[0], - dir_multiyear.time_index[99] - ) + time_index=slice(dir_multiyear.time_index[0], dir_multiyear.time_index[99]) ) # Convert to effcient range index meta_dir.index = pd.RangeIndex(start=0, stop=len(meta_dir.index)) @@ -247,9 +228,10 @@ def test_multi_loc(self): assert_frame_equal(self.ml, wave_multiloc) assert_frame_equal(self.ml_meta, meta) xrt.assert_allclose(self.multi_year_dir_spectra, dir_multiyear) - assert_frame_equal(self.multi_year_dir_spectra_meta, - meta_dir, check_dtype=False) + assert_frame_equal( + self.multi_year_dir_spectra_meta, meta_dir, check_dtype=False + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py index 4fd070847..343c0479f 100644 --- a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py +++ b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py @@ -22,60 +22,129 @@ testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir,'..','..','..','..','..','examples','data','wave','wind_toolkit')) +datadir = normpath( + join( + testdir, + "..", + "..", + "..", + "..", + "..", + "examples", + "data", + "wave", + "wind_toolkit", + ) +) class TestWINDToolkit(unittest.TestCase): - @classmethod def setUpClass(self): - - self.my = pd.read_csv(join(datadir,'wtk_multiyear.csv'), - index_col = 'time_index', - names = ['time_index','pressure_200m_0'], - header = 0, - dtype = {'pressure_200m_0':'float32'}) + self.my = pd.read_csv( + join(datadir, "wtk_multiyear.csv"), + index_col="time_index", + names=["time_index", "pressure_200m_0"], + header=0, + dtype={"pressure_200m_0": "float32"}, + ) self.my.index = pd.to_datetime(self.my.index) - self.ml = pd.read_csv(join(datadir,'wtk_multiloc.csv'), - index_col = 'time_index', - names = ['time_index','windspeed_10m_0','windspeed_10m_1'], - header = 0, - dtype = {'windspeed_10m_0':'float32', - 'windspeed_10m_1':'float32'}) + self.ml = pd.read_csv( + join(datadir, "wtk_multiloc.csv"), + index_col="time_index", + names=["time_index", "windspeed_10m_0", "windspeed_10m_1"], + header=0, + dtype={"windspeed_10m_0": "float32", "windspeed_10m_1": "float32"}, + ) self.ml.index = pd.to_datetime(self.ml.index) - self.mp = pd.read_csv(join(datadir,'wtk_multiparm.csv'), - index_col = 'time_index', - names = ['time_index','temperature_20m_0','temperature_40m_0'], - header = 0, - dtype = {'temperature_20m_0':'float32', - 'temperature_40m_0':'float32'}) + self.mp = pd.read_csv( + join(datadir, "wtk_multiparm.csv"), + index_col="time_index", + names=["time_index", "temperature_20m_0", "temperature_40m_0"], + header=0, + dtype={"temperature_20m_0": "float32", "temperature_40m_0": "float32"}, + ) self.mp.index = pd.to_datetime(self.mp.index) - self.my_meta = pd.read_csv(join(datadir,'wtk_multiyear_meta.csv'), - index_col = 0, - names = ['latitude','longitude','country','state','county','timezone','elevation','offshore'], - header = 0, - dtype = {'latitude':'float32','longitude':'float32', - 'country':'str','state':'str','county':'str', - 'timezone':'int16','elevation':'float32','offshore':'int16'}) - - self.ml_meta = pd.read_csv(join(datadir,'wtk_multiloc_meta.csv'), - index_col = 0, - names = ['latitude','longitude','country','state','county','timezone','elevation','offshore'], - header = 0, - dtype = {'latitude':'float32','longitude':'float32', - 'country':'str','state':'str','county':'str', - 'timezone':'int16','elevation':'float32','offshore':'int16'}) - - self.mp_meta = pd.read_csv(join(datadir,'wtk_multiparm_meta.csv'), - index_col = 0, - names = ['latitude','longitude','country','state','county','timezone','elevation','offshore'], - header = 0, - dtype = {'latitude':'float32','longitude':'float32', - 'country':'str','state':'str','county':'str', - 'timezone':'int16','elevation':'float32','offshore':'int16'}) + self.my_meta = pd.read_csv( + join(datadir, "wtk_multiyear_meta.csv"), + index_col=0, + names=[ + "latitude", + "longitude", + "country", + "state", + "county", + "timezone", + "elevation", + "offshore", + ], + header=0, + dtype={ + "latitude": "float32", + "longitude": "float32", + "country": "str", + "state": "str", + "county": "str", + "timezone": "int16", + "elevation": "float32", + "offshore": "int16", + }, + ) + + self.ml_meta = pd.read_csv( + join(datadir, "wtk_multiloc_meta.csv"), + index_col=0, + names=[ + "latitude", + "longitude", + "country", + "state", + "county", + "timezone", + "elevation", + "offshore", + ], + header=0, + dtype={ + "latitude": "float32", + "longitude": "float32", + "country": "str", + "state": "str", + "county": "str", + "timezone": "int16", + "elevation": "float32", + "offshore": "int16", + }, + ) + + self.mp_meta = pd.read_csv( + join(datadir, "wtk_multiparm_meta.csv"), + index_col=0, + names=[ + "latitude", + "longitude", + "country", + "state", + "county", + "timezone", + "elevation", + "offshore", + ], + header=0, + dtype={ + "latitude": "float32", + "longitude": "float32", + "country": "str", + "state": "str", + "county": "str", + "timezone": "int16", + "elevation": "float32", + "offshore": "int16", + }, + ) @classmethod def tearDownClass(self): @@ -83,98 +152,104 @@ def tearDownClass(self): # WIND Toolkit data def test_multi_year(self): - data_type = '1-hour' - years = [2018,2019] - lat_lon = (44.624076,-124.280097) # NW_Pacific - parameters = 'pressure_200m' + data_type = "1-hour" + years = [2018, 2019] + lat_lon = (44.624076, -124.280097) # NW_Pacific + parameters = "pressure_200m" wtk_multiyear, meta = wtk.request_wtk_point_data( - data_type, parameters, - lat_lon, years) - assert_frame_equal(self.my,wtk_multiyear) - assert_frame_equal(self.my_meta,meta) - + data_type, parameters, lat_lon, years + ) + assert_frame_equal(self.my, wtk_multiyear) + assert_frame_equal(self.my_meta, meta) def test_multi_loc(self): - data_type = '1-hour' + data_type = "1-hour" years = [2001] - lat_lon = ((39.33,-67.21),(41.3,-75.9)) # Mid-Atlantic - parameters = 'windspeed_10m' + lat_lon = ((39.33, -67.21), (41.3, -75.9)) # Mid-Atlantic + parameters = "windspeed_10m" wtk_multiloc, meta = wtk.request_wtk_point_data( - data_type, parameters, - lat_lon, years) - assert_frame_equal(self.ml,wtk_multiloc) - assert_frame_equal(self.ml_meta,meta) - + data_type, parameters, lat_lon, years + ) + assert_frame_equal(self.ml, wtk_multiloc) + assert_frame_equal(self.ml_meta, meta) def test_multi_parm(self): - data_type = '1-hour' + data_type = "1-hour" years = [2012] - lat_lon = (17.2,-156.5) # Hawaii - parameters = ['temperature_20m','temperature_40m'] + lat_lon = (17.2, -156.5) # Hawaii + parameters = ["temperature_20m", "temperature_40m"] wtk_multiparm, meta = wtk.request_wtk_point_data( - data_type, parameters, - lat_lon, years) - assert_frame_equal(self.mp,wtk_multiparm) - assert_frame_equal(self.mp_meta,meta) - + data_type, parameters, lat_lon, years + ) + assert_frame_equal(self.mp, wtk_multiparm) + assert_frame_equal(self.mp_meta, meta) + # test region_selection function and catch for the preferred region def test_region(self): - region = wtk.region_selection((41.9,-125.3), preferred_region='Offshore_CA') - assert region=='Offshore_CA' - - region = wtk.region_selection((41.9,-125.3), preferred_region='NW_Pacific') - assert region=='NW_Pacific' - + region = wtk.region_selection((41.9, -125.3), preferred_region="Offshore_CA") + assert region == "Offshore_CA" + + region = wtk.region_selection((41.9, -125.3), preferred_region="NW_Pacific") + assert region == "NW_Pacific" + try: - region = wtk.region_selection((41.9,-125.3)) + region = wtk.region_selection((41.9, -125.3)) except TypeError: pass else: - assert False, 'Check wind_toolkit.region_selection() method for catching regional overlap' - - region = wtk.region_selection((36.3,-122.3), preferred_region='') - assert region=='Offshore_CA' - - region = wtk.region_selection((16.3,-155.3), preferred_region='') - assert region=='Hawaii' - - region = wtk.region_selection((45.3,-126.3), preferred_region='') - assert region=='NW_Pacific' - - region = wtk.region_selection((39.3,-70.3), preferred_region='') - assert region=='Mid_Atlantic' - + assert ( + False + ), "Check wind_toolkit.region_selection() method for catching regional overlap" + + region = wtk.region_selection((36.3, -122.3), preferred_region="") + assert region == "Offshore_CA" + + region = wtk.region_selection((16.3, -155.3), preferred_region="") + assert region == "Hawaii" + + region = wtk.region_selection((45.3, -126.3), preferred_region="") + assert region == "NW_Pacific" + + region = wtk.region_selection((39.3, -70.3), preferred_region="") + assert region == "Mid_Atlantic" + # test the check for multiple region def test_multi_region(self): - data_type = '1-hour' + data_type = "1-hour" years = [2012] - lat_lon = ((17.2,-156.5),(45.3,-126.3)) - parameters = ['temperature_20m'] + lat_lon = ((17.2, -156.5), (45.3, -126.3)) + parameters = ["temperature_20m"] try: data, meta = wtk.request_wtk_point_data( - data_type, parameters, - lat_lon, years) + data_type, parameters, lat_lon, years + ) except TypeError: pass else: - assert False, 'Check wind_toolkit.region_selection() method for catching requests over multiple regions' + assert ( + False + ), "Check wind_toolkit.region_selection() method for catching requests over multiple regions" # test plot_region() def test_plot_region(self): fig, ax1 = plt.subplots() - ax1 = wtk.plot_region('Mid_Atlantic',ax=ax1) - - ax2 = wtk.plot_region('NW_Pacific') - + ax1 = wtk.plot_region("Mid_Atlantic", ax=ax1) + + ax2 = wtk.plot_region("NW_Pacific") + # test elevation_to_string() def test_elevation_to_string(self): - - parameter = 'windspeed' + parameter = "windspeed" elevations = [20, 40, 60, 120, 180] parameter_list = wtk.elevation_to_string(parameter, elevations) - assert parameter_list==['windspeed_20m','windspeed_40m','windspeed_60m', - 'windspeed_120m','windspeed_180m'] - + assert parameter_list == [ + "windspeed_20m", + "windspeed_40m", + "windspeed_60m", + "windspeed_120m", + "windspeed_180m", + ] + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/io/test_cdip.py b/mhkit/tests/wave/io/test_cdip.py index 0c741c317..5ea639b14 100644 --- a/mhkit/tests/wave/io/test_cdip.py +++ b/mhkit/tests/wave/io/test_cdip.py @@ -9,43 +9,51 @@ testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir, '..', '..', '..', - '..', 'examples', 'data', 'wave')) +datadir = normpath(join(testdir, "..", "..", "..", "..", "examples", "data", "wave")) class TestIOcdip(unittest.TestCase): - @classmethod def setUpClass(self): - b067_1996 = 'http://thredds.cdip.ucsd.edu/thredds/dodsC/cdip/' + \ - 'archive/067p1/067p1_d04.nc' + b067_1996 = ( + "http://thredds.cdip.ucsd.edu/thredds/dodsC/cdip/" + + "archive/067p1/067p1_d04.nc" + ) self.test_nc = netCDF4.Dataset(b067_1996) - self.vars2D = ['waveEnergyDensity', 'waveMeanDirection', - 'waveA1Value', 'waveB1Value', 'waveA2Value', - 'waveB2Value', 'waveCheckFactor', 'waveSpread', - 'waveM2Value', 'waveN2Value'] + self.vars2D = [ + "waveEnergyDensity", + "waveMeanDirection", + "waveA1Value", + "waveB1Value", + "waveA2Value", + "waveB2Value", + "waveCheckFactor", + "waveSpread", + "waveM2Value", + "waveN2Value", + ] @classmethod def tearDownClass(self): pass def test_validate_date(self): - date = '2013-11-12' + date = "2013-11-12" start_date = wave.io.cdip._validate_date(date) assert isinstance(start_date, datetime) - date = '11-12-2012' + date = "11-12-2012" self.assertRaises(ValueError, wave.io.cdip._validate_date, date) def test_request_netCDF_historic(self): - station_number = '067' - nc = wave.io.cdip.request_netCDF(station_number, 'historic') + station_number = "067" + nc = wave.io.cdip.request_netCDF(station_number, "historic") isinstance(nc, netCDF4.Dataset) def test_request_netCDF_realtime(self): - station_number = '067' - nc = wave.io.cdip.request_netCDF(station_number, 'realtime') + station_number = "067" + nc = wave.io.cdip.request_netCDF(station_number, "realtime") isinstance(nc, netCDF4.Dataset) def test_start_and_end_of_year(self): @@ -62,119 +70,126 @@ def test_start_and_end_of_year(self): self.assertEqual(end_day, expected_end) def test_dates_to_timestamp(self): - start_date = datetime(1996, 10, 2, tzinfo=pytz.UTC) end_date = datetime(1996, 10, 20, tzinfo=pytz.UTC) - start_stamp, end_stamp = wave.io.cdip._dates_to_timestamp(self.test_nc, - start_date=start_date, end_date=end_date) + start_stamp, end_stamp = wave.io.cdip._dates_to_timestamp( + self.test_nc, start_date=start_date, end_date=end_date + ) - start_dt = datetime.utcfromtimestamp( - start_stamp).replace(tzinfo=pytz.UTC) - end_dt = datetime.utcfromtimestamp( - end_stamp).replace(tzinfo=pytz.UTC) + start_dt = datetime.utcfromtimestamp(start_stamp).replace(tzinfo=pytz.UTC) + end_dt = datetime.utcfromtimestamp(end_stamp).replace(tzinfo=pytz.UTC) self.assertEqual(start_dt, start_date) self.assertEqual(end_dt, end_date) def test_get_netcdf_variables_all2Dvars(self): - data = wave.io.cdip.get_netcdf_variables(self.test_nc, - all_2D_variables=True) - returned_keys = [key for key in data['data']['wave2D'].keys()] + data = wave.io.cdip.get_netcdf_variables(self.test_nc, all_2D_variables=True) + returned_keys = [key for key in data["data"]["wave2D"].keys()] self.assertTrue(set(returned_keys) == set(self.vars2D)) def test_get_netcdf_variables_params(self): - parameters = ['waveHs', 'waveTp', 'notParam', 'waveMeanDirection'] - data = wave.io.cdip.get_netcdf_variables(self.test_nc, - parameters=parameters) + parameters = ["waveHs", "waveTp", "notParam", "waveMeanDirection"] + data = wave.io.cdip.get_netcdf_variables(self.test_nc, parameters=parameters) - returned_keys_1D = set([key for key in data['data']['wave'].keys()]) - returned_keys_2D = [key for key in data['data']['wave2D'].keys()] - returned_keys_metadata = [key for key in data['metadata']['wave']] + returned_keys_1D = set([key for key in data["data"]["wave"].keys()]) + returned_keys_2D = [key for key in data["data"]["wave2D"].keys()] + returned_keys_metadata = [key for key in data["metadata"]["wave"]] - self.assertTrue(returned_keys_1D == set(['waveHs', 'waveTp'])) - self.assertTrue(returned_keys_2D == ['waveMeanDirection']) - self.assertTrue(returned_keys_metadata == ['waveFrequency']) + self.assertTrue(returned_keys_1D == set(["waveHs", "waveTp"])) + self.assertTrue(returned_keys_2D == ["waveMeanDirection"]) + self.assertTrue(returned_keys_metadata == ["waveFrequency"]) def test_get_netcdf_variables_time_slice(self): - start_date = '1996-10-01' - end_date = '1996-10-31' + start_date = "1996-10-01" + end_date = "1996-10-31" - data = wave.io.cdip.get_netcdf_variables(self.test_nc, - start_date=start_date, end_date=end_date, - parameters='waveHs') + data = wave.io.cdip.get_netcdf_variables( + self.test_nc, start_date=start_date, end_date=end_date, parameters="waveHs" + ) - start_dt = datetime.strptime(start_date, '%Y-%m-%d') - end_dt = datetime.strptime(end_date, '%Y-%m-%d') + start_dt = datetime.strptime(start_date, "%Y-%m-%d") + end_dt = datetime.strptime(end_date, "%Y-%m-%d") - self.assertTrue(data['data']['wave'].index[-1] < end_dt) - self.assertTrue(data['data']['wave'].index[0] > start_dt) + self.assertTrue(data["data"]["wave"].index[-1] < end_dt) + self.assertTrue(data["data"]["wave"].index[0] > start_dt) def test_request_parse_workflow_multiyear(self): - station_number = '067' + station_number = "067" year1 = 2011 year2 = 2013 years = [year1, year2] - parameters = ['waveHs', 'waveMeanDirection', 'waveA1Value'] - data = wave.io.cdip.request_parse_workflow(station_number=station_number, - years=years, parameters=parameters) + parameters = ["waveHs", "waveMeanDirection", "waveA1Value"] + data = wave.io.cdip.request_parse_workflow( + station_number=station_number, years=years, parameters=parameters + ) expected_index0 = datetime(year1, 1, 1) expected_index_final = datetime(year2, 12, 31) - wave1D = data['data']['wave'] - self.assertEqual(wave1D.index[0].floor( - 'd').to_pydatetime(), expected_index0) + wave1D = data["data"]["wave"] + self.assertEqual(wave1D.index[0].floor("d").to_pydatetime(), expected_index0) self.assertEqual( - wave1D.index[-1].floor('d').to_pydatetime(), expected_index_final) + wave1D.index[-1].floor("d").to_pydatetime(), expected_index_final + ) - for key, wave2D in data['data']['wave2D'].items(): - self.assertEqual(wave2D.index[0].floor( - 'd').to_pydatetime(), expected_index0) + for key, wave2D in data["data"]["wave2D"].items(): + self.assertEqual( + wave2D.index[0].floor("d").to_pydatetime(), expected_index0 + ) self.assertEqual( - wave2D.index[-1].floor('d').to_pydatetime(), expected_index_final) + wave2D.index[-1].floor("d").to_pydatetime(), expected_index_final + ) def test_plot_boxplot(self): - filename = abspath(join(testdir, 'wave_plot_boxplot.png')) + filename = abspath(join(testdir, "wave_plot_boxplot.png")) if isfile(filename): os.remove(filename) - station_number = '067' + station_number = "067" year = 2011 - data = wave.io.cdip.request_parse_workflow(station_number=station_number, years=year, - parameters=['waveHs'], - all_2D_variables=False) + data = wave.io.cdip.request_parse_workflow( + station_number=station_number, + years=year, + parameters=["waveHs"], + all_2D_variables=False, + ) plt.figure() - wave.graphics.plot_boxplot(data['data']['wave']['waveHs']) - plt.savefig(filename, format='png') + wave.graphics.plot_boxplot(data["data"]["wave"]["waveHs"]) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) os.remove(filename) def test_plot_compendium(self): - filename = abspath(join(testdir, 'wave_plot_boxplot.png')) + filename = abspath(join(testdir, "wave_plot_boxplot.png")) if isfile(filename): os.remove(filename) - station_number = '067' + station_number = "067" year = 2011 - data = wave.io.cdip.request_parse_workflow(station_number=station_number, years=year, - parameters=[ - 'waveHs', 'waveTp', 'waveDp'], - all_2D_variables=False) + data = wave.io.cdip.request_parse_workflow( + station_number=station_number, + years=year, + parameters=["waveHs", "waveTp", "waveDp"], + all_2D_variables=False, + ) plt.figure() - wave.graphics.plot_compendium(data['data']['wave']['waveHs'], - data['data']['wave']['waveTp'], data['data']['wave']['waveDp']) - plt.savefig(filename, format='png') + wave.graphics.plot_compendium( + data["data"]["wave"]["waveHs"], + data["data"]["wave"]["waveTp"], + data["data"]["wave"]["waveDp"], + ) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) os.remove(filename) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/io/test_ndbc.py b/mhkit/tests/wave/io/test_ndbc.py index 610dc2977..20f619919 100644 --- a/mhkit/tests/wave/io/test_ndbc.py +++ b/mhkit/tests/wave/io/test_ndbc.py @@ -12,44 +12,84 @@ testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir, '..', '..', '..', - '..', 'examples', 'data', 'wave')) +datadir = normpath(join(testdir, "..", "..", "..", "..", "examples", "data", "wave")) class TestIOndbc(unittest.TestCase): - @classmethod def setUpClass(self): - self.expected_columns_metRT = ['WDIR', 'WSPD', 'GST', 'WVHT', - 'DPD', 'APD', 'MWD', 'PRES', - 'ATMP', 'WTMP', 'DEWP', 'VIS', - 'PTDY', 'TIDE'] - self.expected_units_metRT = {'WDIR': 'degT', 'WSPD': 'm/s', - 'GST': 'm/s', 'WVHT': 'm', 'DPD': 'sec', - 'APD': 'sec', 'MWD': 'degT', 'PRES': 'hPa', - 'ATMP': 'degC', 'WTMP': 'degC', - 'DEWP': 'degC', 'VIS': 'nmi', - 'PTDY': 'hPa', 'TIDE': 'ft'} - - self.expected_columns_metH = ['WDIR', 'WSPD', 'GST', 'WVHT', 'DPD', - 'APD', 'MWD', 'PRES', 'ATMP', 'WTMP', - 'DEWP', 'VIS', 'TIDE'] - self.expected_units_metH = {'WDIR': 'degT', 'WSPD': 'm/s', 'GST': 'm/s', - 'WVHT': 'm', 'DPD': 'sec', 'APD': 'sec', - 'MWD': 'deg', 'PRES': 'hPa', 'ATMP': 'degC', - 'WTMP': 'degC', 'DEWP': 'degC', 'VIS': 'nmi', - 'TIDE': 'ft'} - self.filenames = ['46042w1996.txt.gz', - '46029w1997.txt.gz', - '46029w1998.txt.gz'] - self.swden = pd.read_csv(join(datadir, self.filenames[0]), sep=r'\s+', - compression='gzip') - - buoy = '42012' + self.expected_columns_metRT = [ + "WDIR", + "WSPD", + "GST", + "WVHT", + "DPD", + "APD", + "MWD", + "PRES", + "ATMP", + "WTMP", + "DEWP", + "VIS", + "PTDY", + "TIDE", + ] + self.expected_units_metRT = { + "WDIR": "degT", + "WSPD": "m/s", + "GST": "m/s", + "WVHT": "m", + "DPD": "sec", + "APD": "sec", + "MWD": "degT", + "PRES": "hPa", + "ATMP": "degC", + "WTMP": "degC", + "DEWP": "degC", + "VIS": "nmi", + "PTDY": "hPa", + "TIDE": "ft", + } + + self.expected_columns_metH = [ + "WDIR", + "WSPD", + "GST", + "WVHT", + "DPD", + "APD", + "MWD", + "PRES", + "ATMP", + "WTMP", + "DEWP", + "VIS", + "TIDE", + ] + self.expected_units_metH = { + "WDIR": "degT", + "WSPD": "m/s", + "GST": "m/s", + "WVHT": "m", + "DPD": "sec", + "APD": "sec", + "MWD": "deg", + "PRES": "hPa", + "ATMP": "degC", + "WTMP": "degC", + "DEWP": "degC", + "VIS": "nmi", + "TIDE": "ft", + } + self.filenames = ["46042w1996.txt.gz", "46029w1997.txt.gz", "46029w1998.txt.gz"] + self.swden = pd.read_csv( + join(datadir, self.filenames[0]), sep=r"\s+", compression="gzip" + ) + + buoy = "42012" year = 2021 - date = np.datetime64('2021-02-21T12:40:00') - directional_data_all = wave.io.ndbc.request_directional_data( - buoy, year) + date = np.datetime64("2021-02-21T12:40:00") + directional_data_all = wave.io.ndbc.request_directional_data(buoy, year) self.directional_data = directional_data_all.sel(date=date) @classmethod @@ -58,10 +98,9 @@ def tearDownClass(self): # Realtime data def test_ndbc_read_realtime_met(self): - data, units = wave.io.ndbc.read_file(join(datadir, '46097.txt')) + data, units = wave.io.ndbc.read_file(join(datadir, "46097.txt")) expected_index0 = datetime(2019, 4, 2, 13, 50) - self.assertSetEqual(set(data.columns), set( - self.expected_columns_metRT)) + self.assertSetEqual(set(data.columns), set(self.expected_columns_metRT)) self.assertEqual(data.index[0], expected_index0) self.assertEqual(data.shape, (6490, 14)) self.assertEqual(units, self.expected_units_metRT) @@ -69,8 +108,7 @@ def test_ndbc_read_realtime_met(self): # Historical data def test_ndbnc_read_historical_met(self): # QC'd monthly data, Aug 2019 - data, units = wave.io.ndbc.read_file( - join(datadir, '46097h201908qc.txt')) + data, units = wave.io.ndbc.read_file(join(datadir, "46097h201908qc.txt")) expected_index0 = datetime(2019, 8, 1, 0, 0) self.assertSetEqual(set(data.columns), set(self.expected_columns_metH)) self.assertEqual(data.index[0], expected_index0) @@ -79,87 +117,89 @@ def test_ndbnc_read_historical_met(self): # Spectral data def test_ndbc_read_spectral(self): - data, units = wave.io.ndbc.read_file(join(datadir, 'data.txt')) + data, units = wave.io.ndbc.read_file(join(datadir, "data.txt")) self.assertEqual(data.shape, (743, 47)) self.assertEqual(units, None) # Continuous wind data def test_ndbc_read_cwind_no_units(self): - data, units = wave.io.ndbc.read_file(join(datadir, '42a01c2003.txt')) + data, units = wave.io.ndbc.read_file(join(datadir, "42a01c2003.txt")) self.assertEqual(data.shape, (4320, 5)) self.assertEqual(units, None) def test_ndbc_read_cwind_units(self): - data, units = wave.io.ndbc.read_file(join(datadir, '46002c2016.txt')) + data, units = wave.io.ndbc.read_file(join(datadir, "46002c2016.txt")) self.assertEqual(data.shape, (28468, 5)) - self.assertEqual(units, wave.io.ndbc.parameter_units('cwind')) + self.assertEqual(units, wave.io.ndbc.parameter_units("cwind")) def test_ndbc_available_data(self): - data = wave.io.ndbc.available_data('swden', buoy_number='46029') + data = wave.io.ndbc.available_data("swden", buoy_number="46029") cols = data.columns.tolist() - exp_cols = ['id', 'year', 'filename'] + exp_cols = ["id", "year", "filename"] self.assertEqual(cols, exp_cols) years = [int(year) for year in data.year.tolist()] - exp_years = [*range(1996, 1996+len(years))] + exp_years = [*range(1996, 1996 + len(years))] self.assertEqual(years, exp_years) self.assertEqual(data.shape, (len(data), 3)) def test__ndbc_parse_filenames(self): filenames = pd.Series(self.filenames) - buoys = wave.io.ndbc._parse_filenames('swden', filenames) + buoys = wave.io.ndbc._parse_filenames("swden", filenames) years = buoys.year.tolist() numbers = buoys.id.tolist() fnames = buoys.filename.tolist() self.assertEqual(buoys.shape, (len(filenames), 3)) - self.assertListEqual(years, ['1996', '1997', '1998']) - self.assertListEqual(numbers, ['46042', '46029', '46029']) + self.assertListEqual(years, ["1996", "1997", "1998"]) + self.assertListEqual(numbers, ["46042", "46029", "46029"]) self.assertListEqual(fnames, self.filenames) def test_ndbc_request_data(self): filenames = pd.Series(self.filenames[0]) - ndbc_data = wave.io.ndbc.request_data('swden', filenames) - self.assertTrue(self.swden.equals(ndbc_data['1996'])) + ndbc_data = wave.io.ndbc.request_data("swden", filenames) + self.assertTrue(self.swden.equals(ndbc_data["1996"])) def test_ndbc_request_data_from_dataframe(self): filenames = pd.DataFrame(pd.Series(data=self.filenames[0])) - ndbc_data = wave.io.ndbc.request_data('swden', filenames) - assert_frame_equal(self.swden, ndbc_data['1996']) + ndbc_data = wave.io.ndbc.request_data("swden", filenames) + assert_frame_equal(self.swden, ndbc_data["1996"]) def test_ndbc_request_data_filenames_length(self): with self.assertRaises(ValueError): - wave.io.ndbc.request_data('swden', pd.Series(dtype=float)) + wave.io.ndbc.request_data("swden", pd.Series(dtype=float)) def test_ndbc_to_datetime_index(self): - dt = wave.io.ndbc.to_datetime_index('swden', self.swden) + dt = wave.io.ndbc.to_datetime_index("swden", self.swden) self.assertEqual(type(dt.index), pd.DatetimeIndex) - self.assertFalse({'YY', 'MM', 'DD', 'hh'}.issubset(dt.columns)) + self.assertFalse({"YY", "MM", "DD", "hh"}.issubset(dt.columns)) def test_ndbc_request_data_empty_file(self): temp_stdout = StringIO() # known empty file. If NDBC replaces, this test may fail. filename = "42008h1984.txt.gz" - buoy_id = '42008' - year = '1984' + buoy_id = "42008" + year = "1984" with contextlib.redirect_stdout(temp_stdout): - wave.io.ndbc.request_data('stdmet', pd.Series(filename)) + wave.io.ndbc.request_data("stdmet", pd.Series(filename)) output = temp_stdout.getvalue().strip() - msg = (f'The NDBC buoy {buoy_id} for year {year} with ' - f'filename {filename} is empty or missing ' - 'data. Please omit this file from your data ' - 'request in the future.') + msg = ( + f"The NDBC buoy {buoy_id} for year {year} with " + f"filename {filename} is empty or missing " + "data. Please omit this file from your data " + "request in the future." + ) self.assertEqual(output, msg) def test_ndbc_request_multiple_files_with_empty_file(self): temp_stdout = StringIO() # known empty file. If NDBC replaces, this test may fail. - empty_file = '42008h1984.txt.gz' - working_file = '46042h1996.txt.gz' + empty_file = "42008h1984.txt.gz" + working_file = "46042h1996.txt.gz" filenames = pd.Series([empty_file, working_file]) with contextlib.redirect_stdout(temp_stdout): - ndbc_data = wave.io.ndbc.request_data('stdmet', filenames) + ndbc_data = wave.io.ndbc.request_data("stdmet", filenames) self.assertEqual(1, len(ndbc_data)) def test_ndbc_dates_to_datetime(self): @@ -168,19 +208,18 @@ def test_ndbc_dates_to_datetime(self): def test_ndbc_date_string_to_datetime(self): swden = self.swden.copy(deep=True) - swden['mm'] = np.zeros(len(swden)).astype(int).astype(str) - year_string = 'YY' - year_fmt = '%y' - parse_columns = [year_string, 'MM', 'DD', 'hh', 'mm'] - df = wave.io.ndbc._date_string_to_datetime(swden, parse_columns, - year_fmt) - dt = df['date'] + swden["mm"] = np.zeros(len(swden)).astype(int).astype(str) + year_string = "YY" + year_fmt = "%y" + parse_columns = [year_string, "MM", "DD", "hh", "mm"] + df = wave.io.ndbc._date_string_to_datetime(swden, parse_columns, year_fmt) + dt = df["date"] self.assertEqual(datetime(1996, 1, 1, 1, 0), dt[1]) def test_ndbc_parameter_units(self): - parameter = 'swden' + parameter = "swden" units = wave.io.ndbc.parameter_units(parameter) - self.assertEqual(units[parameter], '(m*m)/Hz') + self.assertEqual(units[parameter], "(m*m)/Hz") def test_ndbc_request_directional_data(self): data = self.directional_data @@ -196,31 +235,33 @@ def test_ndbc_request_directional_data(self): def test_ndbc_create_spread_function(self): directions = np.arange(0, 360, 2.0) - spread = wave.io.ndbc.create_spread_function( - self.directional_data, directions) + spread = wave.io.ndbc.create_spread_function(self.directional_data, directions) self.assertEqual(spread.shape, (47, 180)) - self.assertEqual(spread.units, '1/Hz/deg') + self.assertEqual(spread.units, "1/Hz/deg") def test_ndbc_create_directional_spectrum(self): directions = np.arange(0, 360, 2.0) spectrum = wave.io.ndbc.create_directional_spectrum( - self.directional_data, directions) + self.directional_data, directions + ) self.assertEqual(spectrum.shape, (47, 180)) - self.assertEqual(spectrum.units, 'm^2/Hz/deg') + self.assertEqual(spectrum.units, "m^2/Hz/deg") def test_plot_directional_spectrum(self): directions = np.arange(0, 360, 2.0) spectrum = wave.io.ndbc.create_spread_function( - self.directional_data, directions) + self.directional_data, directions + ) wave.graphics.plot_directional_spectrum( spectrum, color_level_min=0.0, fill=True, nlevels=6, name="Elevation Variance", - units="m^2") + units="m^2", + ) - filename = abspath(join(testdir, 'wave_plot_directional_spectrum.png')) + filename = abspath(join(testdir, "wave_plot_directional_spectrum.png")) if isfile(filename): os.remove(filename) plt.savefig(filename) @@ -231,27 +272,28 @@ def test_plot_directional_spectrum(self): def test_get_buoy_metadata(self): metadata = wave.io.ndbc.get_buoy_metadata("46042") expected_keys = { - 'buoy', - 'provider', - 'type', - 'SCOOP payload', - 'lat', - 'lon', - 'Site elevation', - 'Air temp height', - 'Anemometer height', - 'Barometer elevation', - 'Sea temp depth', - 'Water depth', - 'Watch circle radius' + "buoy", + "provider", + "type", + "SCOOP payload", + "lat", + "lon", + "Site elevation", + "Air temp height", + "Anemometer height", + "Barometer elevation", + "Sea temp depth", + "Water depth", + "Watch circle radius", } self.assertSetEqual(set(metadata.keys()), expected_keys) self.assertEqual( - metadata['provider'], 'Owned and maintained by National Data Buoy Center') - self.assertEqual(metadata['type'], '3-meter foam buoy w/ seal cage') - self.assertAlmostEqual(float(metadata['lat']), 36.785) - self.assertAlmostEqual(float(metadata['lon']), 122.396) - self.assertEqual(metadata['Site elevation'], 'sea level') + metadata["provider"], "Owned and maintained by National Data Buoy Center" + ) + self.assertEqual(metadata["type"], "3-meter foam buoy w/ seal cage") + self.assertAlmostEqual(float(metadata["lat"]), 36.785) + self.assertAlmostEqual(float(metadata["lon"]), 122.396) + self.assertEqual(metadata["Site elevation"], "sea level") def test_get_buoy_metadata_invalid_station(self): with self.assertRaises(ValueError): @@ -262,5 +304,5 @@ def test_get_buoy_metadata_nonexistent_station(self): wave.io.ndbc.get_buoy_metadata("99999") -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/io/test_swan.py b/mhkit/tests/wave/io/test_swan.py index c3e113d81..a6a9204c6 100644 --- a/mhkit/tests/wave/io/test_swan.py +++ b/mhkit/tests/wave/io/test_swan.py @@ -22,19 +22,22 @@ testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir,'..','..','..','..','examples','data','wave')) +datadir = normpath(join(testdir, "..", "..", "..", "..", "examples", "data", "wave")) class TestSWAN(unittest.TestCase): - @classmethod def setUpClass(self): - swan_datadir = join(datadir,'swan') - self.table_file = join(swan_datadir,'SWANOUT.DAT') - self.swan_block_mat_file = join(swan_datadir,'SWANOUT.MAT') - self.swan_block_txt_file = join(swan_datadir,'SWANOUTBlock.DAT') - self.expected_table = pd.read_csv(self.table_file, sep='\s+', comment='%', - names=['Xp', 'Yp', 'Hsig', 'Dir', 'RTpeak', 'TDir']) + swan_datadir = join(datadir, "swan") + self.table_file = join(swan_datadir, "SWANOUT.DAT") + self.swan_block_mat_file = join(swan_datadir, "SWANOUT.MAT") + self.swan_block_txt_file = join(swan_datadir, "SWANOUTBlock.DAT") + self.expected_table = pd.read_csv( + self.table_file, + sep="\s+", + comment="%", + names=["Xp", "Yp", "Hsig", "Dir", "RTpeak", "TDir"], + ) @classmethod def tearDownClass(self): @@ -45,39 +48,41 @@ def test_read_table(self): assert_frame_equal(self.expected_table, swan_table) def test_read_block_mat(self): - swanBlockMat, metaDataMat = wave.io.swan.read_block(self.swan_block_mat_file ) + swanBlockMat, metaDataMat = wave.io.swan.read_block(self.swan_block_mat_file) self.assertEqual(len(swanBlockMat), 4) - self.assertAlmostEqual(self.expected_table['Hsig'].sum(), - swanBlockMat['Hsig'].sum().sum(), places=1) + self.assertAlmostEqual( + self.expected_table["Hsig"].sum(), + swanBlockMat["Hsig"].sum().sum(), + places=1, + ) def test_read_block_txt(self): swanBlockTxt, metaData = wave.io.swan.read_block(self.swan_block_txt_file) self.assertEqual(len(swanBlockTxt), 4) - sumSum = swanBlockTxt['Significant wave height'].sum().sum() - self.assertAlmostEqual(self.expected_table['Hsig'].sum(), - sumSum, places=-2) + sumSum = swanBlockTxt["Significant wave height"].sum().sum() + self.assertAlmostEqual(self.expected_table["Hsig"].sum(), sumSum, places=-2) def test_block_to_table(self): - x=np.arange(5) - y=np.arange(5,10) - df = pd.DataFrame(np.random.rand(5,5), columns=x, index=y) + x = np.arange(5) + y = np.arange(5, 10) + df = pd.DataFrame(np.random.rand(5, 5), columns=x, index=y) dff = wave.io.swan.block_to_table(df) - self.assertEqual(dff.shape, (len(x)*len(y), 3)) + self.assertEqual(dff.shape, (len(x) * len(y), 3)) self.assertTrue(all(dff.x.unique() == np.unique(x))) def test_dictionary_of_block_to_table(self): - x=np.arange(5) - y=np.arange(5,10) - df = pd.DataFrame(np.random.rand(5,5), columns=x, index=y) - keys = ['data1', 'data2'] + x = np.arange(5) + y = np.arange(5, 10) + df = pd.DataFrame(np.random.rand(5, 5), columns=x, index=y) + keys = ["data1", "data2"] data = [df, df] - dict_of_dfs = dict(zip(keys,data)) + dict_of_dfs = dict(zip(keys, data)) dff = wave.io.swan.dictionary_of_block_to_table(dict_of_dfs) - self.assertEqual(dff.shape, (len(x)*len(y), 2+len(keys))) + self.assertEqual(dff.shape, (len(x) * len(y), 2 + len(keys))) self.assertTrue(all(dff.x.unique() == np.unique(x))) for key in keys: self.assertTrue(key in dff.keys()) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/io/test_wecsim.py b/mhkit/tests/wave/io/test_wecsim.py index 3c070458c..e6a606352 100644 --- a/mhkit/tests/wave/io/test_wecsim.py +++ b/mhkit/tests/wave/io/test_wecsim.py @@ -22,11 +22,10 @@ testdir = dirname(abspath(__file__)) -datadir = normpath(join(testdir,'..','..','..','..','examples','data','wave')) +datadir = normpath(join(testdir, "..", "..", "..", "..", "examples", "data", "wave")) class TestWECSim(unittest.TestCase): - @classmethod def setUpClass(self): pass @@ -37,52 +36,60 @@ def tearDownClass(self): ### WEC-Sim data, no mooring def test_read_wecSim_no_mooring(self): - ws_output = wave.io.wecsim.read_output(join(datadir, 'RM3_matlabWorkspace_structure.mat')) - self.assertEqual(ws_output['wave'].elevation.name,'elevation') - self.assertEqual(ws_output['bodies']['body1'].name,'float') - self.assertEqual(ws_output['ptos'].name,'PTO1') - self.assertEqual(ws_output['constraints'].name,'Constraint1') - self.assertEqual(len(ws_output['mooring']),0) - self.assertEqual(len(ws_output['moorDyn']),0) - self.assertEqual(len(ws_output['ptosim']),0) - self.assertEqual(len(ws_output['cables']),0) - + ws_output = wave.io.wecsim.read_output( + join(datadir, "RM3_matlabWorkspace_structure.mat") + ) + self.assertEqual(ws_output["wave"].elevation.name, "elevation") + self.assertEqual(ws_output["bodies"]["body1"].name, "float") + self.assertEqual(ws_output["ptos"].name, "PTO1") + self.assertEqual(ws_output["constraints"].name, "Constraint1") + self.assertEqual(len(ws_output["mooring"]), 0) + self.assertEqual(len(ws_output["moorDyn"]), 0) + self.assertEqual(len(ws_output["ptosim"]), 0) + self.assertEqual(len(ws_output["cables"]), 0) + ### WEC-Sim data, with cable def test_read_wecSim_cable(self): - ws_output = wave.io.wecsim.read_output(join(datadir, 'Cable_matlabWorkspace_structure.mat')) - self.assertEqual(ws_output['wave'].elevation.name,'elevation') - self.assertEqual(ws_output['bodies']['body1'].name,'BuoyDraft5cm') - self.assertEqual(ws_output['cables'].name,'Cable') - self.assertEqual(ws_output['constraints']['constraint1'].name,'Mooring') - self.assertEqual(len(ws_output['mooring']),0) - self.assertEqual(len(ws_output['moorDyn']),0) - self.assertEqual(len(ws_output['ptosim']),0) - self.assertEqual(len(ws_output['ptos']),0) + ws_output = wave.io.wecsim.read_output( + join(datadir, "Cable_matlabWorkspace_structure.mat") + ) + self.assertEqual(ws_output["wave"].elevation.name, "elevation") + self.assertEqual(ws_output["bodies"]["body1"].name, "BuoyDraft5cm") + self.assertEqual(ws_output["cables"].name, "Cable") + self.assertEqual(ws_output["constraints"]["constraint1"].name, "Mooring") + self.assertEqual(len(ws_output["mooring"]), 0) + self.assertEqual(len(ws_output["moorDyn"]), 0) + self.assertEqual(len(ws_output["ptosim"]), 0) + self.assertEqual(len(ws_output["ptos"]), 0) ### WEC-Sim data, with mooring def test_read_wecSim_with_mooring(self): - ws_output = wave.io.wecsim.read_output(join(datadir, 'RM3MooringMatrix_matlabWorkspace_structure.mat')) - self.assertEqual(ws_output['wave'].elevation.name,'elevation') - self.assertEqual(ws_output['bodies']['body1'].name,'float') - self.assertEqual(ws_output['ptos'].name,'PTO1') - self.assertEqual(ws_output['constraints'].name,'Constraint1') - self.assertEqual(len(ws_output['mooring']),40001) - self.assertEqual(len(ws_output['moorDyn']),0) - self.assertEqual(len(ws_output['ptosim']),0) - self.assertEqual(len(ws_output['cables']),0) + ws_output = wave.io.wecsim.read_output( + join(datadir, "RM3MooringMatrix_matlabWorkspace_structure.mat") + ) + self.assertEqual(ws_output["wave"].elevation.name, "elevation") + self.assertEqual(ws_output["bodies"]["body1"].name, "float") + self.assertEqual(ws_output["ptos"].name, "PTO1") + self.assertEqual(ws_output["constraints"].name, "Constraint1") + self.assertEqual(len(ws_output["mooring"]), 40001) + self.assertEqual(len(ws_output["moorDyn"]), 0) + self.assertEqual(len(ws_output["ptosim"]), 0) + self.assertEqual(len(ws_output["cables"]), 0) ### WEC-Sim data, with moorDyn def test_read_wecSim_with_moorDyn(self): - ws_output = wave.io.wecsim.read_output(join(datadir, 'RM3MoorDyn_matlabWorkspace_structure.mat')) - self.assertEqual(ws_output['wave'].elevation.name,'elevation') - self.assertEqual(ws_output['bodies']['body1'].name,'float') - self.assertEqual(ws_output['ptos'].name,'PTO1') - self.assertEqual(ws_output['constraints'].name,'Constraint1') - self.assertEqual(len(ws_output['mooring']),40001) - self.assertEqual(len(ws_output['moorDyn']),7) - self.assertEqual(len(ws_output['ptosim']),0) - self.assertEqual(len(ws_output['cables']),0) + ws_output = wave.io.wecsim.read_output( + join(datadir, "RM3MoorDyn_matlabWorkspace_structure.mat") + ) + self.assertEqual(ws_output["wave"].elevation.name, "elevation") + self.assertEqual(ws_output["bodies"]["body1"].name, "float") + self.assertEqual(ws_output["ptos"].name, "PTO1") + self.assertEqual(ws_output["constraints"].name, "Constraint1") + self.assertEqual(len(ws_output["mooring"]), 40001) + self.assertEqual(len(ws_output["moorDyn"]), 7) + self.assertEqual(len(ws_output["ptosim"]), 0) + self.assertEqual(len(ws_output["cables"]), 0) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index 7b870325b..000ae27da 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -22,34 +22,32 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir, relpath('../../../examples/data/wave'))) +datadir = normpath(join(testdir, relpath("../../../examples/data/wave"))) class TestContours(unittest.TestCase): - @classmethod def setUpClass(self): - - f_name = 'Hm0_Te_46022.json' + f_name = "Hm0_Te_46022.json" self.Hm0Te = pd.read_json(join(datadir, f_name)) - file_loc = join(datadir, 'principal_component_analysis.pkl') - with open(file_loc, 'rb') as f: + file_loc = join(datadir, "principal_component_analysis.pkl") + with open(file_loc, "rb") as f: self.pca = pickle.load(f) f.close() - file_loc = join(datadir, 'WDRT_caluculated_countours.json') + file_loc = join(datadir, "WDRT_caluculated_countours.json") with open(file_loc) as f: self.wdrt_copulas = json.load(f) f.close() - ndbc_46050 = pd.read_csv(join(datadir, 'NDBC46050.csv')) - self.wdrt_Hm0 = ndbc_46050['Hm0'] - self.wdrt_Te = ndbc_46050['Te'] + ndbc_46050 = pd.read_csv(join(datadir, "NDBC46050.csv")) + self.wdrt_Hm0 = ndbc_46050["Hm0"] + self.wdrt_Te = ndbc_46050["Te"] self.wdrt_dt = 3600 self.wdrt_period = 50 @@ -59,185 +57,224 @@ def tearDownClass(self): pass def test_environmental_contour(self): - Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te['Hm0'] < 20] + df = Hm0Te[Hm0Te["Hm0"] < 20] Hm0 = df.Hm0.values Te = df.Te.values - dt_ss = (Hm0Te.index[2]-Hm0Te.index[1]).seconds + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds period = 100 - copula = wave.contours.environmental_contours(Hm0, - Te, dt_ss, period, 'PCA') + copula = wave.contours.environmental_contours(Hm0, Te, dt_ss, period, "PCA") - Hm0_contour = copula['PCA_x1'] - Te_contour = copula['PCA_x2'] + Hm0_contour = copula["PCA_x1"] + Te_contour = copula["PCA_x2"] - file_loc = join(datadir, 'Hm0_Te_contours_46022.csv') + file_loc = join(datadir, "Hm0_Te_contours_46022.csv") expected_contours = pd.read_csv(file_loc) - assert_allclose(expected_contours.Hm0_contour.values, - Hm0_contour, rtol=1e-3) + assert_allclose(expected_contours.Hm0_contour.values, Hm0_contour, rtol=1e-3) def test__principal_component_analysis(self): Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te['Hm0'] < 20] + df = Hm0Te[Hm0Te["Hm0"] < 20] Hm0 = df.Hm0.values Te = df.Te.values - PCA = (wave.contours - ._principal_component_analysis(Hm0, Te, bin_size=250)) - - assert_allclose(PCA['principal_axes'], - self.pca['principal_axes']) - self.assertAlmostEqual(PCA['shift'], self.pca['shift']) - self.assertAlmostEqual(PCA['x1_fit']['mu'], - self.pca['x1_fit']['mu']) - self.assertAlmostEqual(PCA['mu_fit'].slope, - self.pca['mu_fit'].slope) - self.assertAlmostEqual(PCA['mu_fit'].intercept, - self.pca['mu_fit'].intercept) - assert_allclose(PCA['sigma_fit']['x'], - self.pca['sigma_fit']['x']) + PCA = wave.contours._principal_component_analysis(Hm0, Te, bin_size=250) + + assert_allclose(PCA["principal_axes"], self.pca["principal_axes"]) + self.assertAlmostEqual(PCA["shift"], self.pca["shift"]) + self.assertAlmostEqual(PCA["x1_fit"]["mu"], self.pca["x1_fit"]["mu"]) + self.assertAlmostEqual(PCA["mu_fit"].slope, self.pca["mu_fit"].slope) + self.assertAlmostEqual(PCA["mu_fit"].intercept, self.pca["mu_fit"].intercept) + assert_allclose(PCA["sigma_fit"]["x"], self.pca["sigma_fit"]["x"]) def test_plot_environmental_contour(self): - file_loc = join(plotdir, 'wave_plot_environmental_contour.png') + file_loc = join(plotdir, "wave_plot_environmental_contour.png") filename = abspath(file_loc) if isfile(filename): os.remove(filename) Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te['Hm0'] < 20] + df = Hm0Te[Hm0Te["Hm0"] < 20] Hm0 = df.Hm0.values Te = df.Te.values - dt_ss = (Hm0Te.index[2]-Hm0Te.index[1]).seconds + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds time_R = 100 - copulas = wave.contours.environmental_contours(Hm0, Te, dt_ss, - time_R, 'PCA') + copulas = wave.contours.environmental_contours(Hm0, Te, dt_ss, time_R, "PCA") - Hm0_contour = copulas['PCA_x1'] - Te_contour = copulas['PCA_x2'] + Hm0_contour = copulas["PCA_x1"] + Te_contour = copulas["PCA_x2"] - dt_ss = (Hm0Te.index[2]-Hm0Te.index[1]).seconds + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds time_R = 100 plt.figure() - (wave.graphics - .plot_environmental_contour(Te, Hm0, - Te_contour, Hm0_contour, - data_label='NDBC 46022', - contour_label='100-year Contour', - x_label='Te [s]', - y_label='Hm0 [m]') - ) - plt.savefig(filename, format='png') + ( + wave.graphics.plot_environmental_contour( + Te, + Hm0, + Te_contour, + Hm0_contour, + data_label="NDBC 46022", + contour_label="100-year Contour", + x_label="Te [s]", + y_label="Hm0 [m]", + ) + ) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_environmental_contour_multiyear(self): - filename = abspath(join(plotdir, - 'wave_plot_environmental_contour_multiyear.png')) + filename = abspath( + join(plotdir, "wave_plot_environmental_contour_multiyear.png") + ) if isfile(filename): os.remove(filename) Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te['Hm0'] < 20] + df = Hm0Te[Hm0Te["Hm0"] < 20] Hm0 = df.Hm0.values Te = df.Te.values - dt_ss = (Hm0Te.index[2]-Hm0Te.index[1]).seconds + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds time_R = [100, 105, 110, 120, 150] Hm0s = [] Tes = [] for period in time_R: - copulas = (wave.contours - .environmental_contours(Hm0, Te, dt_ss, period, 'PCA')) + copulas = wave.contours.environmental_contours( + Hm0, Te, dt_ss, period, "PCA" + ) - Hm0s.append(copulas['PCA_x1']) - Tes.append(copulas['PCA_x2']) + Hm0s.append(copulas["PCA_x1"]) + Tes.append(copulas["PCA_x2"]) - contour_label = [f'{year}-year Contour' for year in time_R] + contour_label = [f"{year}-year Contour" for year in time_R] plt.figure() - (wave.graphics - .plot_environmental_contour(Te, Hm0, - Tes, Hm0s, - data_label='NDBC 46022', - contour_label=contour_label, - x_label='Te [s]', - y_label='Hm0 [m]') - ) - plt.savefig(filename, format='png') + ( + wave.graphics.plot_environmental_contour( + Te, + Hm0, + Tes, + Hm0s, + data_label="NDBC 46022", + contour_label=contour_label, + x_label="Te [s]", + y_label="Hm0 [m]", + ) + ) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_standard_copulas(self): - copulas = (wave.contours - .environmental_contours(self.wdrt_Hm0, self.wdrt_Te, - self.wdrt_dt, self.wdrt_period, - method=['gaussian', 'gumbel', 'clayton']) - ) + copulas = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["gaussian", "gumbel", "clayton"], + ) # WDRT slightly vaires Rosenblatt copula parameters from # the other copula default parameters - rosen = (wave.contours - .environmental_contours(self.wdrt_Hm0, self.wdrt_Te, - self.wdrt_dt, self.wdrt_period, method=[ - 'rosenblatt'], - min_bin_count=50, initial_bin_max_val=0.5, - bin_val_size=0.25)) - copulas['rosenblatt_x1'] = rosen['rosenblatt_x1'] - copulas['rosenblatt_x2'] = rosen['rosenblatt_x2'] - - methods = ['gaussian', 'gumbel', 'clayton', 'rosenblatt'] + rosen = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["rosenblatt"], + min_bin_count=50, + initial_bin_max_val=0.5, + bin_val_size=0.25, + ) + copulas["rosenblatt_x1"] = rosen["rosenblatt_x1"] + copulas["rosenblatt_x2"] = rosen["rosenblatt_x2"] + + methods = ["gaussian", "gumbel", "clayton", "rosenblatt"] close = [] for method in methods: - close.append(np.allclose(copulas[f'{method}_x1'], - self.wdrt_copulas[f'{method}_x1'])) - close.append(np.allclose(copulas[f'{method}_x2'], - self.wdrt_copulas[f'{method}_x2'])) + close.append( + np.allclose(copulas[f"{method}_x1"], self.wdrt_copulas[f"{method}_x1"]) + ) + close.append( + np.allclose(copulas[f"{method}_x2"], self.wdrt_copulas[f"{method}_x2"]) + ) self.assertTrue(all(close)) def test_nonparametric_copulas(self): - methods = ['nonparametric_gaussian', 'nonparametric_clayton', - 'nonparametric_gumbel'] + methods = [ + "nonparametric_gaussian", + "nonparametric_clayton", + "nonparametric_gumbel", + ] - np_copulas = wave.contours.environmental_contours(self.wdrt_Hm0, - self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods) + np_copulas = wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods + ) close = [] for method in methods: - close.append(np.allclose(np_copulas[f'{method}_x1'], - self.wdrt_copulas[f'{method}_x1'], atol=0.13)) - close.append(np.allclose(np_copulas[f'{method}_x2'], - self.wdrt_copulas[f'{method}_x2'], atol=0.13)) + close.append( + np.allclose( + np_copulas[f"{method}_x1"], + self.wdrt_copulas[f"{method}_x1"], + atol=0.13, + ) + ) + close.append( + np.allclose( + np_copulas[f"{method}_x2"], + self.wdrt_copulas[f"{method}_x2"], + atol=0.13, + ) + ) self.assertTrue(all(close)) def test_kde_copulas(self): - kde_copula = wave.contours.environmental_contours(self.wdrt_Hm0, - self.wdrt_Te, self.wdrt_dt, self.wdrt_period, - method=['bivariate_KDE'], bandwidth=[0.23, 0.23]) - log_kde_copula = (wave.contours - .environmental_contours(self.wdrt_Hm0, self.wdrt_Te, - self.wdrt_dt, self.wdrt_period, method=['bivariate_KDE_log'], bandwidth=[0.02, 0.11]) - ) - - close = [np.allclose(kde_copula['bivariate_KDE_x1'], - self.wdrt_copulas['bivariate_KDE_x1']), - np.allclose(kde_copula['bivariate_KDE_x2'], - self.wdrt_copulas['bivariate_KDE_x2']), - np.allclose(log_kde_copula['bivariate_KDE_log_x1'], - self.wdrt_copulas['bivariate_KDE_log_x1']), - np.allclose(log_kde_copula['bivariate_KDE_log_x2'], - self.wdrt_copulas['bivariate_KDE_log_x2'])] + kde_copula = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["bivariate_KDE"], + bandwidth=[0.23, 0.23], + ) + log_kde_copula = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["bivariate_KDE_log"], + bandwidth=[0.02, 0.11], + ) + + close = [ + np.allclose( + kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] + ), + np.allclose( + kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] + ), + np.allclose( + log_kde_copula["bivariate_KDE_log_x1"], + self.wdrt_copulas["bivariate_KDE_log_x1"], + ), + np.allclose( + log_kde_copula["bivariate_KDE_log_x2"], + self.wdrt_copulas["bivariate_KDE_log_x2"], + ), + ] self.assertTrue(all(close)) def test_samples_contours(self): @@ -245,30 +282,39 @@ def test_samples_contours(self): hs_samples_0 = np.array([8.56637939, 9.27612515, 8.70427774]) hs_contour = np.array(self.wdrt_copulas["gaussian_x1"]) te_contour = np.array(self.wdrt_copulas["gaussian_x2"]) - hs_samples = wave.contours.samples_contour( - te_samples, te_contour, hs_contour) + hs_samples = wave.contours.samples_contour(te_samples, te_contour, hs_contour) assert_allclose(hs_samples, hs_samples_0) def test_samples_seastate(self): - hs_0 = np.array([5.91760129, 4.55185088, 1.41144991, 12.64443154, - 7.89753791, 0.93890797]) - te_0 = np.array([14.24199604, 8.25383556, 6.03901866, 16.9836369, - 9.51967777, 3.46969355]) - w_0 = np.array([2.18127398e-01, 2.18127398e-01, 2.18127398e-01, - 2.45437862e-07, 2.45437862e-07, 2.45437862e-07]) - - df = self.Hm0Te[self.Hm0Te['Hm0'] < 20] - dt_ss = (self.Hm0Te.index[2]-self.Hm0Te.index[1]).seconds + hs_0 = np.array( + [5.91760129, 4.55185088, 1.41144991, 12.64443154, 7.89753791, 0.93890797] + ) + te_0 = np.array( + [14.24199604, 8.25383556, 6.03901866, 16.9836369, 9.51967777, 3.46969355] + ) + w_0 = np.array( + [ + 2.18127398e-01, + 2.18127398e-01, + 2.18127398e-01, + 2.45437862e-07, + 2.45437862e-07, + 2.45437862e-07, + ] + ) + + df = self.Hm0Te[self.Hm0Te["Hm0"] < 20] + dt_ss = (self.Hm0Te.index[2] - self.Hm0Te.index[1]).seconds points_per_interval = 3 return_periods = np.array([50, 100]) np.random.seed(0) hs, te, w = wave.contours.samples_full_seastate( - df.Hm0.values, df.Te.values, points_per_interval, return_periods, - dt_ss) + df.Hm0.values, df.Te.values, points_per_interval, return_periods, dt_ss + ) assert_allclose(hs, hs_0) assert_allclose(te, te_0) assert_allclose(w, w_0) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/test_performance.py b/mhkit/tests/wave/test_performance.py index f4bc2a566..238443df3 100644 --- a/mhkit/tests/wave/test_performance.py +++ b/mhkit/tests/wave/test_performance.py @@ -22,109 +22,140 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) -if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir,relpath('../../../examples/data/wave'))) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, relpath("../../../examples/data/wave"))) class TestPerformance(unittest.TestCase): - @classmethod def setUpClass(self): np.random.seed(123) Hm0 = np.random.rayleigh(4, 100000) - Te = np.random.normal(4.5, .8, 100000) + Te = np.random.normal(4.5, 0.8, 100000) P = np.random.normal(200, 40, 100000) J = np.random.normal(300, 10, 100000) - ndbc_data_file = join(datadir,'data.txt') + ndbc_data_file = join(datadir, "data.txt") [raw_ndbc_data, meta] = wave.io.ndbc.read_file(ndbc_data_file) self.S = raw_ndbc_data.T - self.data = pd.DataFrame({'Hm0': Hm0, 'Te': Te, 'P': P,'J': J}) - self.Hm0_bins = np.arange(0,19,0.5) - self.Te_bins = np.arange(0,9,1) - self.expected_stats = ["mean","std","median","count","sum","min","max","freq"] + self.data = pd.DataFrame({"Hm0": Hm0, "Te": Te, "P": P, "J": J}) + self.Hm0_bins = np.arange(0, 19, 0.5) + self.Te_bins = np.arange(0, 9, 1) + self.expected_stats = [ + "mean", + "std", + "median", + "count", + "sum", + "min", + "max", + "freq", + ] @classmethod def tearDownClass(self): pass def test_capture_length(self): - L = wave.performance.capture_length(self.data['P'], self.data['J']) + L = wave.performance.capture_length(self.data["P"], self.data["J"]) L_stats = wave.performance.statistics(L) - self.assertAlmostEqual(L_stats['mean'], 0.6676, 3) + self.assertAlmostEqual(L_stats["mean"], 0.6676, 3) def test_capture_length_matrix(self): - L = wave.performance.capture_length(self.data['P'], self.data['J']) - LM = wave.performance.capture_length_matrix(self.data['Hm0'], self.data['Te'], - L, 'std', self.Hm0_bins, self.Te_bins) + L = wave.performance.capture_length(self.data["P"], self.data["J"]) + LM = wave.performance.capture_length_matrix( + self.data["Hm0"], self.data["Te"], L, "std", self.Hm0_bins, self.Te_bins + ) - self.assertEqual(LM.shape, (38,9)) + self.assertEqual(LM.shape, (38, 9)) self.assertEqual(LM.isna().sum().sum(), 131) def test_wave_energy_flux_matrix(self): - JM = wave.performance.wave_energy_flux_matrix(self.data['Hm0'], self.data['Te'], - self.data['J'], 'mean', self.Hm0_bins, self.Te_bins) - - self.assertEqual(JM.shape, (38,9)) + JM = wave.performance.wave_energy_flux_matrix( + self.data["Hm0"], + self.data["Te"], + self.data["J"], + "mean", + self.Hm0_bins, + self.Te_bins, + ) + + self.assertEqual(JM.shape, (38, 9)) self.assertEqual(JM.isna().sum().sum(), 131) def test_power_matrix(self): - L = wave.performance.capture_length(self.data['P'], self.data['J']) - LM = wave.performance.capture_length_matrix(self.data['Hm0'], self.data['Te'], - L, 'mean', self.Hm0_bins, self.Te_bins) - JM = wave.performance.wave_energy_flux_matrix(self.data['Hm0'], self.data['Te'], - self.data['J'], 'mean', self.Hm0_bins, self.Te_bins) + L = wave.performance.capture_length(self.data["P"], self.data["J"]) + LM = wave.performance.capture_length_matrix( + self.data["Hm0"], self.data["Te"], L, "mean", self.Hm0_bins, self.Te_bins + ) + JM = wave.performance.wave_energy_flux_matrix( + self.data["Hm0"], + self.data["Te"], + self.data["J"], + "mean", + self.Hm0_bins, + self.Te_bins, + ) PM = wave.performance.power_matrix(LM, JM) - self.assertEqual(PM.shape, (38,9)) + self.assertEqual(PM.shape, (38, 9)) self.assertEqual(PM.isna().sum().sum(), 131) def test_mean_annual_energy_production(self): - L = wave.performance.capture_length(self.data['P'], self.data['J']) - maep = wave.performance.mean_annual_energy_production_timeseries(L, self.data['J']) + L = wave.performance.capture_length(self.data["P"], self.data["J"]) + maep = wave.performance.mean_annual_energy_production_timeseries( + L, self.data["J"] + ) self.assertAlmostEqual(maep, 1754020.077, 2) - def test_plot_matrix(self): - filename = abspath(join(plotdir, 'wave_plot_matrix.png')) + filename = abspath(join(plotdir, "wave_plot_matrix.png")) if isfile(filename): os.remove(filename) - M = wave.performance.wave_energy_flux_matrix(self.data['Hm0'], self.data['Te'], - self.data['J'], 'mean', self.Hm0_bins, self.Te_bins) + M = wave.performance.wave_energy_flux_matrix( + self.data["Hm0"], + self.data["Te"], + self.data["J"], + "mean", + self.Hm0_bins, + self.Te_bins, + ) plt.figure() wave.graphics.plot_matrix(M) - plt.savefig(filename, format='png') + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_powerperformance_workflow(self): - filename = abspath(join(plotdir, 'Capture Length Matrix mean.png')) + filename = abspath(join(plotdir, "Capture Length Matrix mean.png")) if isfile(filename): os.remove(filename) - P = pd.Series(np.random.normal(200, 40, 743),index = self.S.columns) - statistic = ['mean'] + P = pd.Series(np.random.normal(200, 40, 743), index=self.S.columns) + statistic = ["mean"] savepath = plotdir show_values = True h = 60 expected = 401239.4822345051 x = self.S.T - CM,MAEP = wave.performance.power_performance_workflow(self.S, h, - P, statistic, savepath=savepath, show_values=show_values) + CM, MAEP = wave.performance.power_performance_workflow( + self.S, h, P, statistic, savepath=savepath, show_values=show_values + ) self.assertTrue(isfile(filename)) - self.assertEqual(list(CM.data_vars),self.expected_stats) + self.assertEqual(list(CM.data_vars), self.expected_stats) - error = (expected-MAEP)/expected # SSE + error = (expected - MAEP) / expected # SSE self.assertLess(error, 1e-6) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/test_resource_metrics.py b/mhkit/tests/wave/test_resource_metrics.py index e927a6157..a3a16d091 100644 --- a/mhkit/tests/wave/test_resource_metrics.py +++ b/mhkit/tests/wave/test_resource_metrics.py @@ -22,64 +22,65 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) -if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir,relpath('../../../examples/data/wave'))) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, relpath("../../../examples/data/wave"))) class TestResourceMetrics(unittest.TestCase): - @classmethod def setUpClass(self): - omega = np.arange(0.1,3.5,0.01) - self.f = omega/(2*np.pi) + omega = np.arange(0.1, 3.5, 0.01) + self.f = omega / (2 * np.pi) self.Hs = 2.5 self.Tp = 8 - file_name = join(datadir, 'ValData1.json') + file_name = join(datadir, "ValData1.json") with open(file_name, "r") as read_file: self.valdata1 = pd.DataFrame(json.load(read_file)) self.valdata2 = {} - file_name = join(datadir, 'ValData2_MC.json') + file_name = join(datadir, "ValData2_MC.json") with open(file_name, "r") as read_file: data = json.load(read_file) - self.valdata2['MC'] = data + self.valdata2["MC"] = data for i in data.keys(): # Calculate elevation spectra - elevation = pd.DataFrame(data[i]['elevation']) + elevation = pd.DataFrame(data[i]["elevation"]) elevation.index = elevation.index.astype(float) elevation.sort_index(inplace=True) - sample_rate = data[i]['sample_rate'] - NFFT = data[i]['NFFT'] - self.valdata2['MC'][i]['S'] = wave.resource.elevation_spectrum(elevation, - sample_rate, NFFT) + sample_rate = data[i]["sample_rate"] + NFFT = data[i]["NFFT"] + self.valdata2["MC"][i]["S"] = wave.resource.elevation_spectrum( + elevation, sample_rate, NFFT + ) - file_name = join(datadir, 'ValData2_AH.json') + file_name = join(datadir, "ValData2_AH.json") with open(file_name, "r") as read_file: data = json.load(read_file) - self.valdata2['AH'] = data + self.valdata2["AH"] = data for i in data.keys(): # Calculate elevation spectra - elevation = pd.DataFrame(data[i]['elevation']) + elevation = pd.DataFrame(data[i]["elevation"]) elevation.index = elevation.index.astype(float) elevation.sort_index(inplace=True) - sample_rate = data[i]['sample_rate'] - NFFT = data[i]['NFFT'] - self.valdata2['AH'][i]['S'] = wave.resource.elevation_spectrum(elevation, - sample_rate, NFFT) + sample_rate = data[i]["sample_rate"] + NFFT = data[i]["NFFT"] + self.valdata2["AH"][i]["S"] = wave.resource.elevation_spectrum( + elevation, sample_rate, NFFT + ) - file_name = join(datadir, 'ValData2_CDiP.json') + file_name = join(datadir, "ValData2_CDiP.json") with open(file_name, "r") as read_file: data = json.load(read_file) - self.valdata2['CDiP'] = data + self.valdata2["CDiP"] = data for i in data.keys(): - temp = pd.Series(data[i]['S']).to_frame('S') + temp = pd.Series(data[i]["S"]).to_frame("S") temp.index = temp.index.astype(float) - self.valdata2['CDiP'][i]['S'] = temp - + self.valdata2["CDiP"][i]["S"] = temp @classmethod def tearDownClass(self): @@ -87,14 +88,14 @@ def tearDownClass(self): def test_kfromw(self): for i in self.valdata1.columns: - f = np.array(self.valdata1[i]['w'])/(2*np.pi) - h = self.valdata1[i]['h'] - rho = self.valdata1[i]['rho'] + f = np.array(self.valdata1[i]["w"]) / (2 * np.pi) + h = self.valdata1[i]["h"] + rho = self.valdata1[i]["rho"] - expected = self.valdata1[i]['k'] + expected = self.valdata1[i]["k"] k = wave.resource.wave_number(f, h, rho) - calculated = k.loc[:,'k'].values - error = ((expected-calculated)**2).sum() # SSE + calculated = k.loc[:, "k"].values + error = ((expected - calculated) ** 2).sum() # SSE self.assertLess(error, 1e-6) @@ -102,105 +103,103 @@ def test_kfromw_one_freq(self): g = 9.81 f = 0.1 h = 1e9 - w = np.pi*2*f # deep water dispersion + w = np.pi * 2 * f # deep water dispersion expected = w**2 / g calculated = wave.resource.wave_number(f=f, h=h, g=g).values[0][0] - error = np.abs(expected-calculated) + error = np.abs(expected - calculated) self.assertLess(error, 1e-6) def test_wave_length(self): - k_list=[1,2,10,3] - l_expected = (2.*np.pi/np.array(k_list)).tolist() + k_list = [1, 2, 10, 3] + l_expected = (2.0 * np.pi / np.array(k_list)).tolist() - k_df = pd.DataFrame(k_list,index = [1,2,3,4]) - k_series= k_df[0] - k_array=np.array(k_list) + k_df = pd.DataFrame(k_list, index=[1, 2, 3, 4]) + k_series = k_df[0] + k_array = np.array(k_list) for l in [k_list, k_df, k_series, k_array]: l_calculated = wave.resource.wave_length(l) - self.assertListEqual(l_expected,l_calculated.tolist()) + self.assertListEqual(l_expected, l_calculated.tolist()) - idx=0 + idx = 0 k_int = k_list[idx] l_calculated = wave.resource.wave_length(k_int) - self.assertEqual(l_expected[idx],l_calculated) + self.assertEqual(l_expected[idx], l_calculated) def test_depth_regime(self): - expected = [True,True,False,True] - l_list=[1,2,10,3] - l_df = pd.DataFrame(l_list,index = [1,2,3,4]) - l_series= l_df[0] - l_array=np.array(l_list) + expected = [True, True, False, True] + l_list = [1, 2, 10, 3] + l_df = pd.DataFrame(l_list, index=[1, 2, 3, 4]) + l_series = l_df[0] + l_array = np.array(l_list) h = 10 for l in [l_list, l_df, l_series, l_array]: - calculated = wave.resource.depth_regime(l,h) - self.assertListEqual(expected,calculated.tolist()) + calculated = wave.resource.depth_regime(l, h) + self.assertListEqual(expected, calculated.tolist()) - idx=0 + idx = 0 l_int = l_list[idx] - calculated = wave.resource.depth_regime(l_int,h) - self.assertEqual(expected[idx],calculated) - + calculated = wave.resource.depth_regime(l_int, h) + self.assertEqual(expected[idx], calculated) def test_wave_celerity(self): # Depth regime ratio - dr_ratio=2 + dr_ratio = 2 # small change in f will give similar value cg - f=np.linspace(20.0001,20.0005,5) + f = np.linspace(20.0001, 20.0005, 5) # Choose index to spike at. cg spike is inversly proportional to k - k_idx=2 - k_tmp=[1, 1, 0.5, 1, 1] + k_idx = 2 + k_tmp = [1, 1, 0.5, 1, 1] k = pd.DataFrame(k_tmp, index=f) # all shallow - cg_shallow1 = wave.resource.wave_celerity(k, h=0.0001,depth_check=True) - cg_shallow2 = wave.resource.wave_celerity(k, h=0.0001,depth_check=False) - self.assertTrue(all(cg_shallow1.squeeze().values == - cg_shallow2.squeeze().values)) - + cg_shallow1 = wave.resource.wave_celerity(k, h=0.0001, depth_check=True) + cg_shallow2 = wave.resource.wave_celerity(k, h=0.0001, depth_check=False) + self.assertTrue( + all(cg_shallow1.squeeze().values == cg_shallow2.squeeze().values) + ) # all deep - cg = wave.resource.wave_celerity(k, h=1000,depth_check=True) - self.assertTrue(all(np.pi*f/k.squeeze().values == cg.squeeze().values)) + cg = wave.resource.wave_celerity(k, h=1000, depth_check=True) + self.assertTrue(all(np.pi * f / k.squeeze().values == cg.squeeze().values)) def test_energy_flux_deep(self): # Dependent on mhkit.resource.BS spectrum - S = wave.resource.jonswap_spectrum(self.f,self.Tp,self.Hs) + S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) Te = wave.resource.energy_period(S) Hm0 = wave.resource.significant_wave_height(S) - rho=1025 - g=9.80665 - coeff = rho*(g**2)/(64*np.pi) - J = coeff*(Hm0.squeeze()**2)*Te.squeeze() + rho = 1025 + g = 9.80665 + coeff = rho * (g**2) / (64 * np.pi) + J = coeff * (Hm0.squeeze() ** 2) * Te.squeeze() - h=-1 # not used when deep=True + h = -1 # not used when deep=True J_calc = wave.resource.energy_flux(S, h, deep=True) self.assertTrue(J_calc.squeeze() == J) - def test_moments(self): - for file_i in self.valdata2.keys(): # for each file MC, AH, CDiP + for file_i in self.valdata2.keys(): # for each file MC, AH, CDiP datasets = self.valdata2[file_i] - for s in datasets.keys(): # for each set + for s in datasets.keys(): # for each set data = datasets[s] - for m in data['m'].keys(): - expected = data['m'][m] - S = data['S'] - if s == 'CDiP1' or s == 'CDiP6': - f_bins=pd.Series(data['freqBinWidth']) + for m in data["m"].keys(): + expected = data["m"][m] + S = data["S"] + if s == "CDiP1" or s == "CDiP6": + f_bins = pd.Series(data["freqBinWidth"]) else: f_bins = None - calculated = wave.resource.frequency_moment(S, int(m) - ,frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected + calculated = wave.resource.frequency_moment( + S, int(m), frequency_bins=f_bins + ).iloc[0, 0] + error = np.abs(expected - calculated) / expected self.assertLess(error, 0.01) - def test_energy_period_to_peak_period(self): # This test checks that if we perform the # Te to Tp conversion, we create a spectrum @@ -218,164 +217,172 @@ def test_energy_period_to_peak_period(self): Te_calc = wave.resource.energy_period(S).values[0][0] - error = np.abs(T - Te_calc)/Te_calc + error = np.abs(T - Te_calc) / Te_calc self.assertLess(error, 0.01) - def test_metrics(self): - for file_i in self.valdata2.keys(): # for each file MC, AH, CDiP + for file_i in self.valdata2.keys(): # for each file MC, AH, CDiP datasets = self.valdata2[file_i] - for s in datasets.keys(): # for each set - - + for s in datasets.keys(): # for each set data = datasets[s] - S = data['S'] - if file_i == 'CDiP': - f_bins=pd.Series(data['freqBinWidth']) + S = data["S"] + if file_i == "CDiP": + f_bins = pd.Series(data["freqBinWidth"]) else: f_bins = None # Hm0 - expected = data['metrics']['Hm0'] - calculated = wave.resource.significant_wave_height(S, - frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected - #print('Hm0', expected, calculated, error) + expected = data["metrics"]["Hm0"] + calculated = wave.resource.significant_wave_height( + S, frequency_bins=f_bins + ).iloc[0, 0] + error = np.abs(expected - calculated) / expected + # print('Hm0', expected, calculated, error) self.assertLess(error, 0.01) # Te - expected = data['metrics']['Te'] - calculated = wave.resource.energy_period(S, - frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected - #print('Te', expected, calculated, error) + expected = data["metrics"]["Te"] + calculated = wave.resource.energy_period(S, frequency_bins=f_bins).iloc[ + 0, 0 + ] + error = np.abs(expected - calculated) / expected + # print('Te', expected, calculated, error) self.assertLess(error, 0.01) # T0 - expected = data['metrics']['T0'] - calculated = wave.resource.average_zero_crossing_period(S, - frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected - #print('T0', expected, calculated, error) + expected = data["metrics"]["T0"] + calculated = wave.resource.average_zero_crossing_period( + S, frequency_bins=f_bins + ).iloc[0, 0] + error = np.abs(expected - calculated) / expected + # print('T0', expected, calculated, error) self.assertLess(error, 0.01) # Tc - expected = data['metrics']['Tc'] - calculated = wave.resource.average_crest_period(S, - # Tc = Tavg**2 - frequency_bins=f_bins).iloc[0,0]**2 - error = np.abs(expected-calculated)/expected - #print('Tc', expected, calculated, error) + expected = data["metrics"]["Tc"] + calculated = ( + wave.resource.average_crest_period( + S, + # Tc = Tavg**2 + frequency_bins=f_bins, + ).iloc[0, 0] + ** 2 + ) + error = np.abs(expected - calculated) / expected + # print('Tc', expected, calculated, error) self.assertLess(error, 0.01) # Tm - expected = np.sqrt(data['metrics']['Tm']) - calculated = wave.resource.average_wave_period(S, - frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected - #print('Tm', expected, calculated, error) + expected = np.sqrt(data["metrics"]["Tm"]) + calculated = wave.resource.average_wave_period( + S, frequency_bins=f_bins + ).iloc[0, 0] + error = np.abs(expected - calculated) / expected + # print('Tm', expected, calculated, error) self.assertLess(error, 0.01) # Tp - expected = data['metrics']['Tp'] - calculated = wave.resource.peak_period(S).iloc[0,0] - error = np.abs(expected-calculated)/expected - #print('Tp', expected, calculated, error) + expected = data["metrics"]["Tp"] + calculated = wave.resource.peak_period(S).iloc[0, 0] + error = np.abs(expected - calculated) / expected + # print('Tp', expected, calculated, error) self.assertLess(error, 0.001) # e - expected = data['metrics']['e'] - calculated = wave.resource.spectral_bandwidth(S, - frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected - #print('e', expected, calculated, error) + expected = data["metrics"]["e"] + calculated = wave.resource.spectral_bandwidth( + S, frequency_bins=f_bins + ).iloc[0, 0] + error = np.abs(expected - calculated) / expected + # print('e', expected, calculated, error) self.assertLess(error, 0.001) # J - if file_i != 'CDiP': - for i,j in zip(data['h'],data['J']): - expected = data['J'][j] - calculated = wave.resource.energy_flux(S,i) - error = np.abs(expected-calculated.values)/expected + if file_i != "CDiP": + for i, j in zip(data["h"], data["J"]): + expected = data["J"][j] + calculated = wave.resource.energy_flux(S, i) + error = np.abs(expected - calculated.values) / expected self.assertLess(error, 0.1) # v - if file_i == 'CDiP': + if file_i == "CDiP": # this should be updated to run on other datasets - expected = data['metrics']['v'] - calculated = wave.resource.spectral_width(S, - frequency_bins=f_bins).iloc[0,0] - error = np.abs(expected-calculated)/expected + expected = data["metrics"]["v"] + calculated = wave.resource.spectral_width( + S, frequency_bins=f_bins + ).iloc[0, 0] + error = np.abs(expected - calculated) / expected self.assertLess(error, 0.01) - if file_i == 'MC': - expected = data['metrics']['v'] + if file_i == "MC": + expected = data["metrics"]["v"] # testing that default uniform frequency bin widths works - calculated = wave.resource.spectral_width(S).iloc[0,0] - error = np.abs(expected-calculated)/expected + calculated = wave.resource.spectral_width(S).iloc[0, 0] + error = np.abs(expected - calculated) / expected self.assertLess(error, 0.01) - def test_plot_elevation_timeseries(self): - filename = abspath(join(plotdir, 'wave_plot_elevation_timeseries.png')) + filename = abspath(join(plotdir, "wave_plot_elevation_timeseries.png")) if isfile(filename): os.remove(filename) - data = self.valdata2['MC'] - temp = pd.DataFrame(data[list(data.keys())[0]]['elevation']) + data = self.valdata2["MC"] + temp = pd.DataFrame(data[list(data.keys())[0]]["elevation"]) temp.index = temp.index.astype(float) temp.sort_index(inplace=True) - eta = temp.iloc[0:100,:] + eta = temp.iloc[0:100, :] plt.figure() wave.graphics.plot_elevation_timeseries(eta) - plt.savefig(filename, format='png') + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) -class TestPlotResouceCharacterizations(unittest.TestCase): +class TestPlotResouceCharacterizations(unittest.TestCase): @classmethod def setUpClass(self): - f_name= 'Hm0_Te_46022.json' - self.Hm0Te = pd.read_json(join(datadir,f_name)) + f_name = "Hm0_Te_46022.json" + self.Hm0Te = pd.read_json(join(datadir, f_name)) + @classmethod def tearDownClass(self): pass - def test_plot_avg_annual_energy_matrix(self): - filename = abspath(join(plotdir, 'avg_annual_scatter_table.png')) + def test_plot_avg_annual_energy_matrix(self): + filename = abspath(join(plotdir, "avg_annual_scatter_table.png")) if isfile(filename): os.remove(filename) Hm0Te = self.Hm0Te Hm0Te.drop(Hm0Te[Hm0Te.Hm0 > 20].index, inplace=True) - J = np.random.random(len(Hm0Te))*100 + J = np.random.random(len(Hm0Te)) * 100 plt.figure() - fig = wave.graphics.plot_avg_annual_energy_matrix(Hm0Te.Hm0, - Hm0Te.Te, J, Hm0_bin_size=0.5, Te_bin_size=1) - plt.savefig(filename, format='png') + fig = wave.graphics.plot_avg_annual_energy_matrix( + Hm0Te.Hm0, Hm0Te.Te, J, Hm0_bin_size=0.5, Te_bin_size=1 + ) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_monthly_cumulative_distribution(self): - - filename = abspath(join(plotdir, 'monthly_cumulative_distribution.png')) + filename = abspath(join(plotdir, "monthly_cumulative_distribution.png")) if isfile(filename): os.remove(filename) - a = pd.date_range(start='1/1/2010', periods=10000, freq='h') - S = pd.Series(np.random.random(len(a)) , index=a) - ax=wave.graphics.monthly_cumulative_distribution(S) - plt.savefig(filename, format='png') + a = pd.date_range(start="1/1/2010", periods=10000, freq="h") + S = pd.Series(np.random.random(len(a)), index=a) + ax = wave.graphics.monthly_cumulative_distribution(S) + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/wave/test_resource_spectrum.py b/mhkit/tests/wave/test_resource_spectrum.py index 30e4e3c4e..fa3eae89a 100644 --- a/mhkit/tests/wave/test_resource_spectrum.py +++ b/mhkit/tests/wave/test_resource_spectrum.py @@ -22,14 +22,14 @@ testdir = dirname(abspath(__file__)) -plotdir = join(testdir, 'plots') +plotdir = join(testdir, "plots") isdir = os.path.isdir(plotdir) -if not isdir: os.mkdir(plotdir) -datadir = normpath(join(testdir,relpath('../../../examples/data/wave'))) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, relpath("../../../examples/data/wave"))) class TestResourceSpectrum(unittest.TestCase): - @classmethod def setUpClass(self): Trep = 600 @@ -44,12 +44,12 @@ def tearDownClass(self): pass def test_pierson_moskowitz_spectrum(self): - S = wave.resource.pierson_moskowitz_spectrum(self.f,self.Tp,self.Hs) - Hm0 = wave.resource.significant_wave_height(S).iloc[0,0] - Tp0 = wave.resource.peak_period(S).iloc[0,0] + S = wave.resource.pierson_moskowitz_spectrum(self.f, self.Tp, self.Hs) + Hm0 = wave.resource.significant_wave_height(S).iloc[0, 0] + Tp0 = wave.resource.peak_period(S).iloc[0, 0] - errorHm0 = np.abs(self.Tp - Tp0)/self.Tp - errorTp0 = np.abs(self.Hs - Hm0)/self.Hs + errorHm0 = np.abs(self.Tp - Tp0) / self.Tp + errorTp0 = np.abs(self.Hs - Hm0) / self.Hs self.assertLess(errorHm0, 0.01) self.assertLess(errorTp0, 0.01) @@ -60,18 +60,20 @@ def test_pierson_moskowitz_spectrum_zero_freq(self): f_nonzero = np.arange(df, 1, df) S_zero = wave.resource.pierson_moskowitz_spectrum(f_zero, self.Tp, self.Hs) - S_nonzero = wave.resource.pierson_moskowitz_spectrum(f_nonzero, self.Tp, self.Hs) + S_nonzero = wave.resource.pierson_moskowitz_spectrum( + f_nonzero, self.Tp, self.Hs + ) self.assertEqual(S_zero.values.squeeze()[0], 0.0) self.assertGreater(S_nonzero.values.squeeze()[0], 0.0) def test_jonswap_spectrum(self): S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) - Hm0 = wave.resource.significant_wave_height(S).iloc[0,0] - Tp0 = wave.resource.peak_period(S).iloc[0,0] + Hm0 = wave.resource.significant_wave_height(S).iloc[0, 0] + Tp0 = wave.resource.peak_period(S).iloc[0, 0] - errorHm0 = np.abs(self.Tp - Tp0)/self.Tp - errorTp0 = np.abs(self.Hs - Hm0)/self.Hs + errorHm0 = np.abs(self.Tp - Tp0) / self.Tp + errorTp0 = np.abs(self.Hs - Hm0) / self.Hs self.assertLess(errorHm0, 0.01) self.assertLess(errorTp0, 0.01) @@ -88,8 +90,8 @@ def test_jonswap_spectrum_zero_freq(self): self.assertGreater(S_nonzero.values.squeeze()[0], 0.0) def test_surface_elevation_phases_np_and_pd(self): - S0 = wave.resource.jonswap_spectrum(self.f,self.Tp,self.Hs) - S1 = wave.resource.jonswap_spectrum(self.f,self.Tp,self.Hs*1.1) + S0 = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) + S1 = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs * 1.1) S = pd.concat([S0, S1], axis=1) phases_np = np.random.rand(S.shape[0], S.shape[1]) * 2 * np.pi @@ -101,17 +103,21 @@ def test_surface_elevation_phases_np_and_pd(self): assert_frame_equal(eta_np, eta_pd) def test_surface_elevation_frequency_bins_np_and_pd(self): - S0 = wave.resource.jonswap_spectrum(self.f,self.Tp,self.Hs) - S1 = wave.resource.jonswap_spectrum(self.f,self.Tp,self.Hs*1.1) + S0 = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) + S1 = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs * 1.1) S = pd.concat([S0, S1], axis=1) eta0 = wave.resource.surface_elevation(S, self.t, seed=1) - f_bins_np = np.array([np.diff(S.index)[0]]*len(S)) - f_bins_pd = pd.DataFrame(f_bins_np, index=S.index, columns=['df']) + f_bins_np = np.array([np.diff(S.index)[0]] * len(S)) + f_bins_pd = pd.DataFrame(f_bins_np, index=S.index, columns=["df"]) - eta_np = wave.resource.surface_elevation(S, self.t, frequency_bins=f_bins_np, seed=1) - eta_pd = wave.resource.surface_elevation(S, self.t, frequency_bins=f_bins_pd, seed=1) + eta_np = wave.resource.surface_elevation( + S, self.t, frequency_bins=f_bins_np, seed=1 + ) + eta_pd = wave.resource.surface_elevation( + S, self.t, frequency_bins=f_bins_pd, seed=1 + ) assert_frame_equal(eta0, eta_np) assert_frame_equal(eta_np, eta_pd) @@ -120,19 +126,19 @@ def test_surface_elevation_moments(self): S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) eta = wave.resource.surface_elevation(S, self.t, seed=1) dt = self.t[1] - self.t[0] - Sn = wave.resource.elevation_spectrum(eta, 1/dt, len(eta.values), - detrend=False, window='boxcar', - noverlap=0) + Sn = wave.resource.elevation_spectrum( + eta, 1 / dt, len(eta.values), detrend=False, window="boxcar", noverlap=0 + ) - m0 = wave.resource.frequency_moment(S,0).m0.values[0] - m0n = wave.resource.frequency_moment(Sn,0).m0.values[0] - errorm0 = np.abs((m0 - m0n)/m0) + m0 = wave.resource.frequency_moment(S, 0).m0.values[0] + m0n = wave.resource.frequency_moment(Sn, 0).m0.values[0] + errorm0 = np.abs((m0 - m0n) / m0) self.assertLess(errorm0, 0.01) - m1 = wave.resource.frequency_moment(S,1).m1.values[0] - m1n = wave.resource.frequency_moment(Sn,1).m1.values[0] - errorm1 = np.abs((m1 - m1n)/m1) + m1 = wave.resource.frequency_moment(S, 1).m1.values[0] + m1n = wave.resource.frequency_moment(Sn, 1).m1.values[0] + errorm1 = np.abs((m1 - m1n) / m1) self.assertLess(errorm1, 0.01) @@ -140,40 +146,42 @@ def test_surface_elevation_rmse(self): S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) eta = wave.resource.surface_elevation(S, self.t, seed=1) dt = self.t[1] - self.t[0] - Sn = wave.resource.elevation_spectrum(eta, 1/dt, len(eta), - detrend=False, window='boxcar', - noverlap=0) + Sn = wave.resource.elevation_spectrum( + eta, 1 / dt, len(eta), detrend=False, window="boxcar", noverlap=0 + ) fSn = interp1d(Sn.index.values, Sn.values, axis=0) - rmse = (S.values - fSn(S.index.values))**2 - rmse_sum = (np.sum(rmse)/len(rmse))**0.5 + rmse = (S.values - fSn(S.index.values)) ** 2 + rmse_sum = (np.sum(rmse) / len(rmse)) ** 0.5 self.assertLess(rmse_sum, 0.02) def test_ifft_sum_of_sines(self): S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs) - eta_ifft = wave.resource.surface_elevation(S, self.t, seed=1, method='ifft') - eta_sos = wave.resource.surface_elevation(S, self.t, seed=1, method='sum_of_sines') + eta_ifft = wave.resource.surface_elevation(S, self.t, seed=1, method="ifft") + eta_sos = wave.resource.surface_elevation( + S, self.t, seed=1, method="sum_of_sines" + ) - assert_allclose(eta_ifft, eta_sos) + assert_allclose(eta_ifft, eta_sos) def test_plot_spectrum(self): - filename = abspath(join(plotdir, 'wave_plot_spectrum.png')) + filename = abspath(join(plotdir, "wave_plot_spectrum.png")) if isfile(filename): os.remove(filename) - S = wave.resource.pierson_moskowitz_spectrum(self.f,self.Tp,self.Hs) + S = wave.resource.pierson_moskowitz_spectrum(self.f, self.Tp, self.Hs) plt.figure() wave.graphics.plot_spectrum(S) - plt.savefig(filename, format='png') + plt.savefig(filename, format="png") plt.close() self.assertTrue(isfile(filename)) def test_plot_chakrabarti(self): - filename = abspath(join(plotdir, 'wave_plot_chakrabarti.png')) + filename = abspath(join(plotdir, "wave_plot_chakrabarti.png")) if isfile(filename): os.remove(filename) @@ -185,7 +193,7 @@ def test_plot_chakrabarti(self): plt.savefig(filename) def test_plot_chakrabarti_np(self): - filename = abspath(join(plotdir, 'wave_plot_chakrabarti_np.png')) + filename = abspath(join(plotdir, "wave_plot_chakrabarti_np.png")) if isfile(filename): os.remove(filename) @@ -199,21 +207,22 @@ def test_plot_chakrabarti_np(self): self.assertTrue(isfile(filename)) def test_plot_chakrabarti_pd(self): - filename = abspath(join(plotdir, 'wave_plot_chakrabarti_pd.png')) + filename = abspath(join(plotdir, "wave_plot_chakrabarti_pd.png")) if isfile(filename): os.remove(filename) D = np.linspace(5, 15, 5) H = 10 * np.ones_like(D) lambda_w = 200 * np.ones_like(D) - df = pd.DataFrame([H.flatten(),lambda_w.flatten(),D.flatten()], - index=['H','lambda_w','D']).transpose() + df = pd.DataFrame( + [H.flatten(), lambda_w.flatten(), D.flatten()], index=["H", "lambda_w", "D"] + ).transpose() wave.graphics.plot_chakrabarti(df.H, df.lambda_w, df.D) plt.savefig(filename) self.assertTrue(isfile(filename)) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() - \ No newline at end of file diff --git a/mhkit/tidal/__init__.py b/mhkit/tidal/__init__.py index b669360a6..2644bfdfa 100644 --- a/mhkit/tidal/__init__.py +++ b/mhkit/tidal/__init__.py @@ -1,4 +1,4 @@ from mhkit.tidal import graphics from mhkit.tidal import io -from mhkit.tidal import resource +from mhkit.tidal import resource from mhkit.tidal import performance diff --git a/mhkit/tidal/d3d.py b/mhkit/tidal/d3d.py index b11aa1569..12b3f78b8 100644 --- a/mhkit/tidal/d3d.py +++ b/mhkit/tidal/d3d.py @@ -1 +1 @@ -from mhkit.river.d3d import * \ No newline at end of file +from mhkit.river.d3d import * diff --git a/mhkit/tidal/graphics.py b/mhkit/tidal/graphics.py index 51459b527..9ed7c7e76 100644 --- a/mhkit/tidal/graphics.py +++ b/mhkit/tidal/graphics.py @@ -28,24 +28,32 @@ def _initialize_polar(ax=None, metadata=None, flood=None, ebb=None): fig = plt.figure(figsize=(12, 8)) ax = plt.axes(polar=True) # Angles are measured clockwise from true north - ax.set_theta_zero_location('N') + ax.set_theta_zero_location("N") ax.set_theta_direction(-1) - xticks = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'] + xticks = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"] # Polar plots do not have minor ticks, insert flood/ebb into major ticks xtickDegrees = [0.0, 45.0, 90.0, 135.0, 180.0, 225.0, 270.0, 315.0] # Set title and metadata box if metadata != None: # Set the Title - plt.title(metadata['name']) + plt.title(metadata["name"]) # List of strings for metadata box - bouy_str = [f'Lat = {float(metadata["lat"]):0.2f}$\degree$', - f'Lon = {float(metadata["lon"]):0.2f}$\degree$'] + bouy_str = [ + f'Lat = {float(metadata["lat"]):0.2f}$\degree$', + f'Lon = {float(metadata["lon"]):0.2f}$\degree$', + ] # Create string for text box - bouy_data = '\n'.join(bouy_str) + bouy_data = "\n".join(bouy_str) # Set the text box - ax.text(-0.3, 0.80, bouy_data, transform=ax.transAxes, fontsize=14, - verticalalignment='top', bbox=dict(facecolor='none', - edgecolor='k', pad=5)) + ax.text( + -0.3, + 0.80, + bouy_data, + transform=ax.transAxes, + fontsize=14, + verticalalignment="top", + bbox=dict(facecolor="none", edgecolor="k", pad=5), + ) # If defined plot flood and ebb directions as major ticks if flood != None: # Get flood direction in degrees @@ -56,7 +64,7 @@ def _initialize_polar(ax=None, metadata=None, flood=None, ebb=None): # Get location in list idxFlood = xtickDegrees.index(floodDirection) # Insert label at appropriate location - xticks[idxFlood:idxFlood] = ['\nFlood'] + xticks[idxFlood:idxFlood] = ["\nFlood"] if ebb != None: # Get flood direction in degrees ebbDirection = ebb @@ -66,8 +74,8 @@ def _initialize_polar(ax=None, metadata=None, flood=None, ebb=None): # Get location in list idxEbb = xtickDegrees.index(ebbDirection) # Insert label at appropriate location - xticks[idxEbb:idxEbb] = ['\nEbb'] - ax.set_xticks(np.array(xtickDegrees)*np.pi/180.) + xticks[idxEbb:idxEbb] = ["\nEbb"] + ax.set_xticks(np.array(xtickDegrees) * np.pi / 180.0) ax.set_xticklabels(xticks) return ax @@ -83,37 +91,39 @@ def _check_inputs(directions, velocities, flood, ebb): velocities: array-like Velocities in m/s flood: float - Direction in degrees added to theta ticks + Direction in degrees added to theta ticks ebb: float Direction in degrees added to theta ticks """ if not isinstance(velocities, (np.ndarray, pd.Series)): - raise TypeError('velocities must be of type np.ndarry or pd.Series') + raise TypeError("velocities must be of type np.ndarry or pd.Series") if isinstance(velocities, np.ndarray): velocities = pd.Series(velocities) if not isinstance(directions, (np.ndarray, pd.Series)): - raise TypeError('directions must be of type np.ndarry or pd.Series') + raise TypeError("directions must be of type np.ndarry or pd.Series") if isinstance(directions, np.ndarray): directions = pd.Series(directions) if len(velocities) != len(directions): - raise ValueError('velocities and directions must have the same length') + raise ValueError("velocities and directions must have the same length") if all(np.nan_to_num(velocities.values) < 0): - raise ValueError('All velocities must be positive') - if all(np.nan_to_num(directions.values) < 0) and all(np.nan_to_num(directions.values) > 360): - raise ValueError('directions must be between 0 and 360 degrees') + raise ValueError("All velocities must be positive") + if all(np.nan_to_num(directions.values) < 0) and all( + np.nan_to_num(directions.values) > 360 + ): + raise ValueError("directions must be between 0 and 360 degrees") if not isinstance(flood, (int, float, type(None))): - raise TypeError('flood must be of type int or float') + raise TypeError("flood must be of type int or float") if not isinstance(ebb, (int, float, type(None))): - raise TypeError('ebb must be of type int or float') + raise TypeError("ebb must be of type int or float") if flood is not None: if (flood < 0) and (flood > 360): - raise ValueError('flood must be between 0 and 360 degrees') + raise ValueError("flood must be between 0 and 360 degrees") if ebb is not None: if (ebb < 0) and (ebb > 360): - raise ValueError('ebb must be between 0 and 360 degrees') + raise ValueError("ebb must be between 0 and 360 degrees") def plot_rose( @@ -124,10 +134,10 @@ def plot_rose( ax=None, metadata=None, flood=None, - ebb=None + ebb=None, ): """ - Creates a polar histogram. Direction angles from binned histogram must + Creates a polar histogram. Direction angles from binned histogram must be specified such that 0 degrees is north. Parameters @@ -136,9 +146,9 @@ def plot_rose( Directions in degrees with 0 degrees specified as true north velocities: array-like Velocities in m/s - width_dir: float + width_dir: float Width of directional bins for histogram in degrees - width_vel: float + width_vel: float Width of velocity bins for histogram in m/s ax: float Polar plot axes to add polar histogram @@ -146,7 +156,7 @@ def plot_rose( If provided needs keys ['name', 'lat', 'lon'] for plot title and information box on plot flood: float - Direction in degrees added to theta ticks + Direction in degrees added to theta ticks ebb: float Direction in degrees added to theta ticks Returns @@ -158,45 +168,50 @@ def plot_rose( _check_inputs(directions, velocities, flood, ebb) if not isinstance(width_dir, (int, float)): - raise TypeError('width_dir must be of type int or float') + raise TypeError("width_dir must be of type int or float") if not isinstance(width_vel, (int, float)): - raise TypeError('width_vel must be of type int or float') + raise TypeError("width_vel must be of type int or float") if width_dir < 0: - raise ValueError('width_dir must be greater than 0') + raise ValueError("width_dir must be greater than 0") if width_vel < 0: - raise ValueError('width_vel must be greater than 0') + raise ValueError("width_vel must be greater than 0") # Calculate the 2D histogram - H, dir_edges, vel_edges = _histogram( - directions, velocities, width_dir, width_vel) + H, dir_edges, vel_edges = _histogram(directions, velocities, width_dir, width_vel) # Determine number of bins dir_bins = H.shape[0] vel_bins = H.shape[1] # Create the angles - thetas = np.arange(0, 2*np.pi, 2*np.pi/dir_bins) + thetas = np.arange(0, 2 * np.pi, 2 * np.pi / dir_bins) # Initialize the polar polt ax = _initialize_polar(ax=ax, metadata=metadata, flood=flood, ebb=ebb) # Set bar color based on wind speed colors = plt.cm.viridis(np.linspace(0, 1.0, vel_bins)) # Set the current speed bin label names # Calculate the 2D histogram - labels = [f'{i:.1f}-{j:.1f}' for i, - j in zip(vel_edges[:-1], vel_edges[1:])] + labels = [f"{i:.1f}-{j:.1f}" for i, j in zip(vel_edges[:-1], vel_edges[1:])] # Initialize the vertical-offset (polar radius) for the stacked bar chart. r_offset = np.zeros(dir_bins) for vel_bin in range(vel_bins): # Plot fist set of bars in all directions - ax.bar(thetas, H[:, vel_bin], width=(2*np.pi/dir_bins), - bottom=r_offset, color=colors[vel_bin], label=labels[vel_bin]) + ax.bar( + thetas, + H[:, vel_bin], + width=(2 * np.pi / dir_bins), + bottom=r_offset, + color=colors[vel_bin], + label=labels[vel_bin], + ) # Increase the radius offset in all directions r_offset = r_offset + H[:, vel_bin] # Add the a legend for current speed bins plt.legend( - loc='best', title='Velocity bins [m/s]', bbox_to_anchor=(1.29, 1.00), ncol=1) + loc="best", title="Velocity bins [m/s]", bbox_to_anchor=(1.29, 1.00), ncol=1 + ) # Get the r-ticks (polar y-ticks) yticks = plt.yticks() # Format y-ticks with units for clarity - rticks = [f'{y:.1f}%' for y in yticks[0]] + rticks = [f"{y:.1f}%" for y in yticks[0]] # Set the y-ticks plt.yticks(yticks[0], rticks) return ax @@ -210,10 +225,10 @@ def plot_joint_probability_distribution( ax=None, metadata=None, flood=None, - ebb=None + ebb=None, ): """ - Creates a polar histogram. Direction angles from binned histogram must + Creates a polar histogram. Direction angles from binned histogram must be specified such that 0 is north. Parameters @@ -222,9 +237,9 @@ def plot_joint_probability_distribution( Directions in degrees with 0 degrees specified as true north velocities: array-like Velocities in m/s - width_dir: float + width_dir: float Width of directional bins for histogram in degrees - width_vel: float + width_vel: float Width of velocity bins for histogram in m/s ax: float Polar plot axes to add polar histogram @@ -232,71 +247,68 @@ def plot_joint_probability_distribution( If provided needs keys ['name', 'Lat', 'Lon'] for plot title and information box on plot flood: float - Direction in degrees added to theta ticks + Direction in degrees added to theta ticks ebb: float Direction in degrees added to theta ticks Returns ------- ax: figure - Joint probability distribution + Joint probability distribution """ _check_inputs(directions, velocities, flood, ebb) if not isinstance(width_dir, (int, float)): - raise TypeError('width_dir must be of type int or float') + raise TypeError("width_dir must be of type int or float") if not isinstance(width_vel, (int, float)): - raise TypeError('width_vel must be of type int or float') + raise TypeError("width_vel must be of type int or float") if width_dir < 0: - raise ValueError('width_dir must be greater than 0') + raise ValueError("width_dir must be greater than 0") if width_vel < 0: - raise ValueError('width_vel must be greater than 0') + raise ValueError("width_vel must be greater than 0") # Calculate the 2D histogram - H, dir_edges, vel_edges = _histogram( - directions, velocities, width_dir, width_vel) + H, dir_edges, vel_edges = _histogram(directions, velocities, width_dir, width_vel) # Initialize the polar polt ax = _initialize_polar(ax=ax, metadata=metadata, flood=flood, ebb=ebb) # Set the current speed bin label names - labels = [f'{i:.1f}-{j:.1f}' for i, - j in zip(vel_edges[:-1], vel_edges[1:])] + labels = [f"{i:.1f}-{j:.1f}" for i, j in zip(vel_edges[:-1], vel_edges[1:])] # Set vel & dir bins to middle of bin except at ends - dir_bins = 0.5*(dir_edges[1:] + dir_edges[:-1]) # set all bins to middle - vel_bins = 0.5*(vel_edges[1:] + vel_edges[:-1]) + dir_bins = 0.5 * (dir_edges[1:] + dir_edges[:-1]) # set all bins to middle + vel_bins = 0.5 * (vel_edges[1:] + vel_edges[:-1]) # Reset end of bin range to edge of bin dir_bins[0] = dir_edges[0] vel_bins[0] = vel_edges[0] dir_bins[-1] = dir_edges[-1] vel_bins[-1] = vel_edges[-1] # Interpolate the bins back to specific data points - z = _interpn((dir_bins, vel_bins), - H, np.vstack([directions, velocities]).T, method="splinef2d", - bounds_error=False) + z = _interpn( + (dir_bins, vel_bins), + H, + np.vstack([directions, velocities]).T, + method="splinef2d", + bounds_error=False, + ) # Plot the most probable data last idx = z.argsort() # Convert to radians and order points by probability - theta, r, z = directions.values[idx] * \ - np.pi/180, velocities.values[idx], z[idx] + theta, r, z = directions.values[idx] * np.pi / 180, velocities.values[idx], z[idx] # Create scatter plot colored by probability density sx = ax.scatter(theta, r, c=z, s=5, edgecolor=None) # Create colorbar - plt.colorbar(sx, ax=ax, label='Joint Probability [%]') + plt.colorbar(sx, ax=ax, label="Joint Probability [%]") # Get the r-ticks (polar y-ticks) yticks = ax.get_yticks() # Set y-ticks labels ax.set_yticks(yticks) # to avoid matplotlib warning - ax.set_yticklabels([f'{y:.1f} $m/s$' for y in yticks]) + ax.set_yticklabels([f"{y:.1f} $m/s$" for y in yticks]) return ax def plot_current_timeseries( - directions, - velocities, - principal_direction, - label=None, - ax=None + directions, velocities, principal_direction, label=None, ax=None ): """ Returns a plot of velocity from an array of direction and speed @@ -313,7 +325,7 @@ def plot_current_timeseries( label: string Label to use in the legend ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. Returns @@ -325,30 +337,29 @@ def plot_current_timeseries( _check_inputs(directions, velocities, flood=None, ebb=None) if not isinstance(principal_direction, (int, float)): - raise TypeError('principal_direction must be of type int or float') + raise TypeError("principal_direction must be of type int or float") if (principal_direction < 0) and (principal_direction > 360): - raise ValueError( - 'principal_direction must be between 0 and 360 degrees') + raise ValueError("principal_direction must be between 0 and 360 degrees") # Rotate coordinate system by supplied principal_direction principal_directions = directions - principal_direction # Calculate the velocity - velocity = velocities * np.cos(np.pi/180*principal_directions) + velocity = velocities * np.cos(np.pi / 180 * principal_directions) # Call on standard xy plotting - ax = _xy_plot(velocities.index, velocity, fmt='-', label=label, - xlabel='Time', ylabel='Velocity [$m/s$]', ax=ax) + ax = _xy_plot( + velocities.index, + velocity, + fmt="-", + label=label, + xlabel="Time", + ylabel="Velocity [$m/s$]", + ax=ax, + ) return ax -def tidal_phase_probability( - directions, - velocities, - flood, - ebb, - bin_size=0.1, - ax=None -): - """ +def tidal_phase_probability(directions, velocities, flood, ebb, bin_size=0.1, ax=None): + """ Discretizes the tidal series speed by bin size and returns a plot of the probability for each bin in the flood or ebb tidal phase. @@ -365,7 +376,7 @@ def tidal_phase_probability( bin_size: float Speed bin size. Optional. Deaful = 0.1 m/s ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. Returns @@ -375,22 +386,22 @@ def tidal_phase_probability( _check_inputs(directions, velocities, flood, ebb) if bin_size < 0: - raise ValueError('bin_size must be greater than 0') + raise ValueError("bin_size must be greater than 0") if ax == None: fig, ax = plt.subplots(figsize=(12, 8)) isEbb = _flood_or_ebb(directions, flood, ebb) - decimals = round(bin_size/0.1) - N_bins = int(round(velocities.max(), decimals)/bin_size) + decimals = round(bin_size / 0.1) + N_bins = int(round(velocities.max(), decimals) / bin_size) H, bins = np.histogram(velocities, bins=N_bins) H_ebb, bins1 = np.histogram(velocities[isEbb], bins=bins) H_flood, bins2 = np.histogram(velocities[~isEbb], bins=bins) - p_ebb = H_ebb/H - p_flood = H_flood/H + p_ebb = H_ebb / H + p_flood = H_flood / H center = (bins[:-1] + bins[1:]) / 2 width = 0.9 * (bins[1] - bins[0]) @@ -398,32 +409,44 @@ def tidal_phase_probability( mask1 = np.ma.where(p_ebb >= p_flood) mask2 = np.ma.where(p_flood >= p_ebb) - ax.bar(center[mask1], height=p_ebb[mask1], edgecolor='black', width=width, - label='Ebb', color='blue') - ax.bar(center, height=p_flood, edgecolor='black', width=width, - alpha=1, label='Flood', color='orange') - ax.bar(center[mask2], height=p_ebb[mask2], alpha=1, edgecolor='black', - width=width, color='blue') - - plt.xlabel('Velocity [m/s]') - plt.ylabel('Probability') + ax.bar( + center[mask1], + height=p_ebb[mask1], + edgecolor="black", + width=width, + label="Ebb", + color="blue", + ) + ax.bar( + center, + height=p_flood, + edgecolor="black", + width=width, + alpha=1, + label="Flood", + color="orange", + ) + ax.bar( + center[mask2], + height=p_ebb[mask2], + alpha=1, + edgecolor="black", + width=width, + color="blue", + ) + + plt.xlabel("Velocity [m/s]") + plt.ylabel("Probability") plt.ylim(0, 1.0) plt.legend() - plt.grid(linestyle=':') + plt.grid(linestyle=":") return ax -def tidal_phase_exceedance( - directions, - velocities, - flood, - ebb, - bin_size=0.1, - ax=None -): +def tidal_phase_exceedance(directions, velocities, flood, ebb, bin_size=0.1, ax=None): """ - Returns a stacked area plot of the exceedance probability for the + Returns a stacked area plot of the exceedance probability for the flood and ebb tidal phases. Parameters @@ -435,21 +458,21 @@ def tidal_phase_exceedance( flood: float or int Principal component of flow in the flood direction [degrees] ebb: float or int - Principal component of flow in the ebb direction [degrees] + Principal component of flow in the ebb direction [degrees] bin_size: float - Speed bin size. Optional. Deaful = 0.1 m/s + Speed bin size. Optional. Deaful = 0.1 m/s ax : matplotlib axes object - Axes for plotting. If None, then a new figure with a single + Axes for plotting. If None, then a new figure with a single axes is used. Returns ------- - ax: figure + ax: figure """ _check_inputs(directions, velocities, flood, ebb) if bin_size < 0: - raise ValueError('bin_size must be greater than 0') + raise ValueError("bin_size must be greater than 0") if ax == None: fig, ax = plt.subplots(figsize=(12, 8)) @@ -459,17 +482,20 @@ def tidal_phase_exceedance( s_ebb = velocities[isEbb] s_flood = velocities[~isEbb] - F = exceedance_probability(velocities)['F'] - F_ebb = exceedance_probability(s_ebb)['F'] - F_flood = exceedance_probability(s_flood)['F'] + F = exceedance_probability(velocities)["F"] + F_ebb = exceedance_probability(s_ebb)["F"] + F_flood = exceedance_probability(s_flood)["F"] - decimals = round(bin_size/0.1) - s_new = np.arange(np.around(velocities.min(), decimals), - np.around(velocities.max(), decimals)+bin_size, bin_size) + decimals = round(bin_size / 0.1) + s_new = np.arange( + np.around(velocities.min(), decimals), + np.around(velocities.max(), decimals) + bin_size, + bin_size, + ) f_total = interp1d(velocities, F, bounds_error=False) - f_ebb = interp1d(s_ebb, F_ebb, bounds_error=False) - f_flood = interp1d(s_flood, F_flood, bounds_error=False) + f_ebb = interp1d(s_ebb, F_ebb, bounds_error=False) + f_flood = interp1d(s_flood, F_flood, bounds_error=False) F_total = f_total(s_new) F_ebb = f_ebb(s_new) @@ -477,12 +503,16 @@ def tidal_phase_exceedance( F_max_total = np.nanmax(F_ebb) + np.nanmax(F_flood) - ax.stackplot(s_new, F_ebb/F_max_total*100, - F_flood/F_max_total*100, labels=['Ebb', 'Flood']) + ax.stackplot( + s_new, + F_ebb / F_max_total * 100, + F_flood / F_max_total * 100, + labels=["Ebb", "Flood"], + ) - plt.xlabel('velocity [m/s]') - plt.ylabel('Probability of Exceedance') + plt.xlabel("velocity [m/s]") + plt.ylabel("Probability of Exceedance") plt.legend() - plt.grid(linestyle=':', linewidth=1) + plt.grid(linestyle=":", linewidth=1) return ax diff --git a/mhkit/tidal/io/noaa.py b/mhkit/tidal/io/noaa.py index d97d320a7..1e4d10f1d 100644 --- a/mhkit/tidal/io/noaa.py +++ b/mhkit/tidal/io/noaa.py @@ -34,8 +34,15 @@ from mhkit.utils.cache import handle_caching -def request_noaa_data(station, parameter, start_date, end_date, - proxy=None, write_json=None, clear_cache=False): +def request_noaa_data( + station, + parameter, + start_date, + end_date, + proxy=None, + write_json=None, + clear_cache=False, +): """ Loads NOAA current data directly from https://tidesandcurrents.noaa.gov/api/ into a pandas DataFrame. NOAA sets max of 31 days between start and end date. @@ -53,54 +60,61 @@ def request_noaa_data(station, parameter, start_date, end_date, start_date : str Start date in the format yyyyMMdd end_date : str - End date in the format yyyyMMdd + End date in the format yyyyMMdd proxy : dict or None To request data from behind a firewall, define a dictionary of proxy settings, for example {"http": 'localhost:8080'} write_json : str or None Name of json file to write data clear_cache : bool - If True, the cache for this specific request will be cleared. + If True, the cache for this specific request will be cleared. Returns ------- - data : pandas DataFrame - Data indexed by datetime with columns named according to the parameter's + data : pandas DataFrame + Data indexed by datetime with columns named according to the parameter's variable description """ # Type check inputs if not isinstance(station, str): raise TypeError( - f"Expected 'station' to be of type str, but got {type(station)}") + f"Expected 'station' to be of type str, but got {type(station)}" + ) if not isinstance(parameter, str): raise TypeError( - f"Expected 'parameter' to be of type str, but got {type(parameter)}") + f"Expected 'parameter' to be of type str, but got {type(parameter)}" + ) if not isinstance(start_date, str): raise TypeError( - f"Expected 'start_date' to be of type str, but got {type(start_date)}") + f"Expected 'start_date' to be of type str, but got {type(start_date)}" + ) if not isinstance(end_date, str): raise TypeError( - f"Expected 'end_date' to be of type str, but got {type(end_date)}") + f"Expected 'end_date' to be of type str, but got {type(end_date)}" + ) if proxy and not isinstance(proxy, dict): raise TypeError( - f"Expected 'proxy' to be of type dict or None, but got {type(proxy)}") + f"Expected 'proxy' to be of type dict or None, but got {type(proxy)}" + ) if write_json and not isinstance(write_json, str): raise TypeError( - f"Expected 'write_json' to be of type str or None, but got {type(write_json)}") + f"Expected 'write_json' to be of type str or None, but got {type(write_json)}" + ) if not isinstance(clear_cache, bool): raise TypeError( - f"Expected 'clear_cache' to be of type bool, but got {type(clear_cache)}") + f"Expected 'clear_cache' to be of type bool, but got {type(clear_cache)}" + ) # Define the path to the cache directory - cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "noaa") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "noaa") # Create a unique filename based on the function parameters hash_params = f"{station}_{parameter}_{start_date}_{end_date}" # Use handle_caching to manage cache cached_data, cached_metadata, cache_filepath = handle_caching( - hash_params, cache_dir, write_json=write_json, clear_cache_file=clear_cache) + hash_params, cache_dir, write_json=write_json, clear_cache_file=clear_cache + ) if cached_data is not None: if write_json: @@ -108,28 +122,29 @@ def request_noaa_data(station, parameter, start_date, end_date, return cached_data, cached_metadata # Convert start and end dates to datetime objects - begin = datetime.datetime.strptime(start_date, '%Y%m%d').date() - end = datetime.datetime.strptime(end_date, '%Y%m%d').date() + begin = datetime.datetime.strptime(start_date, "%Y%m%d").date() + end = datetime.datetime.strptime(end_date, "%Y%m%d").date() # Determine the number of 30 day intervals delta = 30 - interval = math.ceil(((end - begin).days)/delta) + interval = math.ceil(((end - begin).days) / delta) # Create date ranges with 30 day intervals date_list = [ - begin + datetime.timedelta(days=i * delta) for i in range(interval + 1)] + begin + datetime.timedelta(days=i * delta) for i in range(interval + 1) + ] date_list[-1] = end # Iterate over date_list (30 day intervals) and fetch data data_frames = [] for i in range(len(date_list) - 1): - start_date = date_list[i].strftime('%Y%m%d') - end_date = date_list[i + 1].strftime('%Y%m%d') + start_date = date_list[i].strftime("%Y%m%d") + end_date = date_list[i + 1].strftime("%Y%m%d") api_query = f"begin_date={start_date}&end_date={end_date}&station={station}&product={parameter}&units=metric&time_zone=gmt&application=web_services&format=xml" data_url = f"https://tidesandcurrents.noaa.gov/api/datagetter?{api_query}" - print('Data request URL: ', data_url) + print("Data request URL: ", data_url) # Get response try: @@ -153,8 +168,13 @@ def request_noaa_data(station, parameter, start_date, end_date, # After making the API request and processing the response, write the # response to a cache file - handle_caching(hash_params, cache_dir, data=data, - metadata=metadata, clear_cache_file=clear_cache) + handle_caching( + hash_params, + cache_dir, + data=data, + metadata=metadata, + clear_cache_file=clear_cache, + ) if write_json: shutil.copy(cache_filepath, write_json) @@ -163,45 +183,46 @@ def request_noaa_data(station, parameter, start_date, end_date, def _xml_to_dataframe(response): - ''' + """ Returns a dataframe from an xml response - ''' + """ root = ET.fromstring(response.text) metadata = None data = None for child in root: # Save meta data dictionary - if child.tag == 'metadata': + if child.tag == "metadata": metadata = child.attrib - elif child.tag == 'observations': + elif child.tag == "observations": data = child - elif child.tag == 'error': - print('***ERROR: Response returned error') + elif child.tag == "error": + print("***ERROR: Response returned error") return None if data is None: - print('***ERROR: No observations found') + print("***ERROR: No observations found") return None # Create a list of DataFrames then Concatenate - df = pd.concat([pd.DataFrame(obs.attrib, index=[0]) - for obs in data], ignore_index=True) + df = pd.concat( + [pd.DataFrame(obs.attrib, index=[0]) for obs in data], ignore_index=True + ) # Convert time to datetime - df['t'] = pd.to_datetime(df.t) - df = df.set_index('t') + df["t"] = pd.to_datetime(df.t) + df = df.set_index("t") df.drop_duplicates(inplace=True) # Convert data to float - df[['d', 's']] = df[['d', 's']].apply(pd.to_numeric) + df[["d", "s"]] = df[["d", "s"]].apply(pd.to_numeric) return df, metadata def read_noaa_json(filename): - ''' - Returns site DataFrame and metadata from a json saved from the + """ + Returns site DataFrame and metadata from a json saved from the request_noaa_data Parameters ---------- @@ -210,26 +231,29 @@ def read_noaa_json(filename): Returns ------- data: DataFrame - Timeseries Site data of direction and speed + Timeseries Site data of direction and speed metadata: dictionary Site metadata - ''' + """ with open(filename) as outfile: json_data = json.load(outfile) try: # original MHKiT format (deprecate in future) # Get the metadata - metadata = json_data['metadata'] + metadata = json_data["metadata"] # Remove metadata entry - del json_data['metadata'] + del json_data["metadata"] # Remainder is DataFrame data = pd.DataFrame.from_dict(json_data) # Convert from epoch to date time - data.index = pd.to_datetime(data.index, unit='ms') + data.index = pd.to_datetime(data.index, unit="ms") except ValueError: # using cache.py format - if 'metadata' in json_data: - metadata = json_data.pop('metadata', None) - data = pd.DataFrame(json_data['data'], index=pd.to_datetime( - json_data['index']), columns=json_data['columns']) + if "metadata" in json_data: + metadata = json_data.pop("metadata", None) + data = pd.DataFrame( + json_data["data"], + index=pd.to_datetime(json_data["index"]), + columns=json_data["columns"], + ) return data, metadata diff --git a/mhkit/tidal/performance.py b/mhkit/tidal/performance.py index f3346003a..20cd8b215 100644 --- a/mhkit/tidal/performance.py +++ b/mhkit/tidal/performance.py @@ -4,9 +4,14 @@ import warnings from mhkit import dolfyn -from mhkit.river.performance import (circular, ducted, rectangular, - multiple_circular, tip_speed_ratio, - power_coefficient) +from mhkit.river.performance import ( + circular, + ducted, + rectangular, + multiple_circular, + tip_speed_ratio, + power_coefficient, +) def _slice_circular_capture_area(diameter, hub_height, doppler_cell_size): @@ -29,15 +34,15 @@ def _slice_circular_capture_area(diameter, hub_height, doppler_cell_size): Returns --------- capture_area_slice: xarray.DataArray - Capture area sliced into horizontal slices of height + Capture area sliced into horizontal slices of height `doppler_cell_size`, centered on `hub height`. """ def area_of_circle_segment(radius, angle): # Calculating area of sector - area_of_sector = np.pi * radius**2 * (angle/360) + area_of_sector = np.pi * radius**2 * (angle / 360) # Calculating area of triangle - area_of_triangle = 0.5 * radius**2 * np.sin((np.pi*angle)/180) + area_of_triangle = 0.5 * radius**2 * np.sin((np.pi * angle) / 180) return area_of_sector - area_of_triangle def point_on_circle(y, r): @@ -47,44 +52,44 @@ def point_on_circle(y, r): d = diameter cs = doppler_cell_size - A_cap = np.pi*(d/2)**2 # m^2 + A_cap = np.pi * (d / 2) ** 2 # m^2 # Need to chop up capture area into slices based on bin size # For a cirle: - r_min = hub_height - d/2 - r_max = hub_height + d/2 - A_edge = np.arange(r_min, r_max+cs, cs) - A_rng = A_edge[:-1] + cs/2 # Center of each slice + r_min = hub_height - d / 2 + r_max = hub_height + d / 2 + A_edge = np.arange(r_min, r_max + cs, cs) + A_rng = A_edge[:-1] + cs / 2 # Center of each slice # y runs from the bottom edge of the lower centerline slice to # the top edge of the lowest slice # Will need to figure out y if the hub height isn't centered y = abs(A_edge - np.mean(A_edge)) - y[np.where(abs(y) > (d/2))] = d/2 + y[np.where(abs(y) > (d / 2))] = d / 2 # Even vs odd number of slices if y.size % 2: odd = 1 else: odd = 0 - y = y[:len(y)//2] + y = y[: len(y) // 2] y = np.append(y, 0) - x = point_on_circle(y, d/2) - radii = np.rad2deg(np.arctan(x/y)*2) + x = point_on_circle(y, d / 2) + radii = np.rad2deg(np.arctan(x / y) * 2) # Segments go from outside of circle towards middle - As = area_of_circle_segment(d/2, radii) + As = area_of_circle_segment(d / 2, radii) # Subtract segments to get area of slices As_slc = As[1:] - As[:-1] if not odd: # Make middle slice half whole - As_slc[-1] = As_slc[-1]*2 + As_slc[-1] = As_slc[-1] * 2 # Copy-flip the other slices to get the whole circle As_slc = np.append(As_slc, np.flip(As_slc[:-1])) else: As_slc = abs(As_slc) - return xr.DataArray(As_slc, coords={'range': A_rng}) + return xr.DataArray(As_slc, coords={"range": A_rng}) def _slice_rectangular_capture_area(height, width, hub_height, doppler_cell_size): @@ -110,26 +115,26 @@ def _slice_rectangular_capture_area(height, width, hub_height, doppler_cell_size Returns --------- capture_area_slice: xarray.DataArray - Capture area sliced into horizontal slices of height + Capture area sliced into horizontal slices of height `doppler_cell_size`, centered on `hub height`. """ # Need to chop up capture area into slices based on bin size # For a rectangle it's pretty simple cs = doppler_cell_size - r_min = hub_height - height/2 - r_max = hub_height + height/2 - A_edge = np.arange(r_min, r_max+cs, cs) - A_rng = A_edge[:-1] + cs/2 # Center of each slice + r_min = hub_height - height / 2 + r_max = hub_height + height / 2 + A_edge = np.arange(r_min, r_max + cs, cs) + A_rng = A_edge[:-1] + cs / 2 # Center of each slice - As_slc = np.ones(len(A_rng))*width*cs + As_slc = np.ones(len(A_rng)) * width * cs - return xr.DataArray(As_slc, coords={'range': A_rng}) + return xr.DataArray(As_slc, coords={"range": A_rng}) def _check_dtype(var, var_name): """ - Checks the datatype of a variable, converting pandas Series to xarray DataArray, + Checks the datatype of a variable, converting pandas Series to xarray DataArray, or raising an error if the datatype is neither. Parameters @@ -149,23 +154,26 @@ def _check_dtype(var, var_name): if isinstance(var, pd.Series): var = var.to_xarray() elif not isinstance(var, xr.DataArray): - raise TypeError(var_name.capitalize() + - ' must be of type xr.DataArray or pd.Series') + raise TypeError( + var_name.capitalize() + " must be of type xr.DataArray or pd.Series" + ) return var -def power_curve(power, - velocity, - hub_height, - doppler_cell_size, - sampling_frequency, - window_avg_time=600, - turbine_profile='circular', - diameter=None, - height=None, - width=None): +def power_curve( + power, + velocity, + hub_height, + doppler_cell_size, + sampling_frequency, + window_avg_time=600, + turbine_profile="circular", + diameter=None, + height=None, + width=None, +): """ - Calculates power curve and power statistics for a marine energy + Calculates power curve and power statistics for a marine energy device based on IEC/TS 62600-200 section 9.3. Parameters @@ -175,7 +183,7 @@ def power_curve(power, velocity: pandas.Series or xarray.DataArray ([range,] time) 1D or 2D streamwise sea water velocity or sea water speed. hub_height: numeric - Turbine hub height altitude above the seabed. Assumes ADCP + Turbine hub height altitude above the seabed. Assumes ADCP depth bins are referenced to the seafloor. doppler_cell_size: numeric ADCP depth bin size. @@ -201,99 +209,122 @@ def power_curve(power, # Velocity should be a 2D xarray or pandas array and have dims (range, time) # Power should have a timestamp coordinate/index - power = _check_dtype(power, 'power') - velocity = _check_dtype(velocity, 'velocity') + power = _check_dtype(power, "power") + velocity = _check_dtype(velocity, "velocity") if len(velocity.shape) != 2: - raise ValueError("Velocity should be 2 dimensional and have \ - dimensions of 'time' (temporal) and 'range' (spatial).") + raise ValueError( + "Velocity should be 2 dimensional and have \ + dimensions of 'time' (temporal) and 'range' (spatial)." + ) # Numeric positive checks - numeric_params = [hub_height, doppler_cell_size, - sampling_frequency, window_avg_time] - numeric_param_names = ['hub_height', 'doppler_cell_size', - 'sampling_frequency', 'window_avg_time'] + numeric_params = [ + hub_height, + doppler_cell_size, + sampling_frequency, + window_avg_time, + ] + numeric_param_names = [ + "hub_height", + "doppler_cell_size", + "sampling_frequency", + "window_avg_time", + ] for param, name in zip(numeric_params, numeric_param_names): if not isinstance(param, (int, float)): - raise TypeError(f'{name} must be numeric.') + raise TypeError(f"{name} must be numeric.") if param <= 0: - raise ValueError(f'{name} must be positive.') + raise ValueError(f"{name} must be positive.") # Turbine profile related checks - if turbine_profile not in ['circular', 'rectangular']: + if turbine_profile not in ["circular", "rectangular"]: raise ValueError( - "`turbine_profile` must be one of 'circular' or 'rectangular'.") - if turbine_profile == 'circular': + "`turbine_profile` must be one of 'circular' or 'rectangular'." + ) + if turbine_profile == "circular": if diameter is None: raise TypeError( - "`diameter` cannot be None for input `turbine_profile` = 'circular'.") + "`diameter` cannot be None for input `turbine_profile` = 'circular'." + ) elif not isinstance(diameter, (int, float)) or diameter <= 0: raise ValueError("`diameter` must be a positive number.") else: # If the checks pass, calculate A_slc A_slc = _slice_circular_capture_area( - diameter, hub_height, doppler_cell_size) + diameter, hub_height, doppler_cell_size + ) else: # Rectangular profile if height is None or width is None: raise TypeError( - "`height` and `width` cannot be None for input `turbine_profile` = 'rectangular'.") - elif not all(isinstance(val, (int, float)) and val > 0 for val in [height, width]): + "`height` and `width` cannot be None for input `turbine_profile` = 'rectangular'." + ) + elif not all( + isinstance(val, (int, float)) and val > 0 for val in [height, width] + ): raise ValueError("`height` and `width` must be positive numbers.") else: # If the checks pass, calculate A_slc A_slc = _slice_rectangular_capture_area( - height, width, hub_height, doppler_cell_size) + height, width, hub_height, doppler_cell_size + ) # Streamwise data U = abs(velocity) - time = U['time'].values + time = U["time"].values # Interpolate power to velocity timestamps - P = power.interp(time=U['time'], method='linear') + P = power.interp(time=U["time"], method="linear") # Power weighted velocity in capture area # Interpolate U range to capture area slices, then cube and multiply by area - U_hat = U.interp(range=A_slc['range'], method='linear')**3 * A_slc + U_hat = U.interp(range=A_slc["range"], method="linear") ** 3 * A_slc # Average the velocity across the capture area and divide out area - U_hat = (U_hat.sum('range') / A_slc.sum()) ** (-1/3) + U_hat = (U_hat.sum("range") / A_slc.sum()) ** (-1 / 3) # Time-average velocity at hub-height - bnr = dolfyn.VelBinner(n_bin=window_avg_time * - sampling_frequency, fs=sampling_frequency) + bnr = dolfyn.VelBinner( + n_bin=window_avg_time * sampling_frequency, fs=sampling_frequency + ) # Hub-height velocity mean - mean_hub_vel = xr.DataArray(bnr.mean(U.sel(range=hub_height, method='nearest').values), - coords={'time': bnr.mean(time)}) + mean_hub_vel = xr.DataArray( + bnr.mean(U.sel(range=hub_height, method="nearest").values), + coords={"time": bnr.mean(time)}, + ) # Power-weighted hub-height velocity mean - U_hat_bar = xr.DataArray((bnr.mean(U_hat.values ** 3)) ** (-1/3), - coords={'time': bnr.mean(time)}) + U_hat_bar = xr.DataArray( + (bnr.mean(U_hat.values**3)) ** (-1 / 3), coords={"time": bnr.mean(time)} + ) # Average power - P_bar = xr.DataArray(bnr.mean(P.values), - coords={'time': bnr.mean(time)}) + P_bar = xr.DataArray(bnr.mean(P.values), coords={"time": bnr.mean(time)}) # Then reorganize into 0.1 m velocity bins and average U_bins = np.arange(0, np.nanmax(mean_hub_vel) + 0.1, 0.1) - U_hub_vel = mean_hub_vel.assign_coords( - {"time": mean_hub_vel}).rename({"time": "speed"}) + U_hub_vel = mean_hub_vel.assign_coords({"time": mean_hub_vel}).rename( + {"time": "speed"} + ) U_hub_mean = U_hub_vel.groupby_bins("speed", U_bins).mean() - U_hat_vel = U_hat_bar.assign_coords( - {"time": mean_hub_vel}).rename({"time": "speed"}) + U_hat_vel = U_hat_bar.assign_coords({"time": mean_hub_vel}).rename( + {"time": "speed"} + ) U_hat_mean = U_hat_vel.groupby_bins("speed", U_bins).mean() - P_bar_vel = P_bar.assign_coords( - {"time": mean_hub_vel}).rename({"time": "speed"}) + P_bar_vel = P_bar.assign_coords({"time": mean_hub_vel}).rename({"time": "speed"}) P_bar_mean = P_bar_vel.groupby_bins("speed", U_bins).mean() P_bar_std = P_bar_vel.groupby_bins("speed", U_bins).std() P_bar_max = P_bar_vel.groupby_bins("speed", U_bins).max() P_bar_min = P_bar_vel.groupby_bins("speed", U_bins).min() - out = pd.DataFrame((U_hub_mean.to_series(), - U_hat_mean.to_series(), - P_bar_mean.to_series(), - P_bar_std.to_series(), - P_bar_max.to_series(), - P_bar_min.to_series(), - )).T - out.columns = ['U_avg', 'U_avg_power_weighted', - 'P_avg', 'P_std', 'P_max', 'P_min'] - out.index.name = 'U_bins' + out = pd.DataFrame( + ( + U_hub_mean.to_series(), + U_hat_mean.to_series(), + P_bar_mean.to_series(), + P_bar_std.to_series(), + P_bar_max.to_series(), + P_bar_min.to_series(), + ) + ).T + out.columns = ["U_avg", "U_avg_power_weighted", "P_avg", "P_std", "P_max", "P_min"] + out.index.name = "U_bins" return out @@ -351,39 +382,40 @@ def _apply_function(function, bnr, U): applied, grouped into bins according to bnr. """ - if function == 'mean': + if function == "mean": # Average data into 5-10 minute ensembles return xr.DataArray( bnr.mean(abs(U).values), - coords={'range': U.range, - 'time': bnr.mean(U['time'].values)}) - elif function == 'rms': + coords={"range": U.range, "time": bnr.mean(U["time"].values)}, + ) + elif function == "rms": # Reshape tidal velocity - returns (range, ensemble-time, ensemble elements) U_reshaped = bnr.reshape(abs(U).values) # Take root-mean-square U_rms = np.sqrt(np.nanmean(U_reshaped**2, axis=-1)) return xr.DataArray( - U_rms, - coords={'range': U.range, - 'time': bnr.mean(U['time'].values)}) - elif function == 'std': + U_rms, coords={"range": U.range, "time": bnr.mean(U["time"].values)} + ) + elif function == "std": # Standard deviation return xr.DataArray( bnr.standard_deviation(U.values), - coords={'range': U.range, - 'time': bnr.mean(U['time'].values)}) + coords={"range": U.range, "time": bnr.mean(U["time"].values)}, + ) else: raise ValueError( - f"Unknown function {function}. Should be one of 'mean', 'rms', or 'std'") - - -def velocity_profiles(velocity, - hub_height, - water_depth, - sampling_frequency, - window_avg_time=600, - function='mean', - ): + f"Unknown function {function}. Should be one of 'mean', 'rms', or 'std'" + ) + + +def velocity_profiles( + velocity, + hub_height, + water_depth, + sampling_frequency, + window_avg_time=600, + function="mean", +): """ Calculates profiles of the mean, root-mean-square (RMS), or standard deviation(std) of velocity. The chosen metric, specified by `function`, @@ -395,7 +427,7 @@ def velocity_profiles(velocity, velocity : pandas.Series or xarray.DataArray ([range,] time) 1D or 2D streamwise sea water velocity or sea water speed. hub_height : numeric - Turbine hub height altitude above the seabed. Assumes ADCP depth bins + Turbine hub height altitude above the seabed. Assumes ADCP depth bins are referenced to the seafloor. water_depth : numeric Water depth to seafloor, in same units as velocity `range` coordinate. @@ -412,22 +444,25 @@ def velocity_profiles(velocity, Average velocity profiles based on ensemble mean velocity. """ - velocity = _check_dtype(velocity, 'velocity') + velocity = _check_dtype(velocity, "velocity") if len(velocity.shape) != 2: - raise ValueError("Velocity should be 2 dimensional and have \ - dimensions of 'time' (temporal) and 'range' (spatial).") + raise ValueError( + "Velocity should be 2 dimensional and have \ + dimensions of 'time' (temporal) and 'range' (spatial)." + ) - if function not in ['mean', 'rms', 'std']: + if function not in ["mean", "rms", "std"]: raise ValueError("`function` must be one of 'mean', 'rms', or 'std'.") # Streamwise data U = velocity # Create binner - bnr = dolfyn.VelBinner(n_bin=window_avg_time * - sampling_frequency, fs=sampling_frequency) + bnr = dolfyn.VelBinner( + n_bin=window_avg_time * sampling_frequency, fs=sampling_frequency + ) # Take velocity at hub height - mean_hub_vel = bnr.mean(U.sel(range=hub_height, method='nearest').values) + mean_hub_vel = bnr.mean(U.sel(range=hub_height, method="nearest").values) # Apply mean, root-mean-square, or standard deviation U_out = _apply_function(function, bnr, U) @@ -438,28 +473,31 @@ def velocity_profiles(velocity, # Extend top and bottom of profiles to the seafloor and sea surface # Clip off extra depth bins with nans rdx = profiles.isel(speed_bins=0).notnull().sum().values - profiles = profiles.isel(range=slice(None, rdx+1)) + profiles = profiles.isel(range=slice(None, rdx + 1)) # Set seafloor velocity to 0 m/s out_data = np.insert(profiles.data, 0, 0, axis=0) # Set max range to the user-provided water depth - new_range = np.insert(profiles['range'].data[:-1], 0, 0) + new_range = np.insert(profiles["range"].data[:-1], 0, 0) new_range = np.append(new_range, water_depth) # Create a profiles with new range - iec_profiles = xr.DataArray(out_data, coords={'range': new_range, - 'speed_bins': profiles['speed_bins']}) + iec_profiles = xr.DataArray( + out_data, coords={"range": new_range, "speed_bins": profiles["speed_bins"]} + ) # Forward fill to surface - iec_profiles = iec_profiles.ffill('range', limit=None) + iec_profiles = iec_profiles.ffill("range", limit=None) return iec_profiles.to_pandas() -def device_efficiency(power, - velocity, - water_density, - capture_area, - hub_height, - sampling_frequency, - window_avg_time=600): +def device_efficiency( + power, + velocity, + water_density, + capture_area, + hub_height, + sampling_frequency, + window_avg_time=600, +): """ Calculates marine energy device efficiency based on IEC/TS 62600-200 Section 9.7. @@ -474,7 +512,7 @@ def device_efficiency(power, capture_area : numeric Swept area of marine energy device. hub_height : numeric - Turbine hub height altitude above the seabed. Assumes ADCP depth bins + Turbine hub height altitude above the seabed. Assumes ADCP depth bins are referenced to the seafloor. sampling_frequency : numeric ADCP sampling frequency in Hz. @@ -489,46 +527,53 @@ def device_efficiency(power, # Velocity should be a 2D xarray or pandas array and have dims (range, time) # Power should have a timestamp coordinate/index - power = _check_dtype(power, 'power') - velocity = _check_dtype(velocity, 'velocity') + power = _check_dtype(power, "power") + velocity = _check_dtype(velocity, "velocity") if len(velocity.shape) != 2: - raise ValueError("Velocity should be 2 dimensional and have \ - dimensions of 'time' (temporal) and 'range' (spatial).") + raise ValueError( + "Velocity should be 2 dimensional and have \ + dimensions of 'time' (temporal) and 'range' (spatial)." + ) # Streamwise data U = abs(velocity) - time = U['time'].values + time = U["time"].values # Power: Interpolate to velocity timeseries power = _interpolate_power_to_velocity_timeseries(power, U) # Create binner - bnr = dolfyn.VelBinner(n_bin=window_avg_time * - sampling_frequency, fs=sampling_frequency) + bnr = dolfyn.VelBinner( + n_bin=window_avg_time * sampling_frequency, fs=sampling_frequency + ) # Hub-height velocity - mean_hub_vel = xr.DataArray(bnr.mean(U.sel(range=hub_height, method='nearest').values), - coords={'time': bnr.mean(time)}) + mean_hub_vel = xr.DataArray( + bnr.mean(U.sel(range=hub_height, method="nearest").values), + coords={"time": bnr.mean(time)}, + ) vel_hub = _average_velocity_bins(mean_hub_vel, mean_hub_vel, bin_size=0.1) # Water density rho_vel = _calculate_density(water_density, bnr, mean_hub_vel, time) # Bin average power - P_avg = xr.DataArray(bnr.mean(power.values), - coords={'time': bnr.mean(time)}) + P_avg = xr.DataArray(bnr.mean(power.values), coords={"time": bnr.mean(time)}) P_vel = _average_velocity_bins(P_avg, mean_hub_vel, bin_size=0.1) # Theoretical power resource - P_resource = 1/2 * rho_vel * capture_area * vel_hub**3 + P_resource = 1 / 2 * rho_vel * capture_area * vel_hub**3 # Efficiency eta = P_vel / P_resource - out = pd.DataFrame((vel_hub.to_series(), - eta.to_series(), - )).T - out.columns = ['U_avg', 'Efficiency'] - out.index.name = 'U_bins' + out = pd.DataFrame( + ( + vel_hub.to_series(), + eta.to_series(), + ) + ).T + out.columns = ["U_avg", "Efficiency"] + out.index.name = "U_bins" return out @@ -538,8 +583,8 @@ def _interpolate_power_to_velocity_timeseries(power, U): Interpolates the power timeseries to match the velocity timeseries time points. This function checks if the input power is an xarray DataArray or a pandas Series - with a DatetimeIndex and performs interpolation accordingly. If the input power - does not match either of these types, a warning is issued and the original power + with a DatetimeIndex and performs interpolation accordingly. If the input power + does not match either of these types, a warning is issued and the original power timeseries is returned. Parameters @@ -557,18 +602,19 @@ def _interpolate_power_to_velocity_timeseries(power, U): Raises --------- Warning - If the input power is not a xarray DataArray or pandas Series with - a DatetimeIndex, a warning is issued stating that the function assumes the + If the input power is not a xarray DataArray or pandas Series with + a DatetimeIndex, a warning is issued stating that the function assumes the power timestamps match the velocity timestamps. """ - if 'xarray' in type(power).__module__: - return power.interp(time=U['time'], method='linear') - elif 'pandas' in type(power).__module__ and isinstance(power.index, pd.DatetimeIndex): - return power.to_xarray().interp(time=U['time'], method='linear') + if "xarray" in type(power).__module__: + return power.interp(time=U["time"], method="linear") + elif "pandas" in type(power).__module__ and isinstance( + power.index, pd.DatetimeIndex + ): + return power.to_xarray().interp(time=U["time"], method="linear") else: - warnings.warn( - "Assuming `power` timestamps match `velocity` timestamps") + warnings.warn("Assuming `power` timestamps match `velocity` timestamps") return power @@ -576,9 +622,9 @@ def _calculate_density(water_density, bnr, mean_hub_vel, time): """ Calculates the averaged density for the given time period. - This function first checks if the water_density is a scalar or an array. - If it is an array, the function calculates the mean density over the time - period using the binner object 'bnr', and then averages it over velocity bins. + This function first checks if the water_density is a scalar or an array. + If it is an array, the function calculates the mean density over the time + period using the binner object 'bnr', and then averages it over velocity bins. If it is a scalar, it directly returns the input density. Parameters @@ -595,13 +641,14 @@ def _calculate_density(water_density, bnr, mean_hub_vel, time): Returns --------- xarray.DataArray or float - The averaged water density over velocity bins if water_density is an array, + The averaged water density over velocity bins if water_density is an array, or the input scalar water_density. """ if np.size(water_density) > 1: - rho_avg = xr.DataArray(bnr.mean(water_density.values), - coords={'time': bnr.mean(time)}) + rho_avg = xr.DataArray( + bnr.mean(water_density.values), coords={"time": bnr.mean(time)} + ) return _average_velocity_bins(rho_avg, mean_hub_vel, bin_size=0.1) else: return water_density diff --git a/mhkit/tidal/resource.py b/mhkit/tidal/resource.py index 3206001f4..8e04587cb 100644 --- a/mhkit/tidal/resource.py +++ b/mhkit/tidal/resource.py @@ -1,10 +1,11 @@ import numpy as np import math import pandas as pd -from mhkit.river.resource import exceedance_probability, Froude_number +from mhkit.river.resource import exceedance_probability, Froude_number + def _histogram(directions, velocities, width_dir, width_vel): - ''' + """ Wrapper around numpy histogram 2D. Used to find joint probability between directions and velocities. Returns joint probability H as [%]. @@ -14,9 +15,9 @@ def _histogram(directions, velocities, width_dir, width_vel): Directions in degrees with 0 degrees specified as true north velocities: array-like Velocities in m/s - width_dir: float + width_dir: float Width of directional bins for histogram in degrees - width_vel: float + width_vel: float Width of velocity bins for histogram in m/s Returns ------- @@ -26,17 +27,22 @@ def _histogram(directions, velocities, width_dir, width_vel): List of directional bin edges vel_edges: list List of velocity bin edges - ''' + """ - # Number of directional bins - N_dir = math.ceil(360/width_dir) - # Max bin (round up to nearest integer) + # Number of directional bins + N_dir = math.ceil(360 / width_dir) + # Max bin (round up to nearest integer) vel_max = math.ceil(velocities.max()) # Number of velocity bins - N_vel = math.ceil(vel_max/width_vel) + N_vel = math.ceil(vel_max / width_vel) # 2D Histogram of current speed and direction - H, dir_edges, vel_edges = np.histogram2d(directions, velocities, bins=(N_dir,N_vel), - range=[[0,360],[0,vel_max]], density=True) + H, dir_edges, vel_edges = np.histogram2d( + directions, + velocities, + bins=(N_dir, N_vel), + range=[[0, 360], [0, vel_max]], + density=True, + ) # density = true therefore bin value * bin area summed =1 bin_area = width_dir * width_vel # Convert H values to percent [%] @@ -45,9 +51,9 @@ def _histogram(directions, velocities, width_dir, width_vel): def _normalize_angle(degree): - ''' + """ Normalizes degrees to be between 0 and 360 - + Parameters ---------- degree: int or float @@ -56,28 +62,28 @@ def _normalize_angle(degree): ------- new_degree: float Normalized between 0 and 360 degrees - ''' + """ # Set new degree as remainder - new_degree = degree%360 + new_degree = degree % 360 # Ensure positive - new_degree = (new_degree + 360) % 360 + new_degree = (new_degree + 360) % 360 return new_degree def principal_flow_directions(directions, width_dir): - ''' + """ Calculates principal flow directions for ebb and flood cycles - - The weighted average (over the working velocity range of the TEC) - should be considered to be the principal direction of the current, - and should be used for both the ebb and flood cycles to determine - the TEC optimum orientation. + + The weighted average (over the working velocity range of the TEC) + should be considered to be the principal direction of the current, + and should be used for both the ebb and flood cycles to determine + the TEC optimum orientation. Parameters ---------- directions: pandas.Series or numpy.ndarray Flow direction in degrees CW from North, from 0 to 360 - width_dir: float + width_dir: float Width of directional bins for histogram in degrees Returns @@ -87,75 +93,79 @@ def principal_flow_directions(directions, width_dir): Notes ----- - One must determine which principal direction is flood and which is + One must determine which principal direction is flood and which is ebb based on knowledge of the measurement site. - ''' + """ if isinstance(directions, np.ndarray): - directions=pd.Series(directions) - if any(directions<0) or any(directions>360): + directions = pd.Series(directions) + if any(directions < 0) or any(directions > 360): violating_values = [d for d in directions if d < 0 or d > 360] - raise ValueError(f'directions must be between 0 and 360 degrees. Values out of range: {violating_values}') + raise ValueError( + f"directions must be between 0 and 360 degrees. Values out of range: {violating_values}" + ) - # Number of directional bins - N_dir=int(360/width_dir) + # Number of directional bins + N_dir = int(360 / width_dir) # Compute directional histogram - H1, dir_edges = np.histogram(directions, bins=N_dir,range=[0,360], density=True) + H1, dir_edges = np.histogram(directions, bins=N_dir, range=[0, 360], density=True) # Convert to perecnt - H1 = H1 * 100 # [%] + H1 = H1 * 100 # [%] # Determine if there are an even or odd number of bins - odd = bool( N_dir % 2 ) + odd = bool(N_dir % 2) # Shift by 180 degrees and sum if odd: # Then split middle bin counts to left and right - H0to180 = H1[0:N_dir//2] - H180to360 = H1[N_dir//2+1:] - H0to180[-1] += H1[N_dir//2]/2 - H180to360[0] += H1[N_dir//2]/2 - #Add the two + H0to180 = H1[0 : N_dir // 2] + H180to360 = H1[N_dir // 2 + 1 :] + H0to180[-1] += H1[N_dir // 2] / 2 + H180to360[0] += H1[N_dir // 2] / 2 + # Add the two H180 = H0to180 + H180to360 else: - H180 = H1[0:N_dir//2] + H1[N_dir//2:N_dir+1] + H180 = H1[0 : N_dir // 2] + H1[N_dir // 2 : N_dir + 1] # Find the maximum value maxDegreeStacked = H180.argmax() # Shift by 90 to find angles normal to principal direction - floodEbbNormalDegree1 = _normalize_angle(maxDegreeStacked + 90.) - # Find the complimentary angle - floodEbbNormalDegree2 = _normalize_angle(floodEbbNormalDegree1+180.) + floodEbbNormalDegree1 = _normalize_angle(maxDegreeStacked + 90.0) + # Find the complimentary angle + floodEbbNormalDegree2 = _normalize_angle(floodEbbNormalDegree1 + 180.0) # Reset values so that the Degree1 is the smaller angle, and Degree2 the large floodEbbNormalDegree1 = min(floodEbbNormalDegree1, floodEbbNormalDegree2) - floodEbbNormalDegree2 = floodEbbNormalDegree1 + 180. + floodEbbNormalDegree2 = floodEbbNormalDegree1 + 180.0 # Slice directions on the 2 semi circles - d1 = directions[directions.between(floodEbbNormalDegree1, - floodEbbNormalDegree2)] - d2 = directions[~directions.between(floodEbbNormalDegree1, - floodEbbNormalDegree2)] + d1 = directions[directions.between(floodEbbNormalDegree1, floodEbbNormalDegree2)] + d2 = directions[~directions.between(floodEbbNormalDegree1, floodEbbNormalDegree2)] # Shift second set of of directions to not break between 360 and 0 - d2 -= 180. + d2 -= 180.0 # Renormalize the points (gets rid of negatives) d2 = _normalize_angle(d2) # Number of bins for semi-circle - n_dir = int(180/width_dir) + n_dir = int(180 / width_dir) # Compute 1D histograms on both semi circles - Hd1, dir1_edges = np.histogram(d1, bins=n_dir,density=True) - Hd2, dir2_edges = np.histogram(d2, bins=n_dir,density=True) + Hd1, dir1_edges = np.histogram(d1, bins=n_dir, density=True) + Hd2, dir2_edges = np.histogram(d2, bins=n_dir, density=True) # Convert to perecnt - Hd1 = Hd1 * 100 # [%] - Hd2 = Hd2 * 100 # [%] + Hd1 = Hd1 * 100 # [%] + Hd2 = Hd2 * 100 # [%] # Principal Directions average of the 2 bins - PrincipalDirection1 = 0.5 * (dir1_edges[Hd1.argmax()]+ dir1_edges[Hd1.argmax()+1]) - PrincipalDirection2 = 0.5 * (dir2_edges[Hd2.argmax()]+ dir2_edges[Hd2.argmax()+1])+180.0 + PrincipalDirection1 = 0.5 * ( + dir1_edges[Hd1.argmax()] + dir1_edges[Hd1.argmax() + 1] + ) + PrincipalDirection2 = ( + 0.5 * (dir2_edges[Hd2.argmax()] + dir2_edges[Hd2.argmax() + 1]) + 180.0 + ) + + return PrincipalDirection1, PrincipalDirection2 - return PrincipalDirection1, PrincipalDirection2 - def _flood_or_ebb(d, flood, ebb): - ''' - Returns a mask which is True for directions on the ebb side of the - midpoints between the flood and ebb directions on the unit circle + """ + Returns a mask which is True for directions on the ebb side of the + midpoints between the flood and ebb directions on the unit circle and False for directions on the Flood side. - + Parameters ---------- d: array-like @@ -164,24 +174,23 @@ def _flood_or_ebb(d, flood, ebb): Principal component of flow in the flood direction in degrees ebb: float or int Principal component of flow in the ebb direction in degrees - + Returns ------- is_ebb: boolean array - array of length N which is True for directions on the ebb side + array of length N which is True for directions on the ebb side of the midpoints between flood and ebb on the unit circle and false otherwise. - ''' + """ max_angle = max(ebb, flood) min_angle = min(ebb, flood) - - lower_split = (min_angle + (360 - max_angle + min_angle)/2 ) % 360 + + lower_split = (min_angle + (360 - max_angle + min_angle) / 2) % 360 upper_split = lower_split + 180 - + if lower_split <= ebb < upper_split: is_ebb = ((d < upper_split) & (d >= lower_split)).values else: is_ebb = ~((d < upper_split) & (d >= lower_split)).values - - return is_ebb + return is_ebb diff --git a/mhkit/utils/__init__.py b/mhkit/utils/__init__.py index 074232541..e034999a9 100644 --- a/mhkit/utils/__init__.py +++ b/mhkit/utils/__init__.py @@ -1,5 +1,11 @@ from .time_utils import matlab_to_datetime, excel_to_datetime -from .stat_utils import get_statistics, vector_statistics, unwrap_vector, magnitude_phase, unorm +from .stat_utils import ( + get_statistics, + vector_statistics, + unwrap_vector, + magnitude_phase, + unorm, +) from .cache import handle_caching, clear_cache from .upcrossing import upcrossing, peaks, troughs, heights, periods, custom diff --git a/mhkit/utils/cache.py b/mhkit/utils/cache.py index 14d2a05e9..410ab9c85 100644 --- a/mhkit/utils/cache.py +++ b/mhkit/utils/cache.py @@ -47,8 +47,14 @@ import pandas as pd -def handle_caching(hash_params, cache_dir, data=None, metadata=None, write_json=None, - clear_cache_file=False): +def handle_caching( + hash_params, + cache_dir, + data=None, + metadata=None, + write_json=None, + clear_cache_file=False, +): """ Handles caching of data to avoid redundant network requests or computations. @@ -58,7 +64,7 @@ def handle_caching(hash_params, cache_dir, data=None, metadata=None, write_json= the `clear_cache_file` parameter is set to `True`, in which case the cache file is cleared. If the cache file does not exist and the `data` parameter is not `None`, the function will store the - provided data in a cache file. + provided data in a cache file. Parameters ---------- @@ -70,7 +76,7 @@ def handle_caching(hash_params, cache_dir, data=None, metadata=None, write_json= The data to be stored in the cache file. If `None`, the function will attempt to load data from the cache file. metadata : dict or None - Metadata associated with the data. This will be stored in the + Metadata associated with the data. This will be stored in the cache file along with the data. write_json : str or None If specified, the cache file will be copied to a file with this name. @@ -93,18 +99,20 @@ def handle_caching(hash_params, cache_dir, data=None, metadata=None, write_json= """ # Check if 'cdip' is in cache_dir, then use .pkl instead of .json - file_extension = (".pkl" if "cdip" in cache_dir or - "hindcast" in cache_dir or - "ndbc" in cache_dir - else ".json") + file_extension = ( + ".pkl" + if "cdip" in cache_dir or "hindcast" in cache_dir or "ndbc" in cache_dir + else ".json" + ) # Make cache directory if it doesn't exist if not os.path.isdir(cache_dir): os.makedirs(cache_dir) # Create a unique filename based on the function parameters - cache_filename = hashlib.md5( - hash_params.encode('utf-8')).hexdigest() + file_extension + cache_filename = ( + hashlib.md5(hash_params.encode("utf-8")).hexdigest() + file_extension + ) cache_filepath = os.path.join(cache_dir, cache_filename) # If clear_cache_file is True, remove the cache file for this request @@ -115,36 +123,39 @@ def handle_caching(hash_params, cache_dir, data=None, metadata=None, write_json= # If a cached file exists, load and return the data from the file if os.path.isfile(cache_filepath) and data is None: if file_extension == ".json": - with open(cache_filepath, encoding='utf-8') as f: + with open(cache_filepath, encoding="utf-8") as f: jsonData = json.load(f) # Extract metadata if it exists - if 'metadata' in jsonData: - metadata = jsonData.pop('metadata', None) + if "metadata" in jsonData: + metadata = jsonData.pop("metadata", None) # Check if index is datetime formatted - if all(re.match(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}", str(dt)) for dt in jsonData['index']): + if all( + re.match(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}", str(dt)) + for dt in jsonData["index"] + ): data = pd.DataFrame( - jsonData['data'], - index=pd.to_datetime(jsonData['index']), - columns=jsonData['columns'] + jsonData["data"], + index=pd.to_datetime(jsonData["index"]), + columns=jsonData["columns"], ) else: data = pd.DataFrame( - jsonData['data'], - index=jsonData['index'], - columns=jsonData['columns'] + jsonData["data"], + index=jsonData["index"], + columns=jsonData["columns"], ) # Convert the rest to DataFrame data = pd.DataFrame( - jsonData['data'], - index=pd.to_datetime(jsonData['index']), - columns=jsonData['columns'] + jsonData["data"], + index=pd.to_datetime(jsonData["index"]), + columns=jsonData["columns"], ) elif file_extension == ".pkl": - with open(cache_filepath, 'rb') as f: + with open(cache_filepath, "rb") as f: data, metadata = pickle.load(f) if write_json: @@ -157,20 +168,21 @@ def handle_caching(hash_params, cache_dir, data=None, metadata=None, write_json= elif data is not None: if file_extension == ".json": # Convert DataFrame to python dict - pyData = data.to_dict(orient='split') + pyData = data.to_dict(orient="split") # Add metadata to pyData - pyData['metadata'] = metadata + pyData["metadata"] = metadata # Check if index is datetime indexed if isinstance(data.index, pd.DatetimeIndex): - pyData['index'] = [dt.strftime( - '%Y-%m-%d %H:%M:%S') for dt in pyData['index']] + pyData["index"] = [ + dt.strftime("%Y-%m-%d %H:%M:%S") for dt in pyData["index"] + ] else: - pyData['index'] = list(data.index) - with open(cache_filepath, 'w', encoding='utf-8') as f: + pyData["index"] = list(data.index) + with open(cache_filepath, "w", encoding="utf-8") as f: json.dump(pyData, f) elif file_extension == ".pkl": - with open(cache_filepath, 'wb') as f: + with open(cache_filepath, "wb") as f: pickle.dump((data, metadata), f) if write_json: @@ -185,14 +197,14 @@ def clear_cache(specific_dir=None): """ Clears the cache. - The function checks if a specific directory or the entire cache directory + The function checks if a specific directory or the entire cache directory exists. If it does, the function will remove the directory and recreate it. If the directory does not exist, a message indicating is printed. Parameters ---------- specific_dir : str or None, optional - Specific sub-directory to clear. If None, the entire cache is cleared. + Specific sub-directory to clear. If None, the entire cache is cleared. Default is None. Returns @@ -202,15 +214,16 @@ def clear_cache(specific_dir=None): cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit") # Consider generating this from a system folder search - folders = {"river": "river", - "tidal": "tidal", - "wave": "wave", - "usgs": os.path.join('river', 'usgs'), - "noaa": os.path.join('tidal', 'noaa'), - "ndbc": os.path.join('wave', 'ndbc'), - "cdip": os.path.join('wave', 'cdip'), - "hindcast": os.path.join('wave', 'hindcast'), - } + folders = { + "river": "river", + "tidal": "tidal", + "wave": "wave", + "usgs": os.path.join("river", "usgs"), + "noaa": os.path.join("tidal", "noaa"), + "ndbc": os.path.join("wave", "ndbc"), + "cdip": os.path.join("wave", "cdip"), + "hindcast": os.path.join("wave", "hindcast"), + } # If specific_dir is provided and matches a key in the folders dictionary, # use its corresponding value @@ -218,8 +231,7 @@ def clear_cache(specific_dir=None): specific_dir = folders[specific_dir] # Construct the path to the directory to be cleared - path_to_clear = os.path.join( - cache_dir, specific_dir) if specific_dir else cache_dir + path_to_clear = os.path.join(cache_dir, specific_dir) if specific_dir else cache_dir # Check if the directory exists if os.path.exists(path_to_clear): diff --git a/mhkit/utils/stat_utils.py b/mhkit/utils/stat_utils.py index 639517de7..f0a7e2994 100644 --- a/mhkit/utils/stat_utils.py +++ b/mhkit/utils/stat_utils.py @@ -5,7 +5,7 @@ def get_statistics(data, freq, period=600, vector_channels=[]): """ - Calculate mean, max, min and stdev statistics of continuous data for a + Calculate mean, max, min and stdev statistics of continuous data for a given statistical window. Default length of statistical window (period) is based on IEC TS 62600-3:2020 ED1. Also allows calculation of statistics for multiple statistical windows of continuous data and accounts for vector/directional channels. @@ -13,11 +13,11 @@ def get_statistics(data, freq, period=600, vector_channels=[]): Parameters ------------ data : pandas DataFrame - Data indexed by datetime with columns of data to be analyzed + Data indexed by datetime with columns of data to be analyzed freq : float/int Sample rate of data [Hz] period : float/int - Statistical window of interest [sec], default = 600 + Statistical window of interest [sec], default = 600 vector_channels : string or list (optional) List of vector/directional channel names formatted in deg (0-360) @@ -28,28 +28,33 @@ def get_statistics(data, freq, period=600, vector_channels=[]): """ # Check data type if not isinstance(data, pd.DataFrame): - raise TypeError(f'data must be of type pd.DataFrame. Got: {type(data)}') + raise TypeError(f"data must be of type pd.DataFrame. Got: {type(data)}") if not isinstance(freq, (float, int)): - raise TypeError(f'freq must be of type int or float. Got: {type(freq)}') + raise TypeError(f"freq must be of type int or float. Got: {type(freq)}") if not isinstance(period, (float, int)): - raise TypeError(f'period must be of type int or float. Got: {type(period)}') + raise TypeError(f"period must be of type int or float. Got: {type(period)}") # catch if vector_channels is not an string array if isinstance(vector_channels, str): vector_channels = [vector_channels] if not isinstance(vector_channels, list): - raise TypeError(f'vector_channels must be a list of strings. Got: {type(vector_channels)}') + raise TypeError( + f"vector_channels must be a list of strings. Got: {type(vector_channels)}" + ) # Check timestamp using qc module - data.index = data.index.round('1ms') - dataQC = qc.check_timestamp(data, 1/freq) - dataQC = dataQC['cleaned_data'] + data.index = data.index.round("1ms") + dataQC = qc.check_timestamp(data, 1 / freq) + dataQC = dataQC["cleaned_data"] # Check to see if data length contains enough data points for statistical window - if len(dataQC) % (period*freq) > 0: - remain = len(dataQC) % (period*freq) - dataQC = dataQC.iloc[0:-int(remain)] - print('WARNING: there were not enough data points in the last statistical period. Last ' + - str(remain)+' points were removed.') + if len(dataQC) % (period * freq) > 0: + remain = len(dataQC) % (period * freq) + dataQC = dataQC.iloc[0 : -int(remain)] + print( + "WARNING: there were not enough data points in the last statistical period. Last " + + str(remain) + + " points were removed." + ) # Pre-allocate lists time = [] @@ -59,13 +64,13 @@ def get_statistics(data, freq, period=600, vector_channels=[]): stdev = [] # Get data chunks to performs stats on - step = period*freq - for i in range(int(len(dataQC)/(period*freq))): - datachunk = dataQC.iloc[i*step:(i+1)*step] + step = period * freq + for i in range(int(len(dataQC) / (period * freq))): + datachunk = dataQC.iloc[i * step : (i + 1) * step] # Check whether there are any NaNs in datachunk if datachunk.isnull().any().any(): - print('NaNs found in statistical window...check timestamps!') - input('Press to continue') + print("NaNs found in statistical window...check timestamps!") + input("Press to continue") continue else: # Get stats @@ -112,25 +117,25 @@ def vector_statistics(data): except: pass if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") # calculate mean - Ux = sum(np.sin(data*np.pi/180))/len(data) - Uy = sum(np.cos(data*np.pi/180))/len(data) - vector_avg = (90 - np.arctan2(Uy, Ux)*180/np.pi) + Ux = sum(np.sin(data * np.pi / 180)) / len(data) + Uy = sum(np.cos(data * np.pi / 180)) / len(data) + vector_avg = 90 - np.arctan2(Uy, Ux) * 180 / np.pi if vector_avg < 0: - vector_avg = vector_avg+360 + vector_avg = vector_avg + 360 elif vector_avg > 360: - vector_avg = vector_avg-360 + vector_avg = vector_avg - 360 # calculate standard deviation # round to 8th decimal place to reduce roundoff error - magsum = round((Ux**2 + Uy**2)*1e8)/1e8 - epsilon = (1-magsum)**0.5 + magsum = round((Ux**2 + Uy**2) * 1e8) / 1e8 + epsilon = (1 - magsum) ** 0.5 if not np.isreal(epsilon): # check if epsilon is imaginary (error) vector_std = 0 - print('WARNING: epsilon contains imaginary value') + print("WARNING: epsilon contains imaginary value") else: - vector_std = np.arcsin(epsilon)*(1+0.1547*epsilon**3)*180/np.pi + vector_std = np.arcsin(epsilon) * (1 + 0.1547 * epsilon**3) * 180 / np.pi return vector_avg, vector_std @@ -155,22 +160,22 @@ def unwrap_vector(data): except: pass if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") # Loop through and unwrap points for i in range(len(data)): if data[i] < 0: - data[i] = data[i]+360 + data[i] = data[i] + 360 elif data[i] > 360: - data[i] = data[i]-360 + data[i] = data[i] - 360 if max(data) > 360 or min(data) < 0: data = unwrap_vector(data) return data def magnitude_phase(x, y, z=None): - ''' - Retuns magnitude and phase in two or three dimensions. + """ + Retuns magnitude and phase in two or three dimensions. Parameters ---------- @@ -188,9 +193,9 @@ def magnitude_phase(x, y, z=None): theta: float or array radians from the x-axis phi: float or array - radians from z-axis defined as positive up. Optional: only + radians from z-axis defined as positive up. Optional: only returned when z is passed. - ''' + """ x = np.array(x) y = np.array(y) @@ -200,16 +205,18 @@ def magnitude_phase(x, y, z=None): threeD = True if not isinstance(x, (float, int, np.ndarray)): - raise TypeError(f'x must be of type float, int, or np.ndarray. Got: {type(x)}') + raise TypeError(f"x must be of type float, int, or np.ndarray. Got: {type(x)}") if not isinstance(y, (float, int, np.ndarray)): - raise TypeError(f'y must be of type float, int, or np.ndarray. Got: {type(y)}') + raise TypeError(f"y must be of type float, int, or np.ndarray. Got: {type(y)}") if not isinstance(z, (type(None), float, int, np.ndarray)): - raise TypeError(f'If specified, z must be of type float, int, or np.ndarray. Got: {type(z)}') + raise TypeError( + f"If specified, z must be of type float, int, or np.ndarray. Got: {type(z)}" + ) if threeD: mag = np.sqrt(x**2 + y**2 + z**2) theta = np.arctan2(y, x) - phi = np.arctan2(np.sqrt(x**2+y**2), z) + phi = np.arctan2(np.sqrt(x**2 + y**2), z) return mag, theta, phi else: mag = np.sqrt(x**2 + y**2) @@ -218,38 +225,44 @@ def magnitude_phase(x, y, z=None): def unorm(x, y, z): - ''' - Calculates the root mean squared value given three arrays. + """ + Calculates the root mean squared value given three arrays. Parameters ---------- - x: array - One input for the root mean squared calculation.(eq. x velocity) + x: array + One input for the root mean squared calculation.(eq. x velocity) y: array - One input for the root mean squared calculation.(eq. y velocity) + One input for the root mean squared calculation.(eq. y velocity) z: array - One input for the root mean squared calculation.(eq. z velocity) + One input for the root mean squared calculation.(eq. z velocity) Returns ------- - unorm : array + unorm : array The root mean squared of x, y, and z. - Example + Example ------- - If the inputs are [1,2,3], [4,5,6], and [7,8,9] the code take the - cordinationg value from each array and calculates the root mean squared. + If the inputs are [1,2,3], [4,5,6], and [7,8,9] the code take the + cordinationg value from each array and calculates the root mean squared. The resulting output is [ 8.1240384, 9.64365076, 11.22497216]. - ''' + """ if not isinstance(x, (np.ndarray, np.float64, pd.Series)): - raise TypeError(f'x must be of type np.ndarray, np.float64, or pd.Series. Got: {type(x)}') + raise TypeError( + f"x must be of type np.ndarray, np.float64, or pd.Series. Got: {type(x)}" + ) if not isinstance(y, (np.ndarray, np.float64, pd.Series)): - raise TypeError(f'y must be of type np.ndarray, np.float64, or pd.Series. Got: {type(y)}') + raise TypeError( + f"y must be of type np.ndarray, np.float64, or pd.Series. Got: {type(y)}" + ) if not isinstance(z, (np.ndarray, np.float64, pd.Series)): - raise TypeError(f'z must be of type np.ndarray, np.float64, or pd.Series. Got: {type(z)}') + raise TypeError( + f"z must be of type np.ndarray, np.float64, or pd.Series. Got: {type(z)}" + ) if not all([len(x) == len(y), len(y) == len(z)]): - raise ValueError('lengths of arrays must match') + raise ValueError("lengths of arrays must match") xyz = np.array([x, y, z]) unorm = np.linalg.norm(xyz, axis=0) diff --git a/mhkit/utils/time_utils.py b/mhkit/utils/time_utils.py index b6b7ea494..643219c9b 100644 --- a/mhkit/utils/time_utils.py +++ b/mhkit/utils/time_utils.py @@ -23,7 +23,7 @@ def matlab_to_datetime(matlab_datenum): except: pass if not isinstance(matlab_datenum, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") # Pre-allocate time = [] @@ -58,9 +58,9 @@ def excel_to_datetime(excel_num): except: pass if not isinstance(excel_num, np.ndarray): - raise TypeError(f'excel_num must be of type np.ndarray. Got: {type(excel_num)}') + raise TypeError(f"excel_num must be of type np.ndarray. Got: {type(excel_num)}") # Convert to datetime - time = pd.to_datetime('1899-12-30')+pd.to_timedelta(excel_num, 'D') + time = pd.to_datetime("1899-12-30") + pd.to_timedelta(excel_num, "D") return time diff --git a/mhkit/utils/upcrossing.py b/mhkit/utils/upcrossing.py index 24762a946..9c4c3eba8 100644 --- a/mhkit/utils/upcrossing.py +++ b/mhkit/utils/upcrossing.py @@ -44,7 +44,7 @@ def _apply(t, data, f, inds): vals = np.empty(n) for i in range(n): - vals[i] = f(inds[i], inds[i+1]) + vals[i] = f(inds[i], inds[i + 1]) return vals @@ -58,7 +58,7 @@ def upcrossing(t, data): t: np.array Time array. data: np.array - Signal time series. + Signal time series. Returns ------- @@ -67,16 +67,16 @@ def upcrossing(t, data): """ # Check data types if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") if len(data.shape) != 1: - raise ValueError('only 1D data supported, try calling squeeze()') + raise ValueError("only 1D data supported, try calling squeeze()") # eliminate zeros - zeroMask = (data == 0) + zeroMask = data == 0 data[zeroMask] = 0.5 * np.min(np.abs(data)) - + # zero up-crossings diff = np.diff(np.sign(data)) zeroUpCrossings_mask = (diff == 2) | (diff == 1) @@ -98,7 +98,7 @@ def peaks(t, data, inds=None): inds: np.array Optional indices for the upcrossing. Useful when using several of the upcrossing methods - to avoid repeating the upcrossing analysis + to avoid repeating the upcrossing analysis each time. Returns @@ -109,9 +109,9 @@ def peaks(t, data, inds=None): """ # Check data types if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") return _apply(t, data, lambda ind1, ind2: np.max(data[ind1:ind2]), inds) @@ -129,7 +129,7 @@ def troughs(t, data, inds=None): inds: np.array Optional indices for the upcrossing. Useful when using several of the upcrossing methods - to avoid repeating the upcrossing analysis + to avoid repeating the upcrossing analysis each time. Returns @@ -140,9 +140,9 @@ def troughs(t, data, inds=None): """ # Check data types if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") return _apply(t, data, lambda ind1, ind2: np.min(data[ind1:ind2]), inds) @@ -163,7 +163,7 @@ def heights(t, data, inds=None): inds: np.array Optional indices for the upcrossing. Useful when using several of the upcrossing methods - to avoid repeating the upcrossing analysis + to avoid repeating the upcrossing analysis each time. Returns @@ -173,13 +173,13 @@ def heights(t, data, inds=None): """ # Check data types if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") - def func(ind1, ind2): + def func(ind1, ind2): return np.max(data[ind1:ind2]) - np.min(data[ind1:ind2]) - + return _apply(t, data, func, inds) @@ -196,7 +196,7 @@ def periods(t, data, inds=None): inds: np.array Optional indices for the upcrossing. Useful when using several of the upcrossing methods - to avoid repeating the upcrossing analysis + to avoid repeating the upcrossing analysis each time. Returns @@ -206,9 +206,9 @@ def periods(t, data, inds=None): """ # Check data types if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") return _apply(t, data, lambda ind1, ind2: t[ind2] - t[ind1], inds) @@ -230,7 +230,7 @@ def custom(t, data, func, inds=None): inds: np.array Optional indices for the upcrossing. Useful when using several of the upcrossing methods - to avoid repeating the upcrossing analysis + to avoid repeating the upcrossing analysis each time. Returns @@ -240,10 +240,10 @@ def custom(t, data, func, inds=None): """ # Check data types if not isinstance(t, np.ndarray): - raise TypeError(f't must be of type np.ndarray. Got: {type(t)}') + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") if not callable(func): - raise ValueError('func must be callable') + raise ValueError("func must be callable") return _apply(t, data, func, inds) diff --git a/mhkit/wave/__init__.py b/mhkit/wave/__init__.py index 3a963ced8..f84c667cd 100644 --- a/mhkit/wave/__init__.py +++ b/mhkit/wave/__init__.py @@ -2,4 +2,4 @@ from mhkit.wave import io from mhkit.wave import graphics from mhkit.wave import performance -from mhkit.wave import contours \ No newline at end of file +from mhkit.wave import contours diff --git a/mhkit/wave/contours.py b/mhkit/wave/contours.py index 3007448b8..5c3da2f7b 100644 --- a/mhkit/wave/contours.py +++ b/mhkit/wave/contours.py @@ -8,11 +8,12 @@ import numpy as np import matplotlib -mpl_version = tuple(map(int, matplotlib.__version__.split('.'))) + +mpl_version = tuple(map(int, matplotlib.__version__.split("."))) + # Contours -def environmental_contours(x1, x2, sea_state_duration, return_period, - method, **kwargs): +def environmental_contours(x1, x2, sea_state_duration, return_period, method, **kwargs): """ Returns a Dictionary of x1 and x2 components for each contour method passed. A method may be one of the following: @@ -84,17 +85,21 @@ def environmental_contours(x1, x2, sea_state_duration, return_period, except: pass if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(sea_state_duration, (int, float)): - raise TypeError(f'sea_state_duration must be of type int or float. Got: {type(sea_state_duration)}') + raise TypeError( + f"sea_state_duration must be of type int or float. Got: {type(sea_state_duration)}" + ) if not isinstance(return_period, (int, float, np.ndarray)): - raise TypeError(f'return_period must be of type int, float, or np.ndarray. Got: {type(return_period)}') + raise TypeError( + f"return_period must be of type int, float, or np.ndarray. Got: {type(return_period)}" + ) bin_val_size = kwargs.get("bin_val_size", 0.25) nb_steps = kwargs.get("nb_steps", 1000) - initial_bin_max_val = kwargs.get("initial_bin_max_val", 1.) + initial_bin_max_val = kwargs.get("initial_bin_max_val", 1.0) min_bin_count = kwargs.get("min_bin_count", 40) bandwidth = kwargs.get("bandwidth", None) Ndata_bivariate_KDE = kwargs.get("Ndata_bivariate_KDE", 100) @@ -105,39 +110,51 @@ def environmental_contours(x1, x2, sea_state_duration, return_period, return_fit = kwargs.get("return_fit", False) if not isinstance(PCA, (dict, type(None))): - raise TypeError(f'If specified, PCA must be a dict. Got: {type(PCA)}') + raise TypeError(f"If specified, PCA must be a dict. Got: {type(PCA)}") if not isinstance(PCA_bin_size, int): - raise TypeError(f'PCA_bin_size must be of type int. Got: {type(PCA_bin_size)}') + raise TypeError(f"PCA_bin_size must be of type int. Got: {type(PCA_bin_size)}") if not isinstance(return_fit, bool): - raise TypeError(f'return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError(f"return_fit must be of type bool. Got: {type(return_fit)}") if not isinstance(bin_val_size, (int, float)): - raise TypeError(f'bin_val_size must be of type int or float. Got: {type(bin_val_size)}') + raise TypeError( + f"bin_val_size must be of type int or float. Got: {type(bin_val_size)}" + ) if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") if not isinstance(min_bin_count, int): - raise TypeError(f'min_bin_count must be of type int. Got: {type(min_bin_count)}') + raise TypeError( + f"min_bin_count must be of type int. Got: {type(min_bin_count)}" + ) if not isinstance(initial_bin_max_val, (int, float)): - raise TypeError(f'initial_bin_max_val must be of type int or float. Got: {type(initial_bin_max_val)}') - if 'bivariate_KDE' in method and bandwidth == None: - raise TypeError(f'Must specify keyword bandwidth with bivariate KDE method. Got: {type(bandwidth)}') + raise TypeError( + f"initial_bin_max_val must be of type int or float. Got: {type(initial_bin_max_val)}" + ) + if "bivariate_KDE" in method and bandwidth == None: + raise TypeError( + f"Must specify keyword bandwidth with bivariate KDE method. Got: {type(bandwidth)}" + ) if isinstance(method, str): method = [method] if not (len(set(method)) == len(method)): - raise ValueError(f'Can only pass a unique ' - + 'method once per function call. Consider wrapping this ' - + 'function in a for loop to investage variations on the same method') - - method_class = {'PCA': 'parametric', - 'gaussian': 'parametric', - 'gumbel': 'parametric', - 'clayton': 'parametric', - 'rosenblatt': 'parametric', - 'nonparametric_gaussian': 'nonparametric', - 'nonparametric_clayton': 'nonparametric', - 'nonparametric_gumbel': 'nonparametric', - 'bivariate_KDE': 'KDE', - 'bivariate_KDE_log': 'KDE'} + raise ValueError( + f"Can only pass a unique " + + "method once per function call. Consider wrapping this " + + "function in a for loop to investage variations on the same method" + ) + + method_class = { + "PCA": "parametric", + "gaussian": "parametric", + "gumbel": "parametric", + "clayton": "parametric", + "rosenblatt": "parametric", + "nonparametric_gaussian": "nonparametric", + "nonparametric_clayton": "nonparametric", + "nonparametric_gumbel": "nonparametric", + "bivariate_KDE": "KDE", + "bivariate_KDE_log": "KDE", + } classification = [] methods = method @@ -148,95 +165,128 @@ def environmental_contours(x1, x2, sea_state_duration, return_period, fit_parametric = None fit_nonparametric = None component_1 = None - if 'parametric' in classification: - (para_dist_1, para_dist_2, mean_cond, std_cond) = ( - _copula_parameters(x1, x2, min_bin_count, - initial_bin_max_val, bin_val_size)) + if "parametric" in classification: + (para_dist_1, para_dist_2, mean_cond, std_cond) = _copula_parameters( + x1, x2, min_bin_count, initial_bin_max_val, bin_val_size + ) - x_quantile = fit['x_quantile'] + x_quantile = fit["x_quantile"] a = para_dist_1[0] c = para_dist_1[1] loc = para_dist_1[2] scale = para_dist_1[3] - component_1 = stats.exponweib.ppf( - x_quantile, a, c, loc=loc, scale=scale) + component_1 = stats.exponweib.ppf(x_quantile, a, c, loc=loc, scale=scale) fit_parametric = fit - fit_parametric['para_dist_1'] = para_dist_1 - fit_parametric['para_dist_2'] = para_dist_2 - fit_parametric['mean_cond'] = mean_cond - fit_parametric['std_cond'] = std_cond + fit_parametric["para_dist_1"] = para_dist_1 + fit_parametric["para_dist_2"] = para_dist_2 + fit_parametric["mean_cond"] = mean_cond + fit_parametric["std_cond"] = std_cond if PCA == None: PCA = fit_parametric - if 'nonparametric' in classification: - (nonpara_dist_1, nonpara_dist_2, nonpara_pdf_2) = ( - _nonparametric_copula_parameters(x1, x2, nb_steps=nb_steps)) + if "nonparametric" in classification: + ( + nonpara_dist_1, + nonpara_dist_2, + nonpara_pdf_2, + ) = _nonparametric_copula_parameters(x1, x2, nb_steps=nb_steps) fit_nonparametric = fit - fit_nonparametric['nonpara_dist_1'] = nonpara_dist_1 - fit_nonparametric['nonpara_dist_2'] = nonpara_dist_2 - fit_nonparametric['nonpara_pdf_2'] = nonpara_pdf_2 - - copula_functions = {'PCA': - {'func': PCA_contour, - 'vals': (x1, x2, PCA, {'nb_steps': nb_steps, - 'return_fit': return_fit, - 'bin_size': PCA_bin_size})}, - 'gaussian': - {'func': _gaussian_copula, - 'vals': (x1, x2, fit_parametric, component_1, - {'return_fit': return_fit})}, - 'gumbel': - {'func': _gumbel_copula, - 'vals': (x1, x2, fit_parametric, component_1, - nb_steps, {'return_fit': return_fit})}, - 'clayton': - {'func': _clayton_copula, - 'vals': (x1, x2, fit_parametric, component_1, - {'return_fit': return_fit})}, - 'rosenblatt': - {'func': _rosenblatt_copula, - 'vals': (x1, x2, fit_parametric, component_1, - {'return_fit': return_fit})}, - 'nonparametric_gaussian': - {'func': _nonparametric_gaussian_copula, - 'vals': (x1, x2, fit_nonparametric, nb_steps, - {'return_fit': return_fit})}, - 'nonparametric_clayton': - {'func': _nonparametric_clayton_copula, - 'vals': (x1, x2, fit_nonparametric, nb_steps, - {'return_fit': return_fit})}, - 'nonparametric_gumbel': - {'func': _nonparametric_gumbel_copula, - 'vals': (x1, x2, fit_nonparametric, nb_steps, - {'return_fit': return_fit})}, - 'bivariate_KDE': - {'func': _bivariate_KDE, - 'vals': (x1, x2, bandwidth, fit, nb_steps, - Ndata_bivariate_KDE, - {'max_x1': max_x1, 'max_x2': max_x2, - 'return_fit': return_fit})}, - 'bivariate_KDE_log': - {'func': _bivariate_KDE, - 'vals': (x1, x2, bandwidth, fit, nb_steps, - Ndata_bivariate_KDE, - {'max_x1': max_x1, 'max_x2': max_x2, - 'log_transform': True, - 'return_fit': return_fit})}, - } + fit_nonparametric["nonpara_dist_1"] = nonpara_dist_1 + fit_nonparametric["nonpara_dist_2"] = nonpara_dist_2 + fit_nonparametric["nonpara_pdf_2"] = nonpara_pdf_2 + + copula_functions = { + "PCA": { + "func": PCA_contour, + "vals": ( + x1, + x2, + PCA, + { + "nb_steps": nb_steps, + "return_fit": return_fit, + "bin_size": PCA_bin_size, + }, + ), + }, + "gaussian": { + "func": _gaussian_copula, + "vals": (x1, x2, fit_parametric, component_1, {"return_fit": return_fit}), + }, + "gumbel": { + "func": _gumbel_copula, + "vals": ( + x1, + x2, + fit_parametric, + component_1, + nb_steps, + {"return_fit": return_fit}, + ), + }, + "clayton": { + "func": _clayton_copula, + "vals": (x1, x2, fit_parametric, component_1, {"return_fit": return_fit}), + }, + "rosenblatt": { + "func": _rosenblatt_copula, + "vals": (x1, x2, fit_parametric, component_1, {"return_fit": return_fit}), + }, + "nonparametric_gaussian": { + "func": _nonparametric_gaussian_copula, + "vals": (x1, x2, fit_nonparametric, nb_steps, {"return_fit": return_fit}), + }, + "nonparametric_clayton": { + "func": _nonparametric_clayton_copula, + "vals": (x1, x2, fit_nonparametric, nb_steps, {"return_fit": return_fit}), + }, + "nonparametric_gumbel": { + "func": _nonparametric_gumbel_copula, + "vals": (x1, x2, fit_nonparametric, nb_steps, {"return_fit": return_fit}), + }, + "bivariate_KDE": { + "func": _bivariate_KDE, + "vals": ( + x1, + x2, + bandwidth, + fit, + nb_steps, + Ndata_bivariate_KDE, + {"max_x1": max_x1, "max_x2": max_x2, "return_fit": return_fit}, + ), + }, + "bivariate_KDE_log": { + "func": _bivariate_KDE, + "vals": ( + x1, + x2, + bandwidth, + fit, + nb_steps, + Ndata_bivariate_KDE, + { + "max_x1": max_x1, + "max_x2": max_x2, + "log_transform": True, + "return_fit": return_fit, + }, + ), + }, + } copulas = {} for method in methods: - vals = copula_functions[method]['vals'] + vals = copula_functions[method]["vals"] if return_fit: - component_1, component_2, fit = copula_functions[method]['func']( - *vals) - copulas[f'{method}_fit'] = fit + component_1, component_2, fit = copula_functions[method]["func"](*vals) + copulas[f"{method}_fit"] = fit else: - component_1, component_2 = copula_functions[method]['func'](*vals) - copulas[f'{method}_x1'] = component_1 - copulas[f'{method}_x2'] = component_2 + component_1, component_2 = copula_functions[method]["func"](*vals) + copulas[f"{method}_x1"] = component_1 + copulas[f"{method}_x2"] = component_2 return copulas @@ -314,59 +364,63 @@ def PCA_contour(x1, x2, fit, kwargs): except: pass if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") bin_size = kwargs.get("bin_size", 250) nb_steps = kwargs.get("nb_steps", 1000) return_fit = kwargs.get("return_fit", False) if not isinstance(bin_size, int): - raise TypeError(f'bin_size must be of type int. Got: {type(bin_size)}') + raise TypeError(f"bin_size must be of type int. Got: {type(bin_size)}") if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") if not isinstance(return_fit, bool): - raise TypeError(f'return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError(f"return_fit must be of type bool. Got: {type(return_fit)}") - if 'x1_fit' not in fit: + if "x1_fit" not in fit: pca_fit = _principal_component_analysis(x1, x2, bin_size=bin_size) for key in pca_fit: fit[key] = pca_fit[key] - x_quantile = fit['x_quantile'] - y_quantile = fit['y_quantile'] + x_quantile = fit["x_quantile"] + y_quantile = fit["y_quantile"] # Use the inverse of cdf to calculate component 1 values - component_1 = stats.invgauss.ppf(x_quantile, - mu=fit['x1_fit']['mu'], - loc=fit['x1_fit']['loc'], - scale=fit['x1_fit']['scale']) + component_1 = stats.invgauss.ppf( + x_quantile, + mu=fit["x1_fit"]["mu"], + loc=fit["x1_fit"]["loc"], + scale=fit["x1_fit"]["scale"], + ) # Find Component 2 mu using first order linear regression - mu_slope = fit['mu_fit'].slope - mu_intercept = fit['mu_fit'].intercept + mu_slope = fit["mu_fit"].slope + mu_intercept = fit["mu_fit"].intercept component_2_mu = mu_slope * component_1 + mu_intercept # Find Componenet 2 sigma using second order polynomial fit - sigma_polynomial_coeffcients = fit['sigma_fit'].x + sigma_polynomial_coeffcients = fit["sigma_fit"].x component_2_sigma = np.polyval(sigma_polynomial_coeffcients, component_1) # Use calculated mu and sigma values to calculate C2 along the contour - component_2 = stats.norm.ppf(y_quantile, - loc=component_2_mu, - scale=component_2_sigma) + component_2 = stats.norm.ppf( + y_quantile, loc=component_2_mu, scale=component_2_sigma + ) # Convert contours back to the original reference frame - principal_axes = fit['principal_axes'] - shift = fit['shift'] + principal_axes = fit["principal_axes"] + shift = fit["shift"] pa00 = principal_axes[0, 0] pa01 = principal_axes[0, 1] - x1_contour = ((pa00 * component_1 + pa01 * (component_2 - shift)) / - (pa01**2 + pa00**2)) - x2_contour = ((pa01 * component_1 - pa00 * (component_2 - shift)) / - (pa01**2 + pa00**2)) + x1_contour = (pa00 * component_1 + pa01 * (component_2 - shift)) / ( + pa01**2 + pa00**2 + ) + x2_contour = (pa01 * component_1 - pa00 * (component_2 - shift)) / ( + pa01**2 + pa00**2 + ) # Assign 0 value to any negative x1 contour values x1_contour = np.maximum(0, x1_contour) @@ -422,18 +476,17 @@ def _principal_component_analysis(x1, x2, bin_size=250): 'sigma_param' : fit to _sig_fits """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(bin_size, int): - raise TypeError(f'bin_size must be of type int. Got: {type(bin_size)}') - + raise TypeError(f"bin_size must be of type int. Got: {type(bin_size)}") + # Step 0: Perform Standard PCA mean_location = 0 x1_mean_centered = x1 - x1.mean(axis=0) x2_mean_centered = x2 - x2.mean(axis=0) - n_samples_by_n_features = np.column_stack((x1_mean_centered, - x2_mean_centered)) + n_samples_by_n_features = np.column_stack((x1_mean_centered, x2_mean_centered)) pca = skPCA(n_components=2) pca.fit(n_samples_by_n_features) principal_axes = pca.components_ @@ -459,29 +512,31 @@ def _principal_component_analysis(x1, x2, bin_size=250): x2_sorted = x2_components[x1_sorted_index] x1_fit_results = stats.invgauss.fit(x1_sorted, floc=mean_location) - x1_fit = {'mu': x1_fit_results[0], - 'loc': x1_fit_results[1], - 'scale': x1_fit_results[2]} + x1_fit = { + "mu": x1_fit_results[0], + "loc": x1_fit_results[1], + "scale": x1_fit_results[2], + } # Step 3: Bin Data & find order 1 linear relation between x1 & x2 means N = len(x1) - minimum_4_bins = np.floor(N*0.25) + minimum_4_bins = np.floor(N * 0.25) if bin_size > minimum_4_bins: bin_size = minimum_4_bins - msg = ('To allow for a minimum of 4 bins, the bin size has been' + - f'set to {minimum_4_bins}') + msg = ( + "To allow for a minimum of 4 bins, the bin size has been" + + f"set to {minimum_4_bins}" + ) print(msg) N_multiples = N // bin_size - max_N_multiples_index = N_multiples*bin_size + max_N_multiples_index = N_multiples * bin_size x1_integer_multiples_of_bin_size = x1_sorted[0:max_N_multiples_index] x2_integer_multiples_of_bin_size = x2_sorted[0:max_N_multiples_index] - x1_bins = np.split(x1_integer_multiples_of_bin_size, - N_multiples) - x2_bins = np.split(x2_integer_multiples_of_bin_size, - N_multiples) + x1_bins = np.split(x1_integer_multiples_of_bin_size, N_multiples) + x2_bins = np.split(x2_integer_multiples_of_bin_size, N_multiples) x1_last_bin = x1_sorted[max_N_multiples_index:] x2_last_bin = x2_sorted[max_N_multiples_index:] @@ -502,29 +557,38 @@ def _principal_component_analysis(x1, x2, bin_size=250): # STEP 4: Find order 2 relation between x1_mean and x2 standard deviation sigma_polynomial_order = 2 - sig_0 = 0.1 * np.ones(sigma_polynomial_order+1) + sig_0 = 0.1 * np.ones(sigma_polynomial_order + 1) def _objective_function(sig_p, x1_means, x2_sigmas): return mean_squared_error(np.polyval(sig_p, x1_means), x2_sigmas) # Constraint Functions - def y_intercept_gt_0(sig_p): return (sig_p[2]) + def y_intercept_gt_0(sig_p): + return sig_p[2] def sig_polynomial_min_gt_0(sig_p): - return (sig_p[2] - (sig_p[1]**2) / (4 * sig_p[0])) - - constraints = ({'type': 'ineq', 'fun': y_intercept_gt_0}, - {'type': 'ineq', 'fun': sig_polynomial_min_gt_0}) - - sigma_fit = optim.minimize(_objective_function, x0=sig_0, - args=(x1_means, x2_sigmas), - method='SLSQP', constraints=constraints) - - PCA = {'principal_axes': principal_axes, - 'shift': shift, - 'x1_fit': x1_fit, - 'mu_fit': mu_fit, - 'sigma_fit': sigma_fit} + return sig_p[2] - (sig_p[1] ** 2) / (4 * sig_p[0]) + + constraints = ( + {"type": "ineq", "fun": y_intercept_gt_0}, + {"type": "ineq", "fun": sig_polynomial_min_gt_0}, + ) + + sigma_fit = optim.minimize( + _objective_function, + x0=sig_0, + args=(x1_means, x2_sigmas), + method="SLSQP", + constraints=constraints, + ) + + PCA = { + "principal_axes": principal_axes, + "shift": shift, + "x1_fit": x1_fit, + "mu_fit": mu_fit, + "sigma_fit": sigma_fit, + } return PCA @@ -557,36 +621,40 @@ def _iso_prob_and_quantile(sea_state_duration, return_period, nb_steps): """ if not isinstance(sea_state_duration, (int, float)): - raise TypeError(f'sea_state_duration must be of type int or float. Got: {type(sea_state_duration)}') + raise TypeError( + f"sea_state_duration must be of type int or float. Got: {type(sea_state_duration)}" + ) if not isinstance(return_period, (int, float)): - raise TypeError(f'return_period must be of type int or float. Got: {type(return_period)}') + raise TypeError( + f"return_period must be of type int or float. Got: {type(return_period)}" + ) if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") dt_yrs = sea_state_duration / (3600 * 24 * 365) exceedance_probability = 1 / (return_period / dt_yrs) - iso_probability_radius = stats.norm.ppf((1 - exceedance_probability), - loc=0, scale=1) + iso_probability_radius = stats.norm.ppf( + (1 - exceedance_probability), loc=0, scale=1 + ) discretized_radians = np.linspace(0, 2 * np.pi, nb_steps) - x_component_iso_prob = iso_probability_radius * \ - np.cos(discretized_radians) - y_component_iso_prob = iso_probability_radius * \ - np.sin(discretized_radians) + x_component_iso_prob = iso_probability_radius * np.cos(discretized_radians) + y_component_iso_prob = iso_probability_radius * np.sin(discretized_radians) x_quantile = stats.norm.cdf(x_component_iso_prob, loc=0, scale=1) y_quantile = stats.norm.cdf(y_component_iso_prob, loc=0, scale=1) - results = {'exceedance_probability': exceedance_probability, - 'x_component_iso_prob': x_component_iso_prob, - 'y_component_iso_prob': y_component_iso_prob, - 'x_quantile': x_quantile, - 'y_quantile': y_quantile} + results = { + "exceedance_probability": exceedance_probability, + "x_component_iso_prob": x_component_iso_prob, + "y_component_iso_prob": y_component_iso_prob, + "x_quantile": x_quantile, + "y_quantile": y_quantile, + } return results -def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, - bin_val_size): +def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, bin_val_size): """ Returns an estimate of the Weibull and Lognormal distribution for x1 and x2 respectively. Additionally returns the estimates of the @@ -618,15 +686,21 @@ def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, Estimate coefficients of the standard deviation of Ln(x2|x1) """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(min_bin_count, int): - raise TypeError(f'min_bin_count must be of type int. Got: {type(min_bin_count)}') + raise TypeError( + f"min_bin_count must be of type int. Got: {type(min_bin_count)}" + ) if not isinstance(bin_val_size, (int, float)): - raise TypeError(f'bin_val_size must be of type int or float. Got: {type(bin_val_size)}') + raise TypeError( + f"bin_val_size must be of type int or float. Got: {type(bin_val_size)}" + ) if not isinstance(initial_bin_max_val, (int, float)): - raise TypeError(f'initial_bin_max_val must be of type int or float. Got: {type(initial_bin_max_val)}') + raise TypeError( + f"initial_bin_max_val must be of type int or float. Got: {type(initial_bin_max_val)}" + ) # Binning x1_sorted_index = x1.argsort() @@ -651,10 +725,10 @@ def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, bin_size_i = np.inf while bin_size_i >= min_bin_count: i += 1 - bin_i_max_val = initial_bin_max_val + bin_val_size*(i) + bin_i_max_val = initial_bin_max_val + bin_val_size * (i) N_vals_lt_limit = sum(x1_sorted <= bin_i_max_val) ind = np.append(ind, N_vals_lt_limit) - bin_size_i = ind[i]-ind[i-1] + bin_size_i = ind[i] - ind[i - 1] # Weibull distribution parameters for component 1 using MLE para_dist_1 = stats.exponweib.fit(x1_sorted, floc=0, fa=1) @@ -673,7 +747,7 @@ def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, x2_lognormal_dist0 = stats.norm.fit(x2_log0) para_dist_cond.append(x2_lognormal_dist0) # mean of x1 (component 1 for zero bin) - x1_bin0 = x1_sorted[range(0, int(ind[0])-1)] + x1_bin0 = x1_sorted[range(0, int(ind[0]) - 1)] hss.append(np.mean(x1_bin0)) # Special case 2-bin lognormal Dist @@ -684,11 +758,11 @@ def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, para_dist_cond.append(x2_lognormal_dist1) # mean of Hs (component 1 for bin 1) - hss.append(np.mean(x1_sorted[range(0, int(ind[1])-1)])) + hss.append(np.mean(x1_sorted[range(0, int(ind[1]) - 1)])) # lognormal Dist (lognormal dist over only 2 bins) for i in range(2, num): - ind_i = range(int(ind[i-2]), int(ind[i])) + ind_i = range(int(ind[i - 2]), int(ind[i])) x2_log_i = np.log(x2_sorted[ind_i]) x2_lognormal_dist_i = stats.norm.fit(x2_log_i) para_dist_cond.append(x2_lognormal_dist_i) @@ -697,7 +771,7 @@ def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, # Estimate coefficient using least square solution (mean: 3rd order, # sigma: 2nd order) - ind_f = range(int(ind[num-2]), int(len(x1))) + ind_f = range(int(ind[num - 2]), int(len(x1))) x2_log_f = np.log(x2_sorted[ind_f]) x2_lognormal_dist_f = stats.norm.fit(x2_log_f) para_dist_cond.append(x2_lognormal_dist_f) # parameters for last bin @@ -709,17 +783,15 @@ def _copula_parameters(x1, x2, min_bin_count, initial_bin_max_val, hss = np.array(hss) # cubic in Hs: a + bx + cx**2 + dx**3 - phi_mean = np.column_stack((np.ones(num+1), hss, hss**2, hss**3)) + phi_mean = np.column_stack((np.ones(num + 1), hss, hss**2, hss**3)) # quadratic in Hs a + bx + cx**2 - phi_std = np.column_stack((np.ones(num+1), hss, hss**2)) + phi_std = np.column_stack((np.ones(num + 1), hss, hss**2)) # Estimate coefficients of mean of Ln(T|Hs)(vector 4x1) (cubic in Hs) - mean_cond = np.linalg.lstsq(phi_mean, para_dist_cond[:, 0], - rcond=None)[0] + mean_cond = np.linalg.lstsq(phi_mean, para_dist_cond[:, 0], rcond=None)[0] # Estimate coefficients of standard deviation of Ln(T|Hs) # (vector 3x1) (quadratic in Hs) - std_cond = np.linalg.lstsq(phi_std, para_dist_cond[:, 1], - rcond=None)[0] + std_cond = np.linalg.lstsq(phi_std, para_dist_cond[:, 1], rcond=None)[0] return para_dist_1, para_dist_2, mean_cond, std_cond @@ -771,36 +843,41 @@ def _gaussian_copula(x1, x2, fit, component_1, kwargs): except: pass if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(component_1, np.ndarray): - raise TypeError(f'component_1 must be of type np.ndarray. Got: {type(component_1)}') + raise TypeError( + f"component_1 must be of type np.ndarray. Got: {type(component_1)}" + ) return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - x_component_iso_prob = fit['x_component_iso_prob'] - y_component_iso_prob = fit['y_component_iso_prob'] + x_component_iso_prob = fit["x_component_iso_prob"] + y_component_iso_prob = fit["y_component_iso_prob"] # Calculate Kendall's tau tau = stats.kendalltau(x2, x1)[0] - rho_gau = np.sin(tau*np.pi/2.) + rho_gau = np.sin(tau * np.pi / 2.0) - z2_Gauss = stats.norm.cdf(y_component_iso_prob*np.sqrt(1.-rho_gau**2.) - + rho_gau*x_component_iso_prob) + z2_Gauss = stats.norm.cdf( + y_component_iso_prob * np.sqrt(1.0 - rho_gau**2.0) + + rho_gau * x_component_iso_prob + ) - para_dist_2 = fit['para_dist_2'] + para_dist_2 = fit["para_dist_2"] s = para_dist_2[1] loc = 0 scale = np.exp(para_dist_2[0]) # lognormal inverse - component_2_Gaussian = stats.lognorm.ppf(z2_Gauss, s=s, loc=loc, - scale=scale) - fit['tau'] = tau - fit['rho'] = rho_gau - fit['z2'] = z2_Gauss + component_2_Gaussian = stats.lognorm.ppf(z2_Gauss, s=s, loc=loc, scale=scale) + fit["tau"] = tau + fit["rho"] = rho_gau + fit["z2"] = z2_Gauss if return_fit: return component_1, component_2_Gaussian, fit @@ -826,17 +903,19 @@ def _gumbel_density(u, alpha): """ # Ignore divide by 0 warnings and resulting NaN warnings - np.seterr(all='ignore') + np.seterr(all="ignore") v = -np.log(u) v = np.sort(v, axis=0) vmin = v[0, :] vmax = v[1, :] nlogC = vmax * (1 + (vmin / vmax) ** alpha) ** (1 / alpha) - y = (alpha - 1 + nlogC)*np.exp( - -nlogC+np.sum((alpha-1) * np.log(v)+v, axis=0) + - (1-2*alpha)*np.log(nlogC)) - np.seterr(all='warn') - return (y) + y = (alpha - 1 + nlogC) * np.exp( + -nlogC + + np.sum((alpha - 1) * np.log(v) + v, axis=0) + + (1 - 2 * alpha) * np.log(nlogC) + ) + np.seterr(all="warn") + return y def _gumbel_copula(x1, x2, fit, component_1, nb_steps, kwargs): @@ -888,25 +967,29 @@ def _gumbel_copula(x1, x2, fit, component_1, nb_steps, kwargs): except: pass if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(component_1, np.ndarray): - raise TypeError(f'component_1 must be of type np.ndarray. Got: {type(component_1)}') + raise TypeError( + f"component_1 must be of type np.ndarray. Got: {type(component_1)}" + ) return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - x_quantile = fit['x_quantile'] - y_quantile = fit['y_quantile'] - para_dist_2 = fit['para_dist_2'] + x_quantile = fit["x_quantile"] + y_quantile = fit["y_quantile"] + para_dist_2 = fit["para_dist_2"] # Calculate Kendall's tau tau = stats.kendalltau(x2, x1)[0] - theta_gum = 1./(1.-tau) + theta_gum = 1.0 / (1.0 - tau) min_limit_2 = 0 - max_limit_2 = np.ceil(np.amax(x2)*2) + max_limit_2 = np.ceil(np.amax(x2) * 2) Ndata = 1000 x = np.linspace(min_limit_2, max_limit_2, Ndata) @@ -915,21 +998,21 @@ def _gumbel_copula(x1, x2, fit, component_1, nb_steps, kwargs): scale = np.exp(para_dist_2[0]) z2 = stats.lognorm.cdf(x, s=s, loc=0, scale=scale) - fit['tau'] = tau - fit['theta'] = theta_gum - fit['z2'] = z2 + fit["tau"] = tau + fit["theta"] = theta_gum + fit["z2"] = z2 component_2_Gumbel = np.zeros(nb_steps) for k in range(nb_steps): - z1 = np.array([x_quantile[k]]*Ndata) + z1 = np.array([x_quantile[k]] * Ndata) Z = np.array((z1, z2)) Y = _gumbel_density(Z, theta_gum) Y = np.nan_to_num(Y) # pdf 2|1, f(comp_2|comp_1)=c(z1,z2)*f(comp_2) - p_x_x1 = Y*(stats.lognorm.pdf(x, s=s, loc=0, scale=scale)) + p_x_x1 = Y * (stats.lognorm.pdf(x, s=s, loc=0, scale=scale)) # Estimate CDF from PDF dum = np.cumsum(p_x_x1) - cdf = dum/(dum[Ndata-1]) + cdf = dum / (dum[Ndata - 1]) # Result of conditional CDF derived based on Gumbel copula table = np.array((x, cdf)) table = table.T @@ -938,7 +1021,7 @@ def _gumbel_copula(x1, x2, fit, component_1, nb_steps, kwargs): component_2_Gumbel[k] = min(table[:, 0]) break elif y_quantile[k] <= table[j, 1]: - component_2_Gumbel[k] = (table[j, 0]+table[j-1, 0])/2 + component_2_Gumbel[k] = (table[j, 0] + table[j - 1, 0]) / 2 break else: component_2_Gumbel[k] = table[:, 0].max() @@ -988,34 +1071,40 @@ def _clayton_copula(x1, x2, fit, component_1, kwargs): with additional fit metrics from the copula method. """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(component_1, np.ndarray): - raise TypeError(f'component_1 must be of type np.ndarray. Got: {type(component_1)}') + raise TypeError( + f"component_1 must be of type np.ndarray. Got: {type(component_1)}" + ) return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - x_quantile = fit['x_quantile'] - y_quantile = fit['y_quantile'] - para_dist_2 = fit['para_dist_2'] + x_quantile = fit["x_quantile"] + y_quantile = fit["y_quantile"] + para_dist_2 = fit["para_dist_2"] # Calculate Kendall's tau tau = stats.kendalltau(x2, x1)[0] - theta_clay = (2.*tau)/(1.-tau) + theta_clay = (2.0 * tau) / (1.0 - tau) s = para_dist_2[1] scale = np.exp(para_dist_2[0]) - z2_Clay = ((1.-x_quantile**(-theta_clay)+x_quantile**(-theta_clay) / - y_quantile)**(theta_clay/(1.+theta_clay)))**(-1./theta_clay) + z2_Clay = ( + (1.0 - x_quantile ** (-theta_clay) + x_quantile ** (-theta_clay) / y_quantile) + ** (theta_clay / (1.0 + theta_clay)) + ) ** (-1.0 / theta_clay) # lognormal inverse component_2_Clayton = stats.lognorm.ppf(z2_Clay, s=s, loc=0, scale=scale) - fit['theta_clay'] = theta_clay - fit['tau'] = tau - fit['z2_Clay'] = z2_Clay + fit["theta_clay"] = theta_clay + fit["tau"] = tau + fit["z2_Clay"] = z2_Clay if return_fit: return component_1, component_2_Clayton, fit @@ -1071,38 +1160,48 @@ def _rosenblatt_copula(x1, x2, fit, component_1, kwargs): except: pass if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(component_1, np.ndarray): - raise TypeError(f'component_1 must be of type np.ndarray. Got: {type(component_1)}') + raise TypeError( + f"component_1 must be of type np.ndarray. Got: {type(component_1)}" + ) return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - y_quantile = fit['y_quantile'] - mean_cond = fit['mean_cond'] - std_cond = fit['std_cond'] + y_quantile = fit["y_quantile"] + mean_cond = fit["mean_cond"] + std_cond = fit["std_cond"] # mean of Ln(T) as a function of x1 - lamda_cond = mean_cond[0]+mean_cond[1]*component_1 + \ - mean_cond[2]*component_1**2+mean_cond[3]*component_1**3 + lamda_cond = ( + mean_cond[0] + + mean_cond[1] * component_1 + + mean_cond[2] * component_1**2 + + mean_cond[3] * component_1**3 + ) # Standard deviation of Ln(x2) as a function of x1 - sigma_cond = std_cond[0]+std_cond[1]*component_1+std_cond[2]*component_1**2 + sigma_cond = ( + std_cond[0] + std_cond[1] * component_1 + std_cond[2] * component_1**2 + ) # lognormal inverse component_2_Rosenblatt = stats.lognorm.ppf( - y_quantile, s=sigma_cond, loc=0, scale=np.exp(lamda_cond)) + y_quantile, s=sigma_cond, loc=0, scale=np.exp(lamda_cond) + ) - fit['lamda_cond'] = lamda_cond - fit['sigma_cond'] = sigma_cond + fit["lamda_cond"] = lamda_cond + fit["sigma_cond"] = sigma_cond if return_fit: return component_1, component_2_Rosenblatt, fit return component_1, component_2_Rosenblatt -def _nonparametric_copula_parameters(x1, x2, max_x1=None, max_x2=None, - nb_steps=1000): +def _nonparametric_copula_parameters(x1, x2, max_x1=None, max_x2=None, nb_steps=1000): """ Calculates nonparametric copula parameters @@ -1129,19 +1228,19 @@ def _nonparametric_copula_parameters(x1, x2, max_x1=None, max_x2=None, x2 points in KDE space and Nonparametric PDF for x2 """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not max_x1: - max_x1 = x1.max()*2 + max_x1 = x1.max() * 2 if not max_x2: - max_x2 = x2.max()*2 + max_x2 = x2.max() * 2 if not isinstance(max_x1, float): - raise TypeError(f'max_x1 must be of type float. Got: {type(max_x1)}') + raise TypeError(f"max_x1 must be of type float. Got: {type(max_x1)}") if not isinstance(max_x2, float): - raise TypeError(f'max_x2 must be of type float. Got: {type(max_x2)}') + raise TypeError(f"max_x2 must be of type float. Got: {type(max_x2)}") if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") # Binning x1_sorted_index = x1.argsort() @@ -1159,11 +1258,11 @@ def _nonparametric_copula_parameters(x1, x2, max_x1=None, max_x2=None, # Calculate optimal bandwidth for T and Hs sig = stats.median_abs_deviation(x2_sorted) num = float(len(x2_sorted)) - bwT = sig*(4.0/(3.0*num))**(1.0/5.0) + bwT = sig * (4.0 / (3.0 * num)) ** (1.0 / 5.0) sig = stats.median_abs_deviation(x1_sorted) num = float(len(x1_sorted)) - bwHs = sig*(4.0/(3.0*num))**(1.0/5.0) + bwHs = sig * (4.0 / (3.0 * num)) ** (1.0 / 5.0) # Nonparametric PDF for x2 temp = KDEUnivariate(x2_sorted) @@ -1174,11 +1273,11 @@ def _nonparametric_copula_parameters(x1, x2, max_x1=None, max_x2=None, temp = KDEUnivariate(x1_sorted) temp.fit(bw=bwHs) tempPDF = temp.evaluate(pts_x1) - F_x1 = tempPDF/sum(tempPDF) + F_x1 = tempPDF / sum(tempPDF) F_x1 = np.cumsum(F_x1) # Nonparametric CDF for x2 - F_x2 = f_x2/sum(f_x2) + F_x2 = f_x2 / sum(f_x2) F_x2 = np.cumsum(F_x2) nonpara_dist_1 = np.transpose(np.array([pts_x1, F_x1])) @@ -1208,7 +1307,7 @@ def _nonparametric_component(z, nonpara_dist, nb_steps): nonparametic component values """ if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") component = np.zeros(nb_steps) for k in range(0, nb_steps): @@ -1217,7 +1316,7 @@ def _nonparametric_component(z, nonpara_dist, nb_steps): component[k] = min(nonpara_dist[:, 0]) break elif z[k] <= nonpara_dist[j, 1]: - component[k] = (nonpara_dist[j, 0] + nonpara_dist[j-1, 0])/2 + component[k] = (nonpara_dist[j, 0] + nonpara_dist[j - 1, 0]) / 2 break else: component[k] = max(nonpara_dist[:, 0]) @@ -1256,49 +1355,50 @@ def _nonparametric_gaussian_copula(x1, x2, fit, nb_steps, kwargs): with additional fit metrics from the copula method. """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - x_component_iso_prob = fit['x_component_iso_prob'] - y_component_iso_prob = fit['y_component_iso_prob'] - nonpara_dist_1 = fit['nonpara_dist_1'] - nonpara_dist_2 = fit['nonpara_dist_2'] + x_component_iso_prob = fit["x_component_iso_prob"] + y_component_iso_prob = fit["y_component_iso_prob"] + nonpara_dist_1 = fit["nonpara_dist_1"] + nonpara_dist_2 = fit["nonpara_dist_2"] # Calculate Kendall's tau tau = stats.kendalltau(x2, x1)[0] - rho_gau = np.sin(tau*np.pi/2.) + rho_gau = np.sin(tau * np.pi / 2.0) # Component 1 z1 = stats.norm.cdf(x_component_iso_prob) - z2 = stats.norm.cdf(y_component_iso_prob*np.sqrt(1. - - rho_gau**2.)+rho_gau*x_component_iso_prob) + z2 = stats.norm.cdf( + y_component_iso_prob * np.sqrt(1.0 - rho_gau**2.0) + + rho_gau * x_component_iso_prob + ) - comps = {1: {'z': z1, - 'nonpara_dist': nonpara_dist_1 - }, - 2: {'z': z2, - 'nonpara_dist': nonpara_dist_2 - } - } + comps = { + 1: {"z": z1, "nonpara_dist": nonpara_dist_1}, + 2: {"z": z2, "nonpara_dist": nonpara_dist_2}, + } for c in comps: - z = comps[c]['z'] - nonpara_dist = comps[c]['nonpara_dist'] - comps[c]['comp'] = _nonparametric_component(z, nonpara_dist, nb_steps) + z = comps[c]["z"] + nonpara_dist = comps[c]["nonpara_dist"] + comps[c]["comp"] = _nonparametric_component(z, nonpara_dist, nb_steps) - component_1_np = comps[1]['comp'] - component_2_np_gaussian = comps[2]['comp'] + component_1_np = comps[1]["comp"] + component_2_np_gaussian = comps[2]["comp"] - fit['tau'] = tau - fit['rho'] = rho_gau - fit['z1'] = z1 - fit['z2'] = z2 + fit["tau"] = tau + fit["rho"] = rho_gau + fit["z1"] = z1 + fit["z2"] = z2 if return_fit: return component_1_np, component_2_np_gaussian, fit @@ -1337,52 +1437,52 @@ def _nonparametric_clayton_copula(x1, x2, fit, nb_steps, kwargs): with additional fit metrics from the copula method. """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - x_component_iso_prob = fit['x_component_iso_prob'] - x_quantile = fit['x_quantile'] - y_quantile = fit['y_quantile'] - nonpara_dist_1 = fit['nonpara_dist_1'] - nonpara_dist_2 = fit['nonpara_dist_2'] - nonpara_pdf_2 = fit['nonpara_pdf_2'] + x_component_iso_prob = fit["x_component_iso_prob"] + x_quantile = fit["x_quantile"] + y_quantile = fit["y_quantile"] + nonpara_dist_1 = fit["nonpara_dist_1"] + nonpara_dist_2 = fit["nonpara_dist_2"] + nonpara_pdf_2 = fit["nonpara_pdf_2"] # Calculate Kendall's tau tau = stats.kendalltau(x2, x1)[0] - theta_clay = (2.*tau)/(1.-tau) + theta_clay = (2.0 * tau) / (1.0 - tau) # Component 1 (Hs) z1 = stats.norm.cdf(x_component_iso_prob) - z2_clay = ((1-x_quantile**(-theta_clay) - + x_quantile**(-theta_clay) - / y_quantile)**(theta_clay/(1.+theta_clay)))**(-1./theta_clay) - - comps = {1: {'z': z1, - 'nonpara_dist': nonpara_dist_1 - }, - 2: {'z': z2_clay, - 'nonpara_dist': nonpara_dist_2 - } - } + z2_clay = ( + (1 - x_quantile ** (-theta_clay) + x_quantile ** (-theta_clay) / y_quantile) + ** (theta_clay / (1.0 + theta_clay)) + ) ** (-1.0 / theta_clay) + + comps = { + 1: {"z": z1, "nonpara_dist": nonpara_dist_1}, + 2: {"z": z2_clay, "nonpara_dist": nonpara_dist_2}, + } for c in comps: - z = comps[c]['z'] - nonpara_dist = comps[c]['nonpara_dist'] - comps[c]['comp'] = _nonparametric_component(z, nonpara_dist, nb_steps) + z = comps[c]["z"] + nonpara_dist = comps[c]["nonpara_dist"] + comps[c]["comp"] = _nonparametric_component(z, nonpara_dist, nb_steps) - component_1_np = comps[1]['comp'] - component_2_np_clayton = comps[2]['comp'] + component_1_np = comps[1]["comp"] + component_2_np_clayton = comps[2]["comp"] - fit['tau'] = tau - fit['theta'] = theta_clay - fit['z1'] = z1 - fit['z2'] = z2_clay + fit["tau"] = tau + fit["theta"] = theta_clay + fit["z1"] = z1 + fit["z2"] = z2_clay if return_fit: return component_1_np, component_2_np_clayton, fit @@ -1421,26 +1521,28 @@ def _nonparametric_gumbel_copula(x1, x2, fit, nb_steps, kwargs): with additional fit metrics from the copula method. """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") return_fit = kwargs.get("return_fit", False) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be a bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be a bool. Got: {type(return_fit)}" + ) Ndata = 1000 - x_quantile = fit['x_quantile'] - y_quantile = fit['y_quantile'] - nonpara_dist_1 = fit['nonpara_dist_1'] - nonpara_dist_2 = fit['nonpara_dist_2'] - nonpara_pdf_2 = fit['nonpara_pdf_2'] + x_quantile = fit["x_quantile"] + y_quantile = fit["y_quantile"] + nonpara_dist_1 = fit["nonpara_dist_1"] + nonpara_dist_2 = fit["nonpara_dist_2"] + nonpara_pdf_2 = fit["nonpara_pdf_2"] # Calculate Kendall's tau tau = stats.kendalltau(x2, x1)[0] - theta_gum = 1./(1.-tau) + theta_gum = 1.0 / (1.0 - tau) # Component 1 (Hs) z1 = x_quantile @@ -1452,15 +1554,15 @@ def _nonparametric_gumbel_copula(x1, x2, fit, nb_steps, kwargs): component_2_np_gumbel = np.zeros(nb_steps) for k in range(nb_steps): - z1 = np.array([x_quantile[k]]*Ndata) + z1 = np.array([x_quantile[k]] * Ndata) Z = np.array((z1.T, F_x2)) Y = _gumbel_density(Z, theta_gum) Y = np.nan_to_num(Y) # pdf 2|1 - p_x2_x1 = Y*f_x2 + p_x2_x1 = Y * f_x2 # Estimate CDF from PDF dum = np.cumsum(p_x2_x1) - cdf = dum/(dum[Ndata-1]) + cdf = dum / (dum[Ndata - 1]) table = np.array((pts_x2, cdf)) table = table.T for j in range(Ndata): @@ -1468,17 +1570,17 @@ def _nonparametric_gumbel_copula(x1, x2, fit, nb_steps, kwargs): component_2_np_gumbel[k] = min(table[:, 0]) break elif y_quantile[k] <= table[j, 1]: - component_2_np_gumbel[k] = (table[j, 0]+table[j-1, 0])/2 + component_2_np_gumbel[k] = (table[j, 0] + table[j - 1, 0]) / 2 break else: component_2_np_gumbel[k] = max(table[:, 0]) - fit['tau'] = tau - fit['theta'] = theta_gum - fit['z1'] = z1 - fit['pts_x2'] = pts_x2 - fit['f_x2'] = f_x2 - fit['F_x2'] = F_x2 + fit["tau"] = tau + fit["theta"] = theta_gum + fit["z1"] = z1 + fit["pts_x2"] = pts_x2 + fit["f_x2"] = f_x2 + fit["F_x2"] = F_x2 if return_fit: return component_1_np, component_2_np_gumbel, fit @@ -1526,11 +1628,11 @@ def _bivariate_KDE(x1, x2, bw, fit, nb_steps, Ndata_bivariate_KDE, kwargs): with additional fit metrics from the copula method. """ if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") if not isinstance(nb_steps, int): - raise TypeError(f'nb_steps must be of type int. Got: {type(nb_steps)}') + raise TypeError(f"nb_steps must be of type int. Got: {type(nb_steps)}") max_x1 = kwargs.get("max_x1", None) max_x2 = kwargs.get("max_x2", None) @@ -1538,19 +1640,23 @@ def _bivariate_KDE(x1, x2, bw, fit, nb_steps, Ndata_bivariate_KDE, kwargs): return_fit = kwargs.get("return_fit", False) if isinstance(max_x1, type(None)): - max_x1 = x1.max()*2 + max_x1 = x1.max() * 2 if isinstance(max_x2, type(None)): - max_x2 = x2.max()*2 + max_x2 = x2.max() * 2 if not isinstance(max_x1, float): - raise TypeError(f'max_x1 must be of type float. Got: {type(max_x1)}') + raise TypeError(f"max_x1 must be of type float. Got: {type(max_x1)}") if not isinstance(max_x2, float): - raise TypeError(f'max_x2 must be of type float. Got: {type(max_x2)}') + raise TypeError(f"max_x2 must be of type float. Got: {type(max_x2)}") if not isinstance(log_transform, bool): - raise TypeError(f'If specified, log_transform must be of type bool. Got: {type(log_transform)}') + raise TypeError( + f"If specified, log_transform must be of type bool. Got: {type(log_transform)}" + ) if not isinstance(return_fit, bool): - raise TypeError(f'If specified, return_fit must be of type bool. Got: {type(return_fit)}') + raise TypeError( + f"If specified, return_fit must be of type bool. Got: {type(return_fit)}" + ) - p_f = fit['exceedance_probability'] + p_f = fit["exceedance_probability"] min_limit_1 = 0.01 min_limit_2 = 0.01 @@ -1578,10 +1684,10 @@ def _bivariate_KDE(x1, x2, bw, fit, nb_steps, Ndata_bivariate_KDE, kwargs): for i in range(0, m): ftemp = np.ones((n, 1)) for j in range(0, d): - z = (txi[j][i] - ty[j])/bw[j] + z = (txi[j][i] - ty[j]) / bw[j] fk = stats.norm.pdf(z) if log_transform: - fnew = fk*(1/np.transpose(xi[j][i])) + fnew = fk * (1 / np.transpose(xi[j][i])) else: fnew = fk fnew = np.reshape(fnew, (n, 1)) @@ -1606,11 +1712,11 @@ def _bivariate_KDE(x1, x2, bw, fit, nb_steps, Ndata_bivariate_KDE, kwargs): x1_bivariate_KDE = np.transpose(np.asarray(x1_bivariate_KDE)[0]) x2_bivariate_KDE = np.transpose(np.asarray(x2_bivariate_KDE)[0]) - fit['mesh_pts_x1'] = mesh_pts_x1 - fit['mesh_pts_x2'] = mesh_pts_x2 - fit['ty'] = ty - fit['xi'] = xi - fit['contour_vals'] = vals + fit["mesh_pts_x1"] = mesh_pts_x1 + fit["mesh_pts_x2"] = mesh_pts_x2 + fit["ty"] = ty + fit["xi"] = xi + fit["contour_vals"] = vals if return_fit: return x1_bivariate_KDE, x2_bivariate_KDE, fit @@ -1618,8 +1724,15 @@ def _bivariate_KDE(x1, x2, bw, fit, nb_steps, Ndata_bivariate_KDE, kwargs): # Sampling -def samples_full_seastate(x1, x2, points_per_interval, return_periods, - sea_state_duration, method="PCA", bin_size=250): +def samples_full_seastate( + x1, + x2, + points_per_interval, + return_periods, + sea_state_duration, + method="PCA", + bin_size=250, +): """ Sample a sea state between contours of specified return periods. @@ -1660,24 +1773,31 @@ def samples_full_seastate(x1, x2, points_per_interval, return_periods, Vector of probabilistic weights for each sampling point to be used in risk calculations. """ - if method != 'PCA': + if method != "PCA": raise NotImplementedError( - "Full sea state sampling is currently only implemented using " + - "the 'PCA' method.") + "Full sea state sampling is currently only implemented using " + + "the 'PCA' method." + ) if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') - if not isinstance(points_per_interval,int): - raise TypeError(f'points_per_interval must be of int. Got: {type(points_per_interval)}') + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") + if not isinstance(points_per_interval, int): + raise TypeError( + f"points_per_interval must be of int. Got: {type(points_per_interval)}" + ) if not isinstance(return_periods, np.ndarray): - raise TypeError(f'return_periods must be of type np.ndarray. Got: {type(return_periods)}') + raise TypeError( + f"return_periods must be of type np.ndarray. Got: {type(return_periods)}" + ) if not isinstance(sea_state_duration, (int, float)): - raise TypeError(f'sea_state_duration must be of int or float. Got: {type(sea_state_duration)}') + raise TypeError( + f"sea_state_duration must be of int or float. Got: {type(sea_state_duration)}" + ) if not isinstance(method, (str, list)): - raise TypeError(f'method must be of type string or list. Got: {type(method)}') + raise TypeError(f"method must be of type string or list. Got: {type(method)}") if not isinstance(bin_size, int): - raise TypeError(f'bin_size must be of int. Got: {type(bin_size)}') + raise TypeError(f"bin_size must be of int. Got: {type(bin_size)}") pca_fit = _principal_component_analysis(x1, x2, bin_size) @@ -1687,31 +1807,31 @@ def samples_full_seastate(x1, x2, points_per_interval, return_periods, h_zeroline = np.zeros(len(t_zeroline)) # Transform zero line into principal component space - coeff = pca_fit['principal_axes'] - shift = pca_fit['shift'] - comp_zeroline = np.dot(np.transpose(np.vstack([h_zeroline, t_zeroline])), - coeff) + coeff = pca_fit["principal_axes"] + shift = pca_fit["shift"] + comp_zeroline = np.dot(np.transpose(np.vstack([h_zeroline, t_zeroline])), coeff) comp_zeroline[:, 1] = comp_zeroline[:, 1] + shift - comp1 = pca_fit['x1_fit'] + comp1 = pca_fit["x1_fit"] c1_zeroline_prob = stats.invgauss.cdf( - comp_zeroline[:, 0], mu=comp1['mu'], loc=0, scale=comp1['scale']) + comp_zeroline[:, 0], mu=comp1["mu"], loc=0, scale=comp1["scale"] + ) - mu_slope = pca_fit['mu_fit'].slope - mu_intercept = pca_fit['mu_fit'].intercept + mu_slope = pca_fit["mu_fit"].slope + mu_intercept = pca_fit["mu_fit"].intercept mu_zeroline = mu_slope * comp_zeroline[:, 0] + mu_intercept - sigma_polynomial_coeffcients = pca_fit['sigma_fit'].x - sigma_zeroline = np.polyval( - sigma_polynomial_coeffcients, comp_zeroline[:, 0]) - c2_zeroline_prob = stats.norm.cdf(comp_zeroline[:, 1], - loc=mu_zeroline, scale=sigma_zeroline) + sigma_polynomial_coeffcients = pca_fit["sigma_fit"].x + sigma_zeroline = np.polyval(sigma_polynomial_coeffcients, comp_zeroline[:, 0]) + c2_zeroline_prob = stats.norm.cdf( + comp_zeroline[:, 1], loc=mu_zeroline, scale=sigma_zeroline + ) c1_normzeroline = stats.norm.ppf(c1_zeroline_prob, 0, 1) c2_normzeroline = stats.norm.ppf(c2_zeroline_prob, 0, 1) return_periods = np.asarray(return_periods) - contour_probs = 1 / (365*24*60*60/sea_state_duration * return_periods) + contour_probs = 1 / (365 * 24 * 60 * 60 / sea_state_duration * return_periods) # Reliability contour generation # Calculate reliability @@ -1737,12 +1857,11 @@ def samples_full_seastate(x1, x2, points_per_interval, return_periods, # Transform to polar coordinates theta_zeroline = np.arctan2(c2_normzeroline, c1_normzeroline) rho_zeroline = np.sqrt(c1_normzeroline**2 + c2_normzeroline**2) - theta_zeroline[theta_zeroline < 0] = theta_zeroline[ - theta_zeroline < 0] + 2 * np.pi + theta_zeroline[theta_zeroline < 0] = theta_zeroline[theta_zeroline < 0] + 2 * np.pi sample_alpha, sample_beta, weight_points = _generate_sample_data( - beta_lines, rho_zeroline, theta_zeroline, points_per_interval, - contour_probs) + beta_lines, rho_zeroline, theta_zeroline, points_per_interval, contour_probs + ) # Sample transformation to principal component space sample_u1 = sample_beta * np.cos(sample_alpha) @@ -1750,19 +1869,22 @@ def samples_full_seastate(x1, x2, points_per_interval, return_periods, comp1_sample = stats.invgauss.ppf( stats.norm.cdf(sample_u1, loc=0, scale=1), - mu=comp1['mu'], loc=0, scale=comp1['scale']) + mu=comp1["mu"], + loc=0, + scale=comp1["scale"], + ) mu_sample = mu_slope * comp1_sample + mu_intercept # Calculate sigma values at each point on the circle sigma_sample = np.polyval(sigma_polynomial_coeffcients, comp1_sample) # Use calculated mu and sigma values to calculate C2 along the contour - comp2_sample = stats.norm.ppf(stats.norm.cdf(sample_u2, loc=0, scale=1), - loc=mu_sample, scale=sigma_sample) + comp2_sample = stats.norm.ppf( + stats.norm.cdf(sample_u2, loc=0, scale=1), loc=mu_sample, scale=sigma_sample + ) # Sample transformation into Hs-T space - h_sample, t_sample = _princomp_inv( - comp1_sample, comp2_sample, coeff, shift) + h_sample, t_sample = _princomp_inv(comp1_sample, comp2_sample, coeff, shift) return h_sample, t_sample, weight_points @@ -1787,11 +1909,13 @@ def samples_contour(t_samples, t_contour, hs_contour): points sampled along return contour """ if not isinstance(t_samples, np.ndarray): - raise TypeError(f't_samples must be of type np.ndarray. Got: {type(t_samples)}') + raise TypeError(f"t_samples must be of type np.ndarray. Got: {type(t_samples)}") if not isinstance(t_contour, np.ndarray): - raise TypeError(f't_contour must be of type np.ndarray. Got: {type(t_contour)}') + raise TypeError(f"t_contour must be of type np.ndarray. Got: {type(t_contour)}") if not isinstance(hs_contour, np.ndarray): - raise TypeError(f'hs_contour must be of type np.ndarray. Got: {type(hs_contour)}') + raise TypeError( + f"hs_contour must be of type np.ndarray. Got: {type(hs_contour)}" + ) # finds minimum and maximum energy period values amin = np.argmin(t_contour) @@ -1801,7 +1925,7 @@ def samples_contour(t_samples, t_contour, hs_contour): # finds points along the contour w1 = hs_contour[aamin:aamax] w2 = np.concatenate((hs_contour[aamax:], hs_contour[:aamin])) - if (np.max(w1) > np.max(w2)): + if np.max(w1) > np.max(w2): x1 = t_contour[aamin:aamax] y1 = hs_contour[aamin:aamax] else: @@ -1819,8 +1943,9 @@ def samples_contour(t_samples, t_contour, hs_contour): return hs_samples -def _generate_sample_data(beta_lines, rho_zeroline, theta_zeroline, - points_per_interval, contour_probs): +def _generate_sample_data( + beta_lines, rho_zeroline, theta_zeroline, points_per_interval, contour_probs +): """ Calculate radius, angle, and weight for each sample point @@ -1844,15 +1969,25 @@ def _generate_sample_data(beta_lines, rho_zeroline, theta_zeroline, Array of weights for each point. """ if not isinstance(beta_lines, np.ndarray): - raise TypeError(f'beta_lines must be of type np.ndarray. Got: {type(beta_lines)}') + raise TypeError( + f"beta_lines must be of type np.ndarray. Got: {type(beta_lines)}" + ) if not isinstance(rho_zeroline, np.ndarray): - raise TypeError(f'rho_zeroline must be of type np.ndarray. Got: {type(rho_zeroline)}') + raise TypeError( + f"rho_zeroline must be of type np.ndarray. Got: {type(rho_zeroline)}" + ) if not isinstance(theta_zeroline, np.ndarray): - raise TypeError(f'theta_zeroline must be of type np.ndarray. Got: {type(theta_zeroline)}') + raise TypeError( + f"theta_zeroline must be of type np.ndarray. Got: {type(theta_zeroline)}" + ) if not isinstance(points_per_interval, int): - raise TypeError(f'points_per_interval must be of type int. Got: {type(points_per_interval)}') + raise TypeError( + f"points_per_interval must be of type int. Got: {type(points_per_interval)}" + ) if not isinstance(contour_probs, np.ndarray): - raise TypeError(f'contour_probs must be of type np.ndarray. Got: {type(contour_probs)}') + raise TypeError( + f"contour_probs must be of type np.ndarray. Got: {type(contour_probs)}" + ) num_samples = (len(beta_lines) - 1) * points_per_interval alpha_bounds = np.zeros((len(beta_lines) - 1, 2)) @@ -1873,8 +2008,10 @@ def _generate_sample_data(beta_lines, rho_zeroline, theta_zeroline, left = np.amin(np.where(r < 0)) right = np.amax(np.where(r < 0)) # Save sampling bounds - alpha_bounds[i, :] = (theta_zeroline[left], theta_zeroline[right] - - 2 * np.pi) + alpha_bounds[i, :] = ( + theta_zeroline[left], + theta_zeroline[right] - 2 * np.pi, + ) else: alpha_bounds[i, :] = np.array((0, 2 * np.pi)) # Find the angular distance that will be covered by sampling the disc @@ -1885,23 +2022,27 @@ def _generate_sample_data(beta_lines, rho_zeroline, theta_zeroline, # areas to be sampled alpha[i, :] = np.arange( min(alpha_bounds[i]), - max(alpha_bounds[i]) + 0.1, angular_dist[i] / points_per_interval) + max(alpha_bounds[i]) + 0.1, + angular_dist[i] / points_per_interval, + ) # Calculate the weight of each point sampled per contour - weight[i] = ((contour_probs[i] - contour_probs[i + 1]) * - angular_ratio[i] / points_per_interval) + weight[i] = ( + (contour_probs[i] - contour_probs[i + 1]) + * angular_ratio[i] + / points_per_interval + ) for j in range(points_per_interval): # Generate sample radius by adding a randomly sampled distance to # the 'disc' lower bound - sample_beta[(i) * points_per_interval + j] = ( - beta_lines[i] + - np.random.random_sample() * (beta_lines[i + 1] - beta_lines[i]) - ) + sample_beta[(i) * points_per_interval + j] = beta_lines[ + i + ] + np.random.random_sample() * (beta_lines[i + 1] - beta_lines[i]) # Generate sample angle by adding a randomly sampled distance to # the lower bound of the angle defining a discrete portion of the # 'disc' - sample_alpha[(i) * points_per_interval + j] = ( - alpha[i, j] + - np.random.random_sample() * (alpha[i, j + 1] - alpha[i, j])) + sample_alpha[(i) * points_per_interval + j] = alpha[ + i, j + ] + np.random.random_sample() * (alpha[i, j + 1] - alpha[i, j]) # Save the weight for each sample point weight_points[i * points_per_interval + j] = weight[i] @@ -1932,21 +2073,27 @@ def _princomp_inv(princip_data1, princip_data2, coeff, shift): T values following rotation from principal component space. """ if not isinstance(princip_data1, np.ndarray): - raise TypeError(f'princip_data1 must be of type np.ndarray. Got: {type(princip_data1)}') + raise TypeError( + f"princip_data1 must be of type np.ndarray. Got: {type(princip_data1)}" + ) if not isinstance(princip_data2, np.ndarray): - raise TypeError(f'princip_data2 must be of type np.ndarray. Got: {type(princip_data2)}') + raise TypeError( + f"princip_data2 must be of type np.ndarray. Got: {type(princip_data2)}" + ) if not isinstance(coeff, np.ndarray): - raise TypeError(f'coeff must be of type np.ndarray. Got: {type(coeff)}') + raise TypeError(f"coeff must be of type np.ndarray. Got: {type(coeff)}") if not isinstance(shift, float): - raise TypeError(f'shift must be of type float. Got: {type(shift)}') + raise TypeError(f"shift must be of type float. Got: {type(shift)}") original1 = np.zeros(len(princip_data1)) original2 = np.zeros(len(princip_data1)) for i in range(len(princip_data2)): - original1[i] = (((coeff[0, 1] * (princip_data2[i] - shift)) + - (coeff[0, 0] * princip_data1[i])) / (coeff[0, 1]**2 + - coeff[0, 0]**2)) - original2[i] = (((coeff[0, 1] * princip_data1[i]) - - (coeff[0, 0] * (princip_data2[i] - shift))) / - (coeff[0, 1]**2 + coeff[0, 0]**2)) + original1[i] = ( + (coeff[0, 1] * (princip_data2[i] - shift)) + + (coeff[0, 0] * princip_data1[i]) + ) / (coeff[0, 1] ** 2 + coeff[0, 0] ** 2) + original2[i] = ( + (coeff[0, 1] * princip_data1[i]) + - (coeff[0, 0] * (princip_data2[i] - shift)) + ) / (coeff[0, 1] ** 2 + coeff[0, 0] ** 2) return original1, original2 diff --git a/mhkit/wave/graphics.py b/mhkit/wave/graphics.py index 79d44f3b6..df1e0f9d0 100644 --- a/mhkit/wave/graphics.py +++ b/mhkit/wave/graphics.py @@ -1,4 +1,3 @@ - from mhkit.river.resource import exceedance_probability from mhkit.river.graphics import _xy_plot import matplotlib.patheffects as pe @@ -27,12 +26,18 @@ def plot_spectrum(S, ax=None): ax : matplotlib pyplot axes """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") f = S.index for key in S.keys(): - ax = _xy_plot(f*2*np.pi, S[key]/(2*np.pi), fmt='-', xlabel='omega [rad/s]', - ylabel='Spectral density [m$^2$s/rad]', ax=ax) + ax = _xy_plot( + f * 2 * np.pi, + S[key] / (2 * np.pi), + fmt="-", + xlabel="omega [rad/s]", + ylabel="Spectral density [m$^2$s/rad]", + ax=ax, + ) return ax @@ -54,23 +59,17 @@ def plot_elevation_timeseries(eta, ax=None): """ if not isinstance(eta, pd.DataFrame): - raise TypeError(f'eta must be of type pd.DataFrame. Got: {type(eta)}') + raise TypeError(f"eta must be of type pd.DataFrame. Got: {type(eta)}") for key in eta.keys(): - ax = _xy_plot(eta.index, eta[key], fmt='-', xlabel='Time', - ylabel='$\eta$ [m]', ax=ax) + ax = _xy_plot( + eta.index, eta[key], fmt="-", xlabel="Time", ylabel="$\eta$ [m]", ax=ax + ) return ax -def plot_matrix( - M, - xlabel='Te', - ylabel='Hm0', - zlabel=None, - show_values=True, - ax=None - ): +def plot_matrix(M, xlabel="Te", ylabel="Hm0", zlabel=None, show_values=True, ax=None): """ Plots values in the matrix as a scatter diagram @@ -96,13 +95,13 @@ def plot_matrix( """ if not isinstance(M, pd.DataFrame): - raise TypeError(f'M must be of type pd.DataFrame. Got: {type(M)}') + raise TypeError(f"M must be of type pd.DataFrame. Got: {type(M)}") if ax is None: plt.figure() ax = plt.gca() - im = ax.imshow(M, origin='lower', aspect='auto') + im = ax.imshow(M, origin="lower", aspect="auto") # Add colorbar cbar = plt.colorbar(im) @@ -117,8 +116,10 @@ def plot_matrix( if show_values: for i, col in enumerate(M.columns): for j, index in enumerate(M.index): - if not np.isnan(M.loc[index,col]): - ax.text(i, j, format(M.loc[index,col], '.2f'), ha="center", va="center") + if not np.isnan(M.loc[index, col]): + ax.text( + i, j, format(M.loc[index, col], ".2f"), ha="center", va="center" + ) # Reset x and y ticks ax.set_xticks(np.arange(len(M.columns))) @@ -179,45 +180,54 @@ def plot_chakrabarti(H, lambda_w, D, ax=None): ax : matplotlib pyplot axes """ if not isinstance(H, (np.ndarray, float, int, np.int64, pd.Series)): - raise TypeError(f'H must be of type float, int, np.int64, np.ndarray, or pd.Series. Got: {type(H)}') + raise TypeError( + f"H must be of type float, int, np.int64, np.ndarray, or pd.Series. Got: {type(H)}" + ) if not isinstance(lambda_w, (np.ndarray, float, int, np.int64, pd.Series)): - raise TypeError(f'lambda_w must be of type float, int, np.int64, np.ndarray, or pd.Series. Got: {type(lambda_w)}') + raise TypeError( + f"lambda_w must be of type float, int, np.int64, np.ndarray, or pd.Series. Got: {type(lambda_w)}" + ) if not isinstance(D, (np.ndarray, float, int, np.int64, pd.Series)): - raise TypeError(f'D must be of type float, int, np.int64, np.ndarray, or pd.Series. Got: {type(D)}') + raise TypeError( + f"D must be of type float, int, np.int64, np.ndarray, or pd.Series. Got: {type(D)}" + ) - if any([isinstance(H, (np.ndarray, pd.Series)), + if any( + [ + isinstance(H, (np.ndarray, pd.Series)), isinstance(lambda_w, (np.ndarray, pd.Series)), - isinstance(D, (np.ndarray, pd.Series)) - ]): + isinstance(D, (np.ndarray, pd.Series)), + ] + ): n_H = H.squeeze().shape n_lambda_w = lambda_w.squeeze().shape n_D = D.squeeze().shape if not (n_H == n_lambda_w and n_H == n_D): - raise ValueError('D, H, and lambda_w must be same shape') + raise ValueError("D, H, and lambda_w must be same shape") if isinstance(H, np.ndarray): - mvals = pd.DataFrame(H.reshape(len(H),1), columns=['H']) - mvals['lambda_w'] = lambda_w - mvals['D'] = D + mvals = pd.DataFrame(H.reshape(len(H), 1), columns=["H"]) + mvals["lambda_w"] = lambda_w + mvals["D"] = D elif isinstance(H, pd.Series): mvals = pd.DataFrame(H) - mvals['lambda_w'] = lambda_w - mvals['D'] = D + mvals["lambda_w"] = lambda_w + mvals["D"] = D else: H = np.array([H]) lambda_w = np.array([lambda_w]) D = np.array([D]) - mvals = pd.DataFrame(H.reshape(len(H),1), columns=['H']) - mvals['lambda_w'] = lambda_w - mvals['D'] = D + mvals = pd.DataFrame(H.reshape(len(H), 1), columns=["H"]) + mvals["lambda_w"] = lambda_w + mvals["D"] = D if ax is None: plt.figure() ax = plt.gca() - ax.set_xscale('log') - ax.set_yscale('log') + ax.set_xscale("log") + ax.set_yscale("log") for index, row in mvals.iterrows(): H = row.H @@ -225,94 +235,131 @@ def plot_chakrabarti(H, lambda_w, D, ax=None): lambda_w = row.lambda_w KC = H / D - Diffraction = np.pi*D / lambda_w - label = f'$H$ = {H:g}, $\lambda_w$ = {lambda_w:g}, $D$ = {D:g}' - ax.plot(Diffraction, KC, 'o', label=label) - - if np.any(KC>=10 or KC<=.02) or np.any(Diffraction>=50) or \ - np.any(lambda_w >= 1000) : - ax.autoscale(enable=True, axis='both', tight=True) + Diffraction = np.pi * D / lambda_w + label = f"$H$ = {H:g}, $\lambda_w$ = {lambda_w:g}, $D$ = {D:g}" + ax.plot(Diffraction, KC, "o", label=label) + + if ( + np.any(KC >= 10 or KC <= 0.02) + or np.any(Diffraction >= 50) + or np.any(lambda_w >= 1000) + ): + ax.autoscale(enable=True, axis="both", tight=True) else: ax.set_xlim((0.01, 10)) ax.set_ylim((0.01, 50)) graphScale = list(ax.get_xlim()) - if graphScale[0] >= .01: - graphScale[0] =.01 + if graphScale[0] >= 0.01: + graphScale[0] = 0.01 # deep water breaking limit (H/lambda_w = 0.14) - x = np.logspace(1,np.log10(graphScale[0]), 2) + x = np.logspace(1, np.log10(graphScale[0]), 2) y_breaking = 0.14 * np.pi / x - ax.plot(x, y_breaking, 'k-') + ax.plot(x, y_breaking, "k-") graphScale = list(ax.get_xlim()) - ax.text(1, 7, - 'wave\nbreaking\n$H/\lambda_w > 0.14$', - ha='center', va='center', fontstyle='italic', - fontsize='small',clip_on='True') + ax.text( + 1, + 7, + "wave\nbreaking\n$H/\lambda_w > 0.14$", + ha="center", + va="center", + fontstyle="italic", + fontsize="small", + clip_on="True", + ) # upper bound of low drag region ldv = 20 - y_small_drag = 20*np.ones_like(graphScale) + y_small_drag = 20 * np.ones_like(graphScale) graphScale[1] = 0.14 * np.pi / ldv - ax.plot(graphScale, y_small_drag,'k--') - ax.text(0.0125, 30, - 'drag', - ha='center', va='top', fontstyle='italic', - fontsize='small',clip_on='True') + ax.plot(graphScale, y_small_drag, "k--") + ax.text( + 0.0125, + 30, + "drag", + ha="center", + va="top", + fontstyle="italic", + fontsize="small", + clip_on="True", + ) # upper bound of small drag region sdv = 1.5 - y_small_drag = sdv*np.ones_like(graphScale) + y_small_drag = sdv * np.ones_like(graphScale) graphScale[1] = 0.14 * np.pi / sdv - ax.plot(graphScale, y_small_drag,'k--') - ax.text(0.02, 7, - 'inertia \n& drag', - ha='center', va='center', fontstyle='italic', - fontsize='small',clip_on='True') + ax.plot(graphScale, y_small_drag, "k--") + ax.text( + 0.02, + 7, + "inertia \n& drag", + ha="center", + va="center", + fontstyle="italic", + fontsize="small", + clip_on="True", + ) # upper bound of negligible drag region ndv = 0.25 graphScale[1] = 0.14 * np.pi / ndv - y_small_drag = ndv*np.ones_like(graphScale) - ax.plot(graphScale, y_small_drag,'k--') - ax.text(8e-2, 0.7, - 'large\ninertia', - ha='center', va='center', fontstyle='italic', - fontsize='small',clip_on='True') - - - ax.text(8e-2, 6e-2, - 'all\ninertia', - ha='center', va='center', fontstyle='italic', - fontsize='small', clip_on='True') + y_small_drag = ndv * np.ones_like(graphScale) + ax.plot(graphScale, y_small_drag, "k--") + ax.text( + 8e-2, + 0.7, + "large\ninertia", + ha="center", + va="center", + fontstyle="italic", + fontsize="small", + clip_on="True", + ) + + ax.text( + 8e-2, + 6e-2, + "all\ninertia", + ha="center", + va="center", + fontstyle="italic", + fontsize="small", + clip_on="True", + ) # left bound of diffraction region drv = 0.5 graphScale = list(ax.get_ylim()) graphScale[1] = 0.14 * np.pi / drv - x_diff_reg = drv*np.ones_like(graphScale) - ax.plot(x_diff_reg, graphScale, 'k--') - ax.text(2, 6e-2, - 'diffraction', - ha='center', va='center', fontstyle='italic', - fontsize='small',clip_on='True') - + x_diff_reg = drv * np.ones_like(graphScale) + ax.plot(x_diff_reg, graphScale, "k--") + ax.text( + 2, + 6e-2, + "diffraction", + ha="center", + va="center", + fontstyle="italic", + fontsize="small", + clip_on="True", + ) if index > 0: - ax.legend(fontsize='xx-small', ncol=2) + ax.legend(fontsize="xx-small", ncol=2) - ax.set_xlabel('Diffraction parameter, $\\frac{\\pi D}{\\lambda_w}$') - ax.set_ylabel('KC parameter, $\\frac{H}{D}$') + ax.set_xlabel("Diffraction parameter, $\\frac{\\pi D}{\\lambda_w}$") + ax.set_ylabel("KC parameter, $\\frac{H}{D}$") plt.tight_layout() def plot_environmental_contour(x1, x2, x1_contour, x2_contour, **kwargs): - ''' + """ Plots an overlay of the x1 and x2 variables to the calculate environmental contours. - + Parameters ---------- x1: numpy array @@ -339,42 +386,60 @@ def plot_environmental_contour(x1, x2, x1_contour, x2_contour, **kwargs): Default None. markers: string string or list of strings to use as marker types - + Returns ------- ax : matplotlib pyplot axes - ''' - try: x1 = x1.values - except: pass - try: x2 = x2.values - except: pass + """ + try: + x1 = x1.values + except: + pass + try: + x2 = x2.values + except: + pass if not isinstance(x1, np.ndarray): - raise TypeError(f'x1 must be of type np.ndarray. Got: {type(x1)}') + raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") if not isinstance(x2, np.ndarray): - raise TypeError(f'x2 must be of type np.ndarray. Got: {type(x2)}') - if not isinstance(x1_contour, (np.ndarray,list)): - raise TypeError(f'x1_contour must be of type np.ndarray or list. Got: {type(x1_contour)}') - if not isinstance(x2_contour, (np.ndarray,list)): - raise TypeError(f'x2_contour must be of type np.ndarray or list. Got: {type(x2_contour)}') - + raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") + if not isinstance(x1_contour, (np.ndarray, list)): + raise TypeError( + f"x1_contour must be of type np.ndarray or list. Got: {type(x1_contour)}" + ) + if not isinstance(x2_contour, (np.ndarray, list)): + raise TypeError( + f"x2_contour must be of type np.ndarray or list. Got: {type(x2_contour)}" + ) + x_label = kwargs.get("x_label", None) y_label = kwargs.get("y_label", None) data_label = kwargs.get("data_label", None) contour_label = kwargs.get("contour_label", None) ax = kwargs.get("ax", None) - markers = kwargs.get("markers", '-') + markers = kwargs.get("markers", "-") if not isinstance(data_label, (str, type(None))): - raise TypeError(f'If specified, data_label must be of type str. Got: {type(data_label)}') + raise TypeError( + f"If specified, data_label must be of type str. Got: {type(data_label)}" + ) if not isinstance(contour_label, (str, list, type(None))): - raise TypeError(f'If specified, contour_label be of type str. Got: {type(contour_label)}') + raise TypeError( + f"If specified, contour_label be of type str. Got: {type(contour_label)}" + ) if isinstance(markers, str): markers = [markers] - if not isinstance(markers, list) or not all( [isinstance(marker, (str)) for marker in markers] ): - raise TypeError(f'markers must be of type str or list of strings. Got: {markers}') + if not isinstance(markers, list) or not all( + [isinstance(marker, (str)) for marker in markers] + ): + raise TypeError( + f"markers must be of type str or list of strings. Got: {markers}" + ) if not len(x2_contour) == len(x1_contour): - raise ValueError(f'contour must be of equal dimension got {len(x2_contour)} and {len(x1_contour)}') + raise ValueError( + f"contour must be of equal dimension got {len(x2_contour)} and {len(x1_contour)}" + ) if isinstance(x1_contour, np.ndarray): N_contours = 1 @@ -388,27 +453,30 @@ def plot_environmental_contour(x1, x2, x1_contour, x2_contour, **kwargs): contour_label = [contour_label] N_c_labels = len(contour_label) if not N_c_labels == N_contours: - raise ValueError('If specified, the number of contour labels must' - ' be equal to number the number of contour years.' - f' Got: {N_c_labels} and {N_contours}') + raise ValueError( + "If specified, the number of contour labels must" + " be equal to number the number of contour years." + f" Got: {N_c_labels} and {N_contours}" + ) else: contour_label = [None] * N_contours - if len(markers)==1: - markers = markers*N_contours + if len(markers) == 1: + markers = markers * N_contours if not len(markers) == N_contours: - raise ValueError('Markers must be same length as N contours specified.' - f'Got: {len(markers)} and {len(x1_contour)}') + raise ValueError( + "Markers must be same length as N contours specified." + f"Got: {len(markers)} and {len(x1_contour)}" + ) for i in range(N_contours): contour1 = np.array(x1_contour[i]).T contour2 = np.array(x2_contour[i]).T - ax = _xy_plot(contour1, contour2, markers[i], - label=contour_label[i], ax=ax) + ax = _xy_plot(contour1, contour2, markers[i], label=contour_label[i], ax=ax) - plt.plot(x1, x2, 'bo', alpha=0.1, label=data_label) + plt.plot(x1, x2, "bo", alpha=0.1, label=data_label) - plt.legend(loc='lower right') + plt.legend(loc="lower right") plt.xlabel(x_label) plt.ylabel(y_label) plt.tight_layout() @@ -416,16 +484,16 @@ def plot_environmental_contour(x1, x2, x1_contour, x2_contour, **kwargs): def plot_avg_annual_energy_matrix( - Hm0, - Te, - J, - time_index=None, - Hm0_bin_size=None, - Te_bin_size=None, - Hm0_edges=None, - Te_edges=None - ): - ''' + Hm0, + Te, + J, + time_index=None, + Hm0_bin_size=None, + Te_bin_size=None, + Hm0_edges=None, + Te_edges=None, +): + """ Creates an average annual energy matrix with frequency of occurance. Parameters @@ -451,51 +519,53 @@ def plot_avg_annual_energy_matrix( ------- fig: Figure Average annual energy table plot - ''' + """ fig = plt.figure() if isinstance(time_index, type(None)): data = pd.DataFrame(dict(Hm0=Hm0, Te=Te, J=J)) else: - data= pd.DataFrame(dict(Hm0=Hm0, Te=Te, J=J), index=time_index) - years=data.index.year.unique() + data = pd.DataFrame(dict(Hm0=Hm0, Te=Te, J=J), index=time_index) + years = data.index.year.unique() if isinstance(Hm0_edges, type(None)): Hm0_max = data.Hm0.max() - Hm0_edges = np.arange(0,Hm0_max+Hm0_bin_size,Hm0_bin_size) + Hm0_edges = np.arange(0, Hm0_max + Hm0_bin_size, Hm0_bin_size) if isinstance(Te_edges, type(None)): Te_max = data.Te.max() - Te_edges = np.arange(0, Te_max+Te_bin_size,Te_bin_size) + Te_edges = np.arange(0, Te_max + Te_bin_size, Te_bin_size) # Dict for number of hours each sea state occurs - hist_counts={} - hist_J={} + hist_counts = {} + hist_J = {} # Create hist of counts, and weghted by J for each year for year in years: year_data = data.loc[str(year)].copy(deep=True) # Get the counts of each bin - counts, xedges, yedges= np.histogram2d( + counts, xedges, yedges = np.histogram2d( year_data.Te, year_data.Hm0, - bins = (Te_edges,Hm0_edges), + bins=(Te_edges, Hm0_edges), ) # Get centers for number of counts plot location - xcenters = xedges[:-1]+ np.diff(xedges) - ycenters = yedges[:-1]+ np.diff(yedges) + xcenters = xedges[:-1] + np.diff(xedges) + ycenters = yedges[:-1] + np.diff(yedges) - year_data['xbins'] = np.digitize(year_data.Te, xcenters) - year_data['ybins'] = np.digitize(year_data.Hm0, ycenters) + year_data["xbins"] = np.digitize(year_data.Te, xcenters) + year_data["ybins"] = np.digitize(year_data.Hm0, ycenters) total_year_J = year_data.J.sum() - H=counts.copy() + H = counts.copy() for i in range(len(xcenters)): for j in range(len(ycenters)): - bin_J = year_data[(year_data.xbins == i) & (year_data.ybins == j)].J.sum() + bin_J = year_data[ + (year_data.xbins == i) & (year_data.ybins == j) + ].J.sum() H[i][j] = bin_J / total_year_J # Save in results dict @@ -503,38 +573,44 @@ def plot_avg_annual_energy_matrix( hist_J[year] = H # Calculate avg annual - avg_annual_counts_hist = sum(hist_counts.values())/len(years) - avg_annual_J_hist = sum(hist_J.values())/len(years) + avg_annual_counts_hist = sum(hist_counts.values()) / len(years) + avg_annual_J_hist = sum(hist_J.values()) / len(years) # Create a mask of non-zero weights to hide from imshow - Hmasked = np.ma.masked_where(~(avg_annual_J_hist>0),avg_annual_J_hist) - plt.imshow(Hmasked.T, interpolation = 'none', vmin = 0.005, origin='lower', aspect='auto', - extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]]) + Hmasked = np.ma.masked_where(~(avg_annual_J_hist > 0), avg_annual_J_hist) + plt.imshow( + Hmasked.T, + interpolation="none", + vmin=0.005, + origin="lower", + aspect="auto", + extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]], + ) # Plot number of counts as text on the hist of annual avg J for xi in range(len(xcenters)): for yi in range(len(ycenters)): if avg_annual_counts_hist[xi][yi] != 0: plt.text( - xedges[xi], - yedges[yi], - int(np.ceil(avg_annual_counts_hist[xi][yi])), - fontsize=10, - color='white', - path_effects=[pe.withStroke(linewidth=1, foreground="k")] - ) - plt.xlabel('Wave Energy Period (s)') - plt.ylabel('Significant Wave Height (m)') - - cbar=plt.colorbar() - cbar.set_label('Mean Normalized Annual Energy') + xedges[xi], + yedges[yi], + int(np.ceil(avg_annual_counts_hist[xi][yi])), + fontsize=10, + color="white", + path_effects=[pe.withStroke(linewidth=1, foreground="k")], + ) + plt.xlabel("Wave Energy Period (s)") + plt.ylabel("Significant Wave Height (m)") + + cbar = plt.colorbar() + cbar.set_label("Mean Normalized Annual Energy") plt.tight_layout() return fig def monthly_cumulative_distribution(J): - ''' + """ Creates a cumulative distribution of energy flux as described in IEC TS 62600-101. @@ -547,27 +623,33 @@ def monthly_cumulative_distribution(J): ------- ax: axes Figure of monthly cumulative distribution - ''' + """ if not isinstance(J, pd.Series): - raise TypeError(f'J must be of type pd.Series. Got: {type(J)}') + raise TypeError(f"J must be of type pd.Series. Got: {type(J)}") cumSum = {} months = J.index.month.unique() for month in months: - F = exceedance_probability(J[J.index.month==month]) - cumSum[month] = 1-F/100 - cumSum[month].sort_values('F', inplace=True) - plt.figure(figsize=(12,8) ) + F = exceedance_probability(J[J.index.month == month]) + cumSum[month] = 1 - F / 100 + cumSum[month].sort_values("F", inplace=True) + plt.figure(figsize=(12, 8)) for month in months: - plt.semilogx(J.loc[cumSum[month].index], cumSum[month].F, '--', - label=calendar.month_abbr[month]) + plt.semilogx( + J.loc[cumSum[month].index], + cumSum[month].F, + "--", + label=calendar.month_abbr[month], + ) F = exceedance_probability(J) - F.sort_values('F', inplace=True) - ax = plt.semilogx(J.loc[F.index], 1-F['F']/100, 'k-', fillstyle='none', label='All') + F.sort_values("F", inplace=True) + ax = plt.semilogx( + J.loc[F.index], 1 - F["F"] / 100, "k-", fillstyle="none", label="All" + ) plt.grid() - plt.xlabel('Energy Flux') - plt.ylabel('Cumulative Distribution') + plt.xlabel("Energy Flux") + plt.ylabel("Cumulative Distribution") plt.legend() return ax @@ -599,50 +681,50 @@ def plot_compendium(Hs, Tp, Dp, buoy_title=None, ax=None): """ if not isinstance(Hs, pd.Series): - raise TypeError(f'Hs must be of type pd.Series. Got: {type(Hs)}') + raise TypeError(f"Hs must be of type pd.Series. Got: {type(Hs)}") if not isinstance(Tp, pd.Series): - raise TypeError(f'Tp must be of type pd.Series. Got: {type(Tp)}') + raise TypeError(f"Tp must be of type pd.Series. Got: {type(Tp)}") if not isinstance(Dp, pd.Series): - raise TypeError(f'Dp must be of type pd.Series. Got: {type(Dp)}') + raise TypeError(f"Dp must be of type pd.Series. Got: {type(Dp)}") if not isinstance(buoy_title, (str, type(None))): - raise TypeError(f'If specified, buoy_title must be of type string. Got: {type(buoy_title)}') + raise TypeError( + f"If specified, buoy_title must be of type string. Got: {type(buoy_title)}" + ) - f, (pHs, pTp, pDp) = plt.subplots(3, 1, sharex=True, figsize=(15,10)) + f, (pHs, pTp, pDp) = plt.subplots(3, 1, sharex=True, figsize=(15, 10)) - pHs.plot(Hs.index,Hs,'b') - pTp.plot(Tp.index,Tp,'b') - pDp.scatter(Dp.index,Dp,color='blue',s=5) + pHs.plot(Hs.index, Hs, "b") + pTp.plot(Tp.index, Tp, "b") + pDp.scatter(Dp.index, Dp, color="blue", s=5) - pHs.tick_params(axis='x', which='major', labelsize=12, top='off') - pHs.set_ylim(0,8) - pHs.tick_params(axis='y', which='major', labelsize=12, right='off') - pHs.set_ylabel('Hs [m]', fontsize=18) - pHs.grid(color='b', linestyle='--') + pHs.tick_params(axis="x", which="major", labelsize=12, top="off") + pHs.set_ylim(0, 8) + pHs.tick_params(axis="y", which="major", labelsize=12, right="off") + pHs.set_ylabel("Hs [m]", fontsize=18) + pHs.grid(color="b", linestyle="--") pHs2 = pHs.twinx() - pHs2.set_ylim(0,25) - pHs2.set_ylabel('Hs [ft]', fontsize=18) - + pHs2.set_ylim(0, 25) + pHs2.set_ylabel("Hs [ft]", fontsize=18) # Peak Period, Tp - pTp.set_ylim(0,28) - pTp.set_ylabel('Tp [s]', fontsize=18) - pTp.grid(color='b', linestyle='--') - + pTp.set_ylim(0, 28) + pTp.set_ylabel("Tp [s]", fontsize=18) + pTp.grid(color="b", linestyle="--") # Direction, Dp - pDp.set_ylim(0,360) - pDp.set_ylabel('Dp [deg]', fontsize=18) - pDp.grid(color='b', linestyle='--') - pDp.set_xlabel('Day', fontsize=18) + pDp.set_ylim(0, 360) + pDp.set_ylabel("Dp [deg]", fontsize=18) + pDp.grid(color="b", linestyle="--") + pDp.set_xlabel("Day", fontsize=18) # Set x-axis tick interval to every 5 days degrees = 70 days = matplotlib.dates.DayLocator(interval=5) - daysFmt = matplotlib.dates.DateFormatter('%Y-%m-%d') + daysFmt = matplotlib.dates.DateFormatter("%Y-%m-%d") plt.gca().xaxis.set_major_locator(days) plt.gca().xaxis.set_major_formatter(daysFmt) - plt.setp( pDp.xaxis.get_majorticklabels(), rotation=degrees ) + plt.setp(pDp.xaxis.get_majorticklabels(), rotation=degrees) # Set Titles month_name_start = Hs.index.month_name()[0][:3] @@ -651,7 +733,7 @@ def plot_compendium(Hs, Tp, Dp, buoy_title=None, ax=None): year_end = Hs.index.year[-1] plt.suptitle(buoy_title, fontsize=30) - plt.title(f'{Hs.index[0].date()} to {Hs.index[-1].date()}', fontsize=20) + plt.title(f"{Hs.index[0].date()} to {Hs.index[-1].date()}", fontsize=20) ax = f @@ -679,67 +761,80 @@ def plot_boxplot(Hs, buoy_title=None): ax : matplotlib pyplot axes """ if not isinstance(Hs, pd.Series): - raise TypeError(f'Hs must be of type pd.Series. Got: {type(Hs)}') + raise TypeError(f"Hs must be of type pd.Series. Got: {type(Hs)}") if not isinstance(buoy_title, (str, type(None))): - raise TypeError(f'If specified, buoy_title must be of type string. Got: {type(buoy_title)}') + raise TypeError( + f"If specified, buoy_title must be of type string. Got: {type(buoy_title)}" + ) months = Hs.index.month means = Hs.groupby(months).mean() monthlengths = Hs.groupby(months).count() - fig = plt.figure(figsize=(10,12)) - gs = gridspec.GridSpec(2,1, height_ratios=[4,1]) + fig = plt.figure(figsize=(10, 12)) + gs = gridspec.GridSpec(2, 1, height_ratios=[4, 1]) - boxprops = dict(color='k') - whiskerprops = dict(linestyle='--', color='k') - flierprops = dict(marker='+', color='r',markeredgecolor='r',markerfacecolor='r') - medianprops = dict(linewidth=2.5,color='firebrick') - meanprops = dict(linewidth=2.5, marker='_', markersize=25) + boxprops = dict(color="k") + whiskerprops = dict(linestyle="--", color="k") + flierprops = dict(marker="+", color="r", markeredgecolor="r", markerfacecolor="r") + medianprops = dict(linewidth=2.5, color="firebrick") + meanprops = dict(linewidth=2.5, marker="_", markersize=25) - bp = plt.subplot(gs[0,:]) + bp = plt.subplot(gs[0, :]) Hs_months = Hs.to_frame().groupby(months) - bp = Hs_months.boxplot(subplots=False, boxprops=boxprops, - whiskerprops=whiskerprops, flierprops=flierprops, - medianprops=medianprops, showmeans=True, meanprops=meanprops) + bp = Hs_months.boxplot( + subplots=False, + boxprops=boxprops, + whiskerprops=whiskerprops, + flierprops=flierprops, + medianprops=medianprops, + showmeans=True, + meanprops=meanprops, + ) # Add values of monthly means as text for i, mean in enumerate(means): - bp.annotate(np.round(mean,2), (means.index[i],mean),fontsize=12, - horizontalalignment='center',verticalalignment='bottom', - color='g') + bp.annotate( + np.round(mean, 2), + (means.index[i], mean), + fontsize=12, + horizontalalignment="center", + verticalalignment="bottom", + color="g", + ) # Create a second row of x-axis labels for top subplot newax = bp.twiny() - newax.tick_params(which='major', direction='in', pad=-18) + newax.tick_params(which="major", direction="in", pad=-18) newax.set_xlim(bp.get_xlim()) - newax.xaxis.set_ticks_position('top') - newax.xaxis.set_label_position('top') - newax.set_xticks(np.arange(1,13,1)) - newax.set_xticklabels(monthlengths,fontsize=10) - + newax.xaxis.set_ticks_position("top") + newax.xaxis.set_label_position("top") + newax.set_xticks(np.arange(1, 13, 1)) + newax.set_xticklabels(monthlengths, fontsize=10) # Sample 'legend' boxplot, to go underneath actual boxplot - bp_sample2 = np.random.normal(2.5,0.5,500) - bp2 = plt.subplot(gs[1,:]) - meanprops = dict(linewidth=2.5, marker='|', markersize=25) - bp2_example = bp2.boxplot(bp_sample2,vert=False,flierprops=flierprops, - medianprops=medianprops) - sample_mean=2.3 - bp2.scatter(sample_mean,1,marker="|",color='g',linewidths=1.0,s=200) - - for line in bp2_example['medians']: + bp_sample2 = np.random.normal(2.5, 0.5, 500) + bp2 = plt.subplot(gs[1, :]) + meanprops = dict(linewidth=2.5, marker="|", markersize=25) + bp2_example = bp2.boxplot( + bp_sample2, vert=False, flierprops=flierprops, medianprops=medianprops + ) + sample_mean = 2.3 + bp2.scatter(sample_mean, 1, marker="|", color="g", linewidths=1.0, s=200) + + for line in bp2_example["medians"]: xm, ym = line.get_xydata()[0] - for line in bp2_example['boxes']: + for line in bp2_example["boxes"]: xb, yb = line.get_xydata()[0] - for line in bp2_example['whiskers']: + for line in bp2_example["whiskers"]: xw, yw = line.get_xydata()[0] - bp2.annotate("Median",[xm-0.1,ym-0.3*ym],fontsize=10,color='firebrick') - bp2.annotate("Mean",[sample_mean-0.1,0.65],fontsize=10,color='g') - bp2.annotate("25%ile",[xb-0.05*xb,yb-0.15*yb],fontsize=10) - bp2.annotate("75%ile",[xb+0.26*xb,yb-0.15*yb],fontsize=10) - bp2.annotate("Outliers",[xw+0.3*xw,yw-0.3*yw],fontsize=10,color='r') + bp2.annotate("Median", [xm - 0.1, ym - 0.3 * ym], fontsize=10, color="firebrick") + bp2.annotate("Mean", [sample_mean - 0.1, 0.65], fontsize=10, color="g") + bp2.annotate("25%ile", [xb - 0.05 * xb, yb - 0.15 * yb], fontsize=10) + bp2.annotate("75%ile", [xb + 0.26 * xb, yb - 0.15 * yb], fontsize=10) + bp2.annotate("Outliers", [xw + 0.3 * xw, yw - 0.3 * yw], fontsize=10, color="r") if buoy_title: plt.suptitle(buoy_title, fontsize=30, y=0.97) @@ -747,14 +842,14 @@ def plot_boxplot(Hs, buoy_title=None): bp2.set_title("Sample Boxplot", fontsize=10, y=1.02) # Set axes labels and ticks - months_text = [ m[:3] for m in Hs.index.month_name().unique()] - bp.set_xticklabels(months_text,fontsize=12) - bp.set_ylabel('Significant Wave Height, Hs (m)', fontsize=14) - bp.tick_params(axis='y', which='major', labelsize=12, right='off') - bp.tick_params(axis='x', which='major', labelsize=12, top='off') + months_text = [m[:3] for m in Hs.index.month_name().unique()] + bp.set_xticklabels(months_text, fontsize=12) + bp.set_ylabel("Significant Wave Height, Hs (m)", fontsize=14) + bp.tick_params(axis="y", which="major", labelsize=12, right="off") + bp.tick_params(axis="x", which="major", labelsize=12, top="off") # Plot horizontal gridlines onto top subplot - bp.grid(axis='x', color='b', linestyle='-', alpha=0.25) + bp.grid(axis="x", color="b", linestyle="-", alpha=0.25) # Remove tickmarks from bottom subplot bp2.axes.get_xaxis().set_visible(False) @@ -766,13 +861,13 @@ def plot_boxplot(Hs, buoy_title=None): def plot_directional_spectrum( - spectrum, - color_level_min=None, - fill=True, - nlevels=11, - name="Elevation Variance", - units="m^2" - ): + spectrum, + color_level_min=None, + fill=True, + nlevels=11, + name="Elevation Variance", + units="m^2", +): """ Create a contour polar plot of a directional spectrum. @@ -796,31 +891,37 @@ def plot_directional_spectrum( ax : matplotlib pyplot axes """ if not isinstance(spectrum, xr.DataArray): - raise TypeError(f'spectrum must be of type xr.DataArray. Got: {type(spectrum)}') + raise TypeError(f"spectrum must be of type xr.DataArray. Got: {type(spectrum)}") if not isinstance(color_level_min, (type(None), float)): - raise TypeError(f'If specified, color_level_min must be of type float. Got: {type(color_level_min)}') + raise TypeError( + f"If specified, color_level_min must be of type float. Got: {type(color_level_min)}" + ) if not isinstance(fill, bool): - raise TypeError(f'If specified, fill must be of type bool. Got: {type(fill)}') + raise TypeError(f"If specified, fill must be of type bool. Got: {type(fill)}") if not isinstance(nlevels, int): - raise TypeError(f'If specified, nlevels must be of type int. Got: {type(nlevels)}') + raise TypeError( + f"If specified, nlevels must be of type int. Got: {type(nlevels)}" + ) if not isinstance(name, str): - raise TypeError(f'If specified, name must be of type string. Got: {type(name)}') + raise TypeError(f"If specified, name must be of type string. Got: {type(name)}") if not isinstance(units, str): - raise TypeError(f'If specified, units must be of type string. Got: {type(units)}') + raise TypeError( + f"If specified, units must be of type string. Got: {type(units)}" + ) - a,f = np.meshgrid(np.deg2rad(spectrum.direction), spectrum.frequency) - _, ax = plt.subplots(subplot_kw=dict(projection='polar')) - tmp = np.floor(np.min(spectrum.data)*10)/10 + a, f = np.meshgrid(np.deg2rad(spectrum.direction), spectrum.frequency) + _, ax = plt.subplots(subplot_kw=dict(projection="polar")) + tmp = np.floor(np.min(spectrum.data) * 10) / 10 color_level_min = tmp if (color_level_min is None) else color_level_min - color_level_max = np.ceil(np.max(spectrum.data)*10)/10 + color_level_max = np.ceil(np.max(spectrum.data) * 10) / 10 levels = np.linspace(color_level_min, color_level_max, nlevels) if fill: c = ax.contourf(a, f, spectrum, levels=levels) else: c = ax.contour(a, f, spectrum, levels=levels) cbar = plt.colorbar(c) - cbar.set_label(f'Spectrum [{units}/Hz/deg]', rotation=270, labelpad=20) - ax.set_title(f'{name} Spectrum') + cbar.set_label(f"Spectrum [{units}/Hz/deg]", rotation=270, labelpad=20) + ax.set_title(f"{name} Spectrum") ylabels = ax.get_yticklabels() ylabels = [ilabel.get_text() for ilabel in ax.get_yticklabels()] ylabels = [ilabel + "Hz" for ilabel in ylabels] diff --git a/mhkit/wave/io/__init__.py b/mhkit/wave/io/__init__.py index f6ad3f71f..2e966e752 100644 --- a/mhkit/wave/io/__init__.py +++ b/mhkit/wave/io/__init__.py @@ -2,4 +2,4 @@ from mhkit.wave.io import wecsim from mhkit.wave.io import cdip from mhkit.wave.io import swan -from mhkit.wave.io import hindcast \ No newline at end of file +from mhkit.wave.io import hindcast diff --git a/mhkit/wave/io/cdip.py b/mhkit/wave/io/cdip.py index 6062a2335..a600926c5 100644 --- a/mhkit/wave/io/cdip.py +++ b/mhkit/wave/io/cdip.py @@ -8,7 +8,7 @@ def _validate_date(date_text): - ''' + """ Checks date format to ensure YYYY-MM-DD format and return date in datetime format. @@ -20,13 +20,13 @@ def _validate_date(date_text): Returns ------- dt: datetime - ''' + """ if not isinstance(date_text, str): - raise ValueError('date_text must be of type string. Got: {date_text}') + raise ValueError("date_text must be of type string. Got: {date_text}") try: - dt = datetime.datetime.strptime(date_text, '%Y-%m-%d') + dt = datetime.datetime.strptime(date_text, "%Y-%m-%d") except ValueError: raise ValueError("Incorrect data format, should be YYYY-MM-DD") else: @@ -36,7 +36,7 @@ def _validate_date(date_text): def _start_and_end_of_year(year): - ''' + """ Returns a datetime start and end for a given year Parameters @@ -49,58 +49,57 @@ def _start_and_end_of_year(year): start_year: datetime object start of the year end_year: datetime object - end of the year - ''' + end of the year + """ if not isinstance(year, (type(None), int, list)): - raise ValueError( - 'year must be of type int, list, or None. Got: {type(year)}') + raise ValueError("year must be of type int, list, or None. Got: {type(year)}") try: year = str(year) - start_year = datetime.datetime.strptime(year, '%Y') + start_year = datetime.datetime.strptime(year, "%Y") except ValueError as exc: raise ValueError("Incorrect years format, should be YYYY") from exc else: - next_year = datetime.datetime.strptime(f'{int(year)+1}', '%Y') + next_year = datetime.datetime.strptime(f"{int(year)+1}", "%Y") end_year = next_year - datetime.timedelta(days=1) return start_year, end_year def _dates_to_timestamp(nc, start_date=None, end_date=None): - ''' - Returns timestamps from dates. + """ + Returns timestamps from dates. Parameters ---------- nc: netCDF Object - netCDF data for the given station number and data type - start_date: string + netCDF data for the given station number and data type + start_date: string Start date in YYYY-MM-DD, e.g. '2012-04-01' - end_date: string - End date in YYYY-MM-DD, e.g. '2012-04-30' + end_date: string + End date in YYYY-MM-DD, e.g. '2012-04-30' Returns ------- start_stamp: float - seconds since the Epoch to start_date + seconds since the Epoch to start_date end_stamp: float seconds since the Epoch to end_date - ''' + """ if start_date and not isinstance(start_date, datetime.datetime): raise ValueError( - f'start_date must be of type datetime.datetime or None. Got: {type(start_date)}') + f"start_date must be of type datetime.datetime or None. Got: {type(start_date)}" + ) if end_date and not isinstance(end_date, datetime.datetime): raise ValueError( - f'end_date must be of type datetime.datetime or None. Got: {type(end_date)}') + f"end_date must be of type datetime.datetime or None. Got: {type(end_date)}" + ) - time_all = nc.variables['waveTime'][:].compressed() - t_i = (datetime.datetime.fromtimestamp(time_all[0]) - .astimezone(pytz.timezone('UTC'))) - t_f = (datetime.datetime.fromtimestamp(time_all[-1]) - .astimezone(pytz.timezone('UTC'))) + time_all = nc.variables["waveTime"][:].compressed() + t_i = datetime.datetime.fromtimestamp(time_all[0]).astimezone(pytz.timezone("UTC")) + t_f = datetime.datetime.fromtimestamp(time_all[-1]).astimezone(pytz.timezone("UTC")) time_range_all = [t_i, t_f] if start_date: @@ -108,10 +107,12 @@ def _dates_to_timestamp(nc, start_date=None, end_date=None): if start_date > time_range_all[0] and start_date < time_range_all[1]: start_stamp = start_date.timestamp() else: - print(f'WARNING: Provided start_date ({start_date}) is ' - f'not in the returned data range {time_range_all} \n' - f'Setting start_date to the earliest date in range ' - f'{time_range_all[0]}') + print( + f"WARNING: Provided start_date ({start_date}) is " + f"not in the returned data range {time_range_all} \n" + f"Setting start_date to the earliest date in range " + f"{time_range_all[0]}" + ) start_stamp = time_range_all[0].timestamp() if end_date: @@ -119,10 +120,12 @@ def _dates_to_timestamp(nc, start_date=None, end_date=None): if end_date > time_range_all[0] and end_date < time_range_all[1]: end_stamp = end_date.timestamp() else: - print(f'WARNING: Provided end_date ({end_date}) is ' - f'not in the returned data range {time_range_all} \n' - f'Setting end_date to the latest date in range ' - f'{time_range_all[1]}') + print( + f"WARNING: Provided end_date ({end_date}) is " + f"not in the returned data range {time_range_all} \n" + f"Setting end_date to the latest date in range " + f"{time_range_all[1]}" + ) end_stamp = time_range_all[1].timestamp() if start_date and not end_date: @@ -140,7 +143,7 @@ def _dates_to_timestamp(nc, start_date=None, end_date=None): def request_netCDF(station_number, data_type): - ''' + """ Returns historic or realtime data from CDIP THREDDS server Parameters @@ -154,218 +157,235 @@ def request_netCDF(station_number, data_type): ------- nc: xarray Dataset netCDF data for the given station number and data type - ''' + """ if not isinstance(station_number, (str, type(None))): raise ValueError( - f'station_number must be of type string. Got: {type(station_number)}') + f"station_number must be of type string. Got: {type(station_number)}" + ) if not isinstance(data_type, str): - raise ValueError( - f'data_type must be of type string. Got: {type(data_type)}') + raise ValueError(f"data_type must be of type string. Got: {type(data_type)}") - if data_type not in ['historic', 'realtime']: - raise ValueError( - 'data_type must be "historic" or "realtime". Got: {data_type}') + if data_type not in ["historic", "realtime"]: + raise ValueError('data_type must be "historic" or "realtime". Got: {data_type}') - BASE_URL = 'http://thredds.cdip.ucsd.edu/thredds/dodsC/cdip/' + BASE_URL = "http://thredds.cdip.ucsd.edu/thredds/dodsC/cdip/" - if data_type == 'historic': - data_url = f'{BASE_URL}archive/{station_number}p1/{station_number}p1_historic.nc' + if data_type == "historic": + data_url = ( + f"{BASE_URL}archive/{station_number}p1/{station_number}p1_historic.nc" + ) else: # data_type == 'realtime' - data_url = f'{BASE_URL}realtime/{station_number}p1_rt.nc' + data_url = f"{BASE_URL}realtime/{station_number}p1_rt.nc" nc = netCDF4.Dataset(data_url) return nc -def request_parse_workflow(nc=None, station_number=None, parameters=None, - years=None, start_date=None, end_date=None, - data_type='historic', all_2D_variables=False, - silent=False): - ''' - Parses a passed CDIP netCDF file or requests a station number - from http://cdip.ucsd.edu/) and parses. This function can return specific +def request_parse_workflow( + nc=None, + station_number=None, + parameters=None, + years=None, + start_date=None, + end_date=None, + data_type="historic", + all_2D_variables=False, + silent=False, +): + """ + Parses a passed CDIP netCDF file or requests a station number + from http://cdip.ucsd.edu/) and parses. This function can return specific parameters is passed. Years may be non-consecutive e.g. [2001, 2010]. Time may be sliced by dates (start_date or end date in YYYY-MM-DD). data_type defaults to historic but may also be set to 'realtime'. By default 2D variables are not parsed if all 2D varaibles are needed. See - the MHKiT CDiP example Jupyter notbook for information on available parameters. + the MHKiT CDiP example Jupyter notbook for information on available parameters. Parameters ---------- nc: netCDF Object - netCDF data for the given station number and data type. Can be the output of - request_netCDF + netCDF data for the given station number and data type. Can be the output of + request_netCDF station_number: string Station number of CDIP wave buoy parameters: string or list of strings Parameters to return. If None will return all varaibles except - 2D-variables. + 2D-variables. years: int or list of int - Year date, e.g. 2001 or [2001, 2010] - start_date: string + Year date, e.g. 2001 or [2001, 2010] + start_date: string Start date in YYYY-MM-DD, e.g. '2012-04-01' - end_date: string + end_date: string End date in YYYY-MM-DD, e.g. '2012-04-30' data_type: string - Either 'historic' or 'realtime' + Either 'historic' or 'realtime' all_2D_variables: boolean - Will return all 2D data. Enabling this will add significant + Will return all 2D data. Enabling this will add significant processing time. If all 2D variables are not needed it is - recomended to pass 2D parameters of interest using the + recomended to pass 2D parameters of interest using the 'parameters' keyword and leave this set to False. Default False. silent: boolean - Set to True to prevent the print statement that announces when 2D + Set to True to prevent the print statement that announces when 2D variable processing begins. Default False. Returns ------- data: dictionary 'vars1D': DataFrame - 1D variables indexed by time + 1D variables indexed by time 'metadata': dictionary Anything not of length time 'vars2D': dictionary of DataFrames, optional - If 2D-vars are passed in the 'parameters key' or if run - with all_2D_variables=True, then this key will appear - with a dictonary of DataFrames of 2D variables. - ''' + If 2D-vars are passed in the 'parameters key' or if run + with all_2D_variables=True, then this key will appear + with a dictonary of DataFrames of 2D variables. + """ if not isinstance(station_number, (str, type(None))): raise ValueError( - f'station_number must be of type string. Got: {station_number}') + f"station_number must be of type string. Got: {station_number}" + ) if not isinstance(parameters, (str, type(None), list)): raise ValueError( - 'parameters must be of type str or list of strings. Got: {parameters}') + "parameters must be of type str or list of strings. Got: {parameters}" + ) if start_date is not None: if isinstance(start_date, str): try: start_date = datetime.datetime.strptime( - start_date, "%Y-%m-%d", tzinfo=pytz.UTC) + start_date, "%Y-%m-%d", tzinfo=pytz.UTC + ) except ValueError as exc: - raise ValueError( - "Incorrect data format, should be YYYY-MM-DD") from exc + raise ValueError("Incorrect data format, should be YYYY-MM-DD") from exc else: - raise ValueError( - 'start_date must be of type str. Got: {start_date}') + raise ValueError("start_date must be of type str. Got: {start_date}") if end_date is not None: if isinstance(end_date, str): try: end_date = datetime.datetime.strptime( - end_date, "%Y-%m-%d", tzinfo=pytz.UTC) + end_date, "%Y-%m-%d", tzinfo=pytz.UTC + ) except ValueError as exc: - raise ValueError( - "Incorrect data format, should be YYYY-MM-DD") from exc + raise ValueError("Incorrect data format, should be YYYY-MM-DD") from exc else: - raise ValueError('end_date must be of type str. Got: {end_date}') + raise ValueError("end_date must be of type str. Got: {end_date}") if not isinstance(years, (type(None), int, list)): - raise ValueError( - 'years must be of type int or list of ints. Got: {years}') + raise ValueError("years must be of type int or list of ints. Got: {years}") if not isinstance(data_type, str): - raise ValueError('data_type must be of type string. Got: {data_type}') + raise ValueError("data_type must be of type string. Got: {data_type}") - if data_type not in ['historic', 'realtime']: - raise ValueError( - 'data_type must be "historic" or "realtime". Got: {data_type}') + if data_type not in ["historic", "realtime"]: + raise ValueError('data_type must be "historic" or "realtime". Got: {data_type}') if not any([nc, station_number]): - raise ValueError( - 'Must provide either a CDIP netCDF file or a station number.') + raise ValueError("Must provide either a CDIP netCDF file or a station number.") if not nc: nc = request_netCDF(station_number, data_type) # Define the path to the cache directory - cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "cdip") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "cdip") - buoy_name = nc.variables['metaStationName'][:].compressed( - ).tobytes().decode("utf-8") + buoy_name = ( + nc.variables["metaStationName"][:].compressed().tobytes().decode("utf-8") + ) multiyear = False if years: if isinstance(years, int): start_date = datetime.datetime(years, 1, 1, tzinfo=pytz.UTC) - end_date = datetime.datetime(years+1, 1, 1, tzinfo=pytz.UTC) + end_date = datetime.datetime(years + 1, 1, 1, tzinfo=pytz.UTC) elif isinstance(years, list): if len(years) == 1: start_date = datetime.datetime(years[0], 1, 1, tzinfo=pytz.UTC) - end_date = datetime.datetime(years[0]+1, 1, 1, tzinfo=pytz.UTC) + end_date = datetime.datetime(years[0] + 1, 1, 1, tzinfo=pytz.UTC) else: multiyear = True if not multiyear: # Check the cache first - hash_params = f'{station_number}-{parameters}-{start_date}-{end_date}' + hash_params = f"{station_number}-{parameters}-{start_date}-{end_date}" data = handle_caching(hash_params, cache_dir) if data[:2] == (None, None): - data = get_netcdf_variables(nc, - start_date=start_date, end_date=end_date, - parameters=parameters, - all_2D_variables=all_2D_variables, - silent=silent) + data = get_netcdf_variables( + nc, + start_date=start_date, + end_date=end_date, + parameters=parameters, + all_2D_variables=all_2D_variables, + silent=silent, + ) handle_caching(hash_params, cache_dir, data=data) else: data = data[0] else: - data = {'data': {}, 'metadata': {}} + data = {"data": {}, "metadata": {}} multiyear_data = {} for year in years: start_date = datetime.datetime(year, 1, 1, tzinfo=pytz.UTC) - end_date = datetime.datetime(year+1, 1, 1, tzinfo=pytz.UTC) + end_date = datetime.datetime(year + 1, 1, 1, tzinfo=pytz.UTC) # Check the cache for each individual year - hash_params = f'{station_number}-{parameters}-{start_date}-{end_date}' + hash_params = f"{station_number}-{parameters}-{start_date}-{end_date}" year_data = handle_caching(hash_params, cache_dir) if year_data[:2] == (None, None): - year_data = get_netcdf_variables(nc, - start_date=start_date, end_date=end_date, - parameters=parameters, - all_2D_variables=all_2D_variables, - silent=silent) + year_data = get_netcdf_variables( + nc, + start_date=start_date, + end_date=end_date, + parameters=parameters, + all_2D_variables=all_2D_variables, + silent=silent, + ) # Cache the individual year's data handle_caching(hash_params, cache_dir, data=year_data) else: year_data = year_data[0] - multiyear_data[year] = year_data['data'] + multiyear_data[year] = year_data["data"] - for data_key in year_data['data'].keys(): - if data_key.endswith('2D'): - data['data'][data_key] = {} - for data_key2D in year_data['data'][data_key].keys(): + for data_key in year_data["data"].keys(): + if data_key.endswith("2D"): + data["data"][data_key] = {} + for data_key2D in year_data["data"][data_key].keys(): data_list = [] for year in years: data2D = multiyear_data[year][data_key][data_key2D] data_list.append(data2D) - data['data'][data_key][data_key2D] = pd.concat(data_list) + data["data"][data_key][data_key2D] = pd.concat(data_list) else: data_list = [multiyear_data[year][data_key] for year in years] - data['data'][data_key] = pd.concat(data_list) + data["data"][data_key] = pd.concat(data_list) if buoy_name: try: - data.setdefault('metadata', {})['name'] = buoy_name + data.setdefault("metadata", {})["name"] = buoy_name except: pass return data -def get_netcdf_variables(nc, start_date=None, end_date=None, - parameters=None, all_2D_variables=False, - silent=False): - ''' +def get_netcdf_variables( + nc, + start_date=None, + end_date=None, + parameters=None, + all_2D_variables=False, + silent=False, +): + """ Iterates over and extracts variables from CDIP bouy data. See - the MHKiT CDiP example Jupyter notbook for information on available - parameters. + the MHKiT CDiP example Jupyter notbook for information on available + parameters. Parameters ---------- @@ -374,34 +394,34 @@ def get_netcdf_variables(nc, start_date=None, end_date=None, start_stamp: float Data of interest start in seconds since epoch end_stamp: float - Data of interest end in seconds since epoch + Data of interest end in seconds since epoch parameters: string or list of strings Parameters to return. If None will return all varaibles except 2D-variables. Default None. all_2D_variables: boolean - Will return all 2D data. Enabling this will add significant + Will return all 2D data. Enabling this will add significant processing time. If all 2D variables are not needed it is - recomended to pass 2D parameters of interest using the + recomended to pass 2D parameters of interest using the 'parameters' keyword and leave this set to False. Default False. silent: boolean - Set to True to prevent the print statement that announces when 2D + Set to True to prevent the print statement that announces when 2D variable processing begins. Default False. Returns ------- results: dictionary 'vars1D': DataFrame - 1D variables indexed by time + 1D variables indexed by time 'metadata': dictionary Anything not of length time 'vars2D': dictionary of DataFrames, optional - If 2D-vars are passed in the 'parameters key' or if run - with all_2D_variables=True, then this key will appear + If 2D-vars are passed in the 'parameters key' or if run + with all_2D_variables=True, then this key will appear with a dictonary of DataFrames of 2D variables. - ''' + """ if not isinstance(nc, netCDF4.Dataset): - raise ValueError('nc must be netCDF4 dataset. Got: {nc}') + raise ValueError("nc must be netCDF4 dataset. Got: {nc}") if start_date and isinstance(start_date, str): start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d") @@ -411,29 +431,38 @@ def get_netcdf_variables(nc, start_date=None, end_date=None, if not isinstance(parameters, (str, type(None), list)): raise ValueError( - 'parameters must be of type str or list of strings. Got: {parameters}') + "parameters must be of type str or list of strings. Got: {parameters}" + ) if not isinstance(all_2D_variables, bool): - raise ValueError( - 'all_2D_variables must be a boolean. Got: {all_2D_variables}') + raise ValueError("all_2D_variables must be a boolean. Got: {all_2D_variables}") if parameters: if isinstance(parameters, str): parameters = [parameters] for param in parameters: if not isinstance(param, str): - raise ValueError('All elements of parameters must be strings.') + raise ValueError("All elements of parameters must be strings.") - buoy_name = nc.variables['metaStationName'][:].compressed( - ).tobytes().decode("utf-8") + buoy_name = ( + nc.variables["metaStationName"][:].compressed().tobytes().decode("utf-8") + ) allVariables = [var for var in nc.variables] allVariableSet = set(allVariables) - twoDimensionalVars = ['waveEnergyDensity', 'waveMeanDirection', - 'waveA1Value', 'waveB1Value', 'waveA2Value', - 'waveB2Value', 'waveCheckFactor', 'waveSpread', - 'waveM2Value', 'waveN2Value'] + twoDimensionalVars = [ + "waveEnergyDensity", + "waveMeanDirection", + "waveA1Value", + "waveB1Value", + "waveA2Value", + "waveB2Value", + "waveCheckFactor", + "waveSpread", + "waveM2Value", + "waveN2Value", + ] twoDimensionalVarsSet = set(twoDimensionalVars) # If parameters are provided, convert them into a set @@ -449,15 +478,17 @@ def get_netcdf_variables(nc, start_date=None, end_date=None, include_params = params & allVariableSet if params != include_params: not_found = params - include_params - print(f'WARNING: {not_found} was not found in data.\n' - f'Possible parameters are:\n {allVariables}') + print( + f"WARNING: {not_found} was not found in data.\n" + f"Possible parameters are:\n {allVariables}" + ) include_params_2D = include_params & twoDimensionalVarsSet include_params -= include_params_2D include_2D_variables = bool(include_params_2D) if include_2D_variables: - include_params.add('waveFrequency') + include_params.add("waveFrequency") include_vars = include_params @@ -466,24 +497,27 @@ def get_netcdf_variables(nc, start_date=None, end_date=None, include_vars = allVariableSet - twoDimensionalVarsSet start_stamp, end_stamp = _dates_to_timestamp( - nc, start_date=start_date, end_date=end_date) - - prefixs = ['wave', 'sst', 'gps', 'dwr', 'meta'] - variables_by_type = {prefix: [ - var for var in include_vars if var.startswith(prefix)] for prefix in prefixs} - variables_by_type = {prefix: vars for prefix, - vars in variables_by_type.items() if vars} - - results = {'data': {}, 'metadata': {}} + nc, start_date=start_date, end_date=end_date + ) + + prefixs = ["wave", "sst", "gps", "dwr", "meta"] + variables_by_type = { + prefix: [var for var in include_vars if var.startswith(prefix)] + for prefix in prefixs + } + variables_by_type = { + prefix: vars for prefix, vars in variables_by_type.items() if vars + } + + results = {"data": {}, "metadata": {}} for prefix in variables_by_type: time_variables = {} metadata = {} - if prefix != 'meta': - prefixTime = nc.variables[f'{prefix}Time'][:] + if prefix != "meta": + prefixTime = nc.variables[f"{prefix}Time"][:] - masked_time = np.ma.masked_outside( - prefixTime, start_stamp, end_stamp) + masked_time = np.ma.masked_outside(prefixTime, start_stamp, end_stamp) mask = masked_time.mask var_time = masked_time.compressed() N_time = masked_time.size @@ -496,20 +530,19 @@ def get_netcdf_variables(nc, start_date=None, end_date=None, else: metadata[var] = nc.variables[var][:].compressed() - time_slice = pd.to_datetime(var_time, unit='s') + time_slice = pd.to_datetime(var_time, unit="s") data = pd.DataFrame(time_variables, index=time_slice) - results['data'][prefix] = data - results['data'][prefix].name = buoy_name - - results['metadata'][prefix] = metadata + results["data"][prefix] = data + results["data"][prefix].name = buoy_name - if (prefix == 'wave') and (include_2D_variables): + results["metadata"][prefix] = metadata + if (prefix == "wave") and (include_2D_variables): if not silent: - print('Processing 2D Variables:') - + print("Processing 2D Variables:") + vars2D = {} - columns = metadata['waveFrequency'] + columns = metadata["waveFrequency"] N_time = len(time_slice) N_frequency = len(columns) try: @@ -522,11 +555,10 @@ def get_netcdf_variables(nc, start_date=None, end_date=None, variable2D = nc.variables[var][:].data variable2D = np.ma.masked_array(variable2D, mask2D) variable2D = variable2D.compressed().reshape(N_time, N_frequency) - variable = pd.DataFrame( - variable2D, index=time_slice, columns=columns) + variable = pd.DataFrame(variable2D, index=time_slice, columns=columns) vars2D[var] = variable - results['data']['wave2D'] = vars2D - results['metadata']['name'] = buoy_name + results["data"]["wave2D"] = vars2D + results["metadata"]["name"] = buoy_name return results @@ -557,10 +589,13 @@ def _process_multiyear_data(nc, years, parameters, all_2D_variables): start_date = datetime.datetime(year, 1, 1) end_date = datetime.datetime(year + 1, 1, 1) - year_data = get_netcdf_variables(nc, - start_date=start_date, end_date=end_date, - parameters=parameters, - all_2D_variables=all_2D_variables) + year_data = get_netcdf_variables( + nc, + start_date=start_date, + end_date=end_date, + parameters=parameters, + all_2D_variables=all_2D_variables, + ) data[year] = year_data return data diff --git a/mhkit/wave/io/hindcast/__init__.py b/mhkit/wave/io/hindcast/__init__.py index 5d6507b9e..2e6057131 100644 --- a/mhkit/wave/io/hindcast/__init__.py +++ b/mhkit/wave/io/hindcast/__init__.py @@ -1,8 +1,11 @@ from mhkit.wave.io.hindcast import wind_toolkit + try: from mhkit.wave.io.hindcast import hindcast except ImportError: - print("WARNING: Wave WPTO hindcast functions not imported from" - "MHKiT-Python. If you are using Windows and calling from" - "MHKiT-MATLAB this is expected.") + print( + "WARNING: Wave WPTO hindcast functions not imported from" + "MHKiT-Python. If you are using Windows and calling from" + "MHKiT-MATLAB this is expected." + ) pass diff --git a/mhkit/wave/io/hindcast/hindcast.py b/mhkit/wave/io/hindcast/hindcast.py index 61e5b4d20..8f8eebef5 100644 --- a/mhkit/wave/io/hindcast/hindcast.py +++ b/mhkit/wave/io/hindcast/hindcast.py @@ -39,7 +39,7 @@ def region_selection(lat_lon): - ''' + """ Returns the name of the predefined region in which the given coordinates reside. Can be used to check if the passed lat/lon pair is within the WPTO hindcast dataset. @@ -53,39 +53,31 @@ def region_selection(lat_lon): ------- region : string Name of predefined region for given coordinates - ''' + """ if not isinstance(lat_lon, (list, tuple)): - raise TypeError(f'lat_lon must be of type list or tuple. Got: {type(lat_lon)}') + raise TypeError(f"lat_lon must be of type list or tuple. Got: {type(lat_lon)}") if not all(isinstance(coord, (float, int)) for coord in lat_lon): - raise TypeError(f'lat_lon values must be of type float or int. Got: {type(lat_lon[0])}') + raise TypeError( + f"lat_lon values must be of type float or int. Got: {type(lat_lon[0])}" + ) regions = { - 'Hawaii': { - 'lat': [15.0, 27.000002], - 'lon': [-164.0, -151.0] - }, - 'West_Coast': { - 'lat': [30.0906, 48.8641], - 'lon': [-130.072, -116.899] - }, - 'Atlantic': { - 'lat': [24.382, 44.8247], - 'lon': [-81.552, -65.721] - }, + "Hawaii": {"lat": [15.0, 27.000002], "lon": [-164.0, -151.0]}, + "West_Coast": {"lat": [30.0906, 48.8641], "lon": [-130.072, -116.899]}, + "Atlantic": {"lat": [24.382, 44.8247], "lon": [-81.552, -65.721]}, } def region_search(lat_lon, region, regions): return all( regions[region][dk][0] <= d <= regions[region][dk][1] - for dk, d in {'lat': lat_lon[0], 'lon': lat_lon[1]}.items() + for dk, d in {"lat": lat_lon[0], "lon": lat_lon[1]}.items() ) - region = [region for region in regions if region_search( - lat_lon, region, regions)] + region = [region for region in regions if region_search(lat_lon, region, regions)] if not region: - raise ValueError('ERROR: coordinates out of bounds.') + raise ValueError("ERROR: coordinates out of bounds.") return region[0] @@ -106,12 +98,12 @@ def request_wpto_point_data( Returns data from the WPTO wave hindcast hosted on AWS at the specified latitude and longitude point(s), or the closest available point(s). - Visit https://registry.opendata.aws/wpto-pds-us-wave/ for more - information about the dataset and available locations and years. + Visit https://registry.opendata.aws/wpto-pds-us-wave/ for more + information about the dataset and available locations and years. Note: To access the WPTO hindcast data, you will need to configure - h5pyd for data access on HSDS. Please see the WPTO_hindcast_example - notebook for more information. + h5pyd for data access on HSDS. Please see the WPTO_hindcast_example + notebook for more information. Parameters ---------- @@ -120,22 +112,22 @@ def request_wpto_point_data( Options: '3-hour' '1-hour' parameter : string or list of strings Dataset parameter to be downloaded - 3-hour dataset options: 'directionality_coefficient', + 3-hour dataset options: 'directionality_coefficient', 'energy_period', 'maximum_energy_direction' 'mean_absolute_period', 'mean_zero-crossing_period', 'omni-directional_wave_power', 'peak_period' - 'significant_wave_height', 'spectral_width', 'water_depth' - 1-hour dataset options: 'directionality_coefficient', + 'significant_wave_height', 'spectral_width', 'water_depth' + 1-hour dataset options: 'directionality_coefficient', 'energy_period', 'maximum_energy_direction' 'mean_absolute_period', 'mean_zero-crossing_period', 'omni-directional_wave_power', 'peak_period', - 'significant_wave_height', 'spectral_width', + 'significant_wave_height', 'spectral_width', 'water_depth', 'maximim_energy_direction', 'mean_wave_direction', 'frequency_bin_edges' lat_lon : tuple or list of tuples - Latitude longitude pairs at which to extract data - years : list - Year(s) to be accessed. The years 1979-2010 available. + Latitude longitude pairs at which to extract data + years : list + Year(s) to be accessed. The years 1979-2010 available. Examples: [1996] or [2004,2006,2007] tree : str | cKDTree (optional) cKDTree or path to .pkl file containing pre-computed tree @@ -149,42 +141,50 @@ def request_wpto_point_data( Default = True hsds : bool (optional) Boolean flag to use h5pyd to handle .h5 'files' hosted on AWS - behind HSDS. Setting to False will indicate to look for files on + behind HSDS. Setting to False will indicate to look for files on local machine, not AWS. Default = True path : string (optional) Optionally override with a custom .h5 filepath. Useful when setting - `hsds=False`. + `hsds=False`. as_xarray : bool (optional) - Boolean flag to return data as an xarray Dataset. Default = False + Boolean flag to return data as an xarray Dataset. Default = False Returns --------- - data: DataFrame - Data indexed by datetime with columns named for parameter - and cooresponding metadata index - meta: DataFrame - Location metadata for the requested data location + data: DataFrame + Data indexed by datetime with columns named for parameter + and cooresponding metadata index + meta: DataFrame + Location metadata for the requested data location """ if not isinstance(parameter, (str, list)): - raise TypeError(f'parameter must be of type string or list. Got: {type(parameter)}') + raise TypeError( + f"parameter must be of type string or list. Got: {type(parameter)}" + ) if not isinstance(lat_lon, (list, tuple)): - raise TypeError(f'lat_lon must be of type list or tuple. Got: {type(lat_lon)}') + raise TypeError(f"lat_lon must be of type list or tuple. Got: {type(lat_lon)}") if not isinstance(data_type, str): - raise TypeError(f'data_type must be a string. Got: {type(data_type)}') + raise TypeError(f"data_type must be a string. Got: {type(data_type)}") if not isinstance(years, list): - raise TypeError(f'years must be a list. Got: {type(years)}') + raise TypeError(f"years must be a list. Got: {type(years)}") if not isinstance(tree, (str, type(None))): - raise TypeError(f'If specified, tree must be a string. Got: {type(tree)}') + raise TypeError(f"If specified, tree must be a string. Got: {type(tree)}") if not isinstance(unscale, bool): - raise TypeError(f'If specified, unscale must be bool type. Got: {type(unscale)}') + raise TypeError( + f"If specified, unscale must be bool type. Got: {type(unscale)}" + ) if not isinstance(str_decode, bool): - raise TypeError(f'If specified, str_decode must be bool type. Got: {type(str_decode)}') + raise TypeError( + f"If specified, str_decode must be bool type. Got: {type(str_decode)}" + ) if not isinstance(hsds, bool): - raise TypeError(f'If specified, hsds must be bool type. Got: {type(hsds)}') + raise TypeError(f"If specified, hsds must be bool type. Got: {type(hsds)}") if not isinstance(path, (str, type(None))): - raise TypeError(f'If specified, path must be a string. Got: {type(path)}') + raise TypeError(f"If specified, path must be a string. Got: {type(path)}") if not isinstance(as_xarray, bool): - raise TypeError(f'If specified, as_xarray must be bool type. Got: {type(as_xarray)}') + raise TypeError( + f"If specified, as_xarray must be bool type. Got: {type(as_xarray)}" + ) # Attempt to load data from cache # Construct a string representation of the function parameters @@ -195,9 +195,8 @@ def request_wpto_point_data( if data is not None: return data, meta else: - if 'directional_wave_spectrum' in parameter: - sys.exit( - 'This function does not support directional_wave_spectrum output') + if "directional_wave_spectrum" in parameter: + sys.exit("This function does not support directional_wave_spectrum output") # Check for multiple region selection if isinstance(lat_lon[0], float): @@ -209,23 +208,25 @@ def request_wpto_point_data( if region_list.count(region_list[0]) == len(lat_lon): region = region_list[0] else: - sys.exit('Coordinates must be within the same region!') + sys.exit("Coordinates must be within the same region!") if path: wave_path = path - elif data_type == '3-hour': - wave_path = f'/nrel/US_wave/{region}/{region}_wave_*.h5' - elif data_type == '1-hour': - wave_path = f'/nrel/US_wave/virtual_buoy/{region}/{region}_virtual_buoy_*.h5' + elif data_type == "3-hour": + wave_path = f"/nrel/US_wave/{region}/{region}_wave_*.h5" + elif data_type == "1-hour": + wave_path = ( + f"/nrel/US_wave/virtual_buoy/{region}/{region}_virtual_buoy_*.h5" + ) else: - print('ERROR: invalid data_type') + print("ERROR: invalid data_type") wave_kwargs = { - 'tree': tree, - 'unscale': unscale, - 'str_decode': str_decode, - 'hsds': hsds, - 'years': years + "tree": tree, + "unscale": unscale, + "str_decode": str_decode, + "hsds": hsds, + "years": years, } data_list = [] @@ -236,7 +237,7 @@ def request_wpto_point_data( gid = rex_waves.lat_lon_gid(lat_lon) cols = temp_data.columns[:] for i, col in zip(range(len(cols)), cols): - temp = f'{param}_{gid}' + temp = f"{param}_{gid}" temp_data = temp_data.rename(columns={col: temp}) data_list.append(temp_data) @@ -247,30 +248,31 @@ def request_wpto_point_data( cols = data.columns[:] for i, col in zip(range(len(cols)), cols): - temp = f'{parameter}_{i}' + temp = f"{parameter}_{i}" data = data.rename(columns={col: temp}) meta = rex_waves.meta.loc[cols, :] meta = meta.reset_index(drop=True) gid = rex_waves.lat_lon_gid(lat_lon) - meta['gid'] = gid + meta["gid"] = gid if as_xarray: data = data.to_xarray() - data['time_index'] = pd.to_datetime(data.time_index) + data["time_index"] = pd.to_datetime(data.time_index) if isinstance(parameter, list): - param_coords = [f'{param}_{gid}' for param in parameter] - data.coords['parameter'] = xr.DataArray( - param_coords, dims='parameter') + param_coords = [f"{param}_{gid}" for param in parameter] + data.coords["parameter"] = xr.DataArray( + param_coords, dims="parameter" + ) - data.coords['year'] = xr.DataArray(years, dims='year') + data.coords["year"] = xr.DataArray(years, dims="year") meta_ds = meta.to_xarray() data = xr.merge([data, meta_ds]) # Remove the 'index' coordinate - data = data.drop_vars('index') + data = data.drop_vars("index") # save_to_cache(hash_params, data, meta) handle_caching(hash_params, cache_dir, data, meta) @@ -293,13 +295,13 @@ def request_wpto_directional_spectrum( or the closest available point(s). The data is returned as an xarray Dataset with keys indexed by a graphical identifier (gid). `gid`s are integers which represent a lat, long on which data is - stored. Requesting an array of `lat_lons` will return a dataset - with multiple `gids` representing the data closest to each requested + stored. Requesting an array of `lat_lons` will return a dataset + with multiple `gids` representing the data closest to each requested `lat`, `lon`. Visit https://registry.opendata.aws/wpto-pds-us-wave/ for more information about the dataset and available - locations and years. + locations and years. Note: To access the WPTO hindcast data, you will need to configure h5pyd for data access on HSDS. @@ -328,7 +330,7 @@ def request_wpto_directional_spectrum( local machine, not AWS. Default = True path : string (optional) Optionally override with a custom .h5 filepath. Useful when setting - `hsds=False` + `hsds=False` Returns --------- @@ -339,19 +341,23 @@ def request_wpto_directional_spectrum( Location metadata for the requested data location """ if not isinstance(lat_lon, (list, tuple)): - raise TypeError(f'lat_lon must be of type list or tuple. Got: {type(lat_lon)}') + raise TypeError(f"lat_lon must be of type list or tuple. Got: {type(lat_lon)}") if not isinstance(year, str): - raise TypeError(f'year must be a string. Got: {type(year)}') + raise TypeError(f"year must be a string. Got: {type(year)}") if not isinstance(tree, (str, type(None))): - raise TypeError(f'If specified, tree must be a string. Got: {type(tree)}') + raise TypeError(f"If specified, tree must be a string. Got: {type(tree)}") if not isinstance(unscale, bool): - raise TypeError(f'If specified, unscale must be bool type. Got: {type(unscale)}') + raise TypeError( + f"If specified, unscale must be bool type. Got: {type(unscale)}" + ) if not isinstance(str_decode, bool): - raise TypeError(f'If specified, str_decode must be bool type. Got: {type(str_decode)}') + raise TypeError( + f"If specified, str_decode must be bool type. Got: {type(str_decode)}" + ) if not isinstance(hsds, bool): - raise TypeError(f'If specified, hsds must be bool type. Got: {type(hsds)}') + raise TypeError(f"If specified, hsds must be bool type. Got: {type(hsds)}") if not isinstance(path, (str, type(None))): - raise TypeError(f'If specified, path must be a string. Got: {type(path)}') + raise TypeError(f"If specified, path must be a string. Got: {type(path)}") # check for multiple region selection if isinstance(lat_lon[0], float): @@ -361,7 +367,7 @@ def request_wpto_directional_spectrum( if reglist.count(reglist[0]) == len(lat_lon): region = reglist[0] else: - sys.exit('Coordinates must be within the same region!') + sys.exit("Coordinates must be within the same region!") # Attempt to load data from cache hash_params = f"{lat_lon}_{year}_{tree}_{unscale}_{str_decode}_{hsds}_{path}" @@ -372,14 +378,14 @@ def request_wpto_directional_spectrum( return data, meta wave_path = path or ( - f'/nrel/US_wave/virtual_buoy/{region}/{region}_virtual_buoy_{year}.h5' + f"/nrel/US_wave/virtual_buoy/{region}/{region}_virtual_buoy_{year}.h5" ) - parameter = 'directional_wave_spectrum' + parameter = "directional_wave_spectrum" wave_kwargs = { - 'tree': tree, - 'unscale': unscale, - 'str_decode': str_decode, - 'hsds': hsds + "tree": tree, + "unscale": unscale, + "str_decode": str_decode, + "hsds": hsds, } with WaveX(wave_path, **wave_kwargs) as rex_waves: @@ -389,34 +395,32 @@ def request_wpto_directional_spectrum( # Setup index and columns columns = [gid] if isinstance(gid, (int, np.integer)) else gid time_index = rex_waves.time_index - frequency = rex_waves['frequency'] - direction = rex_waves['direction'] + frequency = rex_waves["frequency"] + direction = rex_waves["direction"] index = pd.MultiIndex.from_product( [time_index, frequency, direction], - names=['time_index', 'frequency', 'direction'] + names=["time_index", "frequency", "direction"], ) # Create bins for multiple smaller API dataset requests N = 6 length = len(rex_waves) quotient, remainder = divmod(length, N) - bins = [i*quotient for i in range(N+1)] + bins = [i * quotient for i in range(N + 1)] bins[-1] += remainder - index_bins = (np.array(bins)*len(frequency) - * len(direction)).tolist() + index_bins = (np.array(bins) * len(frequency) * len(direction)).tolist() # Request multiple datasets and add to dictionary datas = {} - for i in range(len(bins)-1): - idx = index[index_bins[i]:index_bins[i+1]] + for i in range(len(bins) - 1): + idx = index[index_bins[i] : index_bins[i + 1]] # Request with exponential back off wait time sleep_time = 2 num_retries = 4 for _ in range(num_retries): try: - data_array = rex_waves[parameter, - bins[i]:bins[i+1], :, :, gid] + data_array = rex_waves[parameter, bins[i] : bins[i + 1], :, :, gid] str_error = None except Exception as err: str_error = str(err) @@ -430,50 +434,48 @@ def request_wpto_directional_spectrum( ax1 = np.product(data_array.shape[:3]) ax2 = data_array.shape[-1] if len(data_array.shape) == 4 else 1 datas[i] = pd.DataFrame( - data_array.reshape(ax1, ax2), - columns=columns, - index=idx + data_array.reshape(ax1, ax2), columns=columns, index=idx ) data_raw = pd.concat(datas.values()) data = data_raw.to_xarray() - data['time_index'] = pd.to_datetime(data.time_index) + data["time_index"] = pd.to_datetime(data.time_index) # Get metadata meta = rex_waves.meta.loc[columns, :] meta = meta.reset_index(drop=True) - meta['gid'] = gid + meta["gid"] = gid # Convert gid to integer or list of integers - gid_list = [int(g) for g in gid] if isinstance( - gid, (list, np.ndarray)) else [int(gid)] + gid_list = ( + [int(g) for g in gid] if isinstance(gid, (list, np.ndarray)) else [int(gid)] + ) - data_var_concat = xr.concat([data[g] for g in gid_list], dim='gid') + data_var_concat = xr.concat([data[g] for g in gid_list], dim="gid") # Create a new DataArray with the correct dimensions and coordinates spectral_density = xr.DataArray( - data_var_concat.data.reshape(-1, len(frequency), - len(direction), len(gid_list)), - dims=['time_index', 'frequency', 'direction', 'gid'], + data_var_concat.data.reshape( + -1, len(frequency), len(direction), len(gid_list) + ), + dims=["time_index", "frequency", "direction", "gid"], coords={ - 'time_index': data['time_index'], - 'frequency': data['frequency'], - 'direction': data['direction'], - 'gid': gid_list - } + "time_index": data["time_index"], + "frequency": data["frequency"], + "direction": data["direction"], + "gid": gid_list, + }, ) # Create the new dataset data = xr.Dataset( - { - 'spectral_density': spectral_density - }, + {"spectral_density": spectral_density}, coords={ - 'time_index': data['time_index'], - 'frequency': data['frequency'], - 'direction': data['direction'], - 'gid': gid_list - } + "time_index": data["time_index"], + "frequency": data["frequency"], + "direction": data["direction"], + "gid": gid_list, + }, ) handle_caching(hash_params, cache_dir, data, meta) diff --git a/mhkit/wave/io/hindcast/wind_toolkit.py b/mhkit/wave/io/hindcast/wind_toolkit.py index d2726503c..86d6596fd 100644 --- a/mhkit/wave/io/hindcast/wind_toolkit.py +++ b/mhkit/wave/io/hindcast/wind_toolkit.py @@ -62,10 +62,10 @@ from mhkit.utils.cache import handle_caching -def region_selection(lat_lon, preferred_region=''): - ''' +def region_selection(lat_lon, preferred_region=""): + """ Returns the name of the predefined region in which the given coordinates reside. - Can be used to check if the passed lat/lon pair is within the WIND Toolkit hindcast dataset. + Can be used to check if the passed lat/lon pair is within the WIND Toolkit hindcast dataset. Parameters ---------- @@ -79,65 +79,72 @@ def region_selection(lat_lon, preferred_region=''): ------- region : string Name of predefined region for given coordinates - ''' + """ if not isinstance(lat_lon, tuple): - raise TypeError( - f'lat_lon must be of type tuple, got {type(lat_lon).__name__}') + raise TypeError(f"lat_lon must be of type tuple, got {type(lat_lon).__name__}") if len(lat_lon) != 2: - raise ValueError( - f'lat_lon must be of length 2, got length {len(lat_lon)}') + raise ValueError(f"lat_lon must be of length 2, got length {len(lat_lon)}") if not isinstance(lat_lon[0], (float, int)): raise TypeError( - f'lat_lon values must be floats or ints, got {type(lat_lon[0]).__name__}') + f"lat_lon values must be floats or ints, got {type(lat_lon[0]).__name__}" + ) if not isinstance(lat_lon[1], (float, int)): raise TypeError( - f'lat_lon values must be floats or ints, got {type(lat_lon[1]).__name__}') + f"lat_lon values must be floats or ints, got {type(lat_lon[1]).__name__}" + ) if not isinstance(preferred_region, str): raise TypeError( - f'preferred_region must be a string, got {type(preferred_region).__name__}') + f"preferred_region must be a string, got {type(preferred_region).__name__}" + ) # Note that this check is fast, but not robust because region are not # rectangular on a lat-lon grid rDict = { - 'CA_NWP_overlap': {'lat': [41.213, 42.642], 'lon': [-129.090, -121.672]}, - 'Offshore_CA': {'lat': [31.932, 42.642], 'lon': [-129.090, -115.806]}, - 'Hawaii': {'lat': [15.565, 26.221], 'lon': [-164.451, -151.278]}, - 'NW_Pacific': {'lat': [41.213, 49.579], 'lon': [-130.831, -121.672]}, - 'Mid_Atlantic': {'lat': [37.273, 42.211], 'lon': [-76.427, -64.800]}, + "CA_NWP_overlap": {"lat": [41.213, 42.642], "lon": [-129.090, -121.672]}, + "Offshore_CA": {"lat": [31.932, 42.642], "lon": [-129.090, -115.806]}, + "Hawaii": {"lat": [15.565, 26.221], "lon": [-164.451, -151.278]}, + "NW_Pacific": {"lat": [41.213, 49.579], "lon": [-130.831, -121.672]}, + "Mid_Atlantic": {"lat": [37.273, 42.211], "lon": [-76.427, -64.800]}, } - def region_search(x): return all((True if rDict[x][dk][0] <= d <= rDict[x][dk][1] else False - for dk, d in {'lat': lat_lon[0], 'lon': lat_lon[1]}.items())) + def region_search(x): + return all( + ( + True if rDict[x][dk][0] <= d <= rDict[x][dk][1] else False + for dk, d in {"lat": lat_lon[0], "lon": lat_lon[1]}.items() + ) + ) + region = [key for key in rDict if region_search(key)] - if region[0] == 'CA_NWP_overlap': - if preferred_region == 'Offshore_CA': - region[0] = 'Offshore_CA' - elif preferred_region == 'NW_Pacific': - region[0] = 'NW_Pacific' + if region[0] == "CA_NWP_overlap": + if preferred_region == "Offshore_CA": + region[0] = "Offshore_CA" + elif preferred_region == "NW_Pacific": + region[0] = "NW_Pacific" else: raise TypeError( - f"Preferred_region ({preferred_region}) must be 'Offshore_CA' or 'NW_Pacific' when lat_lon {lat_lon} falls in the overlap region") + f"Preferred_region ({preferred_region}) must be 'Offshore_CA' or 'NW_Pacific' when lat_lon {lat_lon} falls in the overlap region" + ) if len(region) == 0: - raise TypeError( - f'Coordinates {lat_lon} out of bounds. Must be within {rDict}') + raise TypeError(f"Coordinates {lat_lon} out of bounds. Must be within {rDict}") else: return region[0] def get_region_data(region): - ''' - Retrieves the latitude and longitude data points for the specified region - from the cache if available; otherwise, fetches the data and caches it for + """ + Retrieves the latitude and longitude data points for the specified region + from the cache if available; otherwise, fetches the data and caches it for subsequent calls. - The function forms a unique identifier from the `region` parameter and checks - whether the corresponding data is available in the cache. If the data is found, + The function forms a unique identifier from the `region` parameter and checks + whether the corresponding data is available in the cache. If the data is found, it's loaded and returned. If not, the data is fetched, cached, and then returned. Parameters @@ -160,12 +167,11 @@ def get_region_data(region): Example ------- >>> lats, lons = get_region_data('Offshore_CA') - ''' + """ if not isinstance(region, str): - raise TypeError('region must be of type string') + raise TypeError("region must be of type string") # Define the path to the cache directory - cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "hindcast") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "hindcast") # Create a unique identifier for this function call hash_id = hashlib.md5(region.encode()).hexdigest() @@ -178,13 +184,18 @@ def get_region_data(region): if os.path.isfile(cache_file): # If the cache file exists, load the data from the cache - with open(cache_file, 'rb') as f: + with open(cache_file, "rb") as f: lats, lons = pickle.load(f) return lats, lons else: - wind_path = '/nrel/wtk/'+region.lower()+'/'+region+'_*.h5' - windKwargs = {'tree': None, 'unscale': True, 'str_decode': True, 'hsds': True, - 'years': [2019]} + wind_path = "/nrel/wtk/" + region.lower() + "/" + region + "_*.h5" + windKwargs = { + "tree": None, + "unscale": True, + "str_decode": True, + "hsds": True, + "years": [2019], + } # Get the latitude and longitude list from the region in rex rex_wind = MultiYearWindX(wind_path, **windKwargs) @@ -192,15 +203,15 @@ def get_region_data(region): lons = rex_wind.lat_lon[:, 1] # Save data to cache - with open(cache_file, 'wb') as f: + with open(cache_file, "wb") as f: pickle.dump((lats, lons), f) return lats, lons def plot_region(region, lat_lon=None, ax=None): - ''' - Visualizes the area that a given region covers. Can help users understand + """ + Visualizes the area that a given region covers. Can help users understand the extent of a region since they are not all rectangular. Parameters @@ -209,7 +220,7 @@ def plot_region(region, lat_lon=None, ax=None): Name of predefined region in the WIND Toolkit Options: 'Offshore_CA','Hawaii','Mid_Atlantic','NW_Pacific' lat_lon : couple (optional) - Latitude and longitude pair to plot on top of the chosen region. Useful + Latitude and longitude pair to plot on top of the chosen region. Useful to inform accurate latitude-longitude selection for data analysis. ax : matplotlib axes object (optional) Axes for plotting. If None, then a new figure is created. @@ -217,35 +228,36 @@ def plot_region(region, lat_lon=None, ax=None): Returns --------- ax : matplotlib pyplot axes - ''' + """ if not isinstance(region, str): - raise TypeError('region must be of type string') + raise TypeError("region must be of type string") - supported_regions = ['Offshore_CA', 'Hawaii', 'Mid_Atlantic', 'NW_Pacific'] + supported_regions = ["Offshore_CA", "Hawaii", "Mid_Atlantic", "NW_Pacific"] if region not in supported_regions: raise ValueError( - f'{region} not in list of supported regions: {", ".join(supported_regions)}') + f'{region} not in list of supported regions: {", ".join(supported_regions)}' + ) lats, lons = get_region_data(region) # Plot the latitude longitude pairs if ax is None: fig, ax = plt.subplots() - ax.plot(lons, lats, 'o', label=f'{region} region') + ax.plot(lons, lats, "o", label=f"{region} region") if lat_lon is not None: - ax.plot(lat_lon[1], lat_lon[0], 'o', label='Specified lat-lon point') - ax.set_xlabel('Longitude (deg)') - ax.set_ylabel('Latitude (deg)') + ax.plot(lat_lon[1], lat_lon[0], "o", label="Specified lat-lon point") + ax.set_xlabel("Longitude (deg)") + ax.set_ylabel("Latitude (deg)") ax.grid() - ax.set_title(f'Extent of the WIND Toolkit {region} region') + ax.set_title(f"Extent of the WIND Toolkit {region} region") ax.legend() return ax def elevation_to_string(parameter, elevations): - """ - Takes in a parameter (e.g. 'windspeed') and elevations (e.g. [20, 40, 120]) + """ + Takes in a parameter (e.g. 'windspeed') and elevations (e.g. [20, 40, 120]) and returns the formatted strings that are input to WIND Toolkit (e.g. windspeed_10m). Does not check parameter against the elevation levels. This is done in request_wtk_point_data. @@ -257,7 +269,7 @@ def elevation_to_string(parameter, elevations): elevations : list List of elevations (float). Values can range from approxiamtely 20 to 200 in increments of 20, depending - on the parameter in question. See Documentation for request_wtk_point_data + on the parameter in question. See Documentation for request_wtk_point_data for the full list of available parameters. Returns @@ -268,37 +280,45 @@ def elevation_to_string(parameter, elevations): """ if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string, got {type(parameter)}') + raise TypeError(f"parameter must be a string, got {type(parameter)}") if not isinstance(elevations, (float, list)): - raise TypeError( - f'elevations must be a float or list, got {type(elevations)}') + raise TypeError(f"elevations must be a float or list, got {type(elevations)}") - if parameter not in ['windspeed', 'winddirection', 'temperature', 'pressure']: - raise ValueError(f'Invalid parameter: {parameter}') + if parameter not in ["windspeed", "winddirection", "temperature", "pressure"]: + raise ValueError(f"Invalid parameter: {parameter}") parameter_list = [] for e in elevations: - parameter_list.append(parameter+'_'+str(e)+'m') + parameter_list.append(parameter + "_" + str(e) + "m") return parameter_list -def request_wtk_point_data(time_interval, parameter, lat_lon, years, - preferred_region='', tree=None, unscale=True, - str_decode=True, hsds=True, clear_cache=False): - """ +def request_wtk_point_data( + time_interval, + parameter, + lat_lon, + years, + preferred_region="", + tree=None, + unscale=True, + str_decode=True, + hsds=True, + clear_cache=False, +): + """ Returns data from the WIND Toolkit offshore wind hindcast hosted on AWS at the specified latitude and longitude point(s), or the closest - available point(s).Visit https://registry.opendata.aws/nrel-pds-wtk/ - for more information about the dataset and available locations and years. + available point(s).Visit https://registry.opendata.aws/nrel-pds-wtk/ + for more information about the dataset and available locations and years. - Calls with multiple parameters must have the same time interval. Calls - with multiple locations must use the same region (use the plot_region function). + Calls with multiple parameters must have the same time interval. Calls + with multiple locations must use the same region (use the plot_region function). Note: To access the WIND Toolkit hindcast data, you will need to - configure h5pyd for data access on HSDS. Please see the - metocean_example or WPTO_hindcast_example notebook for more information. + configure h5pyd for data access on HSDS. Please see the + metocean_example or WPTO_hindcast_example notebook for more information. Parameters ---------- @@ -308,33 +328,33 @@ def request_wtk_point_data(time_interval, parameter, lat_lon, years, parameter : string or list of strings Dataset parameter to be downloaded. Other parameters may be available. This list is limited to those available at both 5-minute and 1-hour - time intervals for all regions. - Options: - 'precipitationrate_0m', 'inversemoninobukhovlength_2m', - 'relativehumidity_2m', 'surface_sea_temperature', - 'pressure_0m', 'pressure_100m', 'pressure_200m', - 'temperature_10m', 'temperature_20m', 'temperature_40m', - 'temperature_60m', 'temperature_80m', 'temperature_100m', - 'temperature_120m', 'temperature_140m', 'temperature_160m', - 'temperature_180m', 'temperature_200m', - 'winddirection_10m', 'winddirection_20m', 'winddirection_40m', - 'winddirection_60m', 'winddirection_80m', 'winddirection_100m', - 'winddirection_120m', 'winddirection_140m', 'winddirection_160m', - 'winddirection_180m', 'winddirection_200m', - 'windspeed_10m', 'windspeed_20m', 'windspeed_40m', - 'windspeed_60m', 'windspeed_80m', 'windspeed_100m', - 'windspeed_120m', 'windspeed_140m', 'windspeed_160m', + time intervals for all regions. + Options: + 'precipitationrate_0m', 'inversemoninobukhovlength_2m', + 'relativehumidity_2m', 'surface_sea_temperature', + 'pressure_0m', 'pressure_100m', 'pressure_200m', + 'temperature_10m', 'temperature_20m', 'temperature_40m', + 'temperature_60m', 'temperature_80m', 'temperature_100m', + 'temperature_120m', 'temperature_140m', 'temperature_160m', + 'temperature_180m', 'temperature_200m', + 'winddirection_10m', 'winddirection_20m', 'winddirection_40m', + 'winddirection_60m', 'winddirection_80m', 'winddirection_100m', + 'winddirection_120m', 'winddirection_140m', 'winddirection_160m', + 'winddirection_180m', 'winddirection_200m', + 'windspeed_10m', 'windspeed_20m', 'windspeed_40m', + 'windspeed_60m', 'windspeed_80m', 'windspeed_100m', + 'windspeed_120m', 'windspeed_140m', 'windspeed_160m', 'windspeed_180m', 'windspeed_200m' lat_lon : tuple or list of tuples - Latitude longitude pairs at which to extract data. Use plot_region() or + Latitude longitude pairs at which to extract data. Use plot_region() or region_selection() to see the corresponding region for a given location. - years : list - Year(s) to be accessed. The years 2000-2019 available (up to 2020 + years : list + Year(s) to be accessed. The years 2000-2019 available (up to 2020 for Mid-Atlantic). Examples: [2015] or [2004,2006,2007] preferred_region : string (optional) Region that the lat_lon belongs to ('Offshore_CA' or 'NW_Pacific'). Required when a lat_lon point falls in both the Offshore California - and NW Pacific regions. Overlap region defined by + and NW Pacific regions. Overlap region defined by latitude = (41.213, 42.642) and longitude = (-129.090, -121.672). Default = '' tree : str | cKDTree (optional) @@ -349,52 +369,50 @@ def request_wtk_point_data(time_interval, parameter, lat_lon, years, Default = True hsds : bool (optional) Boolean flag to use h5pyd to handle .h5 'files' hosted on AWS - behind HSDS. Setting to False will indicate to look for files on + behind HSDS. Setting to False will indicate to look for files on local machine, not AWS. Default = True clear_cache : bool (optional) Boolean flag to clear the cache related to this specific request. - Default is False. + Default is False. Returns --------- - data: DataFrame + data: DataFrame Data indexed by datetime with columns named for parameter and - cooresponding metadata index - meta: DataFrame - Location metadata for the requested data location + cooresponding metadata index + meta: DataFrame + Location metadata for the requested data location """ if not isinstance(parameter, (str, list)): - raise TypeError('parameter must be of type string or list') + raise TypeError("parameter must be of type string or list") if not isinstance(lat_lon, (list, tuple)): - raise TypeError('lat_lon must be of type list or tuple') + raise TypeError("lat_lon must be of type list or tuple") if not isinstance(time_interval, str): - raise TypeError('time_interval must be a string') + raise TypeError("time_interval must be a string") if not isinstance(years, list): - raise TypeError('years must be a list') + raise TypeError("years must be a list") if not isinstance(preferred_region, str): - raise TypeError('preferred_region must be a string') + raise TypeError("preferred_region must be a string") if not isinstance(tree, (str, type(None))): - raise TypeError('tree must be a string or None') + raise TypeError("tree must be a string or None") if not isinstance(unscale, bool): - raise TypeError('unscale must be bool type') + raise TypeError("unscale must be bool type") if not isinstance(str_decode, bool): - raise TypeError('str_decode must be bool type') + raise TypeError("str_decode must be bool type") if not isinstance(hsds, bool): - raise TypeError('hsds must be bool type') + raise TypeError("hsds must be bool type") if not isinstance(clear_cache, bool): - raise TypeError('clear_cache must be of type bool') + raise TypeError("clear_cache must be of type bool") # Define the path to the cache directory - cache_dir = os.path.join(os.path.expanduser( - "~"), ".cache", "mhkit", "hindcast") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "hindcast") # Construct a string representation of the function parameters hash_params = f"{time_interval}_{parameter}_{lat_lon}_{years}_{preferred_region}_{tree}_{unscale}_{str_decode}_{hsds}" # Use handle_caching to manage caching. - data, meta, _ = handle_caching( - hash_params, cache_dir, clear_cache_file=clear_cache) + data, meta, _ = handle_caching(hash_params, cache_dir, clear_cache_file=clear_cache) if data is not None and meta is not None: return data, meta # Return cached data and meta if available @@ -409,17 +427,23 @@ def request_wtk_point_data(time_interval, parameter, lat_lon, years, if reglist.count(reglist[0]) == len(lat_lon): region = reglist[0] else: - raise TypeError('Coordinates must be within the same region!') + raise TypeError("Coordinates must be within the same region!") - if time_interval == '1-hour': - wind_path = f'/nrel/wtk/{region.lower()}/{region}_*.h5' - elif time_interval == '5-minute': - wind_path = f'/nrel/wtk/{region.lower()}-5min/{region}_*.h5' + if time_interval == "1-hour": + wind_path = f"/nrel/wtk/{region.lower()}/{region}_*.h5" + elif time_interval == "5-minute": + wind_path = f"/nrel/wtk/{region.lower()}-5min/{region}_*.h5" else: raise TypeError( - f"Invalid time_interval '{time_interval}', must be '1-hour' or '5-minute'") - windKwargs = {'tree': tree, 'unscale': unscale, 'str_decode': str_decode, 'hsds': hsds, - 'years': years} + f"Invalid time_interval '{time_interval}', must be '1-hour' or '5-minute'" + ) + windKwargs = { + "tree": tree, + "unscale": unscale, + "str_decode": str_decode, + "hsds": hsds, + "years": years, + } data_list = [] with MultiYearWindX(wind_path, **windKwargs) as rex_wind: @@ -428,7 +452,7 @@ def request_wtk_point_data(time_interval, parameter, lat_lon, years, temp_data = rex_wind.get_lat_lon_df(p, lat_lon) col = temp_data.columns[:] for i, c in zip(range(len(col)), col): - temp = f'{p}_{i}' + temp = f"{p}_{i}" temp_data = temp_data.rename(columns={c: temp}) data_list.append(temp_data) @@ -439,7 +463,7 @@ def request_wtk_point_data(time_interval, parameter, lat_lon, years, col = data.columns[:] for i, c in zip(range(len(col)), col): - temp = f'{parameter}_{i}' + temp = f"{parameter}_{i}" data = data.rename(columns={c: temp}) meta = rex_wind.meta.loc[col, :] diff --git a/mhkit/wave/io/ndbc.py b/mhkit/wave/io/ndbc.py index e5613553d..cd658fd55 100644 --- a/mhkit/wave/io/ndbc.py +++ b/mhkit/wave/io/ndbc.py @@ -15,7 +15,7 @@ from mhkit.utils.cache import handle_caching -def read_file(file_name, missing_values=['MM', 9999, 999, 99]): +def read_file(file_name, missing_values=["MM", 9999, 999, 99]): """ Reads a NDBC wave buoy data file (from https://www.ndbc.noaa.gov). @@ -48,14 +48,16 @@ def read_file(file_name, missing_values=['MM', 9999, 999, 99]): contains unit information, otherwise None is returned """ if not isinstance(file_name, str): - raise TypeError(f'file_name must be of type str. Got: {type(file_name)}') + raise TypeError(f"file_name must be of type str. Got: {type(file_name)}") if not isinstance(missing_values, list): - raise TypeError(f'If specified, missing_values must be of type list. Got: {type(missing_values)}') + raise TypeError( + f"If specified, missing_values must be of type list. Got: {type(missing_values)}" + ) # Open file and get header rows f = open(file_name, "r") header = f.readline().rstrip().split() # read potential headers - units = f.readline().rstrip().split() # read potential units + units = f.readline().rstrip().split() # read potential units f.close() # If first line is commented, remove comment sign # @@ -73,31 +75,38 @@ def read_file(file_name, missing_values=['MM', 9999, 999, 99]): # Check if the time stamp contains minutes, and create list of column names # to parse for date - if header[4] == 'mm': + if header[4] == "mm": parse_vals = header[0:5] - date_format = '%Y %m %d %H %M' + date_format = "%Y %m %d %H %M" units = units[5:] # remove date columns from units else: parse_vals = header[0:4] - date_format = '%Y %m %d %H' + date_format = "%Y %m %d %H" units = units[4:] # remove date columns from units # If first line is commented, manually feed in column names if header_commented: - data = pd.read_csv(file_name, sep='\s+', header=None, names=header, - comment="#", parse_dates=[parse_vals]) + data = pd.read_csv( + file_name, + sep="\s+", + header=None, + names=header, + comment="#", + parse_dates=[parse_vals], + ) # If first line is not commented, then the first row can be used as header else: - data = pd.read_csv(file_name, sep='\s+', header=0, - comment="#", parse_dates=[parse_vals]) + data = pd.read_csv( + file_name, sep="\s+", header=0, comment="#", parse_dates=[parse_vals] + ) # Convert index to datetime date_column = "_".join(parse_vals) - data['Time'] = pd.to_datetime(data[date_column], format=date_format) - data.index = data['Time'].values + data["Time"] = pd.to_datetime(data[date_column], format=date_format) + data.index = data["Time"].values # Remove date columns del data[date_column] - del data['Time'] + del data["Time"] # If there was a row of units, convert to dictionary if units_exist: @@ -107,7 +116,7 @@ def read_file(file_name, missing_values=['MM', 9999, 999, 99]): # Convert columns to numeric data if possible, otherwise leave as string for column in data: - data[column] = pd.to_numeric(data[column], errors='ignore') + data[column] = pd.to_numeric(data[column], errors="ignore") # Convert column names to float if possible (handles frequency headers) # if there is non-numeric name, just leave all as strings. @@ -123,7 +132,7 @@ def read_file(file_name, missing_values=['MM', 9999, 999, 99]): def available_data(parameter, buoy_number=None, proxy=None, clear_cache=False): - ''' + """ For a given parameter this will return a DataFrame of years, station IDs and file names that contain that parameter data. @@ -149,35 +158,39 @@ def available_data(parameter, buoy_number=None, proxy=None, clear_cache=False): ------- available_data: DataFrame DataFrame with station ID, years, and NDBC file names. - ''' + """ if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string. Got: {type(parameter)}') + raise TypeError(f"parameter must be a string. Got: {type(parameter)}") if not isinstance(buoy_number, (str, type(None), list)): - raise TypeError(f'If specified, buoy_number must be a string or list of strings. Got: {type(buoy_number)}') + raise TypeError( + f"If specified, buoy_number must be a string or list of strings. Got: {type(buoy_number)}" + ) if not isinstance(proxy, (dict, type(None))): - raise TypeError(f'If specified, proxy must be a dict. Got: {type(proxy)}') + raise TypeError(f"If specified, proxy must be a dict. Got: {type(proxy)}") _supported_params(parameter) if isinstance(buoy_number, str): if not len(buoy_number) == 5: - raise ValueError('buoy_number must be 5-character' - f'alpha-numeric station identifier. Got: {buoy_number}') + raise ValueError( + "buoy_number must be 5-character" + f"alpha-numeric station identifier. Got: {buoy_number}" + ) elif isinstance(buoy_number, list): for buoy in buoy_number: if not len(buoy) == 5: - raise ValueError('Each value in the buoy_number list must be a 5-character' - f'alpha-numeric station identifier. Got: {buoy_number}') + raise ValueError( + "Each value in the buoy_number list must be a 5-character" + f"alpha-numeric station identifier. Got: {buoy_number}" + ) # Generate a unique hash_params based on the function parameters hash_params = f"parameter:{parameter}_buoy_number:{buoy_number}_proxy:{proxy}" - cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "ndbc") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "ndbc") # Check the cache before making the request - data, _, _ = handle_caching( - hash_params, cache_dir, clear_cache_file=clear_cache) + data, _, _ = handle_caching(hash_params, cache_dir, clear_cache_file=clear_cache) if data is None: - ndbc_data = f'https://www.ndbc.noaa.gov/data/historical/{parameter}/' + ndbc_data = f"https://www.ndbc.noaa.gov/data/historical/{parameter}/" try: response = requests.get(ndbc_data, proxies=proxy, timeout=30) @@ -201,15 +214,13 @@ def available_data(parameter, buoy_number=None, proxy=None, clear_cache=False): available_data = buoys.copy(deep=True) # Set year to numeric (makes year key non-unique) - available_data['year'] = available_data.year.str.strip('b') - available_data['year'] = pd.to_numeric( - available_data.year.str.strip('_old')) + available_data["year"] = available_data.year.str.strip("b") + available_data["year"] = pd.to_numeric(available_data.year.str.strip("_old")) if isinstance(buoy_number, str): available_data = available_data[available_data.id == buoy_number] elif isinstance(buoy_number, list): - available_data = available_data[available_data.id == - buoy_number[0]] + available_data = available_data[available_data.id == buoy_number[0]] for i in range(1, len(buoy_number)): data = available_data[available_data.id == buoy_number[i]] available_data = available_data.append(data) @@ -221,7 +232,7 @@ def available_data(parameter, buoy_number=None, proxy=None, clear_cache=False): def _parse_filenames(parameter, filenames): - ''' + """ Takes a list of available filenames as a series from NDBC then parses out the station ID and year from the file name. @@ -243,37 +254,37 @@ def _parse_filenames(parameter, filenames): ------- buoys: DataFrame DataFrame with keys=['id','year','file_name'] - ''' + """ if not isinstance(filenames, pd.Series): - raise TypeError(f'filenames must be of type pd.Series. Got: {type(filenames)}') + raise TypeError(f"filenames must be of type pd.Series. Got: {type(filenames)}") if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string. Got: {type(parameter)}') + raise TypeError(f"parameter must be a string. Got: {type(parameter)}") supported = _supported_params(parameter) file_seps = { - 'swden': 'w', - 'swdir': 'd', - 'swdir2': 'i', - 'swr1': 'j', - 'swr2': 'k', - 'stdmet': 'h', - 'cwind': 'c' + "swden": "w", + "swdir": "d", + "swdir2": "i", + "swr1": "j", + "swr2": "k", + "stdmet": "h", + "cwind": "c", } file_sep = file_seps[parameter] - filenames = filenames[filenames.str.contains('.txt.gz')] - buoy_id_year_str = filenames.str.split('.', expand=True)[0] + filenames = filenames[filenames.str.contains(".txt.gz")] + buoy_id_year_str = filenames.str.split(".", expand=True)[0] buoy_id_year = buoy_id_year_str.str.split(file_sep, n=1, expand=True) - buoys = buoy_id_year.rename(columns={0: 'id', 1: 'year'}) + buoys = buoy_id_year.rename(columns={0: "id", 1: "year"}) expected_station_id_length = 5 buoys = buoys[buoys.id.str.len() == expected_station_id_length] - buoys['filename'] = filenames + buoys["filename"] = filenames return buoys def request_data(parameter, filenames, proxy=None, clear_cache=False): - ''' + """ Requests data by filenames and returns a dictionary of DataFrames for each filename passed. If filenames for a single buoy are passed then the yearly DataFrames in the returned dictionary (ndbc_data) are @@ -303,13 +314,15 @@ def request_data(parameter, filenames, proxy=None, clear_cache=False): ------- ndbc_data: dict Dictionary of DataFrames indexed by buoy and year. - ''' + """ if not isinstance(filenames, (pd.Series, pd.DataFrame)): - raise TypeError(f'filenames must be of type pd.Series or pd.DataFrame. Got: {type(filenames)}') + raise TypeError( + f"filenames must be of type pd.Series or pd.DataFrame. Got: {type(filenames)}" + ) if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string. Got: {type(parameter)}') + raise TypeError(f"parameter must be a string. Got: {type(parameter)}") if not isinstance(proxy, (dict, type(None))): - raise TypeError(f'If specified, proxy must be a dict. Got: {type(proxy)}') + raise TypeError(f"If specified, proxy must be a dict. Got: {type(proxy)}") _supported_params(parameter) if isinstance(filenames, pd.DataFrame): @@ -318,57 +331,65 @@ def request_data(parameter, filenames, proxy=None, clear_cache=False): raise ValueError("At least 1 filename must be passed") # Define the path to the cache directory - cache_dir = os.path.join(os.path.expanduser("~"), - ".cache", "mhkit", "ndbc") + cache_dir = os.path.join(os.path.expanduser("~"), ".cache", "mhkit", "ndbc") buoy_data = _parse_filenames(parameter, filenames) ndbc_data = _defaultdict(dict) - for buoy_id in buoy_data['id'].unique(): - buoy = buoy_data[buoy_data['id'] == buoy_id] + for buoy_id in buoy_data["id"].unique(): + buoy = buoy_data[buoy_data["id"] == buoy_id] years = buoy.year filenames = buoy.filename for year, filename in zip(years, filenames): # Create a unique filename based on the function parameters for caching hash_params = f"{buoy_id}_{parameter}_{year}_{filename}" cached_data, _, _ = handle_caching( - hash_params, cache_dir, clear_cache_file=clear_cache) + hash_params, cache_dir, clear_cache_file=clear_cache + ) if cached_data is not None: ndbc_data[buoy_id][year] = cached_data continue - file_url = f'https://www.ndbc.noaa.gov/data/historical/{parameter}/{filename}' + file_url = ( + f"https://www.ndbc.noaa.gov/data/historical/{parameter}/{filename}" + ) if proxy == None: response = requests.get(file_url) else: response = requests.get(file_url, proxies=proxy) try: - data = zlib.decompress(response.content, 16+zlib.MAX_WBITS) - df = pd.read_csv(BytesIO(data), sep='\s+', low_memory=False) + data = zlib.decompress(response.content, 16 + zlib.MAX_WBITS) + df = pd.read_csv(BytesIO(data), sep="\s+", low_memory=False) # catch when units are included below the header - firstYear = df['MM'][0] - if isinstance(firstYear, str) and firstYear == 'mo': - df = pd.read_csv(BytesIO(data), sep='\s+', - low_memory=False, skiprows=[1]) + firstYear = df["MM"][0] + if isinstance(firstYear, str) and firstYear == "mo": + df = pd.read_csv( + BytesIO(data), sep="\s+", low_memory=False, skiprows=[1] + ) except zlib.error: - msg = (f'Issue decompressing the NDBC file {filename}' - f'(id: {buoy_id}, year: {year}). Please request ' - 'the data again.') + msg = ( + f"Issue decompressing the NDBC file {filename}" + f"(id: {buoy_id}, year: {year}). Please request " + "the data again." + ) print(msg) except pandas.errors.EmptyDataError: - msg = (f'The NDBC buoy {buoy_id} for year {year} with ' - f'filename {filename} is empty or missing ' - 'data. Please omit this file from your data ' - 'request in the future.') + msg = ( + f"The NDBC buoy {buoy_id} for year {year} with " + f"filename {filename} is empty or missing " + "data. Please omit this file from your data " + "request in the future." + ) print(msg) else: ndbc_data[buoy_id][year] = df # Cache the data after processing it if it exists if year in ndbc_data[buoy_id]: - handle_caching(hash_params, cache_dir, - data=ndbc_data[buoy_id][year]) + handle_caching( + hash_params, cache_dir, data=ndbc_data[buoy_id][year] + ) if buoy_id and len(ndbc_data) == 1: ndbc_data = ndbc_data[buoy_id] @@ -377,7 +398,7 @@ def request_data(parameter, filenames, proxy=None, clear_cache=False): def to_datetime_index(parameter, ndbc_data): - ''' + """ Converts the NDBC date and time information reported in separate columns into a DateTime index and removed the NDBC date & time columns. @@ -400,26 +421,29 @@ def to_datetime_index(parameter, ndbc_data): ------- df_datetime: DataFrame Dataframe with NDBC date columns removed, and datetime index - ''' + """ if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string. Got: {type(parameter)}') + raise TypeError(f"parameter must be a string. Got: {type(parameter)}") if not isinstance(ndbc_data, pd.DataFrame): - raise TypeError(f'ndbc_data must be of type pd.DataFrame. Got: {type(ndbc_data)}') + raise TypeError( + f"ndbc_data must be of type pd.DataFrame. Got: {type(ndbc_data)}" + ) df_datetime = ndbc_data.copy(deep=True) - df_datetime['date'], ndbc_date_cols = dates_to_datetime( - df_datetime, return_date_cols=True) + df_datetime["date"], ndbc_date_cols = dates_to_datetime( + df_datetime, return_date_cols=True + ) df_datetime = df_datetime.drop(ndbc_date_cols, axis=1) - df_datetime = df_datetime.set_index('date') - if parameter in ['swden', 'swdir', 'swdir2', 'swr1', 'swr2']: + df_datetime = df_datetime.set_index("date") + if parameter in ["swden", "swdir", "swdir2", "swr1", "swr2"]: df_datetime.columns = df_datetime.columns.astype(float) return df_datetime def dates_to_datetime(data, return_date_cols=False, return_as_dataframe=False): - ''' + """ Takes a DataFrame and converts the NDBC date columns (e.g. "#YY MM DD hh mm") to datetime. Returns a DataFrame with the removed NDBC date columns a new ['date'] columns with DateTime Format. @@ -444,44 +468,46 @@ def dates_to_datetime(data, return_date_cols=False, return_as_dataframe=False): ndbc_date_cols: list (optional) List of the DataFrame columns headers for dates as provided by NDBC - ''' + """ if not isinstance(data, pd.DataFrame): - raise TypeError(f'data must be of type pd.DataFrame. Got: {type(data)}') - if not isinstance(return_date_cols,bool): - raise TypeError(f'return_date_cols must be of type bool. Got: {type(return_date_cols)}') + raise TypeError(f"data must be of type pd.DataFrame. Got: {type(data)}") + if not isinstance(return_date_cols, bool): + raise TypeError( + f"return_date_cols must be of type bool. Got: {type(return_date_cols)}" + ) df = data.copy(deep=True) cols = df.columns.values.tolist() try: - minutes_loc = cols.index('mm') + minutes_loc = cols.index("mm") minutes = True except: - df['mm'] = np.zeros(len(df)).astype(int).astype(str) + df["mm"] = np.zeros(len(df)).astype(int).astype(str) minutes = False row_0_is_units = False - year_string = [col for col in cols if col.startswith('Y')] + year_string = [col for col in cols if col.startswith("Y")] if not year_string: - year_string = [col for col in cols if col.startswith('#')] + year_string = [col for col in cols if col.startswith("#")] if not year_string: - print(f'ERROR: Could Not Find Year Column in {cols}') + print(f"ERROR: Could Not Find Year Column in {cols}") year_string = year_string[0] - year_fmt = '%Y' - if str(df[year_string][0]).startswith('#'): + year_fmt = "%Y" + if str(df[year_string][0]).startswith("#"): row_0_is_units = True df = df.drop(df.index[0]) - elif year_string[0] == 'YYYY': + elif year_string[0] == "YYYY": year_string = year_string[0] - year_fmt = '%Y' - elif year_string[0] == 'YY': + year_fmt = "%Y" + elif year_string[0] == "YY": year_string = year_string[0] - year_fmt = '%y' + year_fmt = "%y" - parse_columns = [year_string, 'MM', 'DD', 'hh', 'mm'] + parse_columns = [year_string, "MM", "DD", "hh", "mm"] df = _date_string_to_datetime(df, parse_columns, year_fmt) - date = df['date'] + date = df["date"] if row_0_is_units: date = pd.concat([pd.Series([np.nan]), date]) @@ -491,16 +517,16 @@ def dates_to_datetime(data, return_date_cols=False, return_as_dataframe=False): date = pd.DataFrame(date) if return_date_cols: if minutes: - ndbc_date_cols = [year_string, 'MM', 'DD', 'hh', 'mm'] + ndbc_date_cols = [year_string, "MM", "DD", "hh", "mm"] else: - ndbc_date_cols = [year_string, 'MM', 'DD', 'hh'] + ndbc_date_cols = [year_string, "MM", "DD", "hh"] return date, ndbc_date_cols return date def _date_string_to_datetime(df, columns, year_fmt): - ''' + """ Takes a NDBC df and creates a datetime from multiple columns headers by combining each column into a single string. Then the datetime method is applied given the expected format. @@ -522,31 +548,31 @@ def _date_string_to_datetime(df, columns, year_fmt): ------- df: DataFrame The passed df with a new column ['date'] with the datetime format - ''' + """ if not isinstance(df, pd.DataFrame): - raise TypeError(f'df must be of type pd.DataFrame. Got: {type(df)}') + raise TypeError(f"df must be of type pd.DataFrame. Got: {type(df)}") if not isinstance(columns, list): - raise TypeError(f'columns must be a list. Got: {type(columns)}') + raise TypeError(f"columns must be a list. Got: {type(columns)}") if not isinstance(year_fmt, str): - raise TypeError(f'year_fmt must be a string. Got: {type(year_fmt)}') + raise TypeError(f"year_fmt must be a string. Got: {type(year_fmt)}") # Convert to str and zero pad for key in columns: df[key] = df[key].astype(str).str.zfill(2) - df['date_string'] = df[columns[0]] + df["date_string"] = df[columns[0]] for column in columns[1:]: - df['date_string'] = df[['date_string', column]].apply( - lambda x: ''.join(x), axis=1) - df['date'] = pd.to_datetime( - df['date_string'], format=f'{year_fmt}%m%d%H%M') - del df['date_string'] + df["date_string"] = df[["date_string", column]].apply( + lambda x: "".join(x), axis=1 + ) + df["date"] = pd.to_datetime(df["date_string"], format=f"{year_fmt}%m%d%H%M") + del df["date_string"] return df -def parameter_units(parameter=''): - ''' +def parameter_units(parameter=""): + """ Returns an ordered dictionary of NDBC parameters with unit values. If no parameter is passed then an ordered dictionary of all NDBC parameterz specified unites is returned. If a parameter is specified @@ -582,161 +608,175 @@ def parameter_units(parameter=''): ------- units: dict Dictionary of parameter units - ''' + """ if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string. Got: {type(parameter)}') - - if parameter == 'adcp': - units = {'DEP01': 'm', - 'DIR01': 'deg', - 'SPD01': 'cm/s', - } - elif parameter == 'cwind': - units = {'WDIR': 'degT', - 'WSPD': 'm/s', - 'GDR': 'degT', - 'GST': 'm/s', - 'GTIME': 'hhmm' - } - elif parameter == 'dart': - units = {'T': '-', - 'HEIGHT': 'm', - } - elif parameter == 'derived2': - units = {'CHILL': 'degC', - 'HEAT': 'degC', - 'ICE': 'cm/hr', - 'WSPD10': 'm/s', - 'WSPD20': 'm/s' - } - elif parameter == 'ocean': - units = {'DEPTH': 'm', - 'OTMP': 'degC', - 'COND': 'mS/cm', - 'SAL': 'psu', - 'O2%': '%', - 'O2PPM': 'ppm', - 'CLCON': 'ug/l', - 'TURB': 'FTU', - 'PH': '-', - 'EH': 'mv', - } - elif parameter == 'rain': - units = {'ACCUM': 'mm', - } - elif parameter == 'rain10': - units = {'RATE': 'mm/h', - } - elif parameter == 'rain24': - units = {'RATE': 'mm/h', - 'PCT': '%', - 'SDEV': '-', - } - elif parameter == 'realtime2': - units = {'WVHT': 'm', - 'SwH': 'm', - 'SwP': 'sec', - 'WWH': 'm', - 'WWP': 'sec', - 'SwD': '-', - 'WWD': 'degT', - 'STEEPNESS': '-', - 'APD': 'sec', - 'MWD': 'degT', - } - elif parameter == 'srad': - units = {'SRAD1': 'w/m2', - 'SRAD2': 'w/m2', - 'SRAD3': 'w/m2', - } - elif parameter == 'stdmet': - units = {'WDIR': 'degT', - 'WSPD': 'm/s', - 'GST': 'm/s', - 'WVHT': 'm', - 'DPD': 'sec', - 'APD': 'sec', - 'MWD': 'degT', - 'PRES': 'hPa', - 'ATMP': 'degC', - 'WTMP': 'degC', - 'DEWP': 'degC', - 'VIS': 'nmi', - 'PTDY': 'hPa', - 'TIDE': 'ft'} - elif parameter == 'supl': - units = {'PRES': 'hPa', - 'PTIME': 'hhmm', - 'WSPD': 'm/s', - 'WDIR': 'degT', - 'WTIME': 'hhmm' - } - elif parameter == 'swden': - units = {'swden': '(m*m)/Hz'} - elif parameter == 'swdir': - units = {'swdir': 'deg'} - elif parameter == 'swdir2': - units = {'swdir2': 'deg'} - elif parameter == 'swr1': - units = {'swr1': ''} - elif parameter == 'swr2': - units = {'swr2': ''} + raise TypeError(f"parameter must be a string. Got: {type(parameter)}") + + if parameter == "adcp": + units = { + "DEP01": "m", + "DIR01": "deg", + "SPD01": "cm/s", + } + elif parameter == "cwind": + units = { + "WDIR": "degT", + "WSPD": "m/s", + "GDR": "degT", + "GST": "m/s", + "GTIME": "hhmm", + } + elif parameter == "dart": + units = { + "T": "-", + "HEIGHT": "m", + } + elif parameter == "derived2": + units = { + "CHILL": "degC", + "HEAT": "degC", + "ICE": "cm/hr", + "WSPD10": "m/s", + "WSPD20": "m/s", + } + elif parameter == "ocean": + units = { + "DEPTH": "m", + "OTMP": "degC", + "COND": "mS/cm", + "SAL": "psu", + "O2%": "%", + "O2PPM": "ppm", + "CLCON": "ug/l", + "TURB": "FTU", + "PH": "-", + "EH": "mv", + } + elif parameter == "rain": + units = { + "ACCUM": "mm", + } + elif parameter == "rain10": + units = { + "RATE": "mm/h", + } + elif parameter == "rain24": + units = { + "RATE": "mm/h", + "PCT": "%", + "SDEV": "-", + } + elif parameter == "realtime2": + units = { + "WVHT": "m", + "SwH": "m", + "SwP": "sec", + "WWH": "m", + "WWP": "sec", + "SwD": "-", + "WWD": "degT", + "STEEPNESS": "-", + "APD": "sec", + "MWD": "degT", + } + elif parameter == "srad": + units = { + "SRAD1": "w/m2", + "SRAD2": "w/m2", + "SRAD3": "w/m2", + } + elif parameter == "stdmet": + units = { + "WDIR": "degT", + "WSPD": "m/s", + "GST": "m/s", + "WVHT": "m", + "DPD": "sec", + "APD": "sec", + "MWD": "degT", + "PRES": "hPa", + "ATMP": "degC", + "WTMP": "degC", + "DEWP": "degC", + "VIS": "nmi", + "PTDY": "hPa", + "TIDE": "ft", + } + elif parameter == "supl": + units = { + "PRES": "hPa", + "PTIME": "hhmm", + "WSPD": "m/s", + "WDIR": "degT", + "WTIME": "hhmm", + } + elif parameter == "swden": + units = {"swden": "(m*m)/Hz"} + elif parameter == "swdir": + units = {"swdir": "deg"} + elif parameter == "swdir2": + units = {"swdir2": "deg"} + elif parameter == "swr1": + units = {"swr1": ""} + elif parameter == "swr2": + units = {"swr2": ""} else: - units = {'swden': '(m*m)/Hz', - 'PRES': 'hPa', - 'PTIME': 'hhmm', - 'WDIR': 'degT', - 'WTIME': 'hhmm', - 'DPD': 'sec', - 'MWD': 'degT', - 'ATMP': 'degC', - 'WTMP': 'degC', - 'DEWP': 'degC', - 'VIS': 'nmi', - 'PTDY': 'hPa', - 'TIDE': 'ft', - 'SRAD1': 'w/m2', - 'SRAD2': 'w/m2', - 'SRAD3': 'w/m2', - 'WVHT': 'm', - 'SwH': 'm', - 'SwP': 'sec', - 'WWH': 'm', - 'WWP': 'sec', - 'SwD': '-', - 'WWD': 'degT', - 'STEEPNESS': '-', - 'APD': 'sec', - 'RATE': 'mm/h', - 'PCT': '%', - 'SDEV': '-', - 'ACCUM': 'mm', - 'DEPTH': 'm', - 'OTMP': 'degC', - 'COND': 'mS/cm', - 'SAL': 'psu', - 'O2%': '%', - 'O2PPM': 'ppm', - 'CLCON': 'ug/l', - 'TURB': 'FTU', - 'PH': '-', - 'EH': 'mv', - 'CHILL': 'degC', - 'HEAT': 'degC', - 'ICE': 'cm/hr', - 'WSPD': 'm/s', - 'WSPD10': 'm/s', - 'WSPD20': 'm/s', - 'T': '-', - 'HEIGHT': 'm', - 'GDR': 'degT', - 'GST': 'm/s', - 'GTIME': 'hhmm', - 'DEP01': 'm', - 'DIR01': 'deg', - 'SPD01': 'cm/s', - } + units = { + "swden": "(m*m)/Hz", + "PRES": "hPa", + "PTIME": "hhmm", + "WDIR": "degT", + "WTIME": "hhmm", + "DPD": "sec", + "MWD": "degT", + "ATMP": "degC", + "WTMP": "degC", + "DEWP": "degC", + "VIS": "nmi", + "PTDY": "hPa", + "TIDE": "ft", + "SRAD1": "w/m2", + "SRAD2": "w/m2", + "SRAD3": "w/m2", + "WVHT": "m", + "SwH": "m", + "SwP": "sec", + "WWH": "m", + "WWP": "sec", + "SwD": "-", + "WWD": "degT", + "STEEPNESS": "-", + "APD": "sec", + "RATE": "mm/h", + "PCT": "%", + "SDEV": "-", + "ACCUM": "mm", + "DEPTH": "m", + "OTMP": "degC", + "COND": "mS/cm", + "SAL": "psu", + "O2%": "%", + "O2PPM": "ppm", + "CLCON": "ug/l", + "TURB": "FTU", + "PH": "-", + "EH": "mv", + "CHILL": "degC", + "HEAT": "degC", + "ICE": "cm/hr", + "WSPD": "m/s", + "WSPD10": "m/s", + "WSPD20": "m/s", + "T": "-", + "HEIGHT": "m", + "GDR": "degT", + "GST": "m/s", + "GTIME": "hhmm", + "DEP01": "m", + "DIR01": "deg", + "SPD01": "cm/s", + } units = _OrderedDict(sorted(units.items())) @@ -744,7 +784,7 @@ def parameter_units(parameter=''): def _supported_params(parameter): - ''' + """ There is a significant number of datasets provided by NDBC. There is specific data processing required for each type. Therefore this function throws an error for any data type not currently covered. @@ -762,34 +802,28 @@ def _supported_params(parameter): ------- msg: bool Whether the parameter is supported. - ''' + """ if not isinstance(parameter, str): - raise TypeError(f'parameter must be a string. Got: {type(parameter)}') + raise TypeError(f"parameter must be a string. Got: {type(parameter)}") supported = True - supported_params = [ - 'swden', - 'swdir', - 'swdir2', - 'swr1', - 'swr2', - 'stdmet', - 'cwind' - ] + supported_params = ["swden", "swdir", "swdir2", "swr1", "swr2", "stdmet", "cwind"] param = [param for param in supported_params if param == parameter] if not param: supported = False - msg = ["Currently parameters ['swden', 'swdir', 'swdir2', " + - "'swr1', 'swr2', 'stdmet', 'cwind'] are supported. \n" + - "If you would like to see more data types please \n" + - " open an issue or submit a Pull Request on GitHub"] + msg = [ + "Currently parameters ['swden', 'swdir', 'swdir2', " + + "'swr1', 'swr2', 'stdmet', 'cwind'] are supported. \n" + + "If you would like to see more data types please \n" + + " open an issue or submit a Pull Request on GitHub" + ] raise Exception(msg[0]) return supported def _historical_parameters(): - ''' + """ Names and description of all NDBC Historical Data. Available Data: https://www.ndbc.noaa.gov/data/ @@ -805,26 +839,26 @@ def _historical_parameters(): ------- msg: dict Names and decriptions of historical parameters. - ''' + """ parameters = { - 'adcp': 'Acoustic Doppler Current Profiler Current Year Historical Data', - 'adcp2': 'Acoustic Doppler Current Profiler Current Year Historical Data', - 'cwind': 'Continuous Winds Current Year Historical Data', - 'dart': 'Water Column Height (DART) Current Year Historical Data', - 'mmbcur': 'Marsh-McBirney Current Measurements', - 'ocean': 'Oceanographic Current Year Historical Data', - 'rain': 'Hourly Rain Current Year Historical Data', - 'rain10': '10-Minute Rain Current Year Historical Data', - 'rain24': '24-Hour Rain Current Year Historical Data', - 'srad': 'Solar Radiation Current Year Historical Data', - 'stdmet': 'Standard Meteorological Current Year Historical Data', - 'supl': 'Supplemental Measurements Current Year Historical Data', - 'swden': 'Raw Spectral Wave Current Year Historical Data', - 'swdir': 'Spectral Wave Current Year Historical Data (alpha1)', - 'swdir2': 'Spectral Wave Current Year Historical Data (alpha2)', - 'swr1': 'Spectral Wave Current Year Historical Data (r1)', - 'swr2': 'Spectral Wave Current Year Historical Data (r2)', - 'wlevel': 'Tide Current Year Historical Data', + "adcp": "Acoustic Doppler Current Profiler Current Year Historical Data", + "adcp2": "Acoustic Doppler Current Profiler Current Year Historical Data", + "cwind": "Continuous Winds Current Year Historical Data", + "dart": "Water Column Height (DART) Current Year Historical Data", + "mmbcur": "Marsh-McBirney Current Measurements", + "ocean": "Oceanographic Current Year Historical Data", + "rain": "Hourly Rain Current Year Historical Data", + "rain10": "10-Minute Rain Current Year Historical Data", + "rain24": "24-Hour Rain Current Year Historical Data", + "srad": "Solar Radiation Current Year Historical Data", + "stdmet": "Standard Meteorological Current Year Historical Data", + "supl": "Supplemental Measurements Current Year Historical Data", + "swden": "Raw Spectral Wave Current Year Historical Data", + "swdir": "Spectral Wave Current Year Historical Data (alpha1)", + "swdir2": "Spectral Wave Current Year Historical Data (alpha2)", + "swr1": "Spectral Wave Current Year Historical Data (r1)", + "swr2": "Spectral Wave Current Year Historical Data (r2)", + "wlevel": "Tide Current Year Historical Data", } return parameters @@ -853,75 +887,87 @@ def request_directional_data(buoy, year): and date. """ if not isinstance(buoy, str): - raise TypeError(f'buoy must be a string. Got: {type(buoy)}') + raise TypeError(f"buoy must be a string. Got: {type(buoy)}") if not isinstance(year, int): - raise TypeError(f'year must be an int. Got: {type(year)}') + raise TypeError(f"year must be an int. Got: {type(year)}") - directional_parameters = ['swden', 'swdir', 'swdir2', 'swr1', 'swr2'] + directional_parameters = ["swden", "swdir", "swdir2", "swr1", "swr2"] - seps = {'swden': 'w', - 'swdir': 'd', - 'swdir2': 'i', - 'swr1': 'j', - 'swr2': 'k', - } + seps = { + "swden": "w", + "swdir": "d", + "swdir2": "i", + "swr1": "j", + "swr2": "k", + } data_dict = {} for param in directional_parameters: - file = f'{buoy}{seps[param]}{year}.txt.gz' - raw_data = request_data(param, pd.Series([file,]))[str(year)] + file = f"{buoy}{seps[param]}{year}.txt.gz" + raw_data = request_data( + param, + pd.Series( + [ + file, + ] + ), + )[str(year)] pd_data = to_datetime_index(param, raw_data) xr_data = xr.DataArray(pd_data) - xr_data = xr_data.astype(float).rename({'dim_1': 'frequency', }) - if param in ['swr1', 'swr2']: - xr_data = xr_data/100.0 + xr_data = xr_data.astype(float).rename( + { + "dim_1": "frequency", + } + ) + if param in ["swr1", "swr2"]: + xr_data = xr_data / 100.0 xr_data.frequency.attrs = { - 'units': 'Hz', - 'long_name': 'frequency', - 'standard_name': 'f', + "units": "Hz", + "long_name": "frequency", + "standard_name": "f", } xr_data.date.attrs = { - 'units': '', - 'long_name': 'datetime', - 'standard_name': 't', + "units": "", + "long_name": "datetime", + "standard_name": "t", } data_dict[param] = xr_data - data_dict['swden'].attrs = { - 'units': 'm^2/Hz', - 'long_name': 'omnidirecational spectrum', - 'standard_name': 'S', - 'description': 'Omnidirectional *sea surface elevation variance (m^2)* spectrum (/Hz).' + data_dict["swden"].attrs = { + "units": "m^2/Hz", + "long_name": "omnidirecational spectrum", + "standard_name": "S", + "description": "Omnidirectional *sea surface elevation variance (m^2)* spectrum (/Hz).", } - data_dict['swdir'].attrs = { - 'units': 'deg', - 'long_name': 'mean wave direction', - 'standard_name': 'α1', - 'description': 'Mean wave direction.' + data_dict["swdir"].attrs = { + "units": "deg", + "long_name": "mean wave direction", + "standard_name": "α1", + "description": "Mean wave direction.", } - data_dict['swdir2'].attrs = { - 'units': 'deg', - 'long_name': 'principal wave direction', - 'standard_name': 'α2', - 'description': 'Principal wave direction.' + data_dict["swdir2"].attrs = { + "units": "deg", + "long_name": "principal wave direction", + "standard_name": "α2", + "description": "Principal wave direction.", } - data_dict['swr1'].attrs = { - 'units': '', - 'long_name': 'coordinate r1', - 'standard_name': 'r1', - 'description': 'First normalized polar coordinate of the Fourier coefficients (nondimensional).' + data_dict["swr1"].attrs = { + "units": "", + "long_name": "coordinate r1", + "standard_name": "r1", + "description": "First normalized polar coordinate of the Fourier coefficients (nondimensional).", } - data_dict['swr2'].attrs = { - 'units': '', - 'long_name': 'coordinate r2', - 'standard_name': 'r2', - 'description': 'Second normalized polar coordinate of the Fourier coefficients (nondimensional).' + data_dict["swr2"].attrs = { + "units": "", + "long_name": "coordinate r2", + "standard_name": "r2", + "description": "Second normalized polar coordinate of the Fourier coefficients (nondimensional).", } return xr.Dataset(data_dict) @@ -953,45 +999,51 @@ def _create_spectrum(data, frequencies, directions, name, units): and wave direction. """ if not isinstance(data, np.ndarray): - raise TypeError(f'data must be of type np.ndarray. Got: {type(data)}') + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") if not isinstance(frequencies, np.ndarray): - raise TypeError(f'frequencies must be of type np.ndarray. Got: {type(frequencies)}') + raise TypeError( + f"frequencies must be of type np.ndarray. Got: {type(frequencies)}" + ) if not isinstance(directions, np.ndarray): - raise TypeError(f'directions must be of type np.ndarray. Got: {type(directions)}') + raise TypeError( + f"directions must be of type np.ndarray. Got: {type(directions)}" + ) if not isinstance(name, str): - raise TypeError(f'name must be of type string. Got: {type(name)}') + raise TypeError(f"name must be of type string. Got: {type(name)}") if not isinstance(units, str): - raise TypeError(f'units must be of type string. Got: {type(units)}') + raise TypeError(f"units must be of type string. Got: {type(units)}") - msg = (f'data has wrong shape {data.shape}, ' + - f'expected {(len(frequencies), len(directions))}') + msg = ( + f"data has wrong shape {data.shape}, " + + f"expected {(len(frequencies), len(directions))}" + ) if not data.shape == (len(frequencies), len(directions)): raise ValueError(msg) direction_attrs = { - 'units': 'deg', - 'long_name': 'wave direction', - 'standard_name': 'direction', + "units": "deg", + "long_name": "wave direction", + "standard_name": "direction", } frequency_attrs = { - 'units': 'Hz', - 'long_name': 'frequency', - 'standard_name': 'f', + "units": "Hz", + "long_name": "frequency", + "standard_name": "f", } spectrum = xr.DataArray( data, coords={ - 'frequency': ('frequency', frequencies, frequency_attrs), - 'direction': ('direction', directions, direction_attrs) + "frequency": ("frequency", frequencies, frequency_attrs), + "direction": ("direction", directions, direction_attrs), }, attrs={ - 'units': f'{units}/Hz/deg', - 'long_name': f'{name} spectrum', - 'standard_name': 'spectrum', - 'description': f'*{name} ({units})* spectrum (/Hz/deg).', - } + "units": f"{units}/Hz/deg", + "long_name": f"{name} spectrum", + "standard_name": "spectrum", + "description": f"*{name} ({units})* spectrum (/Hz/deg).", + }, ) return spectrum @@ -1017,28 +1069,25 @@ def create_spread_function(data, directions): frequency and wave direction. """ if not isinstance(data, xr.Dataset): - raise TypeError(f'data must be of type xr.Dataset. Got: {type(data)}') + raise TypeError(f"data must be of type xr.Dataset. Got: {type(data)}") if not isinstance(directions, np.ndarray): - raise TypeError(f'directions must be of type np.ndarray. Got: {type(directions)}') + raise TypeError( + f"directions must be of type np.ndarray. Got: {type(directions)}" + ) - r1 = data['swr1'].data.reshape(-1, 1) - r2 = data['swr2'].data.reshape(-1, 1) - a1 = data['swdir'].data.reshape(-1, 1) - a2 = data['swdir2'].data.reshape(-1, 1) + r1 = data["swr1"].data.reshape(-1, 1) + r2 = data["swr2"].data.reshape(-1, 1) + a1 = data["swdir"].data.reshape(-1, 1) + a2 = data["swdir2"].data.reshape(-1, 1) a = directions.reshape(1, -1) spread = ( - 1/np.pi * ( - 0.5 + - r1*np.cos(np.deg2rad(a-a1)) + - r2*np.cos(2*np.deg2rad(a-a2)) - ) + 1 + / np.pi + * (0.5 + r1 * np.cos(np.deg2rad(a - a1)) + r2 * np.cos(2 * np.deg2rad(a - a2))) ) spread = _create_spectrum( - spread, - data.frequency.values, - directions, - name="Spread", - units="1") + spread, data.frequency.values, directions, name="Spread", units="1" + ) return spread @@ -1062,28 +1111,31 @@ def create_directional_spectrum(data, directions): and wave direction. """ if not isinstance(data, xr.Dataset): - raise TypeError(f'data must be of type xr.Dataset. Got: {type(data)}') + raise TypeError(f"data must be of type xr.Dataset. Got: {type(data)}") if not isinstance(directions, np.ndarray): - raise TypeError(f'directions must be of type np.ndarray. Got: {type(directions)}') + raise TypeError( + f"directions must be of type np.ndarray. Got: {type(directions)}" + ) spread = create_spread_function(data, directions).values - omnidirectional_spectrum = data['swden'].data.reshape(-1, 1) + omnidirectional_spectrum = data["swden"].data.reshape(-1, 1) spectrum = omnidirectional_spectrum * spread spectrum = _create_spectrum( spectrum, data.frequency.values, directions, name="Elevation variance", - units="m^2") + units="m^2", + ) return spectrum def get_buoy_metadata(station_number: str): """ - Fetches and parses the metadata of a National Data Buoy Center (NDBC) station + Fetches and parses the metadata of a National Data Buoy Center (NDBC) station from https://www.ndbc.noaa.gov. - Extracts information such as provider, buoy type, latitude, longitude, and + Extracts information such as provider, buoy type, latitude, longitude, and other metadata from the station's webpage. Parameters @@ -1109,29 +1161,28 @@ def get_buoy_metadata(station_number: str): soup = BeautifulSoup(content, "html.parser") # Find the title element - title_element = soup.find('h1') + title_element = soup.find("h1") # Extract the title (remove the trailing image and whitespace) - title = title_element.get_text(strip=True).split('\n')[0] + title = title_element.get_text(strip=True).split("\n")[0] # Check if the title element exists - if title == 'Station not found': - raise ValueError( - f"Invalid or nonexistent station number: {station_number}") + if title == "Station not found": + raise ValueError(f"Invalid or nonexistent station number: {station_number}") # Save buoy name to a dictionary data = {} - data['buoy'] = title + data["buoy"] = title # Find the specific div containing the buoy metadata - metadata_div = soup.find('div', id='stn_metadata') + metadata_div = soup.find("div", id="stn_metadata") # Extract the metadata - lines = metadata_div.p.text.split('\n') + lines = metadata_div.p.text.split("\n") line_count = 1 for line in lines: line = line.strip() - if line.startswith(''): + if line.startswith(""): line = line[3:] # Line should be the data provider if line_count == 1: @@ -1140,13 +1191,13 @@ def get_buoy_metadata(station_number: str): elif line_count == 2: data["type"] = line # Special case look for lat/long - elif re.match(r'\d+\.\d+\s+[NS]\s+\d+\.\d+\s+[EW]', line): - lat, lon = line.split(' ', 3)[0:3:2] + elif re.match(r"\d+\.\d+\s+[NS]\s+\d+\.\d+\s+[EW]", line): + lat, lon = line.split(" ", 3)[0:3:2] data["lat"] = lat.strip() data["lon"] = lon.strip() # Split key value pairs on colon - elif ':' in line: - key, value = line.split(':', 1) + elif ":" in line: + key, value = line.split(":", 1) data[key.strip()] = value.strip() # Catch all other lines as keys with empty values elif line: diff --git a/mhkit/wave/io/swan.py b/mhkit/wave/io/swan.py index 27aae18c2..c7a6830a2 100644 --- a/mhkit/wave/io/swan.py +++ b/mhkit/wave/io/swan.py @@ -2,243 +2,243 @@ from os.path import isfile import pandas as pd import numpy as np -import re - +import re + def read_table(swan_file): - ''' + """ Reads in SWAN table format output - + Parameters ---------- swan_file: str filename to import - + Returns ------- swan_data: DataFrame Dataframe of swan output metaDict: Dictionary Dictionary of metaData - ''' + """ if not isinstance(swan_file, str): - raise TypeError(f'swan_file must be of type str. Got: {type(swan_file)}') + raise TypeError(f"swan_file must be of type str. Got: {type(swan_file)}") if not isfile(swan_file): - raise ValueError(f'File not found: {swan_file}') - - f = open(swan_file,'r') + raise ValueError(f"File not found: {swan_file}") + + f = open(swan_file, "r") header_line_number = 4 - for i in range(header_line_number+2): + for i in range(header_line_number + 2): line = f.readline() - if line.startswith('% Run'): + if line.startswith("% Run"): metaDict = _parse_line_metadata(line) - if metaDict['Table'].endswith('SWAN'): - metaDict['Table'] = metaDict['Table'].split(' SWAN')[:-1] - if i == header_line_number: - header = re.split("\s+",line.rstrip().strip('%').lstrip()) - metaDict['header'] = header - if i == header_line_number+1: - units = re.split('\s+',line.strip(' %\n').replace('[','').replace(']','')) - metaDict['units'] = units - f.close() - - swan_data = pd.read_csv(swan_file, sep='\s+', comment='%', - names=metaDict['header']) - return swan_data, metaDict + if metaDict["Table"].endswith("SWAN"): + metaDict["Table"] = metaDict["Table"].split(" SWAN")[:-1] + if i == header_line_number: + header = re.split("\s+", line.rstrip().strip("%").lstrip()) + metaDict["header"] = header + if i == header_line_number + 1: + units = re.split( + "\s+", line.strip(" %\n").replace("[", "").replace("]", "") + ) + metaDict["units"] = units + f.close() + + swan_data = pd.read_csv(swan_file, sep="\s+", comment="%", names=metaDict["header"]) + return swan_data, metaDict def read_block(swan_file): - ''' - Reads in SWAN block output with headers and creates a dictionary + """ + Reads in SWAN block output with headers and creates a dictionary of DataFrames for each SWAN output variable in the output file. - + Parameters ---------- swan_file: str swan block file to import - + Returns ------- data: Dictionary - Dictionary of DataFrame of swan output variables + Dictionary of DataFrame of swan output variables metaDict: Dictionary - Dictionary of metaData dependent on file type - ''' + Dictionary of metaData dependent on file type + """ if not isinstance(swan_file, str): - raise TypeError(f'swan_file must be of type str. Got: {type(swan_file)}') + raise TypeError(f"swan_file must be of type str. Got: {type(swan_file)}") if not isfile(swan_file): - raise ValueError(f'File not found: {swan_file}') - - extension = swan_file.split('.')[1].lower() - if extension == 'mat': + raise ValueError(f"File not found: {swan_file}") + + extension = swan_file.split(".")[1].lower() + if extension == "mat": dataDict = _read_block_mat(swan_file) - metaData = {'filetype': 'mat', - 'variables': [var for var in dataDict.keys()]} + metaData = {"filetype": "mat", "variables": [var for var in dataDict.keys()]} else: dataDict, metaData = _read_block_txt(swan_file) return dataDict, metaData - + def _read_block_txt(swan_file): - ''' - Reads in SWAN block output with headers and creates a dictionary + """ + Reads in SWAN block output with headers and creates a dictionary of DataFrames for each SWAN output variable in the output file. - + Parameters ---------- swan_file: str swan block file to import (must be written with headers) - + Returns ------- dataDict: Dictionary Dictionary of DataFrame of swan output variables metaDict: Dictionary - Dictionary of metaData dependent on file type - ''' + Dictionary of metaData dependent on file type + """ if not isinstance(swan_file, str): - raise TypeError(f'swan_file must be of type str. Got: {type(swan_file)}') + raise TypeError(f"swan_file must be of type str. Got: {type(swan_file)}") if not isfile(swan_file): - raise ValueError(f'File not found: {swan_file}') - - f = open(swan_file) - runLines=[] + raise ValueError(f"File not found: {swan_file}") + + f = open(swan_file) + runLines = [] metaDict = {} column_position = None - dataDict={} + dataDict = {} for position, line in enumerate(f): - - if line.startswith('% Run'): + if line.startswith("% Run"): varPosition = position runLines.extend([position]) - column_position = position + 5 - varDict = _parse_line_metadata(line) - varDict['unitMultiplier'] = float(varDict['Unit'].split(' ')[0]) - - metaDict[varPosition] = varDict - variable = varDict['vars'] + column_position = position + 5 + varDict = _parse_line_metadata(line) + varDict["unitMultiplier"] = float(varDict["Unit"].split(" ")[0]) + + metaDict[varPosition] = varDict + variable = varDict["vars"] dataDict[variable] = {} - - if position==column_position and column_position!=None: - columns = line.strip('% \n').split() - metaDict[varPosition]['cols'] = columns - N_columns = len(columns) - columns_position = None - - - if not line.startswith('%'): - raw_data = ' '.join(re.split(' |\.', line.strip(' \n'))).split() + + if position == column_position and column_position != None: + columns = line.strip("% \n").split() + metaDict[varPosition]["cols"] = columns + N_columns = len(columns) + columns_position = None + + if not line.startswith("%"): + raw_data = " ".join(re.split(" |\.", line.strip(" \n"))).split() index_number = int(raw_data[0]) columns_data = raw_data[1:] - data=[] - possibleNaNs = ['****'] + data = [] + possibleNaNs = ["****"] NNaNsTotal = sum([line.count(nanVal) for nanVal in possibleNaNs]) - - if NNaNsTotal>0: + + if NNaNsTotal > 0: for vals in columns_data: - NNaNs = 0 + NNaNs = 0 for nanVal in possibleNaNs: NNaNs += vals.count(nanVal) if NNaNs > 0: for i in range(NNaNs): - data.extend([np.nan]) + data.extend([np.nan]) else: data.extend([float(vals)]) - else: - data.extend([float(val) for val in columns_data]) - + else: + data.extend([float(val) for val in columns_data]) + dataDict[variable][index_number] = data - - metaData = pd.DataFrame(metaDict).T + + metaData = pd.DataFrame(metaDict).T f.close() - - for var in metaData.vars.values: - df = pd.DataFrame(dataDict[var]).T - varCols = metaData[metaData.vars == var].cols.values.tolist()[0] + + for var in metaData.vars.values: + df = pd.DataFrame(dataDict[var]).T + varCols = metaData[metaData.vars == var].cols.values.tolist()[0] colsDict = dict(zip(df.columns.values.tolist(), varCols)) df.rename(columns=colsDict) unitMultiplier = metaData[metaData.vars == var].unitMultiplier.values[0] - dataDict[var] = df * unitMultiplier - - metaData.pop('cols') - metaData = metaData.set_index('vars').T.to_dict() - return dataDict, metaData - + dataDict[var] = df * unitMultiplier + + metaData.pop("cols") + metaData = metaData.set_index("vars").T.to_dict() + return dataDict, metaData + def _read_block_mat(swan_file): - ''' + """ Reads in SWAN matlab output and creates a dictionary of DataFrames for each swan output variable. - + Parameters ---------- swan_file: str filename to import - + Returns ------- dataDict: Dictionary Dictionary of DataFrame of swan output variables - ''' + """ if not isinstance(swan_file, str): - raise TypeError(f'swan_file must be of type str. Got: {type(swan_file)}') + raise TypeError(f"swan_file must be of type str. Got: {type(swan_file)}") if not isfile(swan_file): - raise ValueError(f'File not found: {swan_file}') - + raise ValueError(f"File not found: {swan_file}") + dataDict = loadmat(swan_file, struct_as_record=False, squeeze_me=True) - removeKeys = ['__header__', '__version__', '__globals__'] + removeKeys = ["__header__", "__version__", "__globals__"] for key in removeKeys: dataDict.pop(key, None) for key in dataDict.keys(): dataDict[key] = pd.DataFrame(dataDict[key]) return dataDict - - + + def _parse_line_metadata(line): - ''' + """ Parses the variable metadata into a dictionary - + Parameters ---------- line: str line from block swan data to parse - + Returns ------- metaDict: Dictionary Dictionary of variable metadata - ''' + """ if not isinstance(line, str): - raise TypeError(f'line must be of type str. Got: {type(line)}') - - metaDict={} - meta=re.sub('\s+', " ", line.replace(',', ' ').strip('% \n').replace('**', 'vars:')) - mList = meta.split(':') - elms = [elm.split(' ') for elm in mList] + raise TypeError(f"line must be of type str. Got: {type(line)}") + + metaDict = {} + meta = re.sub( + "\s+", " ", line.replace(",", " ").strip("% \n").replace("**", "vars:") + ) + mList = meta.split(":") + elms = [elm.split(" ") for elm in mList] for elm in elms: try: - elm.remove('') + elm.remove("") except: - pass - for i in range(len(elms)-1): + pass + for i in range(len(elms) - 1): elm = elms[i] key = elm[-1] - val = ' '.join(elms[i+1][:-1]) + val = " ".join(elms[i + 1][:-1]) metaDict[key] = val - metaDict[key] = ' '.join(elms[-1]) - - return metaDict + metaDict[key] = " ".join(elms[-1]) + + return metaDict def dictionary_of_block_to_table(dictionary_of_DataFrames, names=None): - ''' - Converts a dictionary of structured 2D grid SWAN block format - x (columns),y (index) to SWAN table format x (column),y (column), + """ + Converts a dictionary of structured 2D grid SWAN block format + x (columns),y (index) to SWAN table format x (column),y (column), values (column) DataFrame. - + Parameters ---------- - dictionary_of_DataFrames: Dictionary + dictionary_of_DataFrames: Dictionary Dictionary of DataFrames in with columns as X indicie and Y as index. names: List (Optional) Name of data column in returned table. Default=Dictionary.keys() @@ -246,43 +246,55 @@ def dictionary_of_block_to_table(dictionary_of_DataFrames, names=None): ------- swanTables: DataFrame DataFrame with columns x,y,values where values = Dictionary.keys() - or names - ''' + or names + """ if not isinstance(dictionary_of_DataFrames, dict): - raise TypeError(f'dictionary_of_DataFrames must be of type dict. Got: {type(dictionary_of_DataFrames)}') + raise TypeError( + f"dictionary_of_DataFrames must be of type dict. Got: {type(dictionary_of_DataFrames)}" + ) if not bool(dictionary_of_DataFrames): - raise ValueError(f'dictionary_of_DataFrames is empty. Got: {dictionary_of_DataFrames}') - for key in dictionary_of_DataFrames: - if not isinstance(dictionary_of_DataFrames[key],pd.DataFrame): - raise TypeError(f'Dictionary key:{key} must be of type pd.DataFrame. Got: {type(dictionary_of_DataFrames[key])}') + raise ValueError( + f"dictionary_of_DataFrames is empty. Got: {dictionary_of_DataFrames}" + ) + for key in dictionary_of_DataFrames: + if not isinstance(dictionary_of_DataFrames[key], pd.DataFrame): + raise TypeError( + f"Dictionary key:{key} must be of type pd.DataFrame. Got: {type(dictionary_of_DataFrames[key])}" + ) if not isinstance(names, type(None)): if not isinstance(names, list): - raise TypeError(f'If specified, names must be of type list. Got: {type(names)}') + raise TypeError( + f"If specified, names must be of type list. Got: {type(names)}" + ) if not all([isinstance(elm, str) for elm in names]): - raise ValueError(f'If specified, all elements in names must be of type string. Got: {names}') + raise ValueError( + f"If specified, all elements in names must be of type string. Got: {names}" + ) if not len(names) == len(dictionary_of_DataFrames): - raise ValueError('If specified, names must the same length as dictionary_of_DataFrames') - + raise ValueError( + "If specified, names must the same length as dictionary_of_DataFrames" + ) + if names == None: - variables = [var for var in dictionary_of_DataFrames.keys() ] + variables = [var for var in dictionary_of_DataFrames.keys()] else: variables = names - + var0 = variables[0] swanTables = block_to_table(dictionary_of_DataFrames[var0], name=var0) - for var in variables[1:]: + for var in variables[1:]: tmp_dat = block_to_table(dictionary_of_DataFrames[var], name=var) swanTables[var] = tmp_dat[var] - + return swanTables - -def block_to_table(data, name='values'): - ''' - Converts structured 2D grid SWAN block format x (columns), y (index) - to SWAN table format x (column),y (column), values (column) + +def block_to_table(data, name="values"): + """ + Converts structured 2D grid SWAN block format x (columns), y (index) + to SWAN table format x (column),y (column), values (column) DataFrame. - + Parameters ---------- data: DataFrame @@ -292,16 +304,15 @@ def block_to_table(data, name='values'): Returns ------- table: DataFrame - DataFrame with columns x,y,values - ''' - if not isinstance(data,pd.DataFrame): - raise TypeError(f'data must be of type pd.DataFrame. Got: {type(data)}') + DataFrame with columns x,y,values + """ + if not isinstance(data, pd.DataFrame): + raise TypeError(f"data must be of type pd.DataFrame. Got: {type(data)}") if not isinstance(name, str): - raise TypeError(f'If specified, name must be of type str. Got: {type(name)}') - + raise TypeError(f"If specified, name must be of type str. Got: {type(name)}") + table = data.unstack().reset_index(name=name) - table = table.rename(columns={'level_0':'x', 'level_1': 'y'}) - table.sort_values(['x', 'y'], ascending=[True, True], inplace=True) + table = table.rename(columns={"level_0": "x", "level_1": "y"}) + table.sort_values(["x", "y"], ascending=[True, True], inplace=True) return table - diff --git a/mhkit/wave/io/wecsim.py b/mhkit/wave/io/wecsim.py index 65ce071cf..a504ad6c6 100644 --- a/mhkit/wave/io/wecsim.py +++ b/mhkit/wave/io/wecsim.py @@ -5,27 +5,27 @@ def read_output(file_name): """ - Loads the wecSim response class once 'output' has been saved to a `.mat` - structure. - - NOTE: Python is unable to import MATLAB objects. - MATLAB must be used to save the wecSim object as a structure. - + Loads the wecSim response class once 'output' has been saved to a `.mat` + structure. + + NOTE: Python is unable to import MATLAB objects. + MATLAB must be used to save the wecSim object as a structure. + Parameters ------------ file_name: string Name of wecSim output file saved as a `.mat` structure - - + + Returns --------- - ws_output: dict - Dictionary of pandas DataFrames, indexed by time (s) - + ws_output: dict + Dictionary of pandas DataFrames, indexed by time (s) + """ - + ws_data = sio.loadmat(file_name) - output = ws_data['output'] + output = ws_data["output"] ###################################### ## import wecSim wave class @@ -33,25 +33,24 @@ def read_output(file_name): # time: [iterations x 1 double] # elevation: [iterations x 1 double] ###################################### - try: - wave = output['wave'] - wave_type = wave[0][0][0][0][0][0] - time = wave[0][0]['time'][0][0].squeeze() - elevation = wave[0][0]['elevation'][0][0].squeeze() - + try: + wave = output["wave"] + wave_type = wave[0][0][0][0][0][0] + time = wave[0][0]["time"][0][0].squeeze() + elevation = wave[0][0]["elevation"][0][0].squeeze() + ###################################### ## create wave_output DataFrame ###################################### - wave_output = pd.DataFrame(data = time,columns=['time']) - wave_output = wave_output.set_index('time') - wave_output['elevation'] = elevation + wave_output = pd.DataFrame(data=time, columns=["time"]) + wave_output = wave_output.set_index("time") + wave_output["elevation"] = elevation wave_output.name = wave_type - + except: - print("wave class not used") - wave_output = [] - - + print("wave class not used") + wave_output = [] + ###################################### ## import wecSim body class # name: '' @@ -66,11 +65,11 @@ def read_output(file_name): # forceRestoring: [iterations x 6 double] # forceMorisonAndViscous: [iterations x 6 double] # forceLinearDamping: [iterations x 6 double] - ###################################### + ###################################### try: - bodies = output['bodies'] - num_bodies = len(bodies[0][0]['name'][0]) - name = [] + bodies = output["bodies"] + num_bodies = len(bodies[0][0]["name"][0]) + name = [] time = [] position = [] velocity = [] @@ -83,57 +82,66 @@ def read_output(file_name): forceMorisonAndViscous = [] forceLinearDamping = [] for body in range(num_bodies): - name.append(bodies[0][0]['name'][0][body][0]) - time.append(bodies[0][0]['time'][0][body]) - position.append(bodies[0][0]['position'][0][body]) - velocity.append(bodies[0][0]['velocity'][0][body]) - acceleration.append(bodies[0][0]['acceleration'][0][body]) - forceTotal.append(bodies[0][0]['forceTotal'][0][body]) - forceExcitation.append(bodies[0][0]['forceExcitation'][0][body]) - forceRadiationDamping.append(bodies[0][0]['forceRadiationDamping'][0][body]) - forceAddedMass.append(bodies[0][0]['forceAddedMass'][0][body]) - forceRestoring.append(bodies[0][0]['forceRestoring'][0][body]) + name.append(bodies[0][0]["name"][0][body][0]) + time.append(bodies[0][0]["time"][0][body]) + position.append(bodies[0][0]["position"][0][body]) + velocity.append(bodies[0][0]["velocity"][0][body]) + acceleration.append(bodies[0][0]["acceleration"][0][body]) + forceTotal.append(bodies[0][0]["forceTotal"][0][body]) + forceExcitation.append(bodies[0][0]["forceExcitation"][0][body]) + forceRadiationDamping.append(bodies[0][0]["forceRadiationDamping"][0][body]) + forceAddedMass.append(bodies[0][0]["forceAddedMass"][0][body]) + forceRestoring.append(bodies[0][0]["forceRestoring"][0][body]) try: - # Format in WEC-Sim responseClass >= v4.2 - forceMorisonAndViscous.append(bodies[0][0]['forceMorisonAndViscous'][0][body]) + # Format in WEC-Sim responseClass >= v4.2 + forceMorisonAndViscous.append( + bodies[0][0]["forceMorisonAndViscous"][0][body] + ) except: # Format in WEC-Sim responseClass <= v4.1 - forceMorisonAndViscous.append(bodies[0][0]['forceMorrisonAndViscous'][0][body]) - forceLinearDamping.append(bodies[0][0]['forceLinearDamping'][0][body]) + forceMorisonAndViscous.append( + bodies[0][0]["forceMorrisonAndViscous"][0][body] + ) + forceLinearDamping.append(bodies[0][0]["forceLinearDamping"][0][body]) except: - num_bodies = 0 - + num_bodies = 0 + ###################################### ## create body_output DataFrame - ###################################### + ###################################### def _write_body_output(body): - for dof in range(6): - tmp_body[f'position_dof{dof+1}'] = position[body][:,dof] - tmp_body[f'velocity_dof{dof+1}'] = velocity[body][:,dof] - tmp_body[f'acceleration_dof{dof+1}'] = acceleration[body][:,dof] - tmp_body[f'forceTotal_dof{dof+1}'] = forceTotal[body][:,dof] - tmp_body[f'forceExcitation_dof{dof+1}'] = forceExcitation[body][:,dof] - tmp_body[f'forceRadiationDamping_dof{dof+1}'] = forceRadiationDamping[body][:,dof] - tmp_body[f'forceAddedMass_dof{dof+1}'] = forceAddedMass[body][:,dof] - tmp_body[f'forceRestoring_dof{dof+1}'] = forceRestoring[body][:,dof] - tmp_body[f'forceMorisonAndViscous_dof{dof+1}'] = forceMorisonAndViscous[body][:,dof] - tmp_body[f'forceLinearDamping_dof{dof+1}'] = forceLinearDamping[body][:,dof] + for dof in range(6): + tmp_body[f"position_dof{dof+1}"] = position[body][:, dof] + tmp_body[f"velocity_dof{dof+1}"] = velocity[body][:, dof] + tmp_body[f"acceleration_dof{dof+1}"] = acceleration[body][:, dof] + tmp_body[f"forceTotal_dof{dof+1}"] = forceTotal[body][:, dof] + tmp_body[f"forceExcitation_dof{dof+1}"] = forceExcitation[body][:, dof] + tmp_body[f"forceRadiationDamping_dof{dof+1}"] = forceRadiationDamping[body][ + :, dof + ] + tmp_body[f"forceAddedMass_dof{dof+1}"] = forceAddedMass[body][:, dof] + tmp_body[f"forceRestoring_dof{dof+1}"] = forceRestoring[body][:, dof] + tmp_body[f"forceMorisonAndViscous_dof{dof+1}"] = forceMorisonAndViscous[ + body + ][:, dof] + tmp_body[f"forceLinearDamping_dof{dof+1}"] = forceLinearDamping[body][ + :, dof + ] return tmp_body if num_bodies >= 1: body_output = {} for body in range(num_bodies): - tmp_body = pd.DataFrame(data = time[0],columns=['time']) - tmp_body = tmp_body.set_index('time') + tmp_body = pd.DataFrame(data=time[0], columns=["time"]) + tmp_body = tmp_body.set_index("time") tmp_body.name = name[body] if num_bodies == 1: body_output = _write_body_output(body) elif num_bodies > 1: - body_output[f'body{body+1}'] = _write_body_output(body) + body_output[f"body{body+1}"] = _write_body_output(body) else: - print("body class not used") - body_output = [] - + print("body class not used") + body_output = [] ###################################### ## import wecSim pto class @@ -149,9 +157,9 @@ def _write_body_output(body): # powerInternalMechanics: [iterations x 6 double] ###################################### try: - ptos = output['ptos'] - num_ptos = len(ptos[0][0]['name'][0]) - name = [] + ptos = output["ptos"] + num_ptos = len(ptos[0][0]["name"][0]) + name = [] time = [] position = [] velocity = [] @@ -160,110 +168,118 @@ def _write_body_output(body): forceActuation = [] forceConstraint = [] forceInternalMechanics = [] - powerInternalMechanics= [] + powerInternalMechanics = [] for pto in range(num_ptos): - name.append(ptos[0][0]['name'][0][pto][0]) - time.append(ptos[0][0]['time'][0][pto]) - position.append(ptos[0][0]['position'][0][pto]) - velocity.append(ptos[0][0]['velocity'][0][pto]) - acceleration.append(ptos[0][0]['acceleration'][0][pto]) - forceTotal.append(ptos[0][0]['forceTotal'][0][pto]) - forceActuation.append(ptos[0][0]['forceActuation'][0][pto]) - forceConstraint.append(ptos[0][0]['forceConstraint'][0][pto]) - forceInternalMechanics.append(ptos[0][0]['forceInternalMechanics'][0][pto]) - powerInternalMechanics.append(ptos[0][0]['powerInternalMechanics'][0][pto]) + name.append(ptos[0][0]["name"][0][pto][0]) + time.append(ptos[0][0]["time"][0][pto]) + position.append(ptos[0][0]["position"][0][pto]) + velocity.append(ptos[0][0]["velocity"][0][pto]) + acceleration.append(ptos[0][0]["acceleration"][0][pto]) + forceTotal.append(ptos[0][0]["forceTotal"][0][pto]) + forceActuation.append(ptos[0][0]["forceActuation"][0][pto]) + forceConstraint.append(ptos[0][0]["forceConstraint"][0][pto]) + forceInternalMechanics.append(ptos[0][0]["forceInternalMechanics"][0][pto]) + powerInternalMechanics.append(ptos[0][0]["powerInternalMechanics"][0][pto]) except: - num_ptos = 0 - + num_ptos = 0 + ###################################### ## create pto_output DataFrame - ###################################### + ###################################### def _write_pto_output(pto): - for dof in range(6): - tmp_pto[f'position_dof{dof+1}'] = position[pto][:,dof] - tmp_pto[f'velocity_dof{dof+1}'] = velocity[pto][:,dof] - tmp_pto[f'acceleration_dof{dof+1}'] = acceleration[pto][:,dof] - tmp_pto[f'forceTotal_dof{dof+1}'] = forceTotal[pto][:,dof] - tmp_pto[f'forceTotal_dof{dof+1}'] = forceTotal[pto][:,dof] - tmp_pto[f'forceActuation_dof{dof+1}'] = forceActuation[pto][:,dof] - tmp_pto[f'forceConstraint_dof{dof+1}'] = forceConstraint[pto][:,dof] - tmp_pto[f'forceInternalMechanics_dof{dof+1}'] = forceInternalMechanics[pto][:,dof] - tmp_pto[f'powerInternalMechanics_dof{dof+1}'] = powerInternalMechanics[pto][:,dof] + for dof in range(6): + tmp_pto[f"position_dof{dof+1}"] = position[pto][:, dof] + tmp_pto[f"velocity_dof{dof+1}"] = velocity[pto][:, dof] + tmp_pto[f"acceleration_dof{dof+1}"] = acceleration[pto][:, dof] + tmp_pto[f"forceTotal_dof{dof+1}"] = forceTotal[pto][:, dof] + tmp_pto[f"forceTotal_dof{dof+1}"] = forceTotal[pto][:, dof] + tmp_pto[f"forceActuation_dof{dof+1}"] = forceActuation[pto][:, dof] + tmp_pto[f"forceConstraint_dof{dof+1}"] = forceConstraint[pto][:, dof] + tmp_pto[f"forceInternalMechanics_dof{dof+1}"] = forceInternalMechanics[pto][ + :, dof + ] + tmp_pto[f"powerInternalMechanics_dof{dof+1}"] = powerInternalMechanics[pto][ + :, dof + ] return tmp_pto if num_ptos >= 1: - pto_output = {} + pto_output = {} for pto in range(num_ptos): - tmp_pto = pd.DataFrame(data = time[0],columns=['time']) - tmp_pto = tmp_pto.set_index('time') + tmp_pto = pd.DataFrame(data=time[0], columns=["time"]) + tmp_pto = tmp_pto.set_index("time") tmp_pto.name = name[pto] - if num_ptos == 1: + if num_ptos == 1: pto_output = _write_pto_output(pto) elif num_ptos > 1: - pto_output[f'pto{pto+1}'] = _write_pto_output(pto) + pto_output[f"pto{pto+1}"] = _write_pto_output(pto) else: - print("pto class not used") + print("pto class not used") pto_output = [] - ###################################### ## import wecSim constraint class - # + # # name: '' # time: [iterations x 1 double] # position: [iterations x 6 double] # velocity: [iterations x 6 double] # acceleration: [iterations x 6 double] # forceConstraint: [iterations x 6 double] - ###################################### + ###################################### try: - constraints = output['constraints'] - num_constraints = len(constraints[0][0]['name'][0]) - name = [] + constraints = output["constraints"] + num_constraints = len(constraints[0][0]["name"][0]) + name = [] time = [] position = [] velocity = [] acceleration = [] forceConstraint = [] for constraint in range(num_constraints): - name.append(constraints[0][0]['name'][0][constraint][0]) - time.append(constraints[0][0]['time'][0][constraint]) - position.append(constraints[0][0]['position'][0][constraint]) - velocity.append(constraints[0][0]['velocity'][0][constraint]) - acceleration.append(constraints[0][0]['acceleration'][0][constraint]) - forceConstraint.append(constraints[0][0]['forceConstraint'][0][constraint]) + name.append(constraints[0][0]["name"][0][constraint][0]) + time.append(constraints[0][0]["time"][0][constraint]) + position.append(constraints[0][0]["position"][0][constraint]) + velocity.append(constraints[0][0]["velocity"][0][constraint]) + acceleration.append(constraints[0][0]["acceleration"][0][constraint]) + forceConstraint.append(constraints[0][0]["forceConstraint"][0][constraint]) except: - num_constraints = 0 - + num_constraints = 0 + ###################################### ## create constraint_output DataFrame - ###################################### + ###################################### def _write_constraint_output(constraint): - for dof in range(6): - tmp_constraint[f'position_dof{dof+1}'] = position[constraint][:,dof] - tmp_constraint[f'velocity_dof{dof+1}'] = velocity[constraint][:,dof] - tmp_constraint[f'acceleration_dof{dof+1}'] = acceleration[constraint][:,dof] - tmp_constraint[f'forceConstraint_dof{dof+1}'] = forceConstraint[constraint][:,dof] + for dof in range(6): + tmp_constraint[f"position_dof{dof+1}"] = position[constraint][:, dof] + tmp_constraint[f"velocity_dof{dof+1}"] = velocity[constraint][:, dof] + tmp_constraint[f"acceleration_dof{dof+1}"] = acceleration[constraint][ + :, dof + ] + tmp_constraint[f"forceConstraint_dof{dof+1}"] = forceConstraint[constraint][ + :, dof + ] return tmp_constraint if num_constraints >= 1: constraint_output = {} for constraint in range(num_constraints): - tmp_constraint = pd.DataFrame(data = time[0],columns=['time']) - tmp_constraint = tmp_constraint.set_index('time') + tmp_constraint = pd.DataFrame(data=time[0], columns=["time"]) + tmp_constraint = tmp_constraint.set_index("time") tmp_constraint.name = name[constraint] if num_constraints == 1: constraint_output = _write_constraint_output(constraint) elif num_constraints > 1: - constraint_output[f'constraint{constraint+1}'] = _write_constraint_output(constraint) + constraint_output[ + f"constraint{constraint+1}" + ] = _write_constraint_output(constraint) else: - print("constraint class not used") + print("constraint class not used") constraint_output = [] - ###################################### ## import wecSim mooring class - # + # # name: '' # time: [iterations x 1 double] # position: [iterations x 6 double] @@ -271,47 +287,46 @@ def _write_constraint_output(constraint): # forceMooring: [iterations x 6 double] ###################################### try: - moorings = output['mooring'] - num_moorings = len(moorings[0][0]['name'][0]) - name = [] + moorings = output["mooring"] + num_moorings = len(moorings[0][0]["name"][0]) + name = [] time = [] position = [] velocity = [] forceMooring = [] for mooring in range(num_moorings): - name.append(moorings[0][0]['name'][0][mooring][0]) - time.append(moorings[0][0]['time'][0][mooring]) - position.append(moorings[0][0]['position'][0][mooring]) - velocity.append(moorings[0][0]['velocity'][0][mooring]) - forceMooring.append(moorings[0][0]['forceMooring'][0][mooring]) + name.append(moorings[0][0]["name"][0][mooring][0]) + time.append(moorings[0][0]["time"][0][mooring]) + position.append(moorings[0][0]["position"][0][mooring]) + velocity.append(moorings[0][0]["velocity"][0][mooring]) + forceMooring.append(moorings[0][0]["forceMooring"][0][mooring]) except: - num_moorings = 0 + num_moorings = 0 ###################################### ## create mooring_output DataFrame - ###################################### + ###################################### def _write_mooring_output(mooring): - for dof in range(6): - tmp_mooring[f'position_dof{dof+1}'] = position[mooring][:,dof] - tmp_mooring[f'velocity_dof{dof+1}'] = velocity[mooring][:,dof] - tmp_mooring[f'forceMooring_dof{dof+1}'] = forceMooring[mooring][:,dof] + for dof in range(6): + tmp_mooring[f"position_dof{dof+1}"] = position[mooring][:, dof] + tmp_mooring[f"velocity_dof{dof+1}"] = velocity[mooring][:, dof] + tmp_mooring[f"forceMooring_dof{dof+1}"] = forceMooring[mooring][:, dof] return tmp_mooring - if num_moorings >= 1: + if num_moorings >= 1: mooring_output = {} for mooring in range(num_moorings): - tmp_mooring = pd.DataFrame(data = time[0],columns=['time']) - tmp_mooring = tmp_mooring.set_index('time') + tmp_mooring = pd.DataFrame(data=time[0], columns=["time"]) + tmp_mooring = tmp_mooring.set_index("time") tmp_mooring.name = name[mooring] - if num_moorings == 1: + if num_moorings == 1: mooring_output = _write_mooring_output(mooring) - elif num_moorings > 1: - mooring_output[f'mooring{mooring+1}'] = _write_mooring_output(mooring) + elif num_moorings > 1: + mooring_output[f"mooring{mooring+1}"] = _write_mooring_output(mooring) else: - print("mooring class not used") + print("mooring class not used") mooring_output = [] - - + ###################################### ## import wecSim moorDyn class # @@ -321,46 +336,45 @@ def _write_mooring_output(mooring): # Line3: [1×1 struct] # Line4: [1×1 struct] # Line5: [1×1 struct] - # Line6: [1×1 struct] + # Line6: [1×1 struct] ###################################### try: - moorDyn = output['moorDyn'] - num_lines = len(moorDyn[0][0][0].dtype) - 1 # number of moorDyn lines - - Lines = moorDyn[0][0]['Lines'][0][0][0] + moorDyn = output["moorDyn"] + num_lines = len(moorDyn[0][0][0].dtype) - 1 # number of moorDyn lines + + Lines = moorDyn[0][0]["Lines"][0][0][0] signals = Lines.dtype.names num_signals = len(Lines.dtype.names) - data = Lines[0] + data = Lines[0] time = data[0] - Lines = pd.DataFrame(data = time,columns=['time']) - Lines = Lines.set_index('time') - for signal in range(1,num_signals): - Lines[signals[signal]] = data[signal] - moorDyn_output= {'Lines': Lines} - - Line_num_output = {} - for line_num in range(1,num_lines+1): - tmp_moordyn = moorDyn[0][0][f'Line{line_num}'][0][0][0] - signals = tmp_moordyn.dtype.names - num_signals = len(tmp_moordyn.dtype.names) - data = tmp_moordyn[0] - time = data[0] - tmp_moordyn = pd.DataFrame(data = time,columns=['time']) - tmp_moordyn = tmp_moordyn.set_index('time') - for signal in range(1,num_signals): - tmp_moordyn[signals[signal]] = data[signal] - Line_num_output[f'Line{line_num}'] = tmp_moordyn - + Lines = pd.DataFrame(data=time, columns=["time"]) + Lines = Lines.set_index("time") + for signal in range(1, num_signals): + Lines[signals[signal]] = data[signal] + moorDyn_output = {"Lines": Lines} + + Line_num_output = {} + for line_num in range(1, num_lines + 1): + tmp_moordyn = moorDyn[0][0][f"Line{line_num}"][0][0][0] + signals = tmp_moordyn.dtype.names + num_signals = len(tmp_moordyn.dtype.names) + data = tmp_moordyn[0] + time = data[0] + tmp_moordyn = pd.DataFrame(data=time, columns=["time"]) + tmp_moordyn = tmp_moordyn.set_index("time") + for signal in range(1, num_signals): + tmp_moordyn[signals[signal]] = data[signal] + Line_num_output[f"Line{line_num}"] = tmp_moordyn + moorDyn_output.update(Line_num_output) - + except: - print("moorDyn class not used") + print("moorDyn class not used") moorDyn_output = [] - ###################################### ## import wecSim ptosim class - # + # # name: '' # pistonCF: [1×1 struct] # pistonNCF: [1×1 struct] @@ -372,19 +386,18 @@ def _write_mooring_output(mooring): # pmLinearGenerator: [1×1 struct] # pmRotaryGenerator: [1×1 struct] # motionMechanism: [1×1 struct] - ###################################### + ###################################### try: - ptosim = output['ptosim'] - num_ptosim = len(ptosim[0][0]['name'][0]) # number of ptosim - print("ptosim class output not supported at this time") + ptosim = output["ptosim"] + num_ptosim = len(ptosim[0][0]["name"][0]) # number of ptosim + print("ptosim class output not supported at this time") except: - print("ptosim class not used") + print("ptosim class not used") ptosim_output = [] - - + ###################################### ## import wecSim cable class - # + # # name: '' # time: [iterations x 1 double] # position: [iterations x 6 double] @@ -392,9 +405,9 @@ def _write_mooring_output(mooring): # forcecable: [iterations x 6 double] ###################################### try: - cables = output['cables'] - num_cables = len(cables[0][0]['name'][0]) - name = [] + cables = output["cables"] + num_cables = len(cables[0][0]["name"][0]) + name = [] time = [] position = [] velocity = [] @@ -403,56 +416,55 @@ def _write_mooring_output(mooring): forceactuation = [] forceconstraint = [] for cable in range(num_cables): - name.append(cables[0][0]['name'][0][cable][0]) - time.append(cables[0][0]['time'][0][cable]) - position.append(cables[0][0]['position'][0][cable]) - velocity.append(cables[0][0]['velocity'][0][cable]) - acceleration.append(cables[0][0]['acceleration'][0][cable]) - forcetotal.append(cables[0][0]['forceTotal'][0][cable]) - forceactuation.append(cables[0][0]['forceActuation'][0][cable]) - forceconstraint.append(cables[0][0]['forceConstraint'][0][cable]) + name.append(cables[0][0]["name"][0][cable][0]) + time.append(cables[0][0]["time"][0][cable]) + position.append(cables[0][0]["position"][0][cable]) + velocity.append(cables[0][0]["velocity"][0][cable]) + acceleration.append(cables[0][0]["acceleration"][0][cable]) + forcetotal.append(cables[0][0]["forceTotal"][0][cable]) + forceactuation.append(cables[0][0]["forceActuation"][0][cable]) + forceconstraint.append(cables[0][0]["forceConstraint"][0][cable]) except: - num_cables = 0 + num_cables = 0 ###################################### ## create cable_output DataFrame - ###################################### + ###################################### def _write_cable_output(cable): - for dof in range(6): - tmp_cable[f'position_dof{dof+1}'] = position[cable][:,dof] - tmp_cable[f'velocity_dof{dof+1}'] = velocity[cable][:,dof] - tmp_cable[f'acceleration_dof{dof+1}'] = acceleration[cable][:,dof] - tmp_cable[f'forcetotal_dof{dof+1}'] = forcetotal[cable][:,dof] - tmp_cable[f'forceactuation_dof{dof+1}'] = forceactuation[cable][:,dof] - tmp_cable[f'forceconstraint_dof{dof+1}'] = forceconstraint[cable][:,dof] + for dof in range(6): + tmp_cable[f"position_dof{dof+1}"] = position[cable][:, dof] + tmp_cable[f"velocity_dof{dof+1}"] = velocity[cable][:, dof] + tmp_cable[f"acceleration_dof{dof+1}"] = acceleration[cable][:, dof] + tmp_cable[f"forcetotal_dof{dof+1}"] = forcetotal[cable][:, dof] + tmp_cable[f"forceactuation_dof{dof+1}"] = forceactuation[cable][:, dof] + tmp_cable[f"forceconstraint_dof{dof+1}"] = forceconstraint[cable][:, dof] return tmp_cable - if num_cables >= 1: + if num_cables >= 1: cable_output = {} for cable in range(num_cables): - tmp_cable = pd.DataFrame(data = time[0],columns=['time']) - tmp_cable = tmp_cable.set_index('time') + tmp_cable = pd.DataFrame(data=time[0], columns=["time"]) + tmp_cable = tmp_cable.set_index("time") tmp_cable.name = name[cable] - if num_cables == 1: + if num_cables == 1: cable_output = _write_cable_output(cable) - elif num_cables > 1: - cable_output[f'cable{cable+1}'] = _write_cable_output(cable) + elif num_cables > 1: + cable_output[f"cable{cable+1}"] = _write_cable_output(cable) else: - print("cable class not used") + print("cable class not used") cable_output = [] - - ###################################### ## create wecSim output DataFrame of Dict ###################################### - ws_output = {'wave' : wave_output, - 'bodies' : body_output, - 'ptos' : pto_output, - 'constraints' : constraint_output, - 'mooring' : mooring_output, - 'moorDyn': moorDyn_output, - 'ptosim' : ptosim_output, - 'cables': cable_output - } - return ws_output + ws_output = { + "wave": wave_output, + "bodies": body_output, + "ptos": pto_output, + "constraints": constraint_output, + "mooring": mooring_output, + "moorDyn": moorDyn_output, + "ptosim": ptosim_output, + "cables": cable_output, + } + return ws_output diff --git a/mhkit/wave/performance.py b/mhkit/wave/performance.py index 80404fd87..e3aedc03c 100644 --- a/mhkit/wave/performance.py +++ b/mhkit/wave/performance.py @@ -1,12 +1,13 @@ import numpy as np import pandas as pd -import xarray +import xarray import types from scipy.stats import binned_statistic_2d as _binned_statistic_2d from mhkit import wave import matplotlib.pylab as plt from os.path import join + def capture_length(P, J): """ Calculates the capture length (often called capture width). @@ -24,11 +25,11 @@ def capture_length(P, J): Capture length [m] """ if not isinstance(P, (np.ndarray, pd.Series)): - raise TypeError(f'P must be of type np.ndarray or pd.Series. Got: {type(P)}') + raise TypeError(f"P must be of type np.ndarray or pd.Series. Got: {type(P)}") if not isinstance(J, (np.ndarray, pd.Series)): - raise TypeError(f'J must be of type np.ndarray or pd.Series. Got: {type(J)}') + raise TypeError(f"J must be of type np.ndarray or pd.Series. Got: {type(J)}") - L = P/J + L = P / J return L @@ -52,10 +53,10 @@ def statistics(X): Statistics """ if not isinstance(X, (np.ndarray, pd.Series)): - raise TypeError(f'X must be of type np.ndarray or pd.Series. Got: {type(X)}') + raise TypeError(f"X must be of type np.ndarray or pd.Series. Got: {type(X)}") stats = pd.Series(X).describe() - stats['std'] = _std_ddof1(X) + stats["std"] = _std_ddof1(X) return stats @@ -74,26 +75,28 @@ def _performance_matrix(X, Y, Z, statistic, x_centers, y_centers): # General performance matrix function # Convert bin centers to edges - xi = [np.mean([x_centers[i], x_centers[i+1]]) for i in range(len(x_centers)-1)] - xi.insert(0,-np.inf) + xi = [np.mean([x_centers[i], x_centers[i + 1]]) for i in range(len(x_centers) - 1)] + xi.insert(0, -np.inf) xi.append(np.inf) - yi = [np.mean([y_centers[i], y_centers[i+1]]) for i in range(len(y_centers)-1)] - yi.insert(0,-np.inf) + yi = [np.mean([y_centers[i], y_centers[i + 1]]) for i in range(len(y_centers) - 1)] + yi.insert(0, -np.inf) yi.append(np.inf) # Override standard deviation with degree of freedom equal to 1 - if statistic == 'std': + if statistic == "std": statistic = _std_ddof1 # Provide function to compute frequency def _frequency(a): - return len(a)/len(Z) - if statistic == 'frequency': + return len(a) / len(Z) + + if statistic == "frequency": statistic = _frequency - zi, x_edge, y_edge, binnumber = _binned_statistic_2d(X, Y, Z, statistic, - bins=[xi,yi], expand_binnumbers=False) + zi, x_edge, y_edge, binnumber = _binned_statistic_2d( + X, Y, Z, statistic, bins=[xi, yi], expand_binnumbers=False + ) M = pd.DataFrame(zi, index=x_centers, columns=y_centers) @@ -132,17 +135,21 @@ def capture_length_matrix(Hm0, Te, L, statistic, Hm0_bins, Te_bins): """ if not isinstance(Hm0, (np.ndarray, pd.Series)): - raise TypeError(f'Hm0 must be of type np.ndarray or pd.Series. Got: {type(Hm0)}') + raise TypeError( + f"Hm0 must be of type np.ndarray or pd.Series. Got: {type(Hm0)}" + ) if not isinstance(Te, (np.ndarray, pd.Series)): - raise TypeError(f'Te must be of type np.ndarray or pd.Series. Got: {type(Te)}') + raise TypeError(f"Te must be of type np.ndarray or pd.Series. Got: {type(Te)}") if not isinstance(L, (np.ndarray, pd.Series)): - raise TypeError(f'L must be of type np.ndarray or pd.Series. Got: {type(L)}') + raise TypeError(f"L must be of type np.ndarray or pd.Series. Got: {type(L)}") if not isinstance(statistic, (str, types.FunctionType)): - raise TypeError(f'statistic must be of type str or callable. Got: {type(statistic)}') + raise TypeError( + f"statistic must be of type str or callable. Got: {type(statistic)}" + ) if not isinstance(Hm0_bins, np.ndarray): - raise TypeError(f'Hm0_bins must be of type np.ndarray. Got: {type(Hm0_bins)}') + raise TypeError(f"Hm0_bins must be of type np.ndarray. Got: {type(Hm0_bins)}") if not isinstance(Te_bins, np.ndarray): - raise TypeError(f'Te_bins must be of type np.ndarray. Got: {type(Te_bins)}') + raise TypeError(f"Te_bins must be of type np.ndarray. Got: {type(Te_bins)}") LM = _performance_matrix(Hm0, Te, L, statistic, Hm0_bins, Te_bins) @@ -178,22 +185,27 @@ def wave_energy_flux_matrix(Hm0, Te, J, statistic, Hm0_bins, Te_bins): """ if not isinstance(Hm0, (np.ndarray, pd.Series)): - raise TypeError(f'Hm0 must be of type np.ndarray or pd.Series. Got: {type(Hm0)}') + raise TypeError( + f"Hm0 must be of type np.ndarray or pd.Series. Got: {type(Hm0)}" + ) if not isinstance(Te, (np.ndarray, pd.Series)): - raise TypeError(f'Te must be of type np.ndarray or pd.Series. Got: {type(Te)}') + raise TypeError(f"Te must be of type np.ndarray or pd.Series. Got: {type(Te)}") if not isinstance(J, (np.ndarray, pd.Series)): - raise TypeError(f'J must be of type np.ndarray or pd.Series. Got: {type(J)}') + raise TypeError(f"J must be of type np.ndarray or pd.Series. Got: {type(J)}") if not isinstance(statistic, (str, callable)): - raise TypeError(f'statistic must be of type str or callable. Got: {type(statistic)}') + raise TypeError( + f"statistic must be of type str or callable. Got: {type(statistic)}" + ) if not isinstance(Hm0_bins, np.ndarray): - raise TypeError(f'Hm0_bins must be of type np.ndarray. Got: {type(Hm0_bins)}') + raise TypeError(f"Hm0_bins must be of type np.ndarray. Got: {type(Hm0_bins)}") if not isinstance(Te_bins, np.ndarray): - raise TypeError(f'Te_bins must be of type np.ndarray. Got: {type(Te_bins)}') + raise TypeError(f"Te_bins must be of type np.ndarray. Got: {type(Te_bins)}") JM = _performance_matrix(Hm0, Te, J, statistic, Hm0_bins, Te_bins) return JM + def power_matrix(LM, JM): """ Generates a power matrix from a capture length matrix and wave energy @@ -213,14 +225,15 @@ def power_matrix(LM, JM): """ if not isinstance(LM, pd.DataFrame): - raise TypeError(f'LM must be of type pd.DataFrame. Got: {type(LM)}') + raise TypeError(f"LM must be of type pd.DataFrame. Got: {type(LM)}") if not isinstance(JM, pd.DataFrame): - raise TypeError(f'JM must be of type pd.DataFrame. Got: {type(JM)}') + raise TypeError(f"JM must be of type pd.DataFrame. Got: {type(JM)}") - PM = LM*JM + PM = LM * JM return PM + def mean_annual_energy_production_timeseries(L, J): """ Calculates mean annual energy production (MAEP) from time-series @@ -239,17 +252,18 @@ def mean_annual_energy_production_timeseries(L, J): """ if not isinstance(L, (np.ndarray, pd.Series)): - raise TypeError(f'L must be of type np.ndarray or pd.Series. Got: {type(L)}') + raise TypeError(f"L must be of type np.ndarray or pd.Series. Got: {type(L)}") if not isinstance(J, (np.ndarray, pd.Series)): - raise TypeError(f'J must be of type np.ndarray or pd.Series. Got: {type(J)}') + raise TypeError(f"J must be of type np.ndarray or pd.Series. Got: {type(J)}") - T = 8766 # Average length of a year (h) + T = 8766 # Average length of a year (h) n = len(L) - maep = T/n * np.sum(L * J) + maep = T / n * np.sum(L * J) return maep + def mean_annual_energy_production_matrix(LM, JM, frequency): """ Calculates mean annual energy production (MAEP) from matrix data @@ -271,21 +285,36 @@ def mean_annual_energy_production_matrix(LM, JM, frequency): """ if not isinstance(LM, pd.DataFrame): - raise TypeError(f'LM must be of type pd.DataFrame. Got: {type(LM)}') + raise TypeError(f"LM must be of type pd.DataFrame. Got: {type(LM)}") if not isinstance(JM, pd.DataFrame): - raise TypeError(f'JM must be of type pd.DataFrame. Got: {type(JM)}') + raise TypeError(f"JM must be of type pd.DataFrame. Got: {type(JM)}") if not isinstance(frequency, pd.DataFrame): - raise TypeError(f'frequency must be of type pd.DataFrame. Got: {type(frequency)}') + raise TypeError( + f"frequency must be of type pd.DataFrame. Got: {type(frequency)}" + ) if not LM.shape == JM.shape == frequency.shape: - raise ValueError('LM, JM, and frequency must be of the same size') - #if not frequency.sum().sum() == 1 + raise ValueError("LM, JM, and frequency must be of the same size") + # if not frequency.sum().sum() == 1 - T = 8766 # Average length of a year (h) + T = 8766 # Average length of a year (h) maep = T * np.nansum(LM * JM * frequency) return maep -def power_performance_workflow(S, h, P, statistic, frequency_bins=None, deep=False, rho=1205, g=9.80665, ratio=2, show_values=False, savepath=""): + +def power_performance_workflow( + S, + h, + P, + statistic, + frequency_bins=None, + deep=False, + rho=1205, + g=9.80665, + ratio=2, + show_values=False, + savepath="", +): """ High-level function to compute power performance quantities of interest following IEC TS 62600-100 for given wave spectra. @@ -332,66 +361,91 @@ def power_performance_workflow(S, h, P, statistic, frequency_bins=None, deep=Fal maep_matrix: float Mean annual energy production """ - if not isinstance(S, (pd.DataFrame,pd.Series)): - raise TypeError(f'S must be of type pd.DataFrame or pd.Series. Got: {type(S)}') - if not isinstance(h, (int,float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') + if not isinstance(S, (pd.DataFrame, pd.Series)): + raise TypeError(f"S must be of type pd.DataFrame or pd.Series. Got: {type(S)}") + if not isinstance(h, (int, float)): + raise TypeError(f"h must be of type int or float. Got: {type(h)}") if not isinstance(P, (np.ndarray, pd.Series)): - raise TypeError(f'P must be of type np.ndarray or pd.Series. Got: {type(P)}') + raise TypeError(f"P must be of type np.ndarray or pd.Series. Got: {type(P)}") if not isinstance(deep, bool): - raise TypeError(f'deep must be of type bool. Got: {type(deep)}') - if not isinstance(rho, (int,float)): - raise TypeError(f'rho must be of type int or float. Got: {type(rho)}') - if not isinstance(g, (int,float)): - raise TypeError(f'g must be of type int or float. Got: {type(g)}') - if not isinstance(ratio, (int,float)): - raise TypeError(f'ratio must be of type int or float. Got: {type(ratio)}') + raise TypeError(f"deep must be of type bool. Got: {type(deep)}") + if not isinstance(rho, (int, float)): + raise TypeError(f"rho must be of type int or float. Got: {type(rho)}") + if not isinstance(g, (int, float)): + raise TypeError(f"g must be of type int or float. Got: {type(g)}") + if not isinstance(ratio, (int, float)): + raise TypeError(f"ratio must be of type int or float. Got: {type(ratio)}") # Compute the enegy periods from the spectra data Te = wave.resource.energy_period(S, frequency_bins=frequency_bins) - Te = Te['Te'] + Te = Te["Te"] # Compute the significant wave height from the NDBC spectra data Hm0 = wave.resource.significant_wave_height(S, frequency_bins=frequency_bins) - Hm0 = Hm0['Hm0'] + Hm0 = Hm0["Hm0"] # Compute the energy flux from spectra data and water depth J = wave.resource.energy_flux(S, h, deep=deep, rho=rho, g=g, ratio=ratio) - J = J['J'] + J = J["J"] # Calculate capture length from power and energy flux - L = wave.performance.capture_length(P,J) + L = wave.performance.capture_length(P, J) # Generate bins for Hm0 and Te, input format (start, stop, step_size) - Hm0_bins = np.arange(0, Hm0.values.max() + .5, .5) + Hm0_bins = np.arange(0, Hm0.values.max() + 0.5, 0.5) Te_bins = np.arange(0, Te.values.max() + 1, 1) # Create capture length matrices for each statistic based on IEC/TS 62600-100 # Median, sum, frequency additionally provided LM = xarray.Dataset() - LM['mean'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'mean', Hm0_bins, Te_bins) - LM['std'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'std', Hm0_bins, Te_bins) - LM['median'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'median', Hm0_bins, Te_bins) - LM['count'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'count', Hm0_bins, Te_bins) - LM['sum'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'sum', Hm0_bins, Te_bins) - LM['min'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'min', Hm0_bins, Te_bins) - LM['max'] = wave.performance.capture_length_matrix(Hm0, Te, L, 'max', Hm0_bins, Te_bins) - LM['freq'] = wave.performance.capture_length_matrix(Hm0, Te, L,'frequency', Hm0_bins, Te_bins) + LM["mean"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "mean", Hm0_bins, Te_bins + ) + LM["std"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "std", Hm0_bins, Te_bins + ) + LM["median"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "median", Hm0_bins, Te_bins + ) + LM["count"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "count", Hm0_bins, Te_bins + ) + LM["sum"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "sum", Hm0_bins, Te_bins + ) + LM["min"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "min", Hm0_bins, Te_bins + ) + LM["max"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "max", Hm0_bins, Te_bins + ) + LM["freq"] = wave.performance.capture_length_matrix( + Hm0, Te, L, "frequency", Hm0_bins, Te_bins + ) # Create wave energy flux matrix using mean - JM = wave.performance.wave_energy_flux_matrix(Hm0, Te, J, 'mean', Hm0_bins, Te_bins) + JM = wave.performance.wave_energy_flux_matrix(Hm0, Te, J, "mean", Hm0_bins, Te_bins) # Calculate maep from matrix - maep_matrix = wave.performance.mean_annual_energy_production_matrix(LM['mean'].to_pandas(), JM, LM['freq'].to_pandas()) + maep_matrix = wave.performance.mean_annual_energy_production_matrix( + LM["mean"].to_pandas(), JM, LM["freq"].to_pandas() + ) # Plot capture length matrices using statistic for str in statistic: if str not in list(LM.data_vars): - print('ERROR: Invalid Statistics passed') + print("ERROR: Invalid Statistics passed") continue - plt.figure(figsize=(12,12), num='Capture Length Matrix ' + str) + plt.figure(figsize=(12, 12), num="Capture Length Matrix " + str) ax = plt.gca() - wave.graphics.plot_matrix(LM[str].to_pandas(), xlabel='Te (s)', ylabel='Hm0 (m)', zlabel= str + ' of Capture Length', show_values=show_values, ax=ax) - plt.savefig(join(savepath,'Capture Length Matrix ' + str + '.png')) + wave.graphics.plot_matrix( + LM[str].to_pandas(), + xlabel="Te (s)", + ylabel="Hm0 (m)", + zlabel=str + " of Capture Length", + show_values=show_values, + ax=ax, + ) + plt.savefig(join(savepath, "Capture Length Matrix " + str + ".png")) return LM, maep_matrix diff --git a/mhkit/wave/resource.py b/mhkit/wave/resource.py index f0fd27b0f..b1c3a2d04 100644 --- a/mhkit/wave/resource.py +++ b/mhkit/wave/resource.py @@ -4,9 +4,11 @@ import numpy as np from scipy import stats + ### Spectrum -def elevation_spectrum(eta, sample_rate, nnft, window='hann', - detrend=True, noverlap=None): +def elevation_spectrum( + eta, sample_rate, nnft, window="hann", detrend=True, noverlap=None +): """ Calculates the wave energy spectrum from wave elevation time-series @@ -39,29 +41,37 @@ def elevation_spectrum(eta, sample_rate, nnft, window='hann', # TODO: may need to raise an error for the length of nnft- signal.welch breaks when nfft is too short # TODO: check for uniform sampling if not isinstance(eta, pd.DataFrame): - raise TypeError(f'eta must be of type pd.DataFrame. Got: {type(eta)}') - if not isinstance(sample_rate, (float,int)): - raise TypeError(f'sample_rate must be of type int or float. Got: {type(sample_rate)}') + raise TypeError(f"eta must be of type pd.DataFrame. Got: {type(eta)}") + if not isinstance(sample_rate, (float, int)): + raise TypeError( + f"sample_rate must be of type int or float. Got: {type(sample_rate)}" + ) if not isinstance(nnft, int): - raise TypeError(f'nnft must be of type int. Got: {type(nnft)}') + raise TypeError(f"nnft must be of type int. Got: {type(nnft)}") if not isinstance(window, str): - raise TypeError(f'window must be of type str. Got: {type(window)}') + raise TypeError(f"window must be of type str. Got: {type(window)}") if not isinstance(detrend, bool): - raise TypeError(f'detrend must be of type bool. Got: {type(detrend)}') + raise TypeError(f"detrend must be of type bool. Got: {type(detrend)}") if not nnft > 0: - raise ValueError(f'nnft must be > 0. Got: {nnft}') + raise ValueError(f"nnft must be > 0. Got: {nnft}") if not sample_rate > 0: - raise ValueError(f'sample_rate must be > 0. Got: {sample_rate}') + raise ValueError(f"sample_rate must be > 0. Got: {sample_rate}") S = pd.DataFrame() for col in eta.columns: data = eta[col] if detrend: - data = _signal.detrend(data.dropna(), axis=-1, type='linear', bp=0) - [f, wave_spec_measured] = _signal.welch(data, fs=sample_rate, window=window, - nperseg=nnft, nfft=nnft, noverlap=noverlap) + data = _signal.detrend(data.dropna(), axis=-1, type="linear", bp=0) + [f, wave_spec_measured] = _signal.welch( + data, + fs=sample_rate, + window=window, + nperseg=nnft, + nfft=nnft, + noverlap=noverlap, + ) S[col] = wave_spec_measured - S.index=f + S.index = f S.columns = eta.columns return S @@ -91,15 +101,15 @@ def pierson_moskowitz_spectrum(f, Tp, Hs): except: pass if not isinstance(f, np.ndarray): - raise TypeError(f'f must be of type np.ndarray. Got: {type(f)}') - if not isinstance(Tp, (int,float)): - raise TypeError(f'Tp must be of type int or float. Got: {type(Tp)}') - if not isinstance(Hs, (int,float)): - raise TypeError(f'Hs must be of type int or float. Got: {type(Hs)}') + raise TypeError(f"f must be of type np.ndarray. Got: {type(f)}") + if not isinstance(Tp, (int, float)): + raise TypeError(f"Tp must be of type int or float. Got: {type(Tp)}") + if not isinstance(Hs, (int, float)): + raise TypeError(f"Hs must be of type int or float. Got: {type(Hs)}") f.sort() - B_PM = (5/4)*(1/Tp)**4 - A_PM = B_PM*(Hs/2)**2 + B_PM = (5 / 4) * (1 / Tp) ** 4 + A_PM = B_PM * (Hs / 2) ** 2 # Avoid a divide by zero if the 0 frequency is provided # The zero frequency should always have 0 amplitude, otherwise @@ -109,10 +119,10 @@ def pierson_moskowitz_spectrum(f, Tp, Hs): inds = range(1, f.size) else: inds = range(0, f.size) - - Sf[inds] = A_PM*f[inds]**(-5)*np.exp(-B_PM*f[inds]**(-4)) - col_name = 'Pierson-Moskowitz ('+str(Tp)+'s)' + Sf[inds] = A_PM * f[inds] ** (-5) * np.exp(-B_PM * f[inds] ** (-4)) + + col_name = "Pierson-Moskowitz (" + str(Tp) + "s)" S = pd.DataFrame(Sf, index=f, columns=[col_name]) return S @@ -144,17 +154,19 @@ def jonswap_spectrum(f, Tp, Hs, gamma=None): except: pass if not isinstance(f, np.ndarray): - raise TypeError(f'f must be of type np.ndarray. Got: {type(f)}') - if not isinstance(Tp, (int,float)): - raise TypeError(f'Tp must be of type int or float. Got: {type(Tp)}') - if not isinstance(Hs, (int,float)): - raise TypeError(f'Hs must be of type int or float. Got: {type(Hs)}') - if not isinstance(gamma, (int,float, type(None))): - raise TypeError(f'If specified, gamma must be of type int or float. Got: {type(gamma)}') + raise TypeError(f"f must be of type np.ndarray. Got: {type(f)}") + if not isinstance(Tp, (int, float)): + raise TypeError(f"Tp must be of type int or float. Got: {type(Tp)}") + if not isinstance(Hs, (int, float)): + raise TypeError(f"Hs must be of type int or float. Got: {type(Hs)}") + if not isinstance(gamma, (int, float, type(None))): + raise TypeError( + f"If specified, gamma must be of type int or float. Got: {type(gamma)}" + ) f.sort() - B_PM = (5/4)*(1/Tp)**4 - A_PM = B_PM*(Hs/2)**2 + B_PM = (5 / 4) * (1 / Tp) ** 4 + A_PM = B_PM * (Hs / 2) ** 2 # Avoid a divide by zero if the 0 frequency is provided # The zero frequency should always have 0 amplitude, otherwise @@ -165,37 +177,40 @@ def jonswap_spectrum(f, Tp, Hs, gamma=None): else: inds = range(0, f.size) - S_f[inds] = A_PM*f[inds]**(-5)*np.exp(-B_PM*f[inds]**(-4)) + S_f[inds] = A_PM * f[inds] ** (-5) * np.exp(-B_PM * f[inds] ** (-4)) if not gamma: - TpsqrtHs = Tp/np.sqrt(Hs); + TpsqrtHs = Tp / np.sqrt(Hs) if TpsqrtHs <= 3.6: - gamma = 5; + gamma = 5 elif TpsqrtHs > 5: - gamma = 1; + gamma = 1 else: - gamma = np.exp(5.75 - 1.15*TpsqrtHs); + gamma = np.exp(5.75 - 1.15 * TpsqrtHs) # Cutoff frequencies for gamma function siga = 0.07 sigb = 0.09 - fp = 1/Tp # peak frequency - lind = np.where(f<=fp) - hind = np.where(f>fp) + fp = 1 / Tp # peak frequency + lind = np.where(f <= fp) + hind = np.where(f > fp) Gf = np.zeros(f.shape) - Gf[lind] = gamma**np.exp(-(f[lind]-fp)**2/(2*siga**2*fp**2)) - Gf[hind] = gamma**np.exp(-(f[hind]-fp)**2/(2*sigb**2*fp**2)) - C = 1- 0.287*np.log(gamma) - Sf = C*S_f*Gf + Gf[lind] = gamma ** np.exp(-((f[lind] - fp) ** 2) / (2 * siga**2 * fp**2)) + Gf[hind] = gamma ** np.exp(-((f[hind] - fp) ** 2) / (2 * sigb**2 * fp**2)) + C = 1 - 0.287 * np.log(gamma) + Sf = C * S_f * Gf - col_name = 'JONSWAP ('+str(Hs)+'m,'+str(Tp)+'s)' + col_name = "JONSWAP (" + str(Hs) + "m," + str(Tp) + "s)" S = pd.DataFrame(Sf, index=f, columns=[col_name]) return S + ### Metrics -def surface_elevation(S, time_index, seed=None, frequency_bins=None, phases=None, method='ifft'): +def surface_elevation( + S, time_index, seed=None, frequency_bins=None, phases=None, method="ifft" +): """ Calculates wave elevation time-series from spectrum @@ -229,77 +244,92 @@ def surface_elevation(S, time_index, seed=None, frequency_bins=None, phases=None """ time_index = np.array(time_index) if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") if not isinstance(time_index, np.ndarray): - raise TypeError(f'time_index must be of type np.ndarray. Got: {type(time_index)}') + raise TypeError( + f"time_index must be of type np.ndarray. Got: {type(time_index)}" + ) if not isinstance(seed, (type(None), int)): - raise TypeError(f'If specified, seed must be of type int. Got: {type(seed)}') + raise TypeError(f"If specified, seed must be of type int. Got: {type(seed)}") if not isinstance(frequency_bins, (type(None), np.ndarray, pd.DataFrame)): - raise TypeError(f'If specified, frequency_bins must be of type np.ndarray, or pd.DataFrame. Got: {type(frequency_bins)}') + raise TypeError( + f"If specified, frequency_bins must be of type np.ndarray, or pd.DataFrame. Got: {type(frequency_bins)}" + ) if not isinstance(phases, (type(None), np.ndarray, pd.DataFrame)): - raise TypeError(f'If specified, phases must be of type np.ndarray, or pd.DataFrame. Got: {type(phases)}') + raise TypeError( + f"If specified, phases must be of type np.ndarray, or pd.DataFrame. Got: {type(phases)}" + ) if not isinstance(method, str): - raise TypeError(f'method must be of type str. Got: {type(method)}') + raise TypeError(f"method must be of type str. Got: {type(method)}") if frequency_bins is not None: if not frequency_bins.squeeze().shape == (S.squeeze().shape[0],): - raise ValueError('shape of frequency_bins must match shape of S') + raise ValueError("shape of frequency_bins must match shape of S") if phases is not None: if not phases.squeeze().shape == S.squeeze().shape: - raise ValueError('shape of phases must match shape of S') - + raise ValueError("shape of phases must match shape of S") + if method is not None: - if not (method == 'ifft' or method == 'sum_of_sines'): + if not (method == "ifft" or method == "sum_of_sines"): raise ValueError(f"Method must be 'ifft' or 'sum_of_sines'. Got: {method}") - - if method == 'ifft': + + if method == "ifft": if not S.index.values[0] == 0: - raise ValueError(f'ifft method must have zero frequency defined. Lowest frequency is: {S.index.values[0]}') + raise ValueError( + f"ifft method must have zero frequency defined. Lowest frequency is: {S.index.values[0]}" + ) f = pd.Series(S.index) f.index = f if frequency_bins is None: - delta_f = f.values[1]-f.values[0] + delta_f = f.values[1] - f.values[0] if not np.allclose(f.diff()[1:], delta_f): - raise ValueError('Frequency bins are not evenly spaced. ' + - "Define 'frequency_bins' or create a constant " + - 'frequency spacing for S.') + raise ValueError( + "Frequency bins are not evenly spaced. " + + "Define 'frequency_bins' or create a constant " + + "frequency spacing for S." + ) elif isinstance(frequency_bins, np.ndarray): delta_f = pd.Series(frequency_bins, index=S.index) - method = 'sum_of_sines' + method = "sum_of_sines" elif isinstance(frequency_bins, pd.DataFrame): if not len(frequency_bins.columns) == 1: - raise ValueError('frequency_bins must only contain 1 column') + raise ValueError("frequency_bins must only contain 1 column") delta_f = frequency_bins.squeeze() - method = 'sum_of_sines' + method = "sum_of_sines" if phases is None: np.random.seed(seed) - phase = pd.DataFrame(2*np.pi*np.random.rand(S.shape[0], S.shape[1]), - index=S.index, columns=S.columns) + phase = pd.DataFrame( + 2 * np.pi * np.random.rand(S.shape[0], S.shape[1]), + index=S.index, + columns=S.columns, + ) elif isinstance(phases, np.ndarray): phase = pd.DataFrame(phases, index=S.index, columns=S.columns) elif isinstance(phases, pd.DataFrame): phase = phases - omega = pd.Series(2*np.pi*f) + omega = pd.Series(2 * np.pi * f) omega.index = f # Wave amplitude times delta f - A = 2*S + A = 2 * S A = A.multiply(delta_f, axis=0) A = np.sqrt(A) - if method == 'ifft': - A_cmplx = A * (np.cos(phase) + 1j*np.sin(phase)) + if method == "ifft": + A_cmplx = A * (np.cos(phase) + 1j * np.sin(phase)) def func(v): - eta = np.fft.irfft(0.5 * v.values.squeeze() * time_index.size, time_index.size) + eta = np.fft.irfft( + 0.5 * v.values.squeeze() * time_index.size, time_index.size + ) return pd.Series(data=eta, index=time_index) - + eta = A_cmplx.apply(func) - elif method == 'sum_of_sines': + elif method == "sum_of_sines": # Product of omega and time B = np.outer(time_index, omega) B = B.reshape((len(time_index), len(omega))) @@ -308,10 +338,10 @@ def func(v): # wave elevation eta = pd.DataFrame(columns=S.columns, index=time_index) for mcol in eta.columns: - C = np.cos(B+phase[mcol]) + C = np.cos(B + phase[mcol]) C = pd.DataFrame(C, index=time_index, columns=omega.index) - eta[mcol] = (C*A[mcol]).sum(axis=1) - + eta[mcol] = (C * A[mcol]).sum(axis=1) + return eta @@ -333,33 +363,34 @@ def frequency_moment(S, N, frequency_bins=None): m: pandas DataFrame Nth Frequency Moment indexed by S.columns """ - if not isinstance(S, (pd.Series,pd.DataFrame)): - raise TypeError(f'S must be of type pd.DataFrame or pd.Series. Got: {type(S)}') + if not isinstance(S, (pd.Series, pd.DataFrame)): + raise TypeError(f"S must be of type pd.DataFrame or pd.Series. Got: {type(S)}") if not isinstance(N, int): - raise TypeError(f'N must be of type int. Got: {type(N)}') + raise TypeError(f"N must be of type int. Got: {type(N)}") # Eq 8 in IEC 62600-101 - spec = S[S.index > 0] # omit frequency of 0 + spec = S[S.index > 0] # omit frequency of 0 f = spec.index fn = np.power(f, N) if frequency_bins is None: delta_f = pd.Series(f).diff() - delta_f[0] = f[1]-f[0] + delta_f[0] = f[1] - f[0] else: - - if not isinstance(frequency_bins, (np.ndarray,pd.Series,pd.DataFrame)): - raise TypeError(f'frequency_bins must be of type np.ndarray, pd.Series, or pd.DataFrame. Got: {type(frequency_bins)}') + if not isinstance(frequency_bins, (np.ndarray, pd.Series, pd.DataFrame)): + raise TypeError( + f"frequency_bins must be of type np.ndarray, pd.Series, or pd.DataFrame. Got: {type(frequency_bins)}" + ) delta_f = pd.Series(frequency_bins) delta_f.index = f - m = spec.multiply(fn,axis=0).multiply(delta_f,axis=0) + m = spec.multiply(fn, axis=0).multiply(delta_f, axis=0) m = m.sum(axis=0) - if isinstance(S,pd.Series): - m = pd.DataFrame(m, index=[0], columns = ['m'+str(N)]) + if isinstance(S, pd.Series): + m = pd.DataFrame(m, index=[0], columns=["m" + str(N)]) else: - m = pd.DataFrame(m, index=S.columns, columns = ['m'+str(N)]) + m = pd.DataFrame(m, index=S.columns, columns=["m" + str(N)]) return m @@ -380,18 +411,18 @@ def significant_wave_height(S, frequency_bins=None): Hm0: pandas DataFrame Significant wave height [m] index by S.columns """ - if not isinstance(S, (pd.Series,pd.DataFrame)): - raise TypeError(f'S must be of type pd.DataFrame or pd.Series. Got: {type(S)}') + if not isinstance(S, (pd.Series, pd.DataFrame)): + raise TypeError(f"S must be of type pd.DataFrame or pd.Series. Got: {type(S)}") # Eq 12 in IEC 62600-101 - Hm0 = 4*np.sqrt(frequency_moment(S,0,frequency_bins=frequency_bins)) - Hm0.columns = ['Hm0'] + Hm0 = 4 * np.sqrt(frequency_moment(S, 0, frequency_bins=frequency_bins)) + Hm0.columns = ["Hm0"] return Hm0 -def average_zero_crossing_period(S,frequency_bins=None): +def average_zero_crossing_period(S, frequency_bins=None): """ Calculates wave average zero crossing period from spectra @@ -408,19 +439,21 @@ def average_zero_crossing_period(S,frequency_bins=None): Average zero crossing period [s] indexed by S.columns """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") # Eq 15 in IEC 62600-101 - m0 = frequency_moment(S,0,frequency_bins=frequency_bins).squeeze() # convert to Series for calculation - m2 = frequency_moment(S,2,frequency_bins=frequency_bins).squeeze() + m0 = frequency_moment( + S, 0, frequency_bins=frequency_bins + ).squeeze() # convert to Series for calculation + m2 = frequency_moment(S, 2, frequency_bins=frequency_bins).squeeze() - Tz = np.sqrt(m0/m2) - Tz = pd.DataFrame(Tz, index=S.columns, columns = ['Tz']) + Tz = np.sqrt(m0 / m2) + Tz = pd.DataFrame(Tz, index=S.columns, columns=["Tz"]) return Tz -def average_crest_period(S,frequency_bins=None): +def average_crest_period(S, frequency_bins=None): """ Calculates wave average crest period from spectra @@ -438,18 +471,20 @@ def average_crest_period(S,frequency_bins=None): """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") - m2 = frequency_moment(S,2,frequency_bins=frequency_bins).squeeze() # convert to Series for calculation - m4 = frequency_moment(S,4,frequency_bins=frequency_bins).squeeze() + m2 = frequency_moment( + S, 2, frequency_bins=frequency_bins + ).squeeze() # convert to Series for calculation + m4 = frequency_moment(S, 4, frequency_bins=frequency_bins).squeeze() - Tavg = np.sqrt(m2/m4) - Tavg = pd.DataFrame(Tavg, index=S.columns, columns=['Tavg']) + Tavg = np.sqrt(m2 / m4) + Tavg = pd.DataFrame(Tavg, index=S.columns, columns=["Tavg"]) return Tavg -def average_wave_period(S,frequency_bins=None): +def average_wave_period(S, frequency_bins=None): """ Calculates mean wave period from spectra @@ -466,13 +501,15 @@ def average_wave_period(S,frequency_bins=None): Mean wave period [s] indexed by S.columns """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") - m0 = frequency_moment(S,0,frequency_bins=frequency_bins).squeeze() # convert to Series for calculation - m1 = frequency_moment(S,1,frequency_bins=frequency_bins).squeeze() + m0 = frequency_moment( + S, 0, frequency_bins=frequency_bins + ).squeeze() # convert to Series for calculation + m1 = frequency_moment(S, 1, frequency_bins=frequency_bins).squeeze() - Tm = np.sqrt(m0/m1) - Tm = pd.DataFrame(Tm, index=S.columns, columns=['Tm']) + Tm = np.sqrt(m0 / m1) + Tm = pd.DataFrame(Tm, index=S.columns, columns=["Tm"]) return Tm @@ -492,18 +529,18 @@ def peak_period(S): Wave peak period [s] indexed by S.columns """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") # Eq 14 in IEC 62600-101 - fp = S.idxmax(axis=0) # Hz + fp = S.idxmax(axis=0) # Hz - Tp = 1/fp + Tp = 1 / fp Tp = pd.DataFrame(Tp, index=S.columns, columns=["Tp"]) return Tp -def energy_period(S,frequency_bins=None): +def energy_period(S, frequency_bins=None): """ Calculates wave energy period from spectra @@ -520,24 +557,25 @@ def energy_period(S,frequency_bins=None): Wave energy period [s] indexed by S.columns """ - if not isinstance(S, (pd.Series,pd.DataFrame)): - raise TypeError(f'S must be of type pd.DataFrame or pd.Series. Got: {type(S)}') + if not isinstance(S, (pd.Series, pd.DataFrame)): + raise TypeError(f"S must be of type pd.DataFrame or pd.Series. Got: {type(S)}") - mn1 = frequency_moment(S,-1,frequency_bins=frequency_bins).squeeze() # convert to Series for calculation - m0 = frequency_moment(S,0,frequency_bins=frequency_bins).squeeze() + mn1 = frequency_moment( + S, -1, frequency_bins=frequency_bins + ).squeeze() # convert to Series for calculation + m0 = frequency_moment(S, 0, frequency_bins=frequency_bins).squeeze() # Eq 13 in IEC 62600-101 - Te = mn1/m0 - if isinstance(S,pd.Series): - Te = pd.DataFrame(Te, index=[0], columns=['Te']) + Te = mn1 / m0 + if isinstance(S, pd.Series): + Te = pd.DataFrame(Te, index=[0], columns=["Te"]) else: - Te = pd.DataFrame(Te, S.columns, columns=['Te']) - + Te = pd.DataFrame(Te, S.columns, columns=["Te"]) return Te -def spectral_bandwidth(S,frequency_bins=None): +def spectral_bandwidth(S, frequency_bins=None): """ Calculates bandwidth from spectra @@ -554,19 +592,21 @@ def spectral_bandwidth(S,frequency_bins=None): Spectral bandwidth [s] indexed by S.columns """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") - m2 = frequency_moment(S,2,frequency_bins=frequency_bins).squeeze() # convert to Series for calculation - m0 = frequency_moment(S,0,frequency_bins=frequency_bins).squeeze() - m4 = frequency_moment(S,4,frequency_bins=frequency_bins).squeeze() + m2 = frequency_moment( + S, 2, frequency_bins=frequency_bins + ).squeeze() # convert to Series for calculation + m0 = frequency_moment(S, 0, frequency_bins=frequency_bins).squeeze() + m4 = frequency_moment(S, 4, frequency_bins=frequency_bins).squeeze() - e = np.sqrt(1- (m2**2)/(m0/m4)) - e = pd.DataFrame(e, index=S.columns, columns=['e']) + e = np.sqrt(1 - (m2**2) / (m0 / m4)) + e = pd.DataFrame(e, index=S.columns, columns=["e"]) return e -def spectral_width(S,frequency_bins=None): +def spectral_width(S, frequency_bins=None): """ Calculates wave spectral width from spectra @@ -583,15 +623,17 @@ def spectral_width(S,frequency_bins=None): Spectral width [m] indexed by S.columns """ if not isinstance(S, pd.DataFrame): - raise TypeError(f'S must be of type pd.DataFrame. Got: {type(S)}') + raise TypeError(f"S must be of type pd.DataFrame. Got: {type(S)}") - mn2 = frequency_moment(S,-2,frequency_bins=frequency_bins).squeeze() # convert to Series for calculation - m0 = frequency_moment(S,0,frequency_bins=frequency_bins).squeeze() - mn1 = frequency_moment(S,-1,frequency_bins=frequency_bins).squeeze() + mn2 = frequency_moment( + S, -2, frequency_bins=frequency_bins + ).squeeze() # convert to Series for calculation + m0 = frequency_moment(S, 0, frequency_bins=frequency_bins).squeeze() + mn1 = frequency_moment(S, -1, frequency_bins=frequency_bins).squeeze() # Eq 16 in IEC 62600-101 - v = np.sqrt((m0*mn2/np.power(mn1,2))-1) - v = pd.DataFrame(v, index=S.columns, columns=['v']) + v = np.sqrt((m0 * mn2 / np.power(mn1, 2)) - 1) + v = pd.DataFrame(v, index=S.columns, columns=["v"]) return v @@ -624,33 +666,32 @@ def energy_flux(S, h, deep=False, rho=1025, g=9.80665, ratio=2): J: pandas DataFrame Omni-directional wave energy flux [W/m] indexed by S.columns """ - if not isinstance(S, (pd.Series,pd.DataFrame)): - raise TypeError(f'S must be of type pd.DataFrame or pd.Series. Got: {type(S)}') - if not isinstance(h, (int,float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') + if not isinstance(S, (pd.Series, pd.DataFrame)): + raise TypeError(f"S must be of type pd.DataFrame or pd.Series. Got: {type(S)}") + if not isinstance(h, (int, float)): + raise TypeError(f"h must be of type int or float. Got: {type(h)}") if not isinstance(deep, bool): - raise TypeError(f'deep must be of type bool. Got: {type(deep)}') - if not isinstance(rho, (int,float)): - raise TypeError(f'rho must be of type int or float. Got: {type(rho)}') - if not isinstance(g, (int,float)): - raise TypeError(f'g must be of type int or float. Got: {type(g)}') - if not isinstance(ratio, (int,float)): - raise TypeError(f'ratio must be of type int or float. Got: {type(ratio)}') + raise TypeError(f"deep must be of type bool. Got: {type(deep)}") + if not isinstance(rho, (int, float)): + raise TypeError(f"rho must be of type int or float. Got: {type(rho)}") + if not isinstance(g, (int, float)): + raise TypeError(f"g must be of type int or float. Got: {type(g)}") + if not isinstance(ratio, (int, float)): + raise TypeError(f"ratio must be of type int or float. Got: {type(ratio)}") if deep: # Eq 8 in IEC 62600-100, deep water simpilification Te = energy_period(S) Hm0 = significant_wave_height(S) - coeff = rho*(g**2)/(64*np.pi) + coeff = rho * (g**2) / (64 * np.pi) - J = coeff*(Hm0.squeeze()**2)*Te.squeeze() - if isinstance(S,pd.Series): + J = coeff * (Hm0.squeeze() ** 2) * Te.squeeze() + if isinstance(S, pd.Series): J = pd.DataFrame(J, index=[0], columns=["J"]) else: J = pd.DataFrame(J, S.columns, columns=["J"]) - else: # deep water flag is false f = S.index @@ -669,7 +710,7 @@ def energy_flux(S, h, deep=False, rho=1025, g=9.80665, ratio=2): J = rho * g * CgSdelF.sum(axis=0) - if isinstance(S,pd.Series): + if isinstance(S, pd.Series): J = pd.DataFrame(J, index=[0], columns=["J"]) else: J = pd.DataFrame(J, S.columns, columns=["J"]) @@ -698,11 +739,11 @@ def energy_period_to_peak_period(Te, gamma): Spectral peak period [s] """ if not isinstance(Te, (float, np.ndarray)): - raise TypeError(f'Te must be a float or a ndarray. Got: {type(Te)}') + raise TypeError(f"Te must be a float or a ndarray. Got: {type(Te)}") if not isinstance(gamma, (float, int)): - raise TypeError(f'gamma must be of type float or int. Got: {type(gamma)}') + raise TypeError(f"gamma must be of type float or int. Got: {type(gamma)}") - factor = 0.8255 + 0.03852*gamma - 0.005537*gamma**2 + 0.0003154*gamma**3 + factor = 0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3 return Te / factor @@ -733,15 +774,15 @@ def wave_celerity(k, h, g=9.80665, depth_check=False, ratio=2): if isinstance(k, pd.DataFrame): k = k.squeeze() if not isinstance(k, (pd.Series, pd.DataFrame)): - raise TypeError(f'k must be of type pd.Series or pd.DataFrame. Got: {type(k)}') - if not isinstance(h, (int,float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') - if not isinstance(g, (int,float)): - raise TypeError(f'g must be of type int or float. Got: {type(g)}') + raise TypeError(f"k must be of type pd.Series or pd.DataFrame. Got: {type(k)}") + if not isinstance(h, (int, float)): + raise TypeError(f"h must be of type int or float. Got: {type(h)}") + if not isinstance(g, (int, float)): + raise TypeError(f"g must be of type int or float. Got: {type(g)}") if not isinstance(depth_check, bool): - raise TypeError(f'depth_check must be of type bool. Got: {type(depth_check)}') - if not isinstance(ratio, (int,float)): - raise TypeError(f'ratio must be of type int or float. Got: {type(ratio)}') + raise TypeError(f"depth_check must be of type bool. Got: {type(depth_check)}") + if not isinstance(ratio, (int, float)): + raise TypeError(f"ratio must be of type int or float. Got: {type(ratio)}") f = k.index k = k.values @@ -757,14 +798,14 @@ def wave_celerity(k, h, g=9.80665, depth_check=False, ratio=2): dk = k[dr] # deep water approximation - dCg = (np.pi * df / dk) + dCg = np.pi * df / dk dCg = pd.DataFrame(dCg, index=df, columns=["Cg"]) # shallow frequencies sf = f[~dr] sk = k[~dr] sCg = (np.pi * sf / sk) * (1 + (2 * h * sk) / np.sinh(2 * h * sk)) - sCg = pd.DataFrame(sCg, index = sf, columns = ["Cg"]) + sCg = pd.DataFrame(sCg, index=sf, columns=["Cg"]) Cg = pd.concat([dCg, sCg]).sort_index() @@ -792,8 +833,10 @@ def wave_length(k): Wave length [m] indexed by frequency """ if not isinstance(k, (int, float, list, np.ndarray, pd.DataFrame, pd.Series)): - raise TypeError(f'k must be of type int, float, list, np.ndarray, pd.DataFrame, or pd.Series. Got: {type(k)}') - + raise TypeError( + f"k must be of type int, float, list, np.ndarray, pd.DataFrame, or pd.Series. Got: {type(k)}" + ) + if isinstance(k, (int, float, list)): k = np.array(k) elif isinstance(k, pd.DataFrame): @@ -801,7 +844,7 @@ def wave_length(k): elif isinstance(k, pd.Series): k = k.values - l = 2*np.pi/k + l = 2 * np.pi / k return l @@ -834,22 +877,22 @@ def wave_number(f, h, rho=1025, g=9.80665): except: pass if not isinstance(f, np.ndarray): - raise TypeError(f'f must be of type np.ndarray. Got: {type(f)}') - if not isinstance(h, (int,float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') - if not isinstance(rho, (int,float)): - raise TypeError(f'rho must be of type int or float. Got: {type(rho)}') - if not isinstance(g, (int,float)): - raise TypeError(f'g must be of type int or float. Got: {type(g)}') - - w = 2*np.pi*f # angular frequency - xi = w/np.sqrt(g/h) # note: =h*wa/sqrt(h*g/h) - yi = xi*xi/np.power(1.0-np.exp(-np.power(xi,2.4908)),0.4015) - k0 = yi/h # Initial guess without current-wave interaction + raise TypeError(f"f must be of type np.ndarray. Got: {type(f)}") + if not isinstance(h, (int, float)): + raise TypeError(f"h must be of type int or float. Got: {type(h)}") + if not isinstance(rho, (int, float)): + raise TypeError(f"rho must be of type int or float. Got: {type(rho)}") + if not isinstance(g, (int, float)): + raise TypeError(f"g must be of type int or float. Got: {type(g)}") + + w = 2 * np.pi * f # angular frequency + xi = w / np.sqrt(g / h) # note: =h*wa/sqrt(h*g/h) + yi = xi * xi / np.power(1.0 - np.exp(-np.power(xi, 2.4908)), 0.4015) + k0 = yi / h # Initial guess without current-wave interaction # Eq 11 in IEC 62600-101 using initial guess from Guo (2002) def func(kk): - val = np.power(w,2) - g*kk*np.tanh(kk*h) + val = np.power(w, 2) - g * kk * np.tanh(kk * h) return val mask = np.abs(func(k0)) > 1e-9 @@ -859,16 +902,16 @@ def func(kk): k, info, ier, mesg = _fsolve(func, k0_mask, full_output=True) if not ier == 1: - raise ValueError('Wave number not found. ' + mesg) + raise ValueError("Wave number not found. " + mesg) k0[mask] = k - k = pd.DataFrame(k0, index=f, columns=['k']) + k = pd.DataFrame(k0, index=f, columns=["k"]) return k def depth_regime(l, h, ratio=2): - ''' + """ Calculates the depth regime based on wavelength and height Deep water: h/l > ratio This function exists so sinh in wave celerity doesn't blow @@ -892,12 +935,14 @@ def depth_regime(l, h, ratio=2): ------- depth_reg: boolean or boolean array Boolean True if deep water, False otherwise - ''' + """ if not isinstance(l, (int, float, list, np.ndarray, pd.DataFrame, pd.Series)): - raise TypeError(f'l must be of type int, float, list, np.ndarray, pd.DataFrame, or pd.Series. Got: {type(l)}') + raise TypeError( + f"l must be of type int, float, list, np.ndarray, pd.DataFrame, or pd.Series. Got: {type(l)}" + ) if not isinstance(h, (int, float)): - raise TypeError(f'h must be of type int or float. Got: {type(h)}') - + raise TypeError(f"h must be of type int or float. Got: {type(h)}") + if isinstance(l, (int, float, list)): l = np.array(l) elif isinstance(l, pd.DataFrame): @@ -905,6 +950,6 @@ def depth_regime(l, h, ratio=2): elif isinstance(l, pd.Series): l = l.values - depth_reg = h/l > ratio + depth_reg = h / l > ratio - return depth_reg + return depth_reg diff --git a/setup.py b/setup.py index 642263d88..1c62eca5e 100644 --- a/setup.py +++ b/setup.py @@ -2,39 +2,42 @@ import re from setuptools import setup, find_packages -DISTNAME = 'mhkit' +DISTNAME = "mhkit" PACKAGES = find_packages() EXTENSIONS = [] -DESCRIPTION = 'Marine and Hydrokinetic Toolkit' -AUTHOR = 'MHKiT developers' -MAINTAINER_EMAIL = '' -LICENSE = 'Revised BSD' -URL = 'https://github.com/MHKiT-Software/mhkit-python' -CLASSIFIERS = ['Development Status :: 3 - Alpha', - 'Programming Language :: Python :: 3', - 'Topic :: Scientific/Engineering', - 'Intended Audience :: Science/Research', - 'Operating System :: OS Independent', - ] -DEPENDENCIES = ['pandas>=1.0.0', - 'numpy>=1.21.0', - 'scipy', - 'matplotlib', - 'requests', - 'pecos>=0.3.0', - 'fatpack', - 'lxml', - 'scikit-learn', - 'NREL-rex>=0.2.63', - 'six>=1.13.0', - 'h5py>=3.6.0', - 'h5pyd >=0.7.0', - 'netCDF4', - 'xarray', - 'statsmodels', - 'pytz', - 'bottleneck', - 'beautifulsoup4',] +DESCRIPTION = "Marine and Hydrokinetic Toolkit" +AUTHOR = "MHKiT developers" +MAINTAINER_EMAIL = "" +LICENSE = "Revised BSD" +URL = "https://github.com/MHKiT-Software/mhkit-python" +CLASSIFIERS = [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3", + "Topic :: Scientific/Engineering", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", +] +DEPENDENCIES = [ + "pandas>=1.0.0", + "numpy>=1.21.0", + "scipy", + "matplotlib", + "requests", + "pecos>=0.3.0", + "fatpack", + "lxml", + "scikit-learn", + "NREL-rex>=0.2.63", + "six>=1.13.0", + "h5py>=3.6.0", + "h5pyd >=0.7.0", + "netCDF4", + "xarray", + "statsmodels", + "pytz", + "bottleneck", + "beautifulsoup4", +] LONG_DESCRIPTION = """ MHKiT-Python is a Python package designed for marine renewable energy applications to assist in @@ -69,29 +72,29 @@ # get version from __init__.py file_dir = os.path.abspath(os.path.dirname(__file__)) -with open(os.path.join(file_dir, 'mhkit', '__init__.py')) as f: +with open(os.path.join(file_dir, "mhkit", "__init__.py")) as f: version_file = f.read() - version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", - version_file, re.M) + version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M) if version_match: VERSION = version_match.group(1) else: raise RuntimeError("Unable to find version string.") -setup(name=DISTNAME, - version=VERSION, - packages=PACKAGES, - ext_modules=EXTENSIONS, - description=DESCRIPTION, - long_description_content_type="text/markdown", - long_description=LONG_DESCRIPTION, - author=AUTHOR, - maintainer_email=MAINTAINER_EMAIL, - license=LICENSE, - url=URL, - classifiers=CLASSIFIERS, - zip_safe=False, - install_requires=DEPENDENCIES, - scripts=[], - include_package_data=True - ) +setup( + name=DISTNAME, + version=VERSION, + packages=PACKAGES, + ext_modules=EXTENSIONS, + description=DESCRIPTION, + long_description_content_type="text/markdown", + long_description=LONG_DESCRIPTION, + author=AUTHOR, + maintainer_email=MAINTAINER_EMAIL, + license=LICENSE, + url=URL, + classifiers=CLASSIFIERS, + zip_safe=False, + install_requires=DEPENDENCIES, + scripts=[], + include_package_data=True, +) From d1c65f1cf401fa927dae42ca09a2eadd3e3ef289 Mon Sep 17 00:00:00 2001 From: ssolson Date: Wed, 29 Nov 2023 10:28:35 -0500 Subject: [PATCH 04/87] add a dev requirements --- requirements-dev.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 requirements-dev.txt diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 000000000..83e60c9dd --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,4 @@ +# requirements-dev.txt +black +pylint +pytest From b0ed12ac479dd0466d10f5b129076f4b9ffb756a Mon Sep 17 00:00:00 2001 From: ssolson Date: Wed, 29 Nov 2023 10:47:10 -0500 Subject: [PATCH 05/87] add check for black formatting --- .github/workflows/black.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/black.yml diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml new file mode 100644 index 000000000..96aaea347 --- /dev/null +++ b/.github/workflows/black.yml @@ -0,0 +1,24 @@ +name: Black Code Formatter + +on: [push, pull_request] + +jobs: + black: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.11" + + - name: Install Black + run: | + python -m pip install --upgrade pip + pip install black + + - name: Check Black Formatting + run: black --check . From ec6331c98d1430617d28086a679b165911825fb5 Mon Sep 17 00:00:00 2001 From: ssolson Date: Wed, 29 Nov 2023 10:52:59 -0500 Subject: [PATCH 06/87] add pre commit --- .pre-commit-config.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..b0037417e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,8 @@ +# To run Black formating every time you commit: +# pip install pre-commit +# pre-commit install +repos: + - repo: https://github.com/psf/black + rev: stable + hooks: + - id: black From dbbc63ccb7b29943b5133ae1663c8f0337bcee56 Mon Sep 17 00:00:00 2001 From: ssolson Date: Wed, 3 Jan 2024 09:20:21 -0700 Subject: [PATCH 07/87] change API key --- .hscfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.hscfg b/.hscfg index f6f00424b..f9aa99caa 100644 --- a/.hscfg +++ b/.hscfg @@ -1,4 +1,4 @@ hs_endpoint = https://developer.nrel.gov/api/hsds hs_username = hs_password = -hs_api_key = 3K3JQbjZmWctY0xmIfSYvYgtIcM3CN0cb1Y2w9bf +hs_api_key = jODGciIBnejrYd9GXxgXjbbAjMDLBMWQer05P98N From 1e88f000f863a0aa3a0bdb8179d765f792aeee78 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 11 Jan 2024 09:58:30 -0700 Subject: [PATCH 08/87] Treat the None as string "None" --- mhkit/tests/wave/io/hindcast/test_wind_toolkit.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py index 343c0479f..b973d1c8a 100644 --- a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py +++ b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py @@ -59,6 +59,7 @@ def setUpClass(self): ) self.ml.index = pd.to_datetime(self.ml.index) + self.mp = pd.read_csv( join(datadir, "wtk_multiparm.csv"), index_col="time_index", @@ -94,6 +95,10 @@ def setUpClass(self): }, ) + # Replace NaN values in 'state' and 'county' with the string "None" + self.my_meta['state'] = self.my_meta['state'].fillna("None") + self.my_meta['county'] = self.my_meta['county'].fillna("None") + self.ml_meta = pd.read_csv( join(datadir, "wtk_multiloc_meta.csv"), index_col=0, @@ -119,6 +124,9 @@ def setUpClass(self): "offshore": "int16", }, ) + # Replace NaN values in 'state' and 'county' with the string "None" + self.ml_meta['state'] = self.ml_meta['state'].fillna("None") + self.ml_meta['county'] = self.ml_meta['county'].fillna("None") self.mp_meta = pd.read_csv( join(datadir, "wtk_multiparm_meta.csv"), @@ -145,6 +153,9 @@ def setUpClass(self): "offshore": "int16", }, ) + # Replace NaN values in 'state' and 'county' with the string "None" + self.mp_meta['state'] = self.mp_meta['state'].fillna("None") + self.mp_meta['county'] = self.mp_meta['county'].fillna("None") @classmethod def tearDownClass(self): @@ -177,10 +188,12 @@ def test_multi_parm(self): data_type = "1-hour" years = [2012] lat_lon = (17.2, -156.5) # Hawaii + parameters = ["temperature_20m", "temperature_40m"] wtk_multiparm, meta = wtk.request_wtk_point_data( data_type, parameters, lat_lon, years ) + assert_frame_equal(self.mp, wtk_multiparm) assert_frame_equal(self.mp_meta, meta) From eacbcbdbb3c5d60e3cc44b98de8f5983f1844f11 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 11 Jan 2024 10:21:26 -0700 Subject: [PATCH 09/87] black formatting --- mhkit/tests/wave/io/hindcast/test_wind_toolkit.py | 13 ++++++------- mhkit/wave/io/hindcast/wind_toolkit.py | 4 +++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py index b973d1c8a..19c4cb34b 100644 --- a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py +++ b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py @@ -59,7 +59,6 @@ def setUpClass(self): ) self.ml.index = pd.to_datetime(self.ml.index) - self.mp = pd.read_csv( join(datadir, "wtk_multiparm.csv"), index_col="time_index", @@ -96,8 +95,8 @@ def setUpClass(self): ) # Replace NaN values in 'state' and 'county' with the string "None" - self.my_meta['state'] = self.my_meta['state'].fillna("None") - self.my_meta['county'] = self.my_meta['county'].fillna("None") + self.my_meta["state"] = self.my_meta["state"].fillna("None") + self.my_meta["county"] = self.my_meta["county"].fillna("None") self.ml_meta = pd.read_csv( join(datadir, "wtk_multiloc_meta.csv"), @@ -125,8 +124,8 @@ def setUpClass(self): }, ) # Replace NaN values in 'state' and 'county' with the string "None" - self.ml_meta['state'] = self.ml_meta['state'].fillna("None") - self.ml_meta['county'] = self.ml_meta['county'].fillna("None") + self.ml_meta["state"] = self.ml_meta["state"].fillna("None") + self.ml_meta["county"] = self.ml_meta["county"].fillna("None") self.mp_meta = pd.read_csv( join(datadir, "wtk_multiparm_meta.csv"), @@ -154,8 +153,8 @@ def setUpClass(self): }, ) # Replace NaN values in 'state' and 'county' with the string "None" - self.mp_meta['state'] = self.mp_meta['state'].fillna("None") - self.mp_meta['county'] = self.mp_meta['county'].fillna("None") + self.mp_meta["state"] = self.mp_meta["state"].fillna("None") + self.mp_meta["county"] = self.mp_meta["county"].fillna("None") @classmethod def tearDownClass(self): diff --git a/mhkit/wave/io/hindcast/wind_toolkit.py b/mhkit/wave/io/hindcast/wind_toolkit.py index 86d6596fd..d08a4079f 100644 --- a/mhkit/wave/io/hindcast/wind_toolkit.py +++ b/mhkit/wave/io/hindcast/wind_toolkit.py @@ -445,8 +445,10 @@ def request_wtk_point_data( "years": years, } data_list = [] - + # import ipdb; ipdb.set_trace() with MultiYearWindX(wind_path, **windKwargs) as rex_wind: + # import ipdb; ipdb.set_trace() + if isinstance(parameter, list): for p in parameter: temp_data = rex_wind.get_lat_lon_df(p, lat_lon) From 16148051f6abaedeb325c716d33b0d2c46033180 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 12 Jan 2024 10:24:47 -0700 Subject: [PATCH 10/87] remove unused imports, add some type checks --- .../wave/io/hindcast/test_wind_toolkit.py | 128 ++++++++++++++++-- 1 file changed, 113 insertions(+), 15 deletions(-) diff --git a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py index 19c4cb34b..4c2eaf130 100644 --- a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py +++ b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py @@ -1,24 +1,10 @@ from os.path import abspath, dirname, join, isfile, normpath, relpath from pandas.testing import assert_frame_equal -from numpy.testing import assert_allclose -from scipy.interpolate import interp1d -from random import seed, randint import matplotlib.pylab as plt -from datetime import datetime -import xarray.testing as xrt import mhkit.wave.io.hindcast.wind_toolkit as wtk -from io import StringIO import pandas as pd -import numpy as np -import contextlib import unittest -import netCDF4 -import inspect -import pickle -import time -import json -import sys -import os +import pytest testdir = dirname(abspath(__file__)) @@ -196,6 +182,118 @@ def test_multi_parm(self): assert_frame_equal(self.mp, wtk_multiparm) assert_frame_equal(self.mp_meta, meta) + def test_invalid_parameter_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter=123, # Invalid type, should be a string or list of strings + lat_lon=(17.2, -156.5), + years=[2012] + ) + + def test_invalid_lat_lon_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon="17.2, -156.5", # Invalid type, should be a tuple or list of tuples + years=[2012] + ) + + def test_invalid_time_interval_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval=123, # Invalid type, should be a string + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012] + ) + + def test_invalid_years_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years="2012" # Invalid type, should be a list + ) + + def test_invalid_preferred_region_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012], + preferred_region=123 # Invalid type, should be a string + ) + + def test_invalid_tree_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012], + preferred_region="", + tree=123 # Invalid type, should be a string or None + ) + + def test_invalid_unscale_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012], + preferred_region="", + tree=None, + unscale="True" # Invalid type, should be bool + ) + + def test_invalid_str_decode_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012], + preferred_region="", + tree=None, + unscale=True, + str_decode=123 # Invalid type, should be bool + ) + + def test_invalid_hsds_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012], + preferred_region="", + tree=None, + unscale=True, + str_decode=True, + hsds="True" # Invalid type, should be bool + ) + + def test_invalid_clear_cache_type(self): + with pytest.raises(TypeError): + wtk.request_wtk_point_data( + time_interval="1-hour", + parameter="temperature_20m", + lat_lon=(17.2, -156.5), + years=[2012], + preferred_region="", + tree=None, + unscale=True, + str_decode=True, + hsds=True, + clear_cache="False" # Invalid type, should be bool + ) + + # test region_selection function and catch for the preferred region def test_region(self): region = wtk.region_selection((41.9, -125.3), preferred_region="Offshore_CA") From 3fdda1a22e00ac26c72be7b9e5c7275a7d434180 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 12 Jan 2024 10:27:49 -0700 Subject: [PATCH 11/87] no coverage on artifact load --- .github/workflows/main.yml | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f1c2c65ff..ba0d1f906 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -88,10 +88,20 @@ jobs: - name: Prepare Hindcast data if: (needs.check-changes.outputs.should-run-hindcast == 'true') run: | - # pytest tests/test_specific_file.py::TestClass::test_function source activate TEST - pytest mhkit/tests/wave/io/hindcast/test_hindcast.py - pytest mhkit/tests/wave/io/hindcast/test_wind_toolkit.py + python -m pip install --upgrade pip wheel + pip install coveralls . + coverage run --rcfile=.github/workflows/.coveragehindcastrc -m pytest -c .github/workflows/pytest-hindcast.ini + + - name: Upload coverage data to coveralls.io + shell: bash -l {0} + run: | + source activate TEST + coveralls --service=github + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_FLAG_NAME: 'Hindcast' + COVERALLS_PARALLEL: true - name: Upload data as artifact uses: actions/upload-artifact@v3 @@ -107,7 +117,7 @@ jobs: fail-fast: false matrix: os: ${{fromJson(needs.set-os.outputs.matrix_os)}} - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ['3.8', '3.9', '3.10', '3.11'] env: PYTHON_VER: ${{ matrix.python-version }} @@ -165,7 +175,7 @@ jobs: fail-fast: false matrix: os: ${{fromJson(needs.set-os.outputs.matrix_os)}} - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ['3.8', '3.9', '3.10', '3.11'] steps: - uses: conda-incubator/setup-miniconda@v2 @@ -211,7 +221,7 @@ jobs: fail-fast: false matrix: os: ${{fromJson(needs.set-os.outputs.matrix_os)}} - python-version: [3.8, 3.9, 3.10, 3.11] + python-version: ['3.8', '3.9', '3.10', '3.11'] steps: - uses: actions/checkout@v3 @@ -225,7 +235,7 @@ jobs: - name: Python ${{ matrix.python-version }} shell: bash -l {0} run: | - conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 coverage --strict-channel-priority + conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 --strict-channel-priority source activate TEST export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" # so setup.py finds nc-config pip install -e . --no-deps --force-reinstall @@ -241,18 +251,7 @@ jobs: run: | source activate TEST python -m pip install --upgrade pip wheel - pip install coveralls . - coverage run --rcfile=.github/workflows/.coveragehindcastrc -m pytest -c .github/workflows/pytest-hindcast.ini - - - name: Upload coverage data to coveralls.io - shell: bash -l {0} - run: | - source activate TEST - coveralls --service=github - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COVERALLS_FLAG_NAME: ${{ matrix.python-version }} - COVERALLS_PARALLEL: true + pytest -c .github/workflows/pytest-hindcast.ini coveralls: name: Indicate completion to coveralls.io From a41f7abd00aca1842962fb9d7dbb66dd70ec52c8 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 12 Jan 2024 10:41:05 -0700 Subject: [PATCH 12/87] black formatting --- .../wave/io/hindcast/test_wind_toolkit.py | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py index 4c2eaf130..6544f8b52 100644 --- a/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py +++ b/mhkit/tests/wave/io/hindcast/test_wind_toolkit.py @@ -188,7 +188,7 @@ def test_invalid_parameter_type(self): time_interval="1-hour", parameter=123, # Invalid type, should be a string or list of strings lat_lon=(17.2, -156.5), - years=[2012] + years=[2012], ) def test_invalid_lat_lon_type(self): @@ -197,7 +197,7 @@ def test_invalid_lat_lon_type(self): time_interval="1-hour", parameter="temperature_20m", lat_lon="17.2, -156.5", # Invalid type, should be a tuple or list of tuples - years=[2012] + years=[2012], ) def test_invalid_time_interval_type(self): @@ -206,7 +206,7 @@ def test_invalid_time_interval_type(self): time_interval=123, # Invalid type, should be a string parameter="temperature_20m", lat_lon=(17.2, -156.5), - years=[2012] + years=[2012], ) def test_invalid_years_type(self): @@ -215,7 +215,7 @@ def test_invalid_years_type(self): time_interval="1-hour", parameter="temperature_20m", lat_lon=(17.2, -156.5), - years="2012" # Invalid type, should be a list + years="2012", # Invalid type, should be a list ) def test_invalid_preferred_region_type(self): @@ -225,7 +225,7 @@ def test_invalid_preferred_region_type(self): parameter="temperature_20m", lat_lon=(17.2, -156.5), years=[2012], - preferred_region=123 # Invalid type, should be a string + preferred_region=123, # Invalid type, should be a string ) def test_invalid_tree_type(self): @@ -236,7 +236,7 @@ def test_invalid_tree_type(self): lat_lon=(17.2, -156.5), years=[2012], preferred_region="", - tree=123 # Invalid type, should be a string or None + tree=123, # Invalid type, should be a string or None ) def test_invalid_unscale_type(self): @@ -248,7 +248,7 @@ def test_invalid_unscale_type(self): years=[2012], preferred_region="", tree=None, - unscale="True" # Invalid type, should be bool + unscale="True", # Invalid type, should be bool ) def test_invalid_str_decode_type(self): @@ -261,7 +261,7 @@ def test_invalid_str_decode_type(self): preferred_region="", tree=None, unscale=True, - str_decode=123 # Invalid type, should be bool + str_decode=123, # Invalid type, should be bool ) def test_invalid_hsds_type(self): @@ -275,7 +275,7 @@ def test_invalid_hsds_type(self): tree=None, unscale=True, str_decode=True, - hsds="True" # Invalid type, should be bool + hsds="True", # Invalid type, should be bool ) def test_invalid_clear_cache_type(self): @@ -290,10 +290,9 @@ def test_invalid_clear_cache_type(self): unscale=True, str_decode=True, hsds=True, - clear_cache="False" # Invalid type, should be bool + clear_cache="False", # Invalid type, should be bool ) - # test region_selection function and catch for the preferred region def test_region(self): region = wtk.region_selection((41.9, -125.3), preferred_region="Offshore_CA") From 332b33172b41065d16fd8d5b41ca0525ad6ca8aa Mon Sep 17 00:00:00 2001 From: ssolson Date: Sat, 13 Jan 2024 07:42:16 -0700 Subject: [PATCH 13/87] add scipy to TEST env --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ba0d1f906..88538a1ef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -235,7 +235,7 @@ jobs: - name: Python ${{ matrix.python-version }} shell: bash -l {0} run: | - conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 --strict-channel-priority + conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 scipy --strict-channel-priority source activate TEST export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" # so setup.py finds nc-config pip install -e . --no-deps --force-reinstall From 092238854f364b08226a10c5916ae5ca9397ab1f Mon Sep 17 00:00:00 2001 From: ssolson Date: Sat, 13 Jan 2024 19:40:26 -0700 Subject: [PATCH 14/87] remove no dependencies --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 88538a1ef..c6d45ede3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -238,7 +238,7 @@ jobs: conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 scipy --strict-channel-priority source activate TEST export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" # so setup.py finds nc-config - pip install -e . --no-deps --force-reinstall + pip install -e . --force-reinstall - name: Download data from artifact uses: actions/download-artifact@v3 From 797ff26c097f3f1a9060dfd195262919cbb77485 Mon Sep 17 00:00:00 2001 From: ssolson Date: Sun, 14 Jan 2024 08:21:29 -0700 Subject: [PATCH 15/87] remove debug imports --- mhkit/wave/io/hindcast/wind_toolkit.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mhkit/wave/io/hindcast/wind_toolkit.py b/mhkit/wave/io/hindcast/wind_toolkit.py index d08a4079f..16b94f1cc 100644 --- a/mhkit/wave/io/hindcast/wind_toolkit.py +++ b/mhkit/wave/io/hindcast/wind_toolkit.py @@ -445,9 +445,7 @@ def request_wtk_point_data( "years": years, } data_list = [] - # import ipdb; ipdb.set_trace() with MultiYearWindX(wind_path, **windKwargs) as rex_wind: - # import ipdb; ipdb.set_trace() if isinstance(parameter, list): for p in parameter: From bd3988d3f7c1a62173ce0e33ea1b8f91127d10da Mon Sep 17 00:00:00 2001 From: ssolson Date: Sun, 14 Jan 2024 08:27:58 -0700 Subject: [PATCH 16/87] revert to original main.yaml --- .github/workflows/main.yml | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c6d45ede3..9c90aa8df 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -88,20 +88,10 @@ jobs: - name: Prepare Hindcast data if: (needs.check-changes.outputs.should-run-hindcast == 'true') run: | + # pytest tests/test_specific_file.py::TestClass::test_function source activate TEST - python -m pip install --upgrade pip wheel - pip install coveralls . - coverage run --rcfile=.github/workflows/.coveragehindcastrc -m pytest -c .github/workflows/pytest-hindcast.ini - - - name: Upload coverage data to coveralls.io - shell: bash -l {0} - run: | - source activate TEST - coveralls --service=github - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COVERALLS_FLAG_NAME: 'Hindcast' - COVERALLS_PARALLEL: true + pytest mhkit/tests/wave/io/hindcast/test_hindcast.py + pytest mhkit/tests/wave/io/hindcast/test_wind_toolkit.py - name: Upload data as artifact uses: actions/upload-artifact@v3 @@ -235,10 +225,10 @@ jobs: - name: Python ${{ matrix.python-version }} shell: bash -l {0} run: | - conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 scipy --strict-channel-priority + conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 coverage --strict-channel-priority source activate TEST export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" # so setup.py finds nc-config - pip install -e . --force-reinstall + pip install -e . --no-deps --force-reinstall - name: Download data from artifact uses: actions/download-artifact@v3 @@ -251,7 +241,18 @@ jobs: run: | source activate TEST python -m pip install --upgrade pip wheel - pytest -c .github/workflows/pytest-hindcast.ini + pip install coveralls . + coverage run --rcfile=.github/workflows/.coveragehindcastrc -m pytest -c .github/workflows/pytest-hindcast.ini + + - name: Upload coverage data to coveralls.io + shell: bash -l {0} + run: | + source activate TEST + coveralls --service=github + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_FLAG_NAME: ${{ matrix.python-version }} + COVERALLS_PARALLEL: true coveralls: name: Indicate completion to coveralls.io From 954edfbc7cf7d1001d1d214428c2d5b6eee19ca6 Mon Sep 17 00:00:00 2001 From: ssolson Date: Sun, 14 Jan 2024 08:28:04 -0700 Subject: [PATCH 17/87] black --- mhkit/wave/io/hindcast/wind_toolkit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mhkit/wave/io/hindcast/wind_toolkit.py b/mhkit/wave/io/hindcast/wind_toolkit.py index 16b94f1cc..1404a6cd0 100644 --- a/mhkit/wave/io/hindcast/wind_toolkit.py +++ b/mhkit/wave/io/hindcast/wind_toolkit.py @@ -446,7 +446,6 @@ def request_wtk_point_data( } data_list = [] with MultiYearWindX(wind_path, **windKwargs) as rex_wind: - if isinstance(parameter, list): for p in parameter: temp_data = rex_wind.get_lat_lon_df(p, lat_lon) From 04f24e011492bbe27e6445f7c6351280b664bc8e Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 08:11:13 -0700 Subject: [PATCH 18/87] river io to usgs and d3d --- .../river/{test_io.py => test_io d3d.py} | 41 ------------ mhkit/tests/river/test_io_usgs.py | 67 +++++++++++++++++++ 2 files changed, 67 insertions(+), 41 deletions(-) rename mhkit/tests/river/{test_io.py => test_io d3d.py} (85%) create mode 100644 mhkit/tests/river/test_io_usgs.py diff --git a/mhkit/tests/river/test_io.py b/mhkit/tests/river/test_io d3d.py similarity index 85% rename from mhkit/tests/river/test_io.py rename to mhkit/tests/river/test_io d3d.py index ba765f7d0..92d36618a 100644 --- a/mhkit/tests/river/test_io.py +++ b/mhkit/tests/river/test_io d3d.py @@ -1,8 +1,6 @@ from os.path import abspath, dirname, join, isfile, normpath, relpath from numpy.testing import assert_array_almost_equal -from pandas.testing import assert_frame_equal import scipy.interpolate as interp -import matplotlib.pylab as plt import mhkit.river as river import pandas as pd import xarray as xr @@ -32,45 +30,6 @@ def setUpClass(self): def tearDownClass(self): pass - def test_load_usgs_data_instantaneous(self): - file_name = join(datadir, "USGS_08313000_Jan2019_instantaneous.json") - data = river.io.usgs.read_usgs_file(file_name) - - self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) - self.assertEqual(data.shape, (2972, 1)) # 4 data points are missing - - def test_load_usgs_data_daily(self): - file_name = join(datadir, "USGS_08313000_Jan2019_daily.json") - data = river.io.usgs.read_usgs_file(file_name) - - expected_index = pd.date_range("2019-01-01", "2019-01-31", freq="D") - self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) - self.assertEqual((data.index == expected_index.tz_localize("UTC")).all(), True) - self.assertEqual(data.shape, (31, 1)) - - def test_request_usgs_data_daily(self): - data = river.io.usgs.request_usgs_data( - station="15515500", - parameter="00060", - start_date="2009-08-01", - end_date="2009-08-10", - data_type="Daily", - ) - self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) - self.assertEqual(data.shape, (10, 1)) - - def test_request_usgs_data_instant(self): - data = river.io.usgs.request_usgs_data( - station="15515500", - parameter="00060", - start_date="2009-08-01", - end_date="2009-08-10", - data_type="Instantaneous", - ) - self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) - # Every 15 minutes or 4 times per hour - self.assertEqual(data.shape, (10 * 24 * 4, 1)) - def test_get_all_time(self): data = self.d3d_flume_data seconds_run = river.io.d3d.get_all_time(data) diff --git a/mhkit/tests/river/test_io_usgs.py b/mhkit/tests/river/test_io_usgs.py new file mode 100644 index 000000000..9e1da93e1 --- /dev/null +++ b/mhkit/tests/river/test_io_usgs.py @@ -0,0 +1,67 @@ +from os.path import abspath, dirname, join, isfile, normpath, relpath +import mhkit.river as river +import pandas as pd +import unittest +import os + + +testdir = dirname(abspath(__file__)) +plotdir = join(testdir, "plots") +isdir = os.path.isdir(plotdir) +if not isdir: + os.mkdir(plotdir) +datadir = normpath(join(testdir, "..", "..", "..", "examples", "data", "river")) + + +class TestIO(unittest.TestCase): + @classmethod + def setUpClass(self): + pass + + + @classmethod + def tearDownClass(self): + pass + + def test_load_usgs_data_instantaneous(self): + file_name = join(datadir, "USGS_08313000_Jan2019_instantaneous.json") + data = river.io.usgs.read_usgs_file(file_name) + + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) + self.assertEqual(data.shape, (2972, 1)) # 4 data points are missing + + def test_load_usgs_data_daily(self): + file_name = join(datadir, "USGS_08313000_Jan2019_daily.json") + data = river.io.usgs.read_usgs_file(file_name) + + expected_index = pd.date_range("2019-01-01", "2019-01-31", freq="D") + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) + self.assertEqual((data.index == expected_index.tz_localize("UTC")).all(), True) + self.assertEqual(data.shape, (31, 1)) + + def test_request_usgs_data_daily(self): + data = river.io.usgs.request_usgs_data( + station="15515500", + parameter="00060", + start_date="2009-08-01", + end_date="2009-08-10", + data_type="Daily", + ) + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) + self.assertEqual(data.shape, (10, 1)) + + def test_request_usgs_data_instant(self): + data = river.io.usgs.request_usgs_data( + station="15515500", + parameter="00060", + start_date="2009-08-01", + end_date="2009-08-10", + data_type="Instantaneous", + ) + self.assertEqual(data.columns, ["Discharge, cubic feet per second"]) + # Every 15 minutes or 4 times per hour + self.assertEqual(data.shape, (10 * 24 * 4, 1)) + + +if __name__ == "__main__": + unittest.main() From 3299e6099553de74acb5e4977f5c8514e0c6ac93 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 08:14:57 -0700 Subject: [PATCH 19/87] move d3d tidal into tidal/io --- mhkit/tidal/io/__init__.py | 1 + mhkit/tidal/{ => io}/d3d.py | 0 2 files changed, 1 insertion(+) rename mhkit/tidal/{ => io}/d3d.py (100%) diff --git a/mhkit/tidal/io/__init__.py b/mhkit/tidal/io/__init__.py index 3e20434aa..3f75b8116 100644 --- a/mhkit/tidal/io/__init__.py +++ b/mhkit/tidal/io/__init__.py @@ -1 +1,2 @@ from mhkit.tidal.io import noaa +from mhkit.tidal.io import d3d diff --git a/mhkit/tidal/d3d.py b/mhkit/tidal/io/d3d.py similarity index 100% rename from mhkit/tidal/d3d.py rename to mhkit/tidal/io/d3d.py From 2935fc8a06d7bd6a6ff58661271eed772c09733f Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 08:15:17 -0700 Subject: [PATCH 20/87] quick test to call d3d from tidal --- mhkit/tests/river/test_io d3d.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mhkit/tests/river/test_io d3d.py b/mhkit/tests/river/test_io d3d.py index 92d36618a..961830cb0 100644 --- a/mhkit/tests/river/test_io d3d.py +++ b/mhkit/tests/river/test_io d3d.py @@ -2,6 +2,7 @@ from numpy.testing import assert_array_almost_equal import scipy.interpolate as interp import mhkit.river as river +import mhkit.tidal as tidal import pandas as pd import xarray as xr import numpy as np @@ -54,6 +55,17 @@ def test_convert_time(self): output_expected = f"ERROR: invalid seconds_run. Closest seconds_run found {time_index_expected}" self.assertWarns(UserWarning) + def test_convert_time_from_tidal(self): + """ + Test the conversion of time from using tidal import of d3d + """ + data = self.d3d_flume_data + time_index = 2 + seconds_run = tidal.io.d3d.index_to_seconds(data, time_index=time_index) + seconds_run_expected = 120 + self.assertEqual(seconds_run, seconds_run_expected) + + def test_layer_data(self): data = self.d3d_flume_data variable = ["ucx", "s1"] From 3f3dcad2e7dc551cbfcd4dee2b56b080f7c0f00e Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 08:21:58 -0700 Subject: [PATCH 21/87] snake_case --- mhkit/tests/river/{test_io d3d.py => test_io_d3d.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename mhkit/tests/river/{test_io d3d.py => test_io_d3d.py} (100%) diff --git a/mhkit/tests/river/test_io d3d.py b/mhkit/tests/river/test_io_d3d.py similarity index 100% rename from mhkit/tests/river/test_io d3d.py rename to mhkit/tests/river/test_io_d3d.py From 4103c70c161b324f473ace240d5ed9a5388e8eab Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 08:28:30 -0700 Subject: [PATCH 22/87] `product` is deprecated as of NumPy 1.25.0 --- mhkit/dolfyn/tools/misc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mhkit/dolfyn/tools/misc.py b/mhkit/dolfyn/tools/misc.py index b08e8e364..f97485151 100644 --- a/mhkit/dolfyn/tools/misc.py +++ b/mhkit/dolfyn/tools/misc.py @@ -140,7 +140,7 @@ def slice1d_along_axis(arr_shape, axis=0): indlist.remove(axis) i[axis] = slice(None) itr_dims = np.asarray(arr_shape).take(indlist) - Ntot = np.product(itr_dims) + Ntot = np.prod(itr_dims) i.put(indlist, ind) k = 0 while k < Ntot: From 7d65eb7ea62fcecd85d4a13653cf6d9a3a3a001d Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 08:28:44 -0700 Subject: [PATCH 23/87] fix import path --- mhkit/tidal/io/d3d.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mhkit/tidal/io/d3d.py b/mhkit/tidal/io/d3d.py index 12b3f78b8..67ec083d9 100644 --- a/mhkit/tidal/io/d3d.py +++ b/mhkit/tidal/io/d3d.py @@ -1 +1 @@ -from mhkit.river.d3d import * +from mhkit.river.io.d3d import * From fd9f9c302509fb42ba1573bcb0cc06b629beaa1e Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 10:34:58 -0700 Subject: [PATCH 24/87] increase test coverage --- mhkit/tests/dolfyn/test_tools.py | 98 ++++++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 10 deletions(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index e917022bf..17381485d 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -1,4 +1,4 @@ -import mhkit.dolfyn.tools.misc as tools +import mhkit.dolfyn.tools as tools from numpy.testing import assert_equal, assert_allclose import numpy as np import unittest @@ -15,12 +15,12 @@ def tearDownClass(self): pass def test_detrend_array(self): - d = tools.detrend_array(self.array) + d = tools.misc.detrend_array(self.array) assert_allclose(d, np.zeros(10), atol=1e-10) def test_group(self): array = np.concatenate((self.array, self.array)) - d = tools.group(array) + d = tools.misc.group(array) out = np.array([slice(1, 20, None)], dtype=object) assert_equal(d, out) @@ -35,7 +35,7 @@ def test_slice(self): ) out = np.zeros((3, 3, 3)) slices = list() - for slc in tools.slice1d_along_axis((3, 3, 3), axis=-1): + for slc in tools.misc.slice1d_along_axis((3, 3, 3), axis=-1): slices.append(slc) out[slc] = tensor[slc] @@ -56,8 +56,8 @@ def test_slice(self): def test_fillgaps(self): arr = np.concatenate((self.array, self.nan, self.array)) - d1 = tools.fillgaps(arr.copy()) - d2 = tools.fillgaps(arr.copy(), maxgap=1) + d1 = tools.misc.fillgaps(arr.copy()) + d2 = tools.misc.fillgaps(arr.copy(), maxgap=1) out1 = np.array( [ @@ -121,8 +121,8 @@ def test_interpgaps(self): arr = np.concatenate((self.array, self.nan, self.array, self.nan)) t = np.arange(0, arr.shape[0], 0.1) - d1 = tools.interpgaps(arr.copy(), t, extrapFlg=True) - d2 = tools.interpgaps(arr.copy(), t, maxgap=1) + d1 = tools.misc.interpgaps(arr.copy(), t, extrapFlg=True) + d2 = tools.misc.interpgaps(arr.copy(), t, maxgap=1) out1 = np.array( [ @@ -192,7 +192,7 @@ def test_medfiltnan(self): arr = np.concatenate((self.array, self.nan, self.array)) a = np.concatenate((arr[None, :], arr[None, :]), axis=0) - d = tools.medfiltnan(a, [1, 5], thresh=3) + d = tools.misc.medfiltnan(a, [1, 5], thresh=3) out = np.array( [ @@ -252,12 +252,90 @@ def test_medfiltnan(self): assert_allclose(d, out, atol=1e-10) def test_deg_conv(self): - d = tools.convert_degrees(self.array) + d = tools.misc.convert_degrees(self.array) out = np.array([90.0, 89.0, 88.0, 87.0, 86.0, 85.0, 84.0, 83.0, 82.0, 81.0]) assert_allclose(d, out, atol=1e-10) + def test_fft_frequency(self): + fs = 1000 # Sampling frequency + nfft = 512 # Number of samples in a window + + # Test for full frequency range + freq_full = tools.fft.fft_frequency(nfft, fs, full=True) + assert_equal(len(freq_full), nfft) + + # Check symmetry of positive and negative frequencies, ignoring the zero frequency + positive_freqs = freq_full[1:int(nfft / 2)] + negative_freqs = freq_full[int(nfft / 2) + 1:] + assert_allclose(positive_freqs, -negative_freqs[::-1]) + + # Test for half frequency range + freq_half = tools.fft.fft_frequency(nfft, fs, full=False) + assert_equal(len(freq_half), int(nfft / 2) - 1) + # TODO Fix based on james response + # assert_allclose(freq_half, positive_freqs) # Ignore the zero frequency + + def test_stepsize(self): + # Case 1: l < nfft + step, nens, nfft = tools.fft._stepsize(100, 200) + assert_equal((step, nens, nfft), (0, 1, 100)) + + # Case 2: l == nfft + step, nens, nfft = tools.fft._stepsize(200, 200) + assert_equal((step, nens, nfft), (0, 1, 200)) + + # Case 3: l > nfft, no nens + step, nens, nfft = tools.fft._stepsize(300, 100) + expected_nens = int(2.0 * 300 / 100) + expected_step = int((300 - 100) / (expected_nens - 1)) + assert_equal((step, nens, nfft), (expected_step, expected_nens, 100)) + + # Case 4: l > nfft, with nens + step, nens, nfft = tools.fft._stepsize(300, 100, nens=5) + expected_step = int((300 - 100) / (5 - 1)) + assert_equal((step, nens, nfft), (expected_step, 5, 100)) + + # Case 5: l > nfft, with step + step, nens, nfft = tools.fft._stepsize(300, 100, step=50) + expected_nens = int((300 - 100) / 50 + 1) + assert_equal((step, nens, nfft), (50, expected_nens, 100)) + + # Case 6: nens is 1 + step, nens, nfft = tools.fft._stepsize(300, 100, nens=1) + assert_equal((step, nens, nfft), (0, 1, 100)) + + def test_cpsd_quasisync_1D(self): + fs = 1000 # Sample rate + nfft = 512 # Number of points in the fft + + # Test with signals of same length + a = np.random.normal(0, 1, 1000) + b = np.random.normal(0, 1, 1000) + cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs) + self.assertEqual(cpsd.shape, (nfft // 2,)) + + + # Test with signals of different lengths + a = np.random.normal(0, 1, 1500) + b = np.random.normal(0, 1, 1000) + cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs) + self.assertEqual(cpsd.shape, (nfft // 2,)) + + + # Test with different window types + for window in [None, 1, "hann"]: + cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs, window=window) + self.assertEqual(cpsd.shape, (nfft // 2,)) + + + # Test with a custom window + # TODO Fix based on james response + # custom_window = np.hamming(nfft) + # cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs, window=custom_window) + # self.assertEqual(cpsd.shape, (nfft // 2,)) + if __name__ == "__main__": unittest.main() From 6e3d11a876e51d99aad1f58babc3408246b60991 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 10:37:02 -0700 Subject: [PATCH 25/87] black --- mhkit/tests/dolfyn/test_tools.py | 9 +++------ mhkit/tests/river/test_io_d3d.py | 1 - mhkit/tests/river/test_io_usgs.py | 1 - 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index 17381485d..d62ff63dd 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -267,12 +267,12 @@ def test_fft_frequency(self): assert_equal(len(freq_full), nfft) # Check symmetry of positive and negative frequencies, ignoring the zero frequency - positive_freqs = freq_full[1:int(nfft / 2)] - negative_freqs = freq_full[int(nfft / 2) + 1:] + positive_freqs = freq_full[1 : int(nfft / 2)] + negative_freqs = freq_full[int(nfft / 2) + 1 :] assert_allclose(positive_freqs, -negative_freqs[::-1]) # Test for half frequency range - freq_half = tools.fft.fft_frequency(nfft, fs, full=False) + freq_half = tools.fft.fft_frequency(nfft, fs, full=False) assert_equal(len(freq_half), int(nfft / 2) - 1) # TODO Fix based on james response # assert_allclose(freq_half, positive_freqs) # Ignore the zero frequency @@ -316,20 +316,17 @@ def test_cpsd_quasisync_1D(self): cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs) self.assertEqual(cpsd.shape, (nfft // 2,)) - # Test with signals of different lengths a = np.random.normal(0, 1, 1500) b = np.random.normal(0, 1, 1000) cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs) self.assertEqual(cpsd.shape, (nfft // 2,)) - # Test with different window types for window in [None, 1, "hann"]: cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs, window=window) self.assertEqual(cpsd.shape, (nfft // 2,)) - # Test with a custom window # TODO Fix based on james response # custom_window = np.hamming(nfft) diff --git a/mhkit/tests/river/test_io_d3d.py b/mhkit/tests/river/test_io_d3d.py index 961830cb0..ba981e169 100644 --- a/mhkit/tests/river/test_io_d3d.py +++ b/mhkit/tests/river/test_io_d3d.py @@ -65,7 +65,6 @@ def test_convert_time_from_tidal(self): seconds_run_expected = 120 self.assertEqual(seconds_run, seconds_run_expected) - def test_layer_data(self): data = self.d3d_flume_data variable = ["ucx", "s1"] diff --git a/mhkit/tests/river/test_io_usgs.py b/mhkit/tests/river/test_io_usgs.py index 9e1da93e1..b422bee2c 100644 --- a/mhkit/tests/river/test_io_usgs.py +++ b/mhkit/tests/river/test_io_usgs.py @@ -18,7 +18,6 @@ class TestIO(unittest.TestCase): def setUpClass(self): pass - @classmethod def tearDownClass(self): pass From cedd6b6dbf2b7832ecf2b39eca1de6e291ef8a5d Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 10:42:53 -0700 Subject: [PATCH 26/87] update test filename --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9c90aa8df..79dc4ba64 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -81,7 +81,7 @@ jobs: - name: Prepare data run: | source activate TEST - pytest mhkit/tests/river/test_io.py + pytest mhkit/tests/river/test_usgs.py pytest mhkit/tests/tidal/test_io.py pytest mhkit/tests/wave/io/test_cdip.py From 83719a81cf2485ef9a5ce95d582edd105f11db13 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 10:58:01 -0700 Subject: [PATCH 27/87] correct name --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 79dc4ba64..9fa11f189 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -81,7 +81,7 @@ jobs: - name: Prepare data run: | source activate TEST - pytest mhkit/tests/river/test_usgs.py + pytest mhkit/tests/river/test_io_usgs.py pytest mhkit/tests/tidal/test_io.py pytest mhkit/tests/wave/io/test_cdip.py From 8abfd62fa62e9d28d1d9a5416b7fa72063090ed6 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 15 Jan 2024 20:53:53 -0700 Subject: [PATCH 28/87] wait fox James to respond --- mhkit/tests/dolfyn/test_tools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index d62ff63dd..9a2b3a3e5 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -272,9 +272,9 @@ def test_fft_frequency(self): assert_allclose(positive_freqs, -negative_freqs[::-1]) # Test for half frequency range - freq_half = tools.fft.fft_frequency(nfft, fs, full=False) - assert_equal(len(freq_half), int(nfft / 2) - 1) # TODO Fix based on james response + freq_half = tools.fft.fft_frequency(nfft, fs, full=False) + # assert_equal(len(freq_half), int(nfft / 2) - 1) # assert_allclose(freq_half, positive_freqs) # Ignore the zero frequency def test_stepsize(self): From 5442c6d34b117596a74b6616b1bed1a6e9cfefc2 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 08:43:07 -0700 Subject: [PATCH 29/87] increase mooring graphics coverage --- mhkit/tests/mooring/test_mooring.py | 190 +++++++++++++++++++++++++++- 1 file changed, 184 insertions(+), 6 deletions(-) diff --git a/mhkit/tests/mooring/test_mooring.py b/mhkit/tests/mooring/test_mooring.py index d09a7aff2..095316d0f 100644 --- a/mhkit/tests/mooring/test_mooring.py +++ b/mhkit/tests/mooring/test_mooring.py @@ -3,12 +3,20 @@ from matplotlib.animation import FuncAnimation import xarray as xr import mhkit.mooring as mooring +import pytest +import numpy as np testdir = dirname(abspath(__file__)) datadir = normpath(join(testdir, "..", "..", "..", "examples", "data", "mooring")) class TestMooring(unittest.TestCase): + @classmethod + def setUpClass(self): + fpath = join(datadir, "line1_test.nc") + self.ds = xr.open_dataset(fpath) + self.dsani = self.ds.sel(Time=slice(0, 10)) + def test_moordyn_out(self): fpath = join(datadir, "Test.MD.out") inputpath = join(datadir, "TestInput.MD.dat") @@ -23,9 +31,7 @@ def test_lay_length(self): self.assertAlmostEqual(laylength, 45.0, 1) def test_animate_3d(self): - fpath = join(datadir, "line1_test.nc") - ds = xr.open_dataset(fpath) - dsani = ds.sel(Time=slice(0, 10)) + dsani = self.ds.sel(Time=slice(0, 10)) ani = mooring.graphics.animate( dsani, dimension="3d", @@ -39,9 +45,7 @@ def test_animate_3d(self): isinstance(ani, FuncAnimation) def test_animate_2d(self): - fpath = join(datadir, "line1_test.nc") - ds = xr.open_dataset(fpath) - dsani = ds.sel(Time=slice(0, 10)) + dsani = self.ds.sel(Time=slice(0, 10)) ani2d = mooring.graphics.animate( dsani, dimension="2d", @@ -54,6 +58,180 @@ def test_animate_2d(self): ) isinstance(ani2d, FuncAnimation) + def test_animate_2d_update(self): + ani2d = mooring.graphics.animate( + self.ds, + dimension="2d", + xaxis="x", + yaxis="z", + repeat=True, + xlabel="X-axis", + ylabel="Depth [m]", + title="Mooring Line Example", + ) + + # Extract the figure and axes + fig = ani2d._fig + ax = fig.axes[0] + line, = ax.lines + + # Simulate the update for a specific frame + frame = 5 + + # Extracting data from the list of nodes + nodes_x, nodes_y, _ = mooring.graphics._get_axis_nodes(self.dsani, 'x', 'z', 'y') + x_data = self.dsani[nodes_x[0]].isel(Time=frame).values + y_data = self.dsani[nodes_y[0]].isel(Time=frame).values + + # Manually set the data for the line object + line.set_data(x_data, y_data) + + # Extract updated data from the line object + updated_x, updated_y = line.get_data() + + # Assert that the updated data matches the dataset + np.testing.assert_array_equal(updated_x, x_data) + np.testing.assert_array_equal(updated_y, y_data) + + def test_animate_3d_update(self): + ani3d = mooring.graphics.animate( + self.ds, + dimension="3d", + xaxis="x", + yaxis="z", + zaxis="y", + repeat=True, + xlabel="X-axis", + ylabel="Depth [m]", + zlabel="Y-axis", + title="Mooring Line Example", + ) + + # Extract the figure and axes + fig = ani3d._fig + ax = fig.axes[0] + line, = ax.lines + + # Simulate the update for a specific frame + frame = 5 + + # Extracting data for the specified frame + nodes_x, nodes_y, nodes_z = mooring.graphics._get_axis_nodes(self.dsani, 'x', 'z', 'y') + x_data = self.dsani[nodes_x[0]].isel(Time=frame).values + y_data = self.dsani[nodes_y[0]].isel(Time=frame).values + z_data = self.dsani[nodes_z[0]].isel(Time=frame).values + + # Manually set the data for the line object + line.set_data(x_data, y_data) + line.set_3d_properties(z_data) + + # Extract updated data from the line object + updated_x, updated_y, updated_z = line._verts3d + + # Assert that the updated data matches the dataset + np.testing.assert_array_equal(updated_x, x_data) + np.testing.assert_array_equal(updated_y, y_data) + np.testing.assert_array_equal(updated_z, z_data) + + + # Test for xaxis, yaxis, zaxis type handling + def test_animate_xaxis_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, xaxis=123) + + def test_animate_yaxis_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, yaxis=123) + + def test_animate_zaxis_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, zaxis=123) + + # Test for zlim and zlabel in 3D mode + def test_animate_zlim_type_handling_3d(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, dimension="3d", zlim="invalid") + + def test_animate_zlabel_type_handling_3d(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, dimension="3d", zlabel=123) + + # Test for xlim, ylim, interval, repeat, xlabel, ylabel, title + def test_animate_xlim_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, xlim="invalid") + + def test_animate_ylim_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, ylim="invalid") + + def test_animate_interval_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, interval="invalid") + + def test_animate_repeat_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, repeat="invalid") + + def test_animate_xlabel_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, xlabel=123) + + def test_animate_ylabel_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, ylabel=123) + + def test_animate_title_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, title=123) + + def test_animate_dsani_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate("not_a_dataset") + + def test_animate_xlim_type_handling_none(self): + try: + mooring.graphics.animate(self.dsani, xlim=None) + except TypeError: + pytest.fail("Unexpected TypeError with xlim=None") + + def test_animate_ylim_type_handling_none(self): + try: + mooring.graphics.animate(self.dsani, ylim=None) + except TypeError: + pytest.fail("Unexpected TypeError with ylim=None") + + def test_animate_interval_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, interval="not_an_int") + + def test_animate_repeat_type_handling(self): + with pytest.raises(TypeError): + mooring.graphics.animate(self.dsani, repeat="not_a_bool") + + def test_animate_xlabel_type_handling_none(self): + try: + mooring.graphics.animate(self.dsani, xlabel=None) + except TypeError: + pytest.fail("Unexpected TypeError with xlabel=None") + + def test_animate_ylabel_type_handling_none(self): + try: + mooring.graphics.animate(self.dsani, ylabel=None) + except TypeError: + pytest.fail("Unexpected TypeError with ylabel=None") + + def test_animate_title_type_handling_none(self): + try: + mooring.graphics.animate(self.dsani, title=None) + except TypeError: + pytest.fail("Unexpected TypeError with title=None") + + def test_animate_dimension_type_handling(self): + with pytest.raises(ValueError): + mooring.graphics.animate(self.dsani, dimension="not_2d_or_3d") + + if __name__ == "__main__": unittest.main() From f85e3ff1e407c2cc1d3566be97ccbcc16be606c7 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 08:59:42 -0700 Subject: [PATCH 30/87] increase test coverage --- mhkit/tests/river/test_resource.py | 108 +++++++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 5 deletions(-) diff --git a/mhkit/tests/river/test_resource.py b/mhkit/tests/river/test_resource.py index 4e4a6dec6..5b93c3430 100644 --- a/mhkit/tests/river/test_resource.py +++ b/mhkit/tests/river/test_resource.py @@ -1,13 +1,9 @@ -from os.path import abspath, dirname, join, isfile, normpath, relpath -from numpy.testing import assert_array_almost_equal -from pandas.testing import assert_frame_equal -import scipy.interpolate as interp +from os.path import abspath, dirname, join, isfile, normpath import matplotlib.pylab as plt import mhkit.river as river import pandas as pd import numpy as np import unittest -import netCDF4 import os @@ -41,6 +37,25 @@ def test_Froude_number(self): Fr = river.resource.Froude_number(v, h) self.assertAlmostEqual(Fr, 0.286, places=3) + def test_froude_number_v_type_error(self): + v = "invalid_type" # String instead of int/float + h = 5 + with self.assertRaises(TypeError): + river.resource.Froude_number(v, h) + + def test_froude_number_h_type_error(self): + v = 2 + h = "invalid_type" # String instead of int/float + with self.assertRaises(TypeError): + river.resource.Froude_number(v, h) + + def test_froude_number_g_type_error(self): + v = 2 + h = 5 + g = "invalid_type" # String instead of int/float + with self.assertRaises(TypeError): + river.resource.Froude_number(v, h, g) + def test_exceedance_probability(self): # Create arbitrary discharge between 0 and 8(N=9) Q = pd.Series(np.arange(9)) @@ -51,6 +66,11 @@ def test_exceedance_probability(self): self.assertEqual(f.min().values, 10.0) self.assertEqual(f.max().values, 90.0) + def test_exceedance_probability_type_error(self): + D = "invalid_type" # String instead of pd.Series or pd.DataFrame + with self.assertRaises(TypeError): + river.resource.exceedance_probability(D) + def test_polynomial_fit(self): # Calculate a first order polynomial on an x=y line p, r2 = river.resource.polynomial_fit(np.arange(8), np.arange(8), 1) @@ -61,6 +81,27 @@ def test_polynomial_fit(self): # r-squared should be perfect self.assertAlmostEqual(r2, 1.0, places=2) + def test_polynomial_fit_x_type_error(self): + x = "invalid_type" # String instead of numpy array + y = np.array([1, 2, 3]) + n = 1 + with self.assertRaises(TypeError): + river.resource.polynomial_fit(x, y, n) + + def test_polynomial_fit_y_type_error(self): + x = np.array([1, 2, 3]) + y = "invalid_type" # String instead of numpy array + n = 1 + with self.assertRaises(TypeError): + river.resource.polynomial_fit(x, y, n) + + def test_polynomial_fit_n_type_error(self): + x = np.array([1, 2, 3]) + y = np.array([1, 2, 3]) + n = "invalid_type" # String instead of int + with self.assertRaises(TypeError): + river.resource.polynomial_fit(x, y, n) + def test_discharge_to_velocity(self): # Create arbitrary discharge between 0 and 8(N=9) Q = pd.Series(np.arange(9)) @@ -70,6 +111,18 @@ def test_discharge_to_velocity(self): V = river.resource.discharge_to_velocity(Q, p) self.assertAlmostEqual(np.sum(10 * Q - V["V"]), 0.00, places=2) + def test_discharge_to_velocity_D_type_error(self): + D = "invalid_type" # String instead of pd.Series or pd.DataFrame + polynomial_coefficients = np.poly1d([1, 2]) + with self.assertRaises(TypeError): + river.resource.discharge_to_velocity(D, polynomial_coefficients) + + def test_discharge_to_velocity_polynomial_coefficients_type_error(self): + D = pd.Series([1, 2, 3]) + polynomial_coefficients = "invalid_type" # String instead of np.poly1d + with self.assertRaises(TypeError): + river.resource.discharge_to_velocity(D, polynomial_coefficients) + def test_velocity_to_power(self): # Calculate a first order polynomial on an DV_Curve x=y line 10 times greater than the Q values p, r2 = river.resource.polynomial_fit(np.arange(9), 10 * np.arange(9), 1) @@ -89,6 +142,39 @@ def test_velocity_to_power(self): # Middle 10x greater than velocity self.assertAlmostEqual((P["P"][1:-1] - 10 * V["V"][1:-1]).sum(), 0.00, places=2) + def test_velocity_to_power_V_type_error(self): + V = "invalid_type" # String instead of pd.Series or pd.DataFrame + polynomial_coefficients = np.poly1d([1, 2]) + cut_in = 1 + cut_out = 5 + with self.assertRaises(TypeError): + river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + + def test_velocity_to_power_polynomial_coefficients_type_error(self): + V = pd.Series([1, 2, 3]) + polynomial_coefficients = "invalid_type" # String instead of np.poly1d + cut_in = 1 + cut_out = 5 + with self.assertRaises(TypeError): + river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + + def test_velocity_to_power_cut_in_type_error(self): + V = pd.Series([1, 2, 3]) + polynomial_coefficients = np.poly1d([1, 2]) + cut_in = "invalid_type" # String instead of int/float + cut_out = 5 + with self.assertRaises(TypeError): + river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + + def test_velocity_to_power_cut_out_type_error(self): + V = pd.Series([1, 2, 3]) + polynomial_coefficients = np.poly1d([1, 2]) + cut_in = 1 + cut_out = "invalid_type" # String instead of int/float + with self.assertRaises(TypeError): + river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + + def test_energy_produced(self): # If power is always X then energy produced with be x*seconds X = 1 @@ -103,6 +189,18 @@ def test_energy_produced(self): EP2 = river.resource.energy_produced(power_dist, seconds) self.assertAlmostEqual(EP2, mu * seconds, places=1) + def test_energy_produced_P_type_error(self): + P = "invalid_type" # String instead of pd.Series or pd.DataFrame + seconds = 3600 + with self.assertRaises(TypeError): + river.resource.energy_produced(P, seconds) + + def test_energy_produced_seconds_type_error(self): + P = pd.Series([100, 200, 300]) + seconds = "invalid_type" # String instead of int/float + with self.assertRaises(TypeError): + river.resource.energy_produced(P, seconds) + def test_plot_flow_duration_curve(self): filename = abspath(join(plotdir, "river_plot_flow_duration_curve.png")) if isfile(filename): From ac4e89a1b47826b675c8285434de57a3be8041af Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 10:22:56 -0700 Subject: [PATCH 31/87] increase coverage --- mhkit/tests/loads/test_loads.py | 80 ++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/mhkit/tests/loads/test_loads.py b/mhkit/tests/loads/test_loads.py index 32d4433bd..67f70c056 100644 --- a/mhkit/tests/loads/test_loads.py +++ b/mhkit/tests/loads/test_loads.py @@ -46,6 +46,11 @@ def test_bin_statistics(self): [b_means, b_means_std] = loads.general.bin_statistics( load_means, bin_against, bin_edges ) + + # Ensure the data type of the index matches + b_means.index = b_means.index.astype(self.data["bin_means"].index.dtype) + b_means_std.index = b_means_std.index.astype(self.data["bin_means_std"].index.dtype) + b_means.index.name = None # compatibility with old test data b_means_std.index.name = None # compatibility with old test data @@ -53,7 +58,7 @@ def test_bin_statistics(self): assert_frame_equal(self.data["bin_means_std"], b_means_std) def test_bin_statistics_xarray(self): - # create array containg wind speeds to use as bin edges + # create array containing wind speeds to use as bin edges bin_edges = np.arange(3, 26, 1) # Apply function to calculate means @@ -63,12 +68,63 @@ def test_bin_statistics_xarray(self): [b_means, b_means_std] = loads.general.bin_statistics( load_means, bin_against, bin_edges ) + + # Ensure the data type of the index matches + b_means.index = b_means.index.astype(self.data["bin_means"].index.dtype) + b_means_std.index = b_means_std.index.astype(self.data["bin_means_std"].index.dtype) + b_means.index.name = None # compatibility with old test data b_means_std.index.name = None # compatibility with old test data assert_frame_equal(self.data["bin_means"], b_means) assert_frame_equal(self.data["bin_means_std"], b_means_std) + + def test_bin_statistics_data_type_error(self): + bin_against = np.array([10, 20, 30]) + bin_edges = np.array([0, 15, 25, 35]) + data_signal = ["signal_1"] + to_pandas = True + with self.assertRaises(TypeError): + loads.general.bin_statistics("invalid_data_type", bin_against, bin_edges, data_signal, to_pandas) + + def test_bin_statistics_bin_against_type_error(self): + data = pd.DataFrame({"signal_1": [1, 2, 3]}) + bin_edges = np.array([0, 15, 25, 35]) + data_signal = ["signal_1"] + to_pandas = True + invalid_bin_against = "invalid_bin_against_type" + with self.assertRaises(TypeError): + loads.general.bin_statistics(data, invalid_bin_against, bin_edges, data_signal, to_pandas) + + + def test_bin_statistics_bin_edges_type_error(self): + data = pd.DataFrame({"signal_1": [1, 2, 3]}) + bin_against = np.array([10, 20, 30]) + data_signal = ["signal_1"] + to_pandas = True + with self.assertRaises(TypeError): + loads.general.bin_statistics(data, bin_against, "invalid_bin_edges_type", data_signal, to_pandas) + + def test_bin_statistics_data_signal_type_error(self): + data = pd.DataFrame({"signal_1": [1, 2, 3]}) + bin_against = np.array([10, 20, 30]) + bin_edges = np.array([0, 15, 25, 35]) + data_signal = "invalid_data_signal_type" + to_pandas = True + with self.assertRaises(TypeError): + loads.general.bin_statistics(data, bin_against, bin_edges, data_signal, to_pandas) + + def test_bin_statistics_to_pandas_type_error(self): + data = pd.DataFrame({"signal_1": [1, 2, 3]}) + bin_against = np.array([10, 20, 30]) + bin_edges = np.array([0, 15, 25, 35]) + data_signal = ["signal_1"] + to_pandas = "invalid_to_pandas_type" + with self.assertRaises(TypeError): + loads.general.bin_statistics(data, bin_against, bin_edges, data_signal, to_pandas) + + def test_blade_moments(self): flap_raw = self.blade_data["flap_raw"] flap_offset = self.flap_offset @@ -84,6 +140,17 @@ def test_blade_moments(self): for i, j in zip(M_edge, self.blade_data["edge_scaled"]): self.assertAlmostEqual(i, j, places=1) + def test_blade_moments_wrong_types(self): + # Test with incorrect types + blade_coefficients = [1.0, 2.0, 3.0, 4.0] # Should be np.ndarray + flap_offset = "invalid" # Should be float + flap_raw = "invalid" # Should be np.ndarray + edge_offset = "invalid" # Should be float + edge_raw = "invalid" # Should be np.ndarray + + with self.assertRaises(TypeError): + loads.general.blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_raw) + def test_damage_equivalent_loads(self): loads_data = self.data["loads"] tower_load = loads_data["TB_ForeAft"] @@ -102,6 +169,17 @@ def test_damage_equivalent_loads(self): DEL_blade, self.fatigue_blade, delta=self.fatigue_blade * 0.04 ) + def test_damage_equivalent_load_wrong_types(self): + # Test with incorrect types + data_signal = "invalid" # Should be np.ndarray + m = "invalid" # Should be float or int + bin_num = "invalid" # Should be int + data_length = "invalid" # Should be float or int + + with self.assertRaises(TypeError): + loads.general.damage_equivalent_load(data_signal, m, bin_num, data_length) + + def test_plot_statistics(self): # Define path savepath = abspath(join(testdir, "test_scatplotter.png")) From 683bfcb49ec82922cec018c77e38f60b4f9ce32f Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 10:23:18 -0700 Subject: [PATCH 32/87] catch strings passed as TypeError --- mhkit/loads/general.py | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index 0aa145903..5b66640c2 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -35,16 +35,36 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=[], to_pandas=True) raise TypeError( f"data must be of type pd.DataFrame or xr.Dataset. Got: {type(data)}" ) - try: - bin_against = np.asarray(bin_against) - except: - raise TypeError( - f"bin_against must be of type np.ndarray. Got: {type(bin_against)}" - ) - try: - bin_edges = np.asarray(bin_edges) - except: + + if isinstance(bin_against, str): + raise TypeError(f"bin_against must be numeric, not a string. Got: {bin_against}") + + if not isinstance(bin_against, (list, xr.DataArray, pd.Series, np.ndarray)): + raise TypeError(f"bin_against must be of type list, xr.DataArray, pd.Series, or np.ndarray. Got: {type(bin_against)}") + + if not isinstance(bin_against, np.ndarray): + try: + bin_against = np.asarray(bin_against) + except: + raise TypeError(f"bin_against must be of type np.ndarray. Got: {type(bin_against)}") + + + # Check if bin_edges is a string and raise an error if it is + if isinstance(bin_edges, str): + raise TypeError(f"bin_edges must not be a string. Got: {bin_edges}") + + # Check if bin_edges is one of the expected types, and convert if necessary + if isinstance(bin_edges, (list, xr.DataArray, pd.Series)): + try: + bin_edges = np.asarray(bin_edges) + except: + pass + + # Check if bin_edges is now a NumPy array, and raise an error if it's not + if not isinstance(bin_edges, np.ndarray): raise TypeError(f"bin_edges must be of type np.ndarray. Got: {type(bin_edges)}") + + if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") From 357306dc02048850591bb8f9da78996ca952782e Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 10:46:16 -0700 Subject: [PATCH 33/87] Increase coverage on dataTypes --- mhkit/tests/loads/test_loads.py | 105 ++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/mhkit/tests/loads/test_loads.py b/mhkit/tests/loads/test_loads.py index 67f70c056..202f9adaa 100644 --- a/mhkit/tests/loads/test_loads.py +++ b/mhkit/tests/loads/test_loads.py @@ -198,6 +198,24 @@ def test_plot_statistics(self): self.assertTrue(isfile(savepath)) + def test_plot_statistics_wrong_types(self): + # Test with incorrect types for some arguments + x = "invalid" # Should be np.ndarray + y_mean = "invalid" # Should be np.ndarray + y_max = "invalid" # Should be np.ndarray + y_min = "invalid" # Should be np.ndarray + y_stdev = "invalid" # Should be np.ndarray + + kwargs = { + "x_label": "X Axis", + "y_label": "Y Axis", + "title": "Test Plot", + "save_path": "test_plot.png" + } + + with self.assertRaises(TypeError): + loads.graphics.plot_statistics(x, y_mean, y_max, y_min, y_stdev, **kwargs) + def test_plot_bin_statistics(self): # Define signal name, path, and bin centers savepath = abspath(join(testdir, "test_binplotter.png")) @@ -229,6 +247,93 @@ def test_plot_bin_statistics(self): self.assertTrue(isfile(savepath)) + def test_plot_bin_statistics_type_errors(self): + # Specify inputs to be used in plotting + bin_centers = np.arange(3.5, 25.5, step=1) + signal_name = "TB_ForeAft" + bin_mean = self.data["bin_means"][signal_name] + bin_max = self.data["bin_maxs"][signal_name] + bin_min = self.data["bin_mins"][signal_name] + bin_mean_std = self.data["bin_means_std"][signal_name] + bin_max_std = self.data["bin_maxs_std"][signal_name] + bin_min_std = self.data["bin_mins_std"][signal_name] + # Test invalid data types one at a time + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + [1, 2, 3], # Invalid bin_centers (list instead of np.ndarray) + bin_mean, + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + ) + + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + bin_centers, + [10, 20, 30], # Invalid bin_mean (list instead of np.ndarray) + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + ) + + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + bin_centers, + bin_mean, + [15, 25, 35], # Invalid bin_max (list instead of np.ndarray) + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + ) + + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + bin_centers, + bin_mean, + bin_max, + [5, 15, 25], # Invalid bin_min (list instead of np.ndarray) + bin_mean_std, + bin_max_std, + bin_min_std, + ) + + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + bin_centers, + bin_mean, + bin_max, + bin_min, + [1, 2, 3], # Invalid bin_mean_std (list instead of np.ndarray) + bin_max_std, + bin_min_std, + ) + + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + bin_centers, + bin_mean, + bin_max, + bin_min, + bin_mean_std, + [0.5, 1.5, 2.5], # Invalid bin_max_std (list instead of np.ndarray) + bin_min_std, + ) + + with self.assertRaises(TypeError): + loads.graphics.plot_bin_statistics( + bin_centers, + bin_mean, + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + [0.8, 1.8, 2.8], # Invalid bin_min_std (list instead of np.ndarray) + ) class TestWDRT(unittest.TestCase): @classmethod From f793ce0d84d13a25379264d2c8b56ea6c9371417 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 10:46:36 -0700 Subject: [PATCH 34/87] throw error on strings passed --- mhkit/loads/graphics.py | 73 +++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/mhkit/loads/graphics.py b/mhkit/loads/graphics.py index 6bdaa5197..d14964bd9 100644 --- a/mhkit/loads/graphics.py +++ b/mhkit/loads/graphics.py @@ -1,5 +1,6 @@ import matplotlib.pyplot as plt import numpy as np +import pandas as pd def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): @@ -33,22 +34,19 @@ def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): ax : matplotlib pyplot axes """ - try: - x = np.array(x) - except: - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") - try: - y_mean = np.array(y_mean) - except: - raise TypeError(f"y_mean must be of type np.ndarray. Got: {type(y_mean)}") - try: - y_max = np.array(y_max) - except: - raise TypeError(f"y_max must be of type np.ndarray. Got: {type(y_max)}") - try: - y_min = np.array(y_min) - except: - raise TypeError(f"y_min must be of type np.ndarray. Got: {type(y_min)}") + input_variables = [x, y_mean, y_max, y_min, y_stdev] + + for i in range(len(input_variables)): + var_name = ["x", "y_mean", "y_max", "y_min", "y_stdev"][i] + if not isinstance(input_variables[i], (np.ndarray, pd.Series, int, float)): + raise TypeError(f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}") + + try: + input_variables[i] = np.array(input_variables[i]) + except: + pass + + x, y_mean, y_max, y_min, y_stdev = input_variables x_label = kwargs.get("x_label", None) y_label = kwargs.get("y_label", None) @@ -135,36 +133,19 @@ def plot_bin_statistics( ax : matplotlib pyplot axes """ - try: - bin_centers = np.asarray(bin_centers) - except: - "bin_centers must be of type np.ndarray" - - try: - bin_mean = np.asarray(bin_mean) - except: - "bin_mean must be of type np.ndarray" - try: - bin_max = np.asarray(bin_max) - except: - "bin_max must be of type np.ndarray" - try: - bin_min = np.asarray(bin_min) - except: - "bin_min must be of type type np.ndarray" - - try: - bin_mean_std = np.asarray(bin_mean_std) - except: - "bin_mean_std must be of type np.ndarray" - try: - bin_max_std = np.asarray(bin_max_std) - except: - "bin_max_std must be of type np.ndarray" - try: - bin_min_std = np.asarray(bin_min_std) - except: - "bin_min_std must be of type np.ndarray" + input_variables = [bin_centers, bin_mean, bin_max, bin_min, bin_mean_std, bin_max_std, bin_min_std] + + for i in range(len(input_variables)): + var_name = ["bin_centers", "bin_mean", "bin_max", "bin_min", "bin_mean_std", "bin_max_std", "bin_min_std"][i] + if not isinstance(input_variables[i], (np.ndarray, pd.Series, int, float)): + raise TypeError(f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}") + + try: + input_variables[i] = np.array(input_variables[i]) + except: + pass + + bin_centers, bin_mean, bin_max, bin_min, bin_mean_std, bin_max_std, bin_min_std = input_variables x_label = kwargs.get("x_label", None) y_label = kwargs.get("y_label", None) From 4d65466388fbe7fc9f104ce5be96189b75ea3f53 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 16 Jan 2024 10:47:28 -0700 Subject: [PATCH 35/87] black --- mhkit/loads/general.py | 16 +++--- mhkit/loads/graphics.py | 38 +++++++++++-- mhkit/tests/loads/test_loads.py | 83 +++++++++++++++++------------ mhkit/tests/mooring/test_mooring.py | 16 +++--- mhkit/tests/river/test_resource.py | 17 ++++-- 5 files changed, 112 insertions(+), 58 deletions(-) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index 5b66640c2..e9a959426 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -35,19 +35,24 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=[], to_pandas=True) raise TypeError( f"data must be of type pd.DataFrame or xr.Dataset. Got: {type(data)}" ) - + if isinstance(bin_against, str): - raise TypeError(f"bin_against must be numeric, not a string. Got: {bin_against}") + raise TypeError( + f"bin_against must be numeric, not a string. Got: {bin_against}" + ) if not isinstance(bin_against, (list, xr.DataArray, pd.Series, np.ndarray)): - raise TypeError(f"bin_against must be of type list, xr.DataArray, pd.Series, or np.ndarray. Got: {type(bin_against)}") + raise TypeError( + f"bin_against must be of type list, xr.DataArray, pd.Series, or np.ndarray. Got: {type(bin_against)}" + ) if not isinstance(bin_against, np.ndarray): try: bin_against = np.asarray(bin_against) except: - raise TypeError(f"bin_against must be of type np.ndarray. Got: {type(bin_against)}") - + raise TypeError( + f"bin_against must be of type np.ndarray. Got: {type(bin_against)}" + ) # Check if bin_edges is a string and raise an error if it is if isinstance(bin_edges, str): @@ -63,7 +68,6 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=[], to_pandas=True) # Check if bin_edges is now a NumPy array, and raise an error if it's not if not isinstance(bin_edges, np.ndarray): raise TypeError(f"bin_edges must be of type np.ndarray. Got: {type(bin_edges)}") - if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") diff --git a/mhkit/loads/graphics.py b/mhkit/loads/graphics.py index d14964bd9..d37cb1a2c 100644 --- a/mhkit/loads/graphics.py +++ b/mhkit/loads/graphics.py @@ -39,7 +39,9 @@ def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): for i in range(len(input_variables)): var_name = ["x", "y_mean", "y_max", "y_min", "y_stdev"][i] if not isinstance(input_variables[i], (np.ndarray, pd.Series, int, float)): - raise TypeError(f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}") + raise TypeError( + f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}" + ) try: input_variables[i] = np.array(input_variables[i]) @@ -133,19 +135,45 @@ def plot_bin_statistics( ax : matplotlib pyplot axes """ - input_variables = [bin_centers, bin_mean, bin_max, bin_min, bin_mean_std, bin_max_std, bin_min_std] + input_variables = [ + bin_centers, + bin_mean, + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + ] for i in range(len(input_variables)): - var_name = ["bin_centers", "bin_mean", "bin_max", "bin_min", "bin_mean_std", "bin_max_std", "bin_min_std"][i] + var_name = [ + "bin_centers", + "bin_mean", + "bin_max", + "bin_min", + "bin_mean_std", + "bin_max_std", + "bin_min_std", + ][i] if not isinstance(input_variables[i], (np.ndarray, pd.Series, int, float)): - raise TypeError(f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}") + raise TypeError( + f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}" + ) try: input_variables[i] = np.array(input_variables[i]) except: pass - bin_centers, bin_mean, bin_max, bin_min, bin_mean_std, bin_max_std, bin_min_std = input_variables + ( + bin_centers, + bin_mean, + bin_max, + bin_min, + bin_mean_std, + bin_max_std, + bin_min_std, + ) = input_variables x_label = kwargs.get("x_label", None) y_label = kwargs.get("y_label", None) diff --git a/mhkit/tests/loads/test_loads.py b/mhkit/tests/loads/test_loads.py index 202f9adaa..a4e07e5d3 100644 --- a/mhkit/tests/loads/test_loads.py +++ b/mhkit/tests/loads/test_loads.py @@ -49,7 +49,9 @@ def test_bin_statistics(self): # Ensure the data type of the index matches b_means.index = b_means.index.astype(self.data["bin_means"].index.dtype) - b_means_std.index = b_means_std.index.astype(self.data["bin_means_std"].index.dtype) + b_means_std.index = b_means_std.index.astype( + self.data["bin_means_std"].index.dtype + ) b_means.index.name = None # compatibility with old test data b_means_std.index.name = None # compatibility with old test data @@ -71,7 +73,9 @@ def test_bin_statistics_xarray(self): # Ensure the data type of the index matches b_means.index = b_means.index.astype(self.data["bin_means"].index.dtype) - b_means_std.index = b_means_std.index.astype(self.data["bin_means_std"].index.dtype) + b_means_std.index = b_means_std.index.astype( + self.data["bin_means_std"].index.dtype + ) b_means.index.name = None # compatibility with old test data b_means_std.index.name = None # compatibility with old test data @@ -79,14 +83,15 @@ def test_bin_statistics_xarray(self): assert_frame_equal(self.data["bin_means"], b_means) assert_frame_equal(self.data["bin_means_std"], b_means_std) - def test_bin_statistics_data_type_error(self): bin_against = np.array([10, 20, 30]) bin_edges = np.array([0, 15, 25, 35]) data_signal = ["signal_1"] to_pandas = True with self.assertRaises(TypeError): - loads.general.bin_statistics("invalid_data_type", bin_against, bin_edges, data_signal, to_pandas) + loads.general.bin_statistics( + "invalid_data_type", bin_against, bin_edges, data_signal, to_pandas + ) def test_bin_statistics_bin_against_type_error(self): data = pd.DataFrame({"signal_1": [1, 2, 3]}) @@ -95,8 +100,9 @@ def test_bin_statistics_bin_against_type_error(self): to_pandas = True invalid_bin_against = "invalid_bin_against_type" with self.assertRaises(TypeError): - loads.general.bin_statistics(data, invalid_bin_against, bin_edges, data_signal, to_pandas) - + loads.general.bin_statistics( + data, invalid_bin_against, bin_edges, data_signal, to_pandas + ) def test_bin_statistics_bin_edges_type_error(self): data = pd.DataFrame({"signal_1": [1, 2, 3]}) @@ -104,7 +110,9 @@ def test_bin_statistics_bin_edges_type_error(self): data_signal = ["signal_1"] to_pandas = True with self.assertRaises(TypeError): - loads.general.bin_statistics(data, bin_against, "invalid_bin_edges_type", data_signal, to_pandas) + loads.general.bin_statistics( + data, bin_against, "invalid_bin_edges_type", data_signal, to_pandas + ) def test_bin_statistics_data_signal_type_error(self): data = pd.DataFrame({"signal_1": [1, 2, 3]}) @@ -113,7 +121,9 @@ def test_bin_statistics_data_signal_type_error(self): data_signal = "invalid_data_signal_type" to_pandas = True with self.assertRaises(TypeError): - loads.general.bin_statistics(data, bin_against, bin_edges, data_signal, to_pandas) + loads.general.bin_statistics( + data, bin_against, bin_edges, data_signal, to_pandas + ) def test_bin_statistics_to_pandas_type_error(self): data = pd.DataFrame({"signal_1": [1, 2, 3]}) @@ -122,8 +132,9 @@ def test_bin_statistics_to_pandas_type_error(self): data_signal = ["signal_1"] to_pandas = "invalid_to_pandas_type" with self.assertRaises(TypeError): - loads.general.bin_statistics(data, bin_against, bin_edges, data_signal, to_pandas) - + loads.general.bin_statistics( + data, bin_against, bin_edges, data_signal, to_pandas + ) def test_blade_moments(self): flap_raw = self.blade_data["flap_raw"] @@ -141,15 +152,17 @@ def test_blade_moments(self): self.assertAlmostEqual(i, j, places=1) def test_blade_moments_wrong_types(self): - # Test with incorrect types - blade_coefficients = [1.0, 2.0, 3.0, 4.0] # Should be np.ndarray - flap_offset = "invalid" # Should be float - flap_raw = "invalid" # Should be np.ndarray - edge_offset = "invalid" # Should be float - edge_raw = "invalid" # Should be np.ndarray + # Test with incorrect types + blade_coefficients = [1.0, 2.0, 3.0, 4.0] # Should be np.ndarray + flap_offset = "invalid" # Should be float + flap_raw = "invalid" # Should be np.ndarray + edge_offset = "invalid" # Should be float + edge_raw = "invalid" # Should be np.ndarray - with self.assertRaises(TypeError): - loads.general.blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_raw) + with self.assertRaises(TypeError): + loads.general.blade_moments( + blade_coefficients, flap_offset, flap_raw, edge_offset, edge_raw + ) def test_damage_equivalent_loads(self): loads_data = self.data["loads"] @@ -179,7 +192,6 @@ def test_damage_equivalent_load_wrong_types(self): with self.assertRaises(TypeError): loads.general.damage_equivalent_load(data_signal, m, bin_num, data_length) - def test_plot_statistics(self): # Define path savepath = abspath(join(testdir, "test_scatplotter.png")) @@ -199,22 +211,22 @@ def test_plot_statistics(self): self.assertTrue(isfile(savepath)) def test_plot_statistics_wrong_types(self): - # Test with incorrect types for some arguments - x = "invalid" # Should be np.ndarray - y_mean = "invalid" # Should be np.ndarray - y_max = "invalid" # Should be np.ndarray - y_min = "invalid" # Should be np.ndarray - y_stdev = "invalid" # Should be np.ndarray - - kwargs = { - "x_label": "X Axis", - "y_label": "Y Axis", - "title": "Test Plot", - "save_path": "test_plot.png" - } - - with self.assertRaises(TypeError): - loads.graphics.plot_statistics(x, y_mean, y_max, y_min, y_stdev, **kwargs) + # Test with incorrect types for some arguments + x = "invalid" # Should be np.ndarray + y_mean = "invalid" # Should be np.ndarray + y_max = "invalid" # Should be np.ndarray + y_min = "invalid" # Should be np.ndarray + y_stdev = "invalid" # Should be np.ndarray + + kwargs = { + "x_label": "X Axis", + "y_label": "Y Axis", + "title": "Test Plot", + "save_path": "test_plot.png", + } + + with self.assertRaises(TypeError): + loads.graphics.plot_statistics(x, y_mean, y_max, y_min, y_stdev, **kwargs) def test_plot_bin_statistics(self): # Define signal name, path, and bin centers @@ -335,6 +347,7 @@ def test_plot_bin_statistics_type_errors(self): [0.8, 1.8, 2.8], # Invalid bin_min_std (list instead of np.ndarray) ) + class TestWDRT(unittest.TestCase): @classmethod def setUpClass(self): diff --git a/mhkit/tests/mooring/test_mooring.py b/mhkit/tests/mooring/test_mooring.py index 095316d0f..d7c7f7ff2 100644 --- a/mhkit/tests/mooring/test_mooring.py +++ b/mhkit/tests/mooring/test_mooring.py @@ -71,15 +71,17 @@ def test_animate_2d_update(self): ) # Extract the figure and axes - fig = ani2d._fig + fig = ani2d._fig ax = fig.axes[0] - line, = ax.lines + (line,) = ax.lines # Simulate the update for a specific frame frame = 5 # Extracting data from the list of nodes - nodes_x, nodes_y, _ = mooring.graphics._get_axis_nodes(self.dsani, 'x', 'z', 'y') + nodes_x, nodes_y, _ = mooring.graphics._get_axis_nodes( + self.dsani, "x", "z", "y" + ) x_data = self.dsani[nodes_x[0]].isel(Time=frame).values y_data = self.dsani[nodes_y[0]].isel(Time=frame).values @@ -110,13 +112,15 @@ def test_animate_3d_update(self): # Extract the figure and axes fig = ani3d._fig ax = fig.axes[0] - line, = ax.lines + (line,) = ax.lines # Simulate the update for a specific frame frame = 5 # Extracting data for the specified frame - nodes_x, nodes_y, nodes_z = mooring.graphics._get_axis_nodes(self.dsani, 'x', 'z', 'y') + nodes_x, nodes_y, nodes_z = mooring.graphics._get_axis_nodes( + self.dsani, "x", "z", "y" + ) x_data = self.dsani[nodes_x[0]].isel(Time=frame).values y_data = self.dsani[nodes_y[0]].isel(Time=frame).values z_data = self.dsani[nodes_z[0]].isel(Time=frame).values @@ -133,7 +137,6 @@ def test_animate_3d_update(self): np.testing.assert_array_equal(updated_y, y_data) np.testing.assert_array_equal(updated_z, z_data) - # Test for xaxis, yaxis, zaxis type handling def test_animate_xaxis_type_handling(self): with pytest.raises(TypeError): @@ -232,6 +235,5 @@ def test_animate_dimension_type_handling(self): mooring.graphics.animate(self.dsani, dimension="not_2d_or_3d") - if __name__ == "__main__": unittest.main() diff --git a/mhkit/tests/river/test_resource.py b/mhkit/tests/river/test_resource.py index 5b93c3430..da44c9b87 100644 --- a/mhkit/tests/river/test_resource.py +++ b/mhkit/tests/river/test_resource.py @@ -148,7 +148,9 @@ def test_velocity_to_power_V_type_error(self): cut_in = 1 cut_out = 5 with self.assertRaises(TypeError): - river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + river.resource.velocity_to_power( + V, polynomial_coefficients, cut_in, cut_out + ) def test_velocity_to_power_polynomial_coefficients_type_error(self): V = pd.Series([1, 2, 3]) @@ -156,7 +158,9 @@ def test_velocity_to_power_polynomial_coefficients_type_error(self): cut_in = 1 cut_out = 5 with self.assertRaises(TypeError): - river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + river.resource.velocity_to_power( + V, polynomial_coefficients, cut_in, cut_out + ) def test_velocity_to_power_cut_in_type_error(self): V = pd.Series([1, 2, 3]) @@ -164,7 +168,9 @@ def test_velocity_to_power_cut_in_type_error(self): cut_in = "invalid_type" # String instead of int/float cut_out = 5 with self.assertRaises(TypeError): - river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) + river.resource.velocity_to_power( + V, polynomial_coefficients, cut_in, cut_out + ) def test_velocity_to_power_cut_out_type_error(self): V = pd.Series([1, 2, 3]) @@ -172,8 +178,9 @@ def test_velocity_to_power_cut_out_type_error(self): cut_in = 1 cut_out = "invalid_type" # String instead of int/float with self.assertRaises(TypeError): - river.resource.velocity_to_power(V, polynomial_coefficients, cut_in, cut_out) - + river.resource.velocity_to_power( + V, polynomial_coefficients, cut_in, cut_out + ) def test_energy_produced(self): # If power is always X then energy produced with be x*seconds From da6013957a6cacda201c9e6fad3fff2b73aff28c Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 19 Jan 2024 10:02:44 -0700 Subject: [PATCH 36/87] remove unused imports --- mhkit/tests/wave/test_contours.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index 000ae27da..19ccac3c3 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -1,23 +1,12 @@ from os.path import abspath, dirname, join, isfile, normpath, relpath -from pandas.testing import assert_frame_equal from numpy.testing import assert_allclose -from scipy.interpolate import interp1d -from random import seed, randint import matplotlib.pylab as plt -from datetime import datetime -import xarray.testing as xrt import mhkit.wave as wave -from io import StringIO import pandas as pd import numpy as np -import contextlib import unittest -import netCDF4 -import inspect import pickle -import time import json -import sys import os From 1603518eafad4e5844b93b1a140852feb6e0dc76 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 19 Jan 2024 11:05:46 -0700 Subject: [PATCH 37/87] additional input checks --- mhkit/wave/contours.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/mhkit/wave/contours.py b/mhkit/wave/contours.py index 5c3da2f7b..854f6f0df 100644 --- a/mhkit/wave/contours.py +++ b/mhkit/wave/contours.py @@ -77,17 +77,23 @@ def environmental_contours(x1, x2, sea_state_duration, return_period, method, ** Dictionary of x1 and x2 copula components for each copula method """ try: - x1 = np.array(x1) - except: - pass + x1 = np.asarray(x1, dtype=float) + except ValueError: + raise ValueError("x1 must contain numeric values.") try: - x2 = np.array(x2) - except: - pass - if not isinstance(x1, np.ndarray): - raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") - if not isinstance(x2, np.ndarray): - raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") + x2 = np.asarray(x2, dtype=float) + except ValueError: + raise ValueError("x2 must contain numeric values.") + + if not isinstance(x1, np.ndarray) or x1.ndim == 0: + raise TypeError(f"x1 must be a non-scalar array. Got: {type(x1)}") + if not isinstance(x2, np.ndarray) or x2.ndim == 0: + raise TypeError(f"x2 must be a non-scalar array. Got: {type(x2)}") + + # Check if the lengths of x1 and x2 are equal + if len(x1) != len(x2): + raise ValueError("The lengths of x1 and x2 must be equal.") + if not isinstance(sea_state_duration, (int, float)): raise TypeError( f"sea_state_duration must be of type int or float. Got: {type(sea_state_duration)}" From d76aa2f6296448908ddc31ad11c60553274f5a1e Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 19 Jan 2024 11:05:58 -0700 Subject: [PATCH 38/87] test env contours invalid inputs --- mhkit/tests/wave/test_contours.py | 528 ++++++++++++++++-------------- 1 file changed, 289 insertions(+), 239 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index 19ccac3c3..fdd172834 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -64,245 +64,295 @@ def test_environmental_contour(self): expected_contours = pd.read_csv(file_loc) assert_allclose(expected_contours.Hm0_contour.values, Hm0_contour, rtol=1e-3) - def test__principal_component_analysis(self): - Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te["Hm0"] < 20] - - Hm0 = df.Hm0.values - Te = df.Te.values - PCA = wave.contours._principal_component_analysis(Hm0, Te, bin_size=250) - - assert_allclose(PCA["principal_axes"], self.pca["principal_axes"]) - self.assertAlmostEqual(PCA["shift"], self.pca["shift"]) - self.assertAlmostEqual(PCA["x1_fit"]["mu"], self.pca["x1_fit"]["mu"]) - self.assertAlmostEqual(PCA["mu_fit"].slope, self.pca["mu_fit"].slope) - self.assertAlmostEqual(PCA["mu_fit"].intercept, self.pca["mu_fit"].intercept) - assert_allclose(PCA["sigma_fit"]["x"], self.pca["sigma_fit"]["x"]) - - def test_plot_environmental_contour(self): - file_loc = join(plotdir, "wave_plot_environmental_contour.png") - filename = abspath(file_loc) - if isfile(filename): - os.remove(filename) - - Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te["Hm0"] < 20] - - Hm0 = df.Hm0.values - Te = df.Te.values - - dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds - time_R = 100 - - copulas = wave.contours.environmental_contours(Hm0, Te, dt_ss, time_R, "PCA") - - Hm0_contour = copulas["PCA_x1"] - Te_contour = copulas["PCA_x2"] - - dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds - time_R = 100 - - plt.figure() - ( - wave.graphics.plot_environmental_contour( - Te, - Hm0, - Te_contour, - Hm0_contour, - data_label="NDBC 46022", - contour_label="100-year Contour", - x_label="Te [s]", - y_label="Hm0 [m]", - ) - ) - plt.savefig(filename, format="png") - plt.close() - - self.assertTrue(isfile(filename)) - - def test_plot_environmental_contour_multiyear(self): - filename = abspath( - join(plotdir, "wave_plot_environmental_contour_multiyear.png") - ) - if isfile(filename): - os.remove(filename) - - Hm0Te = self.Hm0Te - df = Hm0Te[Hm0Te["Hm0"] < 20] - - Hm0 = df.Hm0.values - Te = df.Te.values - - dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds - - time_R = [100, 105, 110, 120, 150] - - Hm0s = [] - Tes = [] - for period in time_R: - copulas = wave.contours.environmental_contours( - Hm0, Te, dt_ss, period, "PCA" - ) - - Hm0s.append(copulas["PCA_x1"]) - Tes.append(copulas["PCA_x2"]) - - contour_label = [f"{year}-year Contour" for year in time_R] - plt.figure() - ( - wave.graphics.plot_environmental_contour( - Te, - Hm0, - Tes, - Hm0s, - data_label="NDBC 46022", - contour_label=contour_label, - x_label="Te [s]", - y_label="Hm0 [m]", - ) - ) - plt.savefig(filename, format="png") - plt.close() - - self.assertTrue(isfile(filename)) - - def test_standard_copulas(self): - copulas = wave.contours.environmental_contours( - self.wdrt_Hm0, - self.wdrt_Te, - self.wdrt_dt, - self.wdrt_period, - method=["gaussian", "gumbel", "clayton"], - ) - - # WDRT slightly vaires Rosenblatt copula parameters from - # the other copula default parameters - rosen = wave.contours.environmental_contours( - self.wdrt_Hm0, - self.wdrt_Te, - self.wdrt_dt, - self.wdrt_period, - method=["rosenblatt"], - min_bin_count=50, - initial_bin_max_val=0.5, - bin_val_size=0.25, - ) - copulas["rosenblatt_x1"] = rosen["rosenblatt_x1"] - copulas["rosenblatt_x2"] = rosen["rosenblatt_x2"] - - methods = ["gaussian", "gumbel", "clayton", "rosenblatt"] - close = [] - for method in methods: - close.append( - np.allclose(copulas[f"{method}_x1"], self.wdrt_copulas[f"{method}_x1"]) - ) - close.append( - np.allclose(copulas[f"{method}_x2"], self.wdrt_copulas[f"{method}_x2"]) - ) - self.assertTrue(all(close)) - - def test_nonparametric_copulas(self): - methods = [ - "nonparametric_gaussian", - "nonparametric_clayton", - "nonparametric_gumbel", - ] - - np_copulas = wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods - ) - - close = [] - for method in methods: - close.append( - np.allclose( - np_copulas[f"{method}_x1"], - self.wdrt_copulas[f"{method}_x1"], - atol=0.13, - ) - ) - close.append( - np.allclose( - np_copulas[f"{method}_x2"], - self.wdrt_copulas[f"{method}_x2"], - atol=0.13, - ) - ) - self.assertTrue(all(close)) - - def test_kde_copulas(self): - kde_copula = wave.contours.environmental_contours( - self.wdrt_Hm0, - self.wdrt_Te, - self.wdrt_dt, - self.wdrt_period, - method=["bivariate_KDE"], - bandwidth=[0.23, 0.23], - ) - log_kde_copula = wave.contours.environmental_contours( - self.wdrt_Hm0, - self.wdrt_Te, - self.wdrt_dt, - self.wdrt_period, - method=["bivariate_KDE_log"], - bandwidth=[0.02, 0.11], - ) - - close = [ - np.allclose( - kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] - ), - np.allclose( - kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] - ), - np.allclose( - log_kde_copula["bivariate_KDE_log_x1"], - self.wdrt_copulas["bivariate_KDE_log_x1"], - ), - np.allclose( - log_kde_copula["bivariate_KDE_log_x2"], - self.wdrt_copulas["bivariate_KDE_log_x2"], - ), - ] - self.assertTrue(all(close)) - - def test_samples_contours(self): - te_samples = np.array([10, 15, 20]) - hs_samples_0 = np.array([8.56637939, 9.27612515, 8.70427774]) - hs_contour = np.array(self.wdrt_copulas["gaussian_x1"]) - te_contour = np.array(self.wdrt_copulas["gaussian_x2"]) - hs_samples = wave.contours.samples_contour(te_samples, te_contour, hs_contour) - assert_allclose(hs_samples, hs_samples_0) - - def test_samples_seastate(self): - hs_0 = np.array( - [5.91760129, 4.55185088, 1.41144991, 12.64443154, 7.89753791, 0.93890797] - ) - te_0 = np.array( - [14.24199604, 8.25383556, 6.03901866, 16.9836369, 9.51967777, 3.46969355] - ) - w_0 = np.array( - [ - 2.18127398e-01, - 2.18127398e-01, - 2.18127398e-01, - 2.45437862e-07, - 2.45437862e-07, - 2.45437862e-07, - ] - ) - - df = self.Hm0Te[self.Hm0Te["Hm0"] < 20] - dt_ss = (self.Hm0Te.index[2] - self.Hm0Te.index[1]).seconds - points_per_interval = 3 - return_periods = np.array([50, 100]) - np.random.seed(0) - hs, te, w = wave.contours.samples_full_seastate( - df.Hm0.values, df.Te.values, points_per_interval, return_periods, dt_ss - ) - assert_allclose(hs, hs_0) - assert_allclose(te, te_0) - assert_allclose(w, w_0) + def test_environmental_contours_invalid_inputs(self): + # Invalid x1 tests + x1_non_numeric = "not an array" + with self.assertRaises(ValueError): + wave.contours.environmental_contours(x1_non_numeric, self.wdrt_Te, 3600, 50, "PCA") + + x1_scalar = 5 + with self.assertRaises(TypeError): + wave.contours.environmental_contours(x1_scalar, self.wdrt_Te, 3600, 50, "PCA") + + # Invalid x2 tests + x2_non_numeric = "not an array" + with self.assertRaises(ValueError): + wave.contours.environmental_contours(self.wdrt_Hm0, x2_non_numeric, 3600, 50, "PCA") + + x2_scalar = 10 + with self.assertRaises(TypeError): + wave.contours.environmental_contours(self.wdrt_Hm0, x2_scalar, 3600, 50, "PCA") + + # Unequal lengths of x1 and x2 + x2_unequal_length = self.wdrt_Te[:-1] + with self.assertRaises(ValueError): + wave.contours.environmental_contours(self.wdrt_Hm0, x2_unequal_length, 3600, 50, "PCA") + + # Invalid sea_state_duration tests + invalid_sea_state_duration_string = "one hour" + with self.assertRaises(TypeError): + wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, invalid_sea_state_duration_string, 50, "PCA") + + invalid_sea_state_duration_list = [3600] + with self.assertRaises(TypeError): + wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, invalid_sea_state_duration_list, 50, "PCA") + + # Invalid return_period tests + invalid_return_period_string = "fifty years" + with self.assertRaises(TypeError): + wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, 3600, invalid_return_period_string, "PCA") + + invalid_return_period_list = [50] + with self.assertRaises(TypeError): + wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, 3600, invalid_return_period_list, "PCA") + + # Invalid method tests + invalid_method = 123 + with self.assertRaises(TypeError): + wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, 3600, 50, invalid_method) + + + + + # def test__principal_component_analysis(self): + # Hm0Te = self.Hm0Te + # df = Hm0Te[Hm0Te["Hm0"] < 20] + + # Hm0 = df.Hm0.values + # Te = df.Te.values + # PCA = wave.contours._principal_component_analysis(Hm0, Te, bin_size=250) + + # assert_allclose(PCA["principal_axes"], self.pca["principal_axes"]) + # self.assertAlmostEqual(PCA["shift"], self.pca["shift"]) + # self.assertAlmostEqual(PCA["x1_fit"]["mu"], self.pca["x1_fit"]["mu"]) + # self.assertAlmostEqual(PCA["mu_fit"].slope, self.pca["mu_fit"].slope) + # self.assertAlmostEqual(PCA["mu_fit"].intercept, self.pca["mu_fit"].intercept) + # assert_allclose(PCA["sigma_fit"]["x"], self.pca["sigma_fit"]["x"]) + + # def test_plot_environmental_contour(self): + # file_loc = join(plotdir, "wave_plot_environmental_contour.png") + # filename = abspath(file_loc) + # if isfile(filename): + # os.remove(filename) + + # Hm0Te = self.Hm0Te + # df = Hm0Te[Hm0Te["Hm0"] < 20] + + # Hm0 = df.Hm0.values + # Te = df.Te.values + + # dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + # time_R = 100 + + # copulas = wave.contours.environmental_contours(Hm0, Te, dt_ss, time_R, "PCA") + + # Hm0_contour = copulas["PCA_x1"] + # Te_contour = copulas["PCA_x2"] + + # dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + # time_R = 100 + + # plt.figure() + # ( + # wave.graphics.plot_environmental_contour( + # Te, + # Hm0, + # Te_contour, + # Hm0_contour, + # data_label="NDBC 46022", + # contour_label="100-year Contour", + # x_label="Te [s]", + # y_label="Hm0 [m]", + # ) + # ) + # plt.savefig(filename, format="png") + # plt.close() + + # self.assertTrue(isfile(filename)) + + # def test_plot_environmental_contour_multiyear(self): + # filename = abspath( + # join(plotdir, "wave_plot_environmental_contour_multiyear.png") + # ) + # if isfile(filename): + # os.remove(filename) + + # Hm0Te = self.Hm0Te + # df = Hm0Te[Hm0Te["Hm0"] < 20] + + # Hm0 = df.Hm0.values + # Te = df.Te.values + + # dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + + # time_R = [100, 105, 110, 120, 150] + + # Hm0s = [] + # Tes = [] + # for period in time_R: + # copulas = wave.contours.environmental_contours( + # Hm0, Te, dt_ss, period, "PCA" + # ) + + # Hm0s.append(copulas["PCA_x1"]) + # Tes.append(copulas["PCA_x2"]) + + # contour_label = [f"{year}-year Contour" for year in time_R] + # plt.figure() + # ( + # wave.graphics.plot_environmental_contour( + # Te, + # Hm0, + # Tes, + # Hm0s, + # data_label="NDBC 46022", + # contour_label=contour_label, + # x_label="Te [s]", + # y_label="Hm0 [m]", + # ) + # ) + # plt.savefig(filename, format="png") + # plt.close() + + # self.assertTrue(isfile(filename)) + + # def test_standard_copulas(self): + # copulas = wave.contours.environmental_contours( + # self.wdrt_Hm0, + # self.wdrt_Te, + # self.wdrt_dt, + # self.wdrt_period, + # method=["gaussian", "gumbel", "clayton"], + # ) + + # # WDRT slightly vaires Rosenblatt copula parameters from + # # the other copula default parameters + # rosen = wave.contours.environmental_contours( + # self.wdrt_Hm0, + # self.wdrt_Te, + # self.wdrt_dt, + # self.wdrt_period, + # method=["rosenblatt"], + # min_bin_count=50, + # initial_bin_max_val=0.5, + # bin_val_size=0.25, + # ) + # copulas["rosenblatt_x1"] = rosen["rosenblatt_x1"] + # copulas["rosenblatt_x2"] = rosen["rosenblatt_x2"] + + # methods = ["gaussian", "gumbel", "clayton", "rosenblatt"] + # close = [] + # for method in methods: + # close.append( + # np.allclose(copulas[f"{method}_x1"], self.wdrt_copulas[f"{method}_x1"]) + # ) + # close.append( + # np.allclose(copulas[f"{method}_x2"], self.wdrt_copulas[f"{method}_x2"]) + # ) + # self.assertTrue(all(close)) + + # def test_nonparametric_copulas(self): + # methods = [ + # "nonparametric_gaussian", + # "nonparametric_clayton", + # "nonparametric_gumbel", + # ] + + # np_copulas = wave.contours.environmental_contours( + # self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods + # ) + + # close = [] + # for method in methods: + # close.append( + # np.allclose( + # np_copulas[f"{method}_x1"], + # self.wdrt_copulas[f"{method}_x1"], + # atol=0.13, + # ) + # ) + # close.append( + # np.allclose( + # np_copulas[f"{method}_x2"], + # self.wdrt_copulas[f"{method}_x2"], + # atol=0.13, + # ) + # ) + # self.assertTrue(all(close)) + + # def test_kde_copulas(self): + # kde_copula = wave.contours.environmental_contours( + # self.wdrt_Hm0, + # self.wdrt_Te, + # self.wdrt_dt, + # self.wdrt_period, + # method=["bivariate_KDE"], + # bandwidth=[0.23, 0.23], + # ) + # log_kde_copula = wave.contours.environmental_contours( + # self.wdrt_Hm0, + # self.wdrt_Te, + # self.wdrt_dt, + # self.wdrt_period, + # method=["bivariate_KDE_log"], + # bandwidth=[0.02, 0.11], + # ) + + # close = [ + # np.allclose( + # kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] + # ), + # np.allclose( + # kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] + # ), + # np.allclose( + # log_kde_copula["bivariate_KDE_log_x1"], + # self.wdrt_copulas["bivariate_KDE_log_x1"], + # ), + # np.allclose( + # log_kde_copula["bivariate_KDE_log_x2"], + # self.wdrt_copulas["bivariate_KDE_log_x2"], + # ), + # ] + # self.assertTrue(all(close)) + + # def test_samples_contours(self): + # te_samples = np.array([10, 15, 20]) + # hs_samples_0 = np.array([8.56637939, 9.27612515, 8.70427774]) + # hs_contour = np.array(self.wdrt_copulas["gaussian_x1"]) + # te_contour = np.array(self.wdrt_copulas["gaussian_x2"]) + # hs_samples = wave.contours.samples_contour(te_samples, te_contour, hs_contour) + # assert_allclose(hs_samples, hs_samples_0) + + # def test_samples_seastate(self): + # hs_0 = np.array( + # [5.91760129, 4.55185088, 1.41144991, 12.64443154, 7.89753791, 0.93890797] + # ) + # te_0 = np.array( + # [14.24199604, 8.25383556, 6.03901866, 16.9836369, 9.51967777, 3.46969355] + # ) + # w_0 = np.array( + # [ + # 2.18127398e-01, + # 2.18127398e-01, + # 2.18127398e-01, + # 2.45437862e-07, + # 2.45437862e-07, + # 2.45437862e-07, + # ] + # ) + + # df = self.Hm0Te[self.Hm0Te["Hm0"] < 20] + # dt_ss = (self.Hm0Te.index[2] - self.Hm0Te.index[1]).seconds + # points_per_interval = 3 + # return_periods = np.array([50, 100]) + # np.random.seed(0) + # hs, te, w = wave.contours.samples_full_seastate( + # df.Hm0.values, df.Te.values, points_per_interval, return_periods, dt_ss + # ) + # assert_allclose(hs, hs_0) + # assert_allclose(te, te_0) + # assert_allclose(w, w_0) if __name__ == "__main__": From 0ae25f69e310b6f7294b0fd23c318540f995201b Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 19 Jan 2024 11:06:16 -0700 Subject: [PATCH 39/87] uncomment tests --- mhkit/tests/wave/test_contours.py | 478 +++++++++++++++--------------- 1 file changed, 239 insertions(+), 239 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index fdd172834..55b688380 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -114,245 +114,245 @@ def test_environmental_contours_invalid_inputs(self): - # def test__principal_component_analysis(self): - # Hm0Te = self.Hm0Te - # df = Hm0Te[Hm0Te["Hm0"] < 20] - - # Hm0 = df.Hm0.values - # Te = df.Te.values - # PCA = wave.contours._principal_component_analysis(Hm0, Te, bin_size=250) - - # assert_allclose(PCA["principal_axes"], self.pca["principal_axes"]) - # self.assertAlmostEqual(PCA["shift"], self.pca["shift"]) - # self.assertAlmostEqual(PCA["x1_fit"]["mu"], self.pca["x1_fit"]["mu"]) - # self.assertAlmostEqual(PCA["mu_fit"].slope, self.pca["mu_fit"].slope) - # self.assertAlmostEqual(PCA["mu_fit"].intercept, self.pca["mu_fit"].intercept) - # assert_allclose(PCA["sigma_fit"]["x"], self.pca["sigma_fit"]["x"]) - - # def test_plot_environmental_contour(self): - # file_loc = join(plotdir, "wave_plot_environmental_contour.png") - # filename = abspath(file_loc) - # if isfile(filename): - # os.remove(filename) - - # Hm0Te = self.Hm0Te - # df = Hm0Te[Hm0Te["Hm0"] < 20] - - # Hm0 = df.Hm0.values - # Te = df.Te.values - - # dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds - # time_R = 100 - - # copulas = wave.contours.environmental_contours(Hm0, Te, dt_ss, time_R, "PCA") - - # Hm0_contour = copulas["PCA_x1"] - # Te_contour = copulas["PCA_x2"] - - # dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds - # time_R = 100 - - # plt.figure() - # ( - # wave.graphics.plot_environmental_contour( - # Te, - # Hm0, - # Te_contour, - # Hm0_contour, - # data_label="NDBC 46022", - # contour_label="100-year Contour", - # x_label="Te [s]", - # y_label="Hm0 [m]", - # ) - # ) - # plt.savefig(filename, format="png") - # plt.close() - - # self.assertTrue(isfile(filename)) - - # def test_plot_environmental_contour_multiyear(self): - # filename = abspath( - # join(plotdir, "wave_plot_environmental_contour_multiyear.png") - # ) - # if isfile(filename): - # os.remove(filename) - - # Hm0Te = self.Hm0Te - # df = Hm0Te[Hm0Te["Hm0"] < 20] - - # Hm0 = df.Hm0.values - # Te = df.Te.values - - # dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds - - # time_R = [100, 105, 110, 120, 150] - - # Hm0s = [] - # Tes = [] - # for period in time_R: - # copulas = wave.contours.environmental_contours( - # Hm0, Te, dt_ss, period, "PCA" - # ) - - # Hm0s.append(copulas["PCA_x1"]) - # Tes.append(copulas["PCA_x2"]) - - # contour_label = [f"{year}-year Contour" for year in time_R] - # plt.figure() - # ( - # wave.graphics.plot_environmental_contour( - # Te, - # Hm0, - # Tes, - # Hm0s, - # data_label="NDBC 46022", - # contour_label=contour_label, - # x_label="Te [s]", - # y_label="Hm0 [m]", - # ) - # ) - # plt.savefig(filename, format="png") - # plt.close() - - # self.assertTrue(isfile(filename)) - - # def test_standard_copulas(self): - # copulas = wave.contours.environmental_contours( - # self.wdrt_Hm0, - # self.wdrt_Te, - # self.wdrt_dt, - # self.wdrt_period, - # method=["gaussian", "gumbel", "clayton"], - # ) - - # # WDRT slightly vaires Rosenblatt copula parameters from - # # the other copula default parameters - # rosen = wave.contours.environmental_contours( - # self.wdrt_Hm0, - # self.wdrt_Te, - # self.wdrt_dt, - # self.wdrt_period, - # method=["rosenblatt"], - # min_bin_count=50, - # initial_bin_max_val=0.5, - # bin_val_size=0.25, - # ) - # copulas["rosenblatt_x1"] = rosen["rosenblatt_x1"] - # copulas["rosenblatt_x2"] = rosen["rosenblatt_x2"] - - # methods = ["gaussian", "gumbel", "clayton", "rosenblatt"] - # close = [] - # for method in methods: - # close.append( - # np.allclose(copulas[f"{method}_x1"], self.wdrt_copulas[f"{method}_x1"]) - # ) - # close.append( - # np.allclose(copulas[f"{method}_x2"], self.wdrt_copulas[f"{method}_x2"]) - # ) - # self.assertTrue(all(close)) - - # def test_nonparametric_copulas(self): - # methods = [ - # "nonparametric_gaussian", - # "nonparametric_clayton", - # "nonparametric_gumbel", - # ] - - # np_copulas = wave.contours.environmental_contours( - # self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods - # ) - - # close = [] - # for method in methods: - # close.append( - # np.allclose( - # np_copulas[f"{method}_x1"], - # self.wdrt_copulas[f"{method}_x1"], - # atol=0.13, - # ) - # ) - # close.append( - # np.allclose( - # np_copulas[f"{method}_x2"], - # self.wdrt_copulas[f"{method}_x2"], - # atol=0.13, - # ) - # ) - # self.assertTrue(all(close)) - - # def test_kde_copulas(self): - # kde_copula = wave.contours.environmental_contours( - # self.wdrt_Hm0, - # self.wdrt_Te, - # self.wdrt_dt, - # self.wdrt_period, - # method=["bivariate_KDE"], - # bandwidth=[0.23, 0.23], - # ) - # log_kde_copula = wave.contours.environmental_contours( - # self.wdrt_Hm0, - # self.wdrt_Te, - # self.wdrt_dt, - # self.wdrt_period, - # method=["bivariate_KDE_log"], - # bandwidth=[0.02, 0.11], - # ) - - # close = [ - # np.allclose( - # kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] - # ), - # np.allclose( - # kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] - # ), - # np.allclose( - # log_kde_copula["bivariate_KDE_log_x1"], - # self.wdrt_copulas["bivariate_KDE_log_x1"], - # ), - # np.allclose( - # log_kde_copula["bivariate_KDE_log_x2"], - # self.wdrt_copulas["bivariate_KDE_log_x2"], - # ), - # ] - # self.assertTrue(all(close)) - - # def test_samples_contours(self): - # te_samples = np.array([10, 15, 20]) - # hs_samples_0 = np.array([8.56637939, 9.27612515, 8.70427774]) - # hs_contour = np.array(self.wdrt_copulas["gaussian_x1"]) - # te_contour = np.array(self.wdrt_copulas["gaussian_x2"]) - # hs_samples = wave.contours.samples_contour(te_samples, te_contour, hs_contour) - # assert_allclose(hs_samples, hs_samples_0) - - # def test_samples_seastate(self): - # hs_0 = np.array( - # [5.91760129, 4.55185088, 1.41144991, 12.64443154, 7.89753791, 0.93890797] - # ) - # te_0 = np.array( - # [14.24199604, 8.25383556, 6.03901866, 16.9836369, 9.51967777, 3.46969355] - # ) - # w_0 = np.array( - # [ - # 2.18127398e-01, - # 2.18127398e-01, - # 2.18127398e-01, - # 2.45437862e-07, - # 2.45437862e-07, - # 2.45437862e-07, - # ] - # ) - - # df = self.Hm0Te[self.Hm0Te["Hm0"] < 20] - # dt_ss = (self.Hm0Te.index[2] - self.Hm0Te.index[1]).seconds - # points_per_interval = 3 - # return_periods = np.array([50, 100]) - # np.random.seed(0) - # hs, te, w = wave.contours.samples_full_seastate( - # df.Hm0.values, df.Te.values, points_per_interval, return_periods, dt_ss - # ) - # assert_allclose(hs, hs_0) - # assert_allclose(te, te_0) - # assert_allclose(w, w_0) + def test__principal_component_analysis(self): + Hm0Te = self.Hm0Te + df = Hm0Te[Hm0Te["Hm0"] < 20] + + Hm0 = df.Hm0.values + Te = df.Te.values + PCA = wave.contours._principal_component_analysis(Hm0, Te, bin_size=250) + + assert_allclose(PCA["principal_axes"], self.pca["principal_axes"]) + self.assertAlmostEqual(PCA["shift"], self.pca["shift"]) + self.assertAlmostEqual(PCA["x1_fit"]["mu"], self.pca["x1_fit"]["mu"]) + self.assertAlmostEqual(PCA["mu_fit"].slope, self.pca["mu_fit"].slope) + self.assertAlmostEqual(PCA["mu_fit"].intercept, self.pca["mu_fit"].intercept) + assert_allclose(PCA["sigma_fit"]["x"], self.pca["sigma_fit"]["x"]) + + def test_plot_environmental_contour(self): + file_loc = join(plotdir, "wave_plot_environmental_contour.png") + filename = abspath(file_loc) + if isfile(filename): + os.remove(filename) + + Hm0Te = self.Hm0Te + df = Hm0Te[Hm0Te["Hm0"] < 20] + + Hm0 = df.Hm0.values + Te = df.Te.values + + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + time_R = 100 + + copulas = wave.contours.environmental_contours(Hm0, Te, dt_ss, time_R, "PCA") + + Hm0_contour = copulas["PCA_x1"] + Te_contour = copulas["PCA_x2"] + + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + time_R = 100 + + plt.figure() + ( + wave.graphics.plot_environmental_contour( + Te, + Hm0, + Te_contour, + Hm0_contour, + data_label="NDBC 46022", + contour_label="100-year Contour", + x_label="Te [s]", + y_label="Hm0 [m]", + ) + ) + plt.savefig(filename, format="png") + plt.close() + + self.assertTrue(isfile(filename)) + + def test_plot_environmental_contour_multiyear(self): + filename = abspath( + join(plotdir, "wave_plot_environmental_contour_multiyear.png") + ) + if isfile(filename): + os.remove(filename) + + Hm0Te = self.Hm0Te + df = Hm0Te[Hm0Te["Hm0"] < 20] + + Hm0 = df.Hm0.values + Te = df.Te.values + + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + + time_R = [100, 105, 110, 120, 150] + + Hm0s = [] + Tes = [] + for period in time_R: + copulas = wave.contours.environmental_contours( + Hm0, Te, dt_ss, period, "PCA" + ) + + Hm0s.append(copulas["PCA_x1"]) + Tes.append(copulas["PCA_x2"]) + + contour_label = [f"{year}-year Contour" for year in time_R] + plt.figure() + ( + wave.graphics.plot_environmental_contour( + Te, + Hm0, + Tes, + Hm0s, + data_label="NDBC 46022", + contour_label=contour_label, + x_label="Te [s]", + y_label="Hm0 [m]", + ) + ) + plt.savefig(filename, format="png") + plt.close() + + self.assertTrue(isfile(filename)) + + def test_standard_copulas(self): + copulas = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["gaussian", "gumbel", "clayton"], + ) + + # WDRT slightly vaires Rosenblatt copula parameters from + # the other copula default parameters + rosen = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["rosenblatt"], + min_bin_count=50, + initial_bin_max_val=0.5, + bin_val_size=0.25, + ) + copulas["rosenblatt_x1"] = rosen["rosenblatt_x1"] + copulas["rosenblatt_x2"] = rosen["rosenblatt_x2"] + + methods = ["gaussian", "gumbel", "clayton", "rosenblatt"] + close = [] + for method in methods: + close.append( + np.allclose(copulas[f"{method}_x1"], self.wdrt_copulas[f"{method}_x1"]) + ) + close.append( + np.allclose(copulas[f"{method}_x2"], self.wdrt_copulas[f"{method}_x2"]) + ) + self.assertTrue(all(close)) + + def test_nonparametric_copulas(self): + methods = [ + "nonparametric_gaussian", + "nonparametric_clayton", + "nonparametric_gumbel", + ] + + np_copulas = wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods + ) + + close = [] + for method in methods: + close.append( + np.allclose( + np_copulas[f"{method}_x1"], + self.wdrt_copulas[f"{method}_x1"], + atol=0.13, + ) + ) + close.append( + np.allclose( + np_copulas[f"{method}_x2"], + self.wdrt_copulas[f"{method}_x2"], + atol=0.13, + ) + ) + self.assertTrue(all(close)) + + def test_kde_copulas(self): + kde_copula = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["bivariate_KDE"], + bandwidth=[0.23, 0.23], + ) + log_kde_copula = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["bivariate_KDE_log"], + bandwidth=[0.02, 0.11], + ) + + close = [ + np.allclose( + kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] + ), + np.allclose( + kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] + ), + np.allclose( + log_kde_copula["bivariate_KDE_log_x1"], + self.wdrt_copulas["bivariate_KDE_log_x1"], + ), + np.allclose( + log_kde_copula["bivariate_KDE_log_x2"], + self.wdrt_copulas["bivariate_KDE_log_x2"], + ), + ] + self.assertTrue(all(close)) + + def test_samples_contours(self): + te_samples = np.array([10, 15, 20]) + hs_samples_0 = np.array([8.56637939, 9.27612515, 8.70427774]) + hs_contour = np.array(self.wdrt_copulas["gaussian_x1"]) + te_contour = np.array(self.wdrt_copulas["gaussian_x2"]) + hs_samples = wave.contours.samples_contour(te_samples, te_contour, hs_contour) + assert_allclose(hs_samples, hs_samples_0) + + def test_samples_seastate(self): + hs_0 = np.array( + [5.91760129, 4.55185088, 1.41144991, 12.64443154, 7.89753791, 0.93890797] + ) + te_0 = np.array( + [14.24199604, 8.25383556, 6.03901866, 16.9836369, 9.51967777, 3.46969355] + ) + w_0 = np.array( + [ + 2.18127398e-01, + 2.18127398e-01, + 2.18127398e-01, + 2.45437862e-07, + 2.45437862e-07, + 2.45437862e-07, + ] + ) + + df = self.Hm0Te[self.Hm0Te["Hm0"] < 20] + dt_ss = (self.Hm0Te.index[2] - self.Hm0Te.index[1]).seconds + points_per_interval = 3 + return_periods = np.array([50, 100]) + np.random.seed(0) + hs, te, w = wave.contours.samples_full_seastate( + df.Hm0.values, df.Te.values, points_per_interval, return_periods, dt_ss + ) + assert_allclose(hs, hs_0) + assert_allclose(te, te_0) + assert_allclose(w, w_0) if __name__ == "__main__": From b285d5aa43d8d091b95580281ac0984e304712b3 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 19 Jan 2024 11:07:00 -0700 Subject: [PATCH 40/87] do not include cached API requests in coverage --- mhkit/tidal/io/noaa.py | 118 +++++++++++++++++++++-------------------- mhkit/wave/io/ndbc.py | 5 +- 2 files changed, 63 insertions(+), 60 deletions(-) diff --git a/mhkit/tidal/io/noaa.py b/mhkit/tidal/io/noaa.py index 1e4d10f1d..e056cafda 100644 --- a/mhkit/tidal/io/noaa.py +++ b/mhkit/tidal/io/noaa.py @@ -120,66 +120,68 @@ def request_noaa_data( if write_json: shutil.copy(cache_filepath, write_json) return cached_data, cached_metadata + # If no cached data is available, make the API request + # no coverage bc in coverage runs we have already cached the data/ run this code + else: # pragma: no cover + # Convert start and end dates to datetime objects + begin = datetime.datetime.strptime(start_date, "%Y%m%d").date() + end = datetime.datetime.strptime(end_date, "%Y%m%d").date() + + # Determine the number of 30 day intervals + delta = 30 + interval = math.ceil(((end - begin).days) / delta) + + # Create date ranges with 30 day intervals + date_list = [ + begin + datetime.timedelta(days=i * delta) for i in range(interval + 1) + ] + date_list[-1] = end + + # Iterate over date_list (30 day intervals) and fetch data + data_frames = [] + for i in range(len(date_list) - 1): + start_date = date_list[i].strftime("%Y%m%d") + end_date = date_list[i + 1].strftime("%Y%m%d") + + api_query = f"begin_date={start_date}&end_date={end_date}&station={station}&product={parameter}&units=metric&time_zone=gmt&application=web_services&format=xml" + data_url = f"https://tidesandcurrents.noaa.gov/api/datagetter?{api_query}" + + print("Data request URL: ", data_url) + + # Get response + try: + response = requests.get(url=data_url, proxies=proxy) + response.raise_for_status() + except requests.exceptions.HTTPError as err: + print(f"HTTP error occurred: {err}") + continue + except requests.exceptions.RequestException as err: + print(f"Error occurred: {err}") + continue + # Convert to DataFrame and save in data_frames list + df, metadata = _xml_to_dataframe(response) + data_frames.append(df) + + # Concatenate all DataFrames + data = pd.concat(data_frames, ignore_index=False) + + # Remove duplicated date values + data = data.loc[~data.index.duplicated()] + + # After making the API request and processing the response, write the + # response to a cache file + handle_caching( + hash_params, + cache_dir, + data=data, + metadata=metadata, + clear_cache_file=clear_cache, + ) - # Convert start and end dates to datetime objects - begin = datetime.datetime.strptime(start_date, "%Y%m%d").date() - end = datetime.datetime.strptime(end_date, "%Y%m%d").date() - - # Determine the number of 30 day intervals - delta = 30 - interval = math.ceil(((end - begin).days) / delta) - - # Create date ranges with 30 day intervals - date_list = [ - begin + datetime.timedelta(days=i * delta) for i in range(interval + 1) - ] - date_list[-1] = end - - # Iterate over date_list (30 day intervals) and fetch data - data_frames = [] - for i in range(len(date_list) - 1): - start_date = date_list[i].strftime("%Y%m%d") - end_date = date_list[i + 1].strftime("%Y%m%d") - - api_query = f"begin_date={start_date}&end_date={end_date}&station={station}&product={parameter}&units=metric&time_zone=gmt&application=web_services&format=xml" - data_url = f"https://tidesandcurrents.noaa.gov/api/datagetter?{api_query}" - - print("Data request URL: ", data_url) - - # Get response - try: - response = requests.get(url=data_url, proxies=proxy) - response.raise_for_status() - except requests.exceptions.HTTPError as err: - print(f"HTTP error occurred: {err}") - continue - except requests.exceptions.RequestException as err: - print(f"Error occurred: {err}") - continue - # Convert to DataFrame and save in data_frames list - df, metadata = _xml_to_dataframe(response) - data_frames.append(df) - - # Concatenate all DataFrames - data = pd.concat(data_frames, ignore_index=False) - - # Remove duplicated date values - data = data.loc[~data.index.duplicated()] - - # After making the API request and processing the response, write the - # response to a cache file - handle_caching( - hash_params, - cache_dir, - data=data, - metadata=metadata, - clear_cache_file=clear_cache, - ) - - if write_json: - shutil.copy(cache_filepath, write_json) + if write_json: + shutil.copy(cache_filepath, write_json) - return data, metadata + return data, metadata def _xml_to_dataframe(response): diff --git a/mhkit/wave/io/ndbc.py b/mhkit/wave/io/ndbc.py index cd658fd55..05d8e5d63 100644 --- a/mhkit/wave/io/ndbc.py +++ b/mhkit/wave/io/ndbc.py @@ -188,8 +188,9 @@ def available_data(parameter, buoy_number=None, proxy=None, clear_cache=False): # Check the cache before making the request data, _, _ = handle_caching(hash_params, cache_dir, clear_cache_file=clear_cache) - - if data is None: + + # no coverage bc in coverage runs we have already cached the data/ run this code + if data is None: # pragma: no cover ndbc_data = f"https://www.ndbc.noaa.gov/data/historical/{parameter}/" try: From 816a5f98b0b52b937cb00962c790d8f77f44994a Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 19 Jan 2024 11:07:56 -0700 Subject: [PATCH 41/87] black --- mhkit/tests/wave/test_contours.py | 47 ++++++++++++++++++++++--------- mhkit/tidal/io/noaa.py | 4 +-- mhkit/wave/io/ndbc.py | 4 +-- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index 55b688380..fb33c013f 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -68,51 +68,72 @@ def test_environmental_contours_invalid_inputs(self): # Invalid x1 tests x1_non_numeric = "not an array" with self.assertRaises(ValueError): - wave.contours.environmental_contours(x1_non_numeric, self.wdrt_Te, 3600, 50, "PCA") + wave.contours.environmental_contours( + x1_non_numeric, self.wdrt_Te, 3600, 50, "PCA" + ) x1_scalar = 5 with self.assertRaises(TypeError): - wave.contours.environmental_contours(x1_scalar, self.wdrt_Te, 3600, 50, "PCA") + wave.contours.environmental_contours( + x1_scalar, self.wdrt_Te, 3600, 50, "PCA" + ) # Invalid x2 tests x2_non_numeric = "not an array" with self.assertRaises(ValueError): - wave.contours.environmental_contours(self.wdrt_Hm0, x2_non_numeric, 3600, 50, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, x2_non_numeric, 3600, 50, "PCA" + ) x2_scalar = 10 with self.assertRaises(TypeError): - wave.contours.environmental_contours(self.wdrt_Hm0, x2_scalar, 3600, 50, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, x2_scalar, 3600, 50, "PCA" + ) # Unequal lengths of x1 and x2 x2_unequal_length = self.wdrt_Te[:-1] with self.assertRaises(ValueError): - wave.contours.environmental_contours(self.wdrt_Hm0, x2_unequal_length, 3600, 50, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, x2_unequal_length, 3600, 50, "PCA" + ) # Invalid sea_state_duration tests invalid_sea_state_duration_string = "one hour" with self.assertRaises(TypeError): - wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, invalid_sea_state_duration_string, 50, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + invalid_sea_state_duration_string, + 50, + "PCA", + ) invalid_sea_state_duration_list = [3600] with self.assertRaises(TypeError): - wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, invalid_sea_state_duration_list, 50, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, invalid_sea_state_duration_list, 50, "PCA" + ) # Invalid return_period tests invalid_return_period_string = "fifty years" with self.assertRaises(TypeError): - wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, 3600, invalid_return_period_string, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, invalid_return_period_string, "PCA" + ) invalid_return_period_list = [50] with self.assertRaises(TypeError): - wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, 3600, invalid_return_period_list, "PCA") + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, invalid_return_period_list, "PCA" + ) # Invalid method tests invalid_method = 123 with self.assertRaises(TypeError): - wave.contours.environmental_contours(self.wdrt_Hm0, self.wdrt_Te, 3600, 50, invalid_method) - - - + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, invalid_method + ) def test__principal_component_analysis(self): Hm0Te = self.Hm0Te diff --git a/mhkit/tidal/io/noaa.py b/mhkit/tidal/io/noaa.py index e056cafda..e7e044305 100644 --- a/mhkit/tidal/io/noaa.py +++ b/mhkit/tidal/io/noaa.py @@ -120,9 +120,9 @@ def request_noaa_data( if write_json: shutil.copy(cache_filepath, write_json) return cached_data, cached_metadata - # If no cached data is available, make the API request + # If no cached data is available, make the API request # no coverage bc in coverage runs we have already cached the data/ run this code - else: # pragma: no cover + else: # pragma: no cover # Convert start and end dates to datetime objects begin = datetime.datetime.strptime(start_date, "%Y%m%d").date() end = datetime.datetime.strptime(end_date, "%Y%m%d").date() diff --git a/mhkit/wave/io/ndbc.py b/mhkit/wave/io/ndbc.py index 05d8e5d63..2d198a808 100644 --- a/mhkit/wave/io/ndbc.py +++ b/mhkit/wave/io/ndbc.py @@ -188,9 +188,9 @@ def available_data(parameter, buoy_number=None, proxy=None, clear_cache=False): # Check the cache before making the request data, _, _ = handle_caching(hash_params, cache_dir, clear_cache_file=clear_cache) - + # no coverage bc in coverage runs we have already cached the data/ run this code - if data is None: # pragma: no cover + if data is None: # pragma: no cover ndbc_data = f"https://www.ndbc.noaa.gov/data/historical/{parameter}/" try: From 48d8cc46ab2e316dc1da90eb729cd7c626cd16bc Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 25 Jan 2024 08:25:22 -0700 Subject: [PATCH 42/87] fix & improve type checks --- mhkit/wave/contours.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/mhkit/wave/contours.py b/mhkit/wave/contours.py index 854f6f0df..d99e73414 100644 --- a/mhkit/wave/contours.py +++ b/mhkit/wave/contours.py @@ -84,16 +84,12 @@ def environmental_contours(x1, x2, sea_state_duration, return_period, method, ** x2 = np.asarray(x2, dtype=float) except ValueError: raise ValueError("x2 must contain numeric values.") - if not isinstance(x1, np.ndarray) or x1.ndim == 0: raise TypeError(f"x1 must be a non-scalar array. Got: {type(x1)}") if not isinstance(x2, np.ndarray) or x2.ndim == 0: raise TypeError(f"x2 must be a non-scalar array. Got: {type(x2)}") - - # Check if the lengths of x1 and x2 are equal if len(x1) != len(x2): raise ValueError("The lengths of x1 and x2 must be equal.") - if not isinstance(sea_state_duration, (int, float)): raise TypeError( f"sea_state_duration must be of type int or float. Got: {type(sea_state_duration)}" @@ -115,6 +111,10 @@ def environmental_contours(x1, x2, sea_state_duration, return_period, method, ** PCA_bin_size = kwargs.get("PCA_bin_size", 250) return_fit = kwargs.get("return_fit", False) + if not isinstance(max_x1, (int, float, type(None))): + raise TypeError(f"If specified, max_x1 must be a dict. Got: {type(PCA)}") + if not isinstance(max_x2, (int, float, type(None))): + raise TypeError(f"If specified, max_x2 must be a dict. Got: {type(PCA)}") if not isinstance(PCA, (dict, type(None))): raise TypeError(f"If specified, PCA must be a dict. Got: {type(PCA)}") if not isinstance(PCA_bin_size, int): @@ -362,17 +362,19 @@ def PCA_contour(x1, x2, fit, kwargs): """ try: - x1 = np.array(x1) - except: - pass + x1 = np.asarray(x1, dtype=float) + except ValueError: + raise ValueError("x1 must contain numeric values.") try: - x2 = np.array(x2) - except: - pass - if not isinstance(x1, np.ndarray): - raise TypeError(f"x1 must be of type np.ndarray. Got: {type(x1)}") - if not isinstance(x2, np.ndarray): - raise TypeError(f"x2 must be of type np.ndarray. Got: {type(x2)}") + x2 = np.asarray(x2, dtype=float) + except ValueError: + raise ValueError("x2 must contain numeric values.") + if not isinstance(x1, np.ndarray) or x1.ndim == 0: + raise TypeError(f"x1 must be a non-scalar array. Got: {type(x1)}") + if not isinstance(x2, np.ndarray) or x2.ndim == 0: + raise TypeError(f"x2 must be a non-scalar array. Got: {type(x2)}") + if len(x1) != len(x2): + raise ValueError("The lengths of x1 and x2 must be equal.") bin_size = kwargs.get("bin_size", 250) nb_steps = kwargs.get("nb_steps", 1000) From e22dbd00aac6afb1b003d4d73002c8573cfe569d Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 25 Jan 2024 11:03:33 -0700 Subject: [PATCH 43/87] fix bug on slicing after setting min_bins to 4 --- mhkit/wave/contours.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mhkit/wave/contours.py b/mhkit/wave/contours.py index d99e73414..e9331ecde 100644 --- a/mhkit/wave/contours.py +++ b/mhkit/wave/contours.py @@ -6,6 +6,7 @@ import scipy.stats as stats import scipy.interpolate as interp import numpy as np +import warnings import matplotlib @@ -532,13 +533,13 @@ def _principal_component_analysis(x1, x2, bin_size=250): if bin_size > minimum_4_bins: bin_size = minimum_4_bins msg = ( - "To allow for a minimum of 4 bins, the bin size has been" + "To allow for a minimum of 4 bins, the bin size has been " + f"set to {minimum_4_bins}" ) - print(msg) + warnings.warn(msg, UserWarning) - N_multiples = N // bin_size - max_N_multiples_index = N_multiples * bin_size + N_multiples = int(N // bin_size) + max_N_multiples_index = int(N_multiples * bin_size) x1_integer_multiples_of_bin_size = x1_sorted[0:max_N_multiples_index] x2_integer_multiples_of_bin_size = x2_sorted[0:max_N_multiples_index] From 2fe090e3296a2f0a8b5c8351f66569a603f46898 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 25 Jan 2024 11:04:13 -0700 Subject: [PATCH 44/87] increase test coverage --- mhkit/tests/wave/test_contours.py | 280 +++++++++++++++++++++++------- 1 file changed, 216 insertions(+), 64 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index fb33c013f..b101f87a3 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -4,6 +4,7 @@ import mhkit.wave as wave import pandas as pd import numpy as np +import warnings import unittest import pickle import json @@ -135,6 +136,119 @@ def test_environmental_contours_invalid_inputs(self): self.wdrt_Hm0, self.wdrt_Te, 3600, 50, invalid_method ) + invalid_bin_val_size = "not a number" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", bin_val_size=invalid_bin_val_size + ) + + invalid_nb_steps = 100.5 + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", nb_steps=invalid_nb_steps + ) + + invalid_initial_bin_max_val = "not a number" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", initial_bin_max_val=invalid_initial_bin_max_val + ) + + invalid_min_bin_count = 40.5 + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", min_bin_count=invalid_min_bin_count + ) + + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "bivariate_KDE" + ) + + invalid_PCA = "not a dict" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", PCA=invalid_PCA + ) + + invalid_PCA_bin_size = "not an int" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", PCA_bin_size=invalid_PCA_bin_size + ) + + invalid_return_fit = "not a boolean" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", return_fit=invalid_return_fit + ) + + invalid_Ndata_bivariate_KDE = "not a number" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "bivariate_KDE", Ndata_bivariate_KDE=invalid_Ndata_bivariate_KDE + ) + + invalid_max_x1 = "not a number" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", max_x1=invalid_max_x1 + ) + + invalid_max_x2 = "not a number" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", max_x2=invalid_max_x2 + ) + + invalid_bandwidth = "not a number" + with self.assertRaises(TypeError): + wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "bivariate_KDE", bandwidth=invalid_bandwidth + ) + + def test_PCA_contours_invalid_inputs(self): + + Hm0Te = self.Hm0Te + df = Hm0Te[Hm0Te["Hm0"] < 20] + + Hm0 = df.Hm0.values + Te = df.Te.values + + dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds + period = 100 + + copula = wave.contours.environmental_contours(Hm0, Te, dt_ss, period, "PCA", return_fit=True) + + PCA_args ={ + "nb_steps": 1000, + "return_fit": False, + "bin_size": 250, + } + + # Invalid x1 tests + x1_non_numeric = "not an array" + with self.assertRaises(ValueError): + wave.contours.PCA_contour(x1_non_numeric, self.wdrt_Te, copula['PCA_fit'], PCA_args) + + x1_scalar = 5 + with self.assertRaises(TypeError): + wave.contours.PCA_contour(x1_scalar, self.wdrt_Te, copula['PCA_fit'], PCA_args) + + # Invalid x2 tests + x2_non_numeric = "not an array" + with self.assertRaises(ValueError): + wave.contours.PCA_contour(self.wdrt_Hm0, x2_non_numeric, copula['PCA_fit'], PCA_args) + + x2_scalar = 10 + with self.assertRaises(TypeError): + wave.contours.PCA_contour(self.wdrt_Hm0, x2_scalar, copula['PCA_fit'], PCA_args) + + # Unequal lengths of x1 and x2 + x2_unequal_length = self.wdrt_Te[:-1] + with self.assertRaises(ValueError): + wave.contours.PCA_contour(self.wdrt_Hm0, x2_unequal_length, copula['PCA_fit'], PCA_args) + def test__principal_component_analysis(self): Hm0Te = self.Hm0Te df = Hm0Te[Hm0Te["Hm0"] < 20] @@ -150,6 +264,44 @@ def test__principal_component_analysis(self): self.assertAlmostEqual(PCA["mu_fit"].intercept, self.pca["mu_fit"].intercept) assert_allclose(PCA["sigma_fit"]["x"], self.pca["sigma_fit"]["x"]) + def test__principal_component_analysis_invalid_inputs(self): + x1_valid = np.array([1, 2, 3]) + x2_valid = np.array([1, 2, 3]) + + # Test invalid x1 (non-array input) + x1_non_array = "not an array" + with self.assertRaises(TypeError): + wave.contours._principal_component_analysis(x1_non_array, x2_valid) + + # Test invalid x2 (non-array input) + x2_non_array = "not an array" + with self.assertRaises(TypeError): + wave.contours._principal_component_analysis(x1_valid, x2_non_array) + + # Test invalid bin_size (non-integer input) + invalid_bin_size = "not an integer" + with self.assertRaises(TypeError): + wave.contours._principal_component_analysis(x1_valid, x2_valid, bin_size=invalid_bin_size) + + + def test_principal_component_analysis_bin_size_adjustment_warning(self): + Hm0Te = self.Hm0Te + df = Hm0Te[Hm0Te["Hm0"] < 20] + + Hm0 = df.Hm0.values + Te = df.Te.values + + large_bin_size = 1000000 + + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") # Cause all warnings to always be triggered + wave.contours._principal_component_analysis(Hm0, Te, bin_size=large_bin_size) + + self.assertTrue(len(w) == 1) # Check that exactly one warning was raised + self.assertTrue(issubclass(w[-1].category, UserWarning)) # Check the warning category + self.assertIn("To allow for a minimum of 4 bins, the bin size has been set to", str(w[-1].message)) + + def test_plot_environmental_contour(self): file_loc = join(plotdir, "wave_plot_environmental_contour.png") filename = abspath(file_loc) @@ -272,70 +424,70 @@ def test_standard_copulas(self): ) self.assertTrue(all(close)) - def test_nonparametric_copulas(self): - methods = [ - "nonparametric_gaussian", - "nonparametric_clayton", - "nonparametric_gumbel", - ] - - np_copulas = wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods - ) - - close = [] - for method in methods: - close.append( - np.allclose( - np_copulas[f"{method}_x1"], - self.wdrt_copulas[f"{method}_x1"], - atol=0.13, - ) - ) - close.append( - np.allclose( - np_copulas[f"{method}_x2"], - self.wdrt_copulas[f"{method}_x2"], - atol=0.13, - ) - ) - self.assertTrue(all(close)) - - def test_kde_copulas(self): - kde_copula = wave.contours.environmental_contours( - self.wdrt_Hm0, - self.wdrt_Te, - self.wdrt_dt, - self.wdrt_period, - method=["bivariate_KDE"], - bandwidth=[0.23, 0.23], - ) - log_kde_copula = wave.contours.environmental_contours( - self.wdrt_Hm0, - self.wdrt_Te, - self.wdrt_dt, - self.wdrt_period, - method=["bivariate_KDE_log"], - bandwidth=[0.02, 0.11], - ) - - close = [ - np.allclose( - kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] - ), - np.allclose( - kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] - ), - np.allclose( - log_kde_copula["bivariate_KDE_log_x1"], - self.wdrt_copulas["bivariate_KDE_log_x1"], - ), - np.allclose( - log_kde_copula["bivariate_KDE_log_x2"], - self.wdrt_copulas["bivariate_KDE_log_x2"], - ), - ] - self.assertTrue(all(close)) + # def test_nonparametric_copulas(self): + # methods = [ + # "nonparametric_gaussian", + # "nonparametric_clayton", + # "nonparametric_gumbel", + # ] + + # np_copulas = wave.contours.environmental_contours( + # self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods + # ) + + # close = [] + # for method in methods: + # close.append( + # np.allclose( + # np_copulas[f"{method}_x1"], + # self.wdrt_copulas[f"{method}_x1"], + # atol=0.13, + # ) + # ) + # close.append( + # np.allclose( + # np_copulas[f"{method}_x2"], + # self.wdrt_copulas[f"{method}_x2"], + # atol=0.13, + # ) + # ) + # self.assertTrue(all(close)) + + # def test_kde_copulas(self): + # kde_copula = wave.contours.environmental_contours( + # self.wdrt_Hm0, + # self.wdrt_Te, + # self.wdrt_dt, + # self.wdrt_period, + # method=["bivariate_KDE"], + # bandwidth=[0.23, 0.23], + # ) + # log_kde_copula = wave.contours.environmental_contours( + # self.wdrt_Hm0, + # self.wdrt_Te, + # self.wdrt_dt, + # self.wdrt_period, + # method=["bivariate_KDE_log"], + # bandwidth=[0.02, 0.11], + # ) + + # close = [ + # np.allclose( + # kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] + # ), + # np.allclose( + # kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] + # ), + # np.allclose( + # log_kde_copula["bivariate_KDE_log_x1"], + # self.wdrt_copulas["bivariate_KDE_log_x1"], + # ), + # np.allclose( + # log_kde_copula["bivariate_KDE_log_x2"], + # self.wdrt_copulas["bivariate_KDE_log_x2"], + # ), + # ] + # self.assertTrue(all(close)) def test_samples_contours(self): te_samples = np.array([10, 15, 20]) From 594e65b0154739ddad3ad4bddf037c433bc852f0 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 25 Jan 2024 11:04:29 -0700 Subject: [PATCH 45/87] black --- mhkit/tests/wave/test_contours.py | 121 +++++++++++++++++++++--------- 1 file changed, 87 insertions(+), 34 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index b101f87a3..c11ed53b4 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -139,9 +139,14 @@ def test_environmental_contours_invalid_inputs(self): invalid_bin_val_size = "not a number" with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", bin_val_size=invalid_bin_val_size + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "PCA", + bin_val_size=invalid_bin_val_size, ) - + invalid_nb_steps = 100.5 with self.assertRaises(TypeError): wave.contours.environmental_contours( @@ -151,19 +156,29 @@ def test_environmental_contours_invalid_inputs(self): invalid_initial_bin_max_val = "not a number" with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", initial_bin_max_val=invalid_initial_bin_max_val + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "PCA", + initial_bin_max_val=invalid_initial_bin_max_val, ) invalid_min_bin_count = 40.5 with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", min_bin_count=invalid_min_bin_count + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "PCA", + min_bin_count=invalid_min_bin_count, ) with self.assertRaises(TypeError): wave.contours.environmental_contours( self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "bivariate_KDE" - ) + ) invalid_PCA = "not a dict" with self.assertRaises(TypeError): @@ -174,41 +189,60 @@ def test_environmental_contours_invalid_inputs(self): invalid_PCA_bin_size = "not an int" with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", PCA_bin_size=invalid_PCA_bin_size - ) + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "PCA", + PCA_bin_size=invalid_PCA_bin_size, + ) invalid_return_fit = "not a boolean" with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", return_fit=invalid_return_fit - ) + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "PCA", + return_fit=invalid_return_fit, + ) invalid_Ndata_bivariate_KDE = "not a number" with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "bivariate_KDE", Ndata_bivariate_KDE=invalid_Ndata_bivariate_KDE - ) + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "bivariate_KDE", + Ndata_bivariate_KDE=invalid_Ndata_bivariate_KDE, + ) invalid_max_x1 = "not a number" with self.assertRaises(TypeError): wave.contours.environmental_contours( self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", max_x1=invalid_max_x1 - ) + ) invalid_max_x2 = "not a number" with self.assertRaises(TypeError): wave.contours.environmental_contours( self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "PCA", max_x2=invalid_max_x2 - ) + ) invalid_bandwidth = "not a number" with self.assertRaises(TypeError): wave.contours.environmental_contours( - self.wdrt_Hm0, self.wdrt_Te, 3600, 50, "bivariate_KDE", bandwidth=invalid_bandwidth - ) + self.wdrt_Hm0, + self.wdrt_Te, + 3600, + 50, + "bivariate_KDE", + bandwidth=invalid_bandwidth, + ) def test_PCA_contours_invalid_inputs(self): - Hm0Te = self.Hm0Te df = Hm0Te[Hm0Te["Hm0"] < 20] @@ -218,36 +252,48 @@ def test_PCA_contours_invalid_inputs(self): dt_ss = (Hm0Te.index[2] - Hm0Te.index[1]).seconds period = 100 - copula = wave.contours.environmental_contours(Hm0, Te, dt_ss, period, "PCA", return_fit=True) + copula = wave.contours.environmental_contours( + Hm0, Te, dt_ss, period, "PCA", return_fit=True + ) - PCA_args ={ - "nb_steps": 1000, - "return_fit": False, - "bin_size": 250, - } + PCA_args = { + "nb_steps": 1000, + "return_fit": False, + "bin_size": 250, + } # Invalid x1 tests x1_non_numeric = "not an array" with self.assertRaises(ValueError): - wave.contours.PCA_contour(x1_non_numeric, self.wdrt_Te, copula['PCA_fit'], PCA_args) + wave.contours.PCA_contour( + x1_non_numeric, self.wdrt_Te, copula["PCA_fit"], PCA_args + ) x1_scalar = 5 with self.assertRaises(TypeError): - wave.contours.PCA_contour(x1_scalar, self.wdrt_Te, copula['PCA_fit'], PCA_args) + wave.contours.PCA_contour( + x1_scalar, self.wdrt_Te, copula["PCA_fit"], PCA_args + ) # Invalid x2 tests x2_non_numeric = "not an array" with self.assertRaises(ValueError): - wave.contours.PCA_contour(self.wdrt_Hm0, x2_non_numeric, copula['PCA_fit'], PCA_args) + wave.contours.PCA_contour( + self.wdrt_Hm0, x2_non_numeric, copula["PCA_fit"], PCA_args + ) x2_scalar = 10 with self.assertRaises(TypeError): - wave.contours.PCA_contour(self.wdrt_Hm0, x2_scalar, copula['PCA_fit'], PCA_args) + wave.contours.PCA_contour( + self.wdrt_Hm0, x2_scalar, copula["PCA_fit"], PCA_args + ) # Unequal lengths of x1 and x2 x2_unequal_length = self.wdrt_Te[:-1] with self.assertRaises(ValueError): - wave.contours.PCA_contour(self.wdrt_Hm0, x2_unequal_length, copula['PCA_fit'], PCA_args) + wave.contours.PCA_contour( + self.wdrt_Hm0, x2_unequal_length, copula["PCA_fit"], PCA_args + ) def test__principal_component_analysis(self): Hm0Te = self.Hm0Te @@ -281,8 +327,9 @@ def test__principal_component_analysis_invalid_inputs(self): # Test invalid bin_size (non-integer input) invalid_bin_size = "not an integer" with self.assertRaises(TypeError): - wave.contours._principal_component_analysis(x1_valid, x2_valid, bin_size=invalid_bin_size) - + wave.contours._principal_component_analysis( + x1_valid, x2_valid, bin_size=invalid_bin_size + ) def test_principal_component_analysis_bin_size_adjustment_warning(self): Hm0Te = self.Hm0Te @@ -291,16 +338,22 @@ def test_principal_component_analysis_bin_size_adjustment_warning(self): Hm0 = df.Hm0.values Te = df.Te.values - large_bin_size = 1000000 + large_bin_size = 1000000 with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") # Cause all warnings to always be triggered - wave.contours._principal_component_analysis(Hm0, Te, bin_size=large_bin_size) + wave.contours._principal_component_analysis( + Hm0, Te, bin_size=large_bin_size + ) self.assertTrue(len(w) == 1) # Check that exactly one warning was raised - self.assertTrue(issubclass(w[-1].category, UserWarning)) # Check the warning category - self.assertIn("To allow for a minimum of 4 bins, the bin size has been set to", str(w[-1].message)) - + self.assertTrue( + issubclass(w[-1].category, UserWarning) + ) # Check the warning category + self.assertIn( + "To allow for a minimum of 4 bins, the bin size has been set to", + str(w[-1].message), + ) def test_plot_environmental_contour(self): file_loc = join(plotdir, "wave_plot_environmental_contour.png") From 7aa0ef282c31b83ab0007261ab7b3b17229e7d51 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 26 Jan 2024 09:28:59 -0700 Subject: [PATCH 46/87] black --- mhkit/dolfyn/io/api.py | 26 +- mhkit/dolfyn/io/base.py | 28 +- mhkit/dolfyn/io/nortek.py | 146 +++--- mhkit/dolfyn/io/nortek2.py | 167 ++++--- mhkit/dolfyn/io/nortek2_defs.py | 150 ++++-- mhkit/dolfyn/io/nortek2_lib.py | 24 +- mhkit/dolfyn/io/nortek_defs.py | 680 ++++++++++++++------------ mhkit/dolfyn/tools/fft.py | 4 +- mhkit/dolfyn/velocity.py | 4 +- mhkit/tests/dolfyn/test_read_adp.py | 30 +- mhkit/tests/dolfyn/test_read_io.py | 18 +- mhkit/tests/dolfyn/test_rotate_adp.py | 21 +- mhkit/tests/dolfyn/test_tools.py | 2 + 13 files changed, 743 insertions(+), 557 deletions(-) diff --git a/mhkit/dolfyn/io/api.py b/mhkit/dolfyn/io/api.py index 8dda102ed..0da26a772 100644 --- a/mhkit/dolfyn/io/api.py +++ b/mhkit/dolfyn/io/api.py @@ -191,14 +191,14 @@ def save(ds, filename, format="NETCDF4", engine="netcdf4", compression=False, ** # Write variable encoding enc = dict() - if 'encoding' in kwargs: - enc.update(kwargs['encoding']) + if "encoding" in kwargs: + enc.update(kwargs["encoding"]) for ky in ds.variables: # Save prior encoding enc[ky] = ds[ky].encoding # Remove unexpected netCDF4 encoding parameters # https://github.com/pydata/xarray/discussions/5709 - params = ['szip', 'zstd', 'bzip2', 'blosc', 'contiguous', 'chunksizes'] + params = ["szip", "zstd", "bzip2", "blosc", "contiguous", "chunksizes"] [enc[ky].pop(p) for p in params if p in enc[ky]] if compression: @@ -207,7 +207,7 @@ def save(ds, filename, format="NETCDF4", engine="netcdf4", compression=False, ** continue enc[ky].update(dict(zlib=True, complevel=1)) - kwargs['encoding'] = enc + kwargs["encoding"] = enc # Fix encoding on datetime64 variables. ds = _decode_cf(ds) @@ -238,18 +238,18 @@ def load(filename): for nm in ds.attrs: if isinstance(ds.attrs[nm], np.ndarray) and ds.attrs[nm].size > 1: ds.attrs[nm] = list(ds.attrs[nm]) - elif isinstance(ds.attrs[nm], str) and nm in ['rotate_vars']: + elif isinstance(ds.attrs[nm], str) and nm in ["rotate_vars"]: ds.attrs[nm] = [ds.attrs[nm]] # Rejoin complex numbers - if hasattr(ds, 'complex_vars'): + if hasattr(ds, "complex_vars"): if len(ds.complex_vars): if len(ds.complex_vars[0]) == 1: - ds.attrs['complex_vars'] = [ds.complex_vars] + ds.attrs["complex_vars"] = [ds.complex_vars] for var in ds.complex_vars: - ds[var] = ds[var + '_real'] + ds[var + '_imag'] * 1j - ds = ds.drop_vars([var + '_real', var + '_imag']) - ds.attrs.pop('complex_vars') + ds[var] = ds[var + "_real"] + ds[var + "_imag"] * 1j + ds = ds.drop_vars([var + "_real", var + "_imag"]) + ds.attrs.pop("complex_vars") return ds @@ -383,7 +383,11 @@ def load_mat(filename, datenum=True): ds.attrs[nm] = [x.strip(" ") for x in list(ds.attrs[nm])] except: ds.attrs[nm] = list(ds.attrs[nm]) - elif isinstance(ds.attrs[nm], str) and nm in ['time_coords', 'time_data_vars', 'rotate_vars']: + elif isinstance(ds.attrs[nm], str) and nm in [ + "time_coords", + "time_data_vars", + "rotate_vars", + ]: ds.attrs[nm] = [ds.attrs[nm]] if hasattr(ds, "orientation_down"): diff --git a/mhkit/dolfyn/io/base.py b/mhkit/dolfyn/io/base.py index 7282c2820..a4414cbe7 100644 --- a/mhkit/dolfyn/io/base.py +++ b/mhkit/dolfyn/io/base.py @@ -118,7 +118,7 @@ def _create_dataset(data): Direction 'dir' coordinates are set in `set_coords` """ ds = xr.Dataset() - tag = ['_avg', '_b5', '_echo', '_bt', '_gps', '_altraw', '_sl'] + tag = ["_avg", "_b5", "_echo", "_bt", "_gps", "_altraw", "_sl"] FoR = {} try: @@ -228,15 +228,23 @@ def _create_dataset(data): ) elif l == 2: # 2D variables - if key == 'echo': - ds[key] = ds[key].rename({'dim_0': 'range_echo', - 'dim_1': 'time_echo'}) - ds[key] = ds[key].assign_coords({'range_echo': data['coords']['range_echo'], - 'time_echo': data['coords']['time_echo']}) - elif key == 'samp_altraw': # raw altimeter samples - ds[key] = ds[key].rename({'dim_0': 'n_altraw', - 'dim_1': 'time_altraw'}) - ds[key] = ds[key].assign_coords({'time_altraw': data['coords']['time_altraw']}) + if key == "echo": + ds[key] = ds[key].rename( + {"dim_0": "range_echo", "dim_1": "time_echo"} + ) + ds[key] = ds[key].assign_coords( + { + "range_echo": data["coords"]["range_echo"], + "time_echo": data["coords"]["time_echo"], + } + ) + elif key == "samp_altraw": # raw altimeter samples + ds[key] = ds[key].rename( + {"dim_0": "n_altraw", "dim_1": "time_altraw"} + ) + ds[key] = ds[key].assign_coords( + {"time_altraw": data["coords"]["time_altraw"]} + ) # ADV/ADCP instrument vector data, bottom tracking elif shp[0] == n_beams and not any(val in key for val in tag[:3]): diff --git a/mhkit/dolfyn/io/nortek.py b/mhkit/dolfyn/io/nortek.py index d3efc6a57..897fce3c2 100644 --- a/mhkit/dolfyn/io/nortek.py +++ b/mhkit/dolfyn/io/nortek.py @@ -165,19 +165,20 @@ class _NortekReader: """ _lastread = [None, None, None, None, None] - fun_map = {'0x00': 'read_user_cfg', - '0x04': 'read_head_cfg', - '0x05': 'read_hw_cfg', - '0x07': 'read_vec_checkdata', - '0x10': 'read_vec_data', - '0x11': 'read_vec_sysdata', - '0x12': 'read_vec_hdr', - '0x20': 'read_awac_profile', - '0x30': 'read_awac_waves', - '0x31': 'read_awac_waves_hdr', - '0x36': 'read_awac_waves', # "SUV" - '0x71': 'read_microstrain', - } + fun_map = { + "0x00": "read_user_cfg", + "0x04": "read_head_cfg", + "0x05": "read_hw_cfg", + "0x07": "read_vec_checkdata", + "0x10": "read_vec_data", + "0x11": "read_vec_sysdata", + "0x12": "read_vec_hdr", + "0x20": "read_awac_profile", + "0x30": "read_awac_waves", + "0x31": "read_awac_waves_hdr", + "0x36": "read_awac_waves", # "SUV" + "0x71": "read_microstrain", + } def __init__( self, @@ -1157,78 +1158,95 @@ def sci_awac_profile( self.data["attrs"]["cell_size"] = cs self.data["attrs"]["blank_dist"] = bd - def read_awac_waves_hdr(self,): + def read_awac_waves_hdr( + self, + ): # ID: '0x31' c = self.c if self.debug: - print('Reading vector header data (0x31) ping #{} @ {}...' - .format(self.c, self.pos)) + print( + "Reading vector header data (0x31) ping #{} @ {}...".format( + self.c, self.pos + ) + ) hdrnow = {} dat = self.data - ds = dat['sys'] - dv = dat['data_vars'] - if 'time' not in dat['coords']: + ds = dat["sys"] + dv = dat["data_vars"] + if "time" not in dat["coords"]: self._init_data(nortek_defs.waves_hdrdata) byts = self.read(56) # The first two are size, the next 6 are time. - tmp = unpack(self.endian + '8x4H3h2HhH4B6H5h', byts) - dat['coords']['time'][c] = self.rd_time(byts[2:8]) - hdrnow['n_records_alt'] = tmp[0] - hdrnow['blank_dist_alt'] = tmp[1] # counts - ds['batt_alt'][c] = tmp[2] # voltage (0.1 V) - dv['c_sound_alt'][c] = tmp[3] # c (0.1 m/s) - dv['heading_alt'][c] = tmp[4] # (0.1 deg) - dv['pitch_alt'][c] = tmp[5] # (0.1 deg) - dv['roll_alt'][c] = tmp[6] # (0.1 deg) - dv['pressure1_alt'][c] = tmp[7] # min pressure previous profile (0.001 dbar) - dv['pressure2_alt'][c] = tmp[8] # max pressure previous profile (0.001 dbar) - dv['temp_alt'][c] = tmp[9] # (0.01 deg C) - hdrnow['cell_size_alt'][c] = tmp[10] # (counts of T3) - hdrnow['noise_alt'][c] = tmp[11:15] # noise amplitude beam 1-4 (counts) - hdrnow['proc_magn_alt'][c] = tmp[15:19] # processing magnitude beam 1-4 - hdrnow['n_past_window_alt'] = tmp[19] # number of samples of AST window past boundary - hdrnow['n_window_alt'] = tmp[20] # AST window size (# samples) - hdrnow['Spare1'] = tmp[21:] + tmp = unpack(self.endian + "8x4H3h2HhH4B6H5h", byts) + dat["coords"]["time"][c] = self.rd_time(byts[2:8]) + hdrnow["n_records_alt"] = tmp[0] + hdrnow["blank_dist_alt"] = tmp[1] # counts + ds["batt_alt"][c] = tmp[2] # voltage (0.1 V) + dv["c_sound_alt"][c] = tmp[3] # c (0.1 m/s) + dv["heading_alt"][c] = tmp[4] # (0.1 deg) + dv["pitch_alt"][c] = tmp[5] # (0.1 deg) + dv["roll_alt"][c] = tmp[6] # (0.1 deg) + dv["pressure1_alt"][c] = tmp[7] # min pressure previous profile (0.001 dbar) + dv["pressure2_alt"][c] = tmp[8] # max pressure previous profile (0.001 dbar) + dv["temp_alt"][c] = tmp[9] # (0.01 deg C) + hdrnow["cell_size_alt"][c] = tmp[10] # (counts of T3) + hdrnow["noise_alt"][c] = tmp[11:15] # noise amplitude beam 1-4 (counts) + hdrnow["proc_magn_alt"][c] = tmp[15:19] # processing magnitude beam 1-4 + hdrnow["n_past_window_alt"] = tmp[ + 19 + ] # number of samples of AST window past boundary + hdrnow["n_window_alt"] = tmp[20] # AST window size (# samples) + hdrnow["Spare1"] = tmp[21:] self.checksum(byts) - if 'data_header' not in self.config: - self.config['data_header'] = hdrnow + if "data_header" not in self.config: + self.config["data_header"] = hdrnow else: - if not isinstance(self.config['data_header'], list): - self.config['data_header'] = [self.config['data_header']] - self.config['data_header'] += [hdrnow] + if not isinstance(self.config["data_header"], list): + self.config["data_header"] = [self.config["data_header"]] + self.config["data_header"] += [hdrnow] - def read_awac_waves(self,): - """Read awac wave and suv data - """ + def read_awac_waves( + self, + ): + """Read awac wave and suv data""" # IDs: 0x30 & 0x36 c = self.c dat = self.data if self.debug: - print('Reading awac wave data (0x30) ping #{} @ {}...' - .format(self.c, self.pos)) - if 'dist1_alt' not in dat['data_vars']: + print( + "Reading awac wave data (0x30) ping #{} @ {}...".format( + self.c, self.pos + ) + ) + if "dist1_alt" not in dat["data_vars"]: self._init_data(nortek_defs.wave_data) - self._dtypes += ['wave_data'] + self._dtypes += ["wave_data"] # The first two are size byts = self.read(20) - ds = dat['sys'] - dv = dat['data_vars'] - (dv['pressure'][c], # (0.001 dbar) - dv['dist1_alt'][c], # distance 1 to surface, vertical beam (mm) - ds['AnaIn_alt'][c], # analog input 1 - dv['vel_alt'][0, c], # velocity beam 1 (mm/s) East for SUV - dv['vel_alt'][1, c], # North for SUV - dv['vel_alt'][2, c], # Up for SUV - dv['dist2_alt'][c], # distance 2 to surface, vertical beam (mm) or vel 4 for non-AST - dv['amp_alt'][0, c], # amplitude beam 1 (counts) - dv['amp_alt'][1, c], # amplitude beam 2 (counts) - dv['amp_alt'][2, c], # amplitude beam 3 (counts) - # AST quality (counts) or amplitude beam 4 for non-AST - dv['quality_alt'][c]) = unpack(self.endian + '3H4h4B', byts) + ds = dat["sys"] + dv = dat["data_vars"] + ( + dv["pressure"][c], # (0.001 dbar) + dv["dist1_alt"][c], # distance 1 to surface, vertical beam (mm) + ds["AnaIn_alt"][c], # analog input 1 + dv["vel_alt"][0, c], # velocity beam 1 (mm/s) East for SUV + dv["vel_alt"][1, c], # North for SUV + dv["vel_alt"][2, c], # Up for SUV + dv["dist2_alt"][ + c + ], # distance 2 to surface, vertical beam (mm) or vel 4 for non-AST + dv["amp_alt"][0, c], # amplitude beam 1 (counts) + dv["amp_alt"][1, c], # amplitude beam 2 (counts) + dv["amp_alt"][2, c], # amplitude beam 3 (counts) + # AST quality (counts) or amplitude beam 4 for non-AST + dv["quality_alt"][c], + ) = unpack(self.endian + "3H4h4B", byts) self.checksum(byts) self.c += 1 - def dat2sci(self,): + def dat2sci( + self, + ): for nm in self._dtypes: getattr(self, "sci_" + nm)() for nm in ["data_header", "checkdata"]: diff --git a/mhkit/dolfyn/io/nortek2.py b/mhkit/dolfyn/io/nortek2.py index 9c46f2347..f9f0aa5b1 100644 --- a/mhkit/dolfyn/io/nortek2.py +++ b/mhkit/dolfyn/io/nortek2.py @@ -237,9 +237,11 @@ def init_data(self, ens_start, ens_stop): nens = int(ens_stop - ens_start) # ID 26 usually only recorded in first ensemble - n26 = ((self._index['ID'] == 26) & - (self._index['ens'] >= ens_start) & - (self._index['ens'] < ens_stop)).sum() + n26 = ( + (self._index["ID"] == 26) + & (self._index["ens"] >= ens_start) + & (self._index["ens"] < ens_stop) + ).sum() if not n26 and 26 in self._burst_readers: self._burst_readers.pop(26) @@ -251,10 +253,10 @@ def init_data(self, ens_start, ens_stop): ens = np.arange(ens_start, ens_stop).astype("uint32") n = nens outdat[ky] = self._burst_readers[ky].init_data(n) - outdat[ky]['ensemble'] = ens - outdat[ky]['units'] = self._burst_readers[ky].data_units() - outdat[ky]['long_name'] = self._burst_readers[ky].data_longnames() - outdat[ky]['standard_name'] = self._burst_readers[ky].data_stdnames() + outdat[ky]["ensemble"] = ens + outdat[ky]["units"] = self._burst_readers[ky].data_units() + outdat[ky]["long_name"] = self._burst_readers[ky].data_longnames() + outdat[ky]["standard_name"] = self._burst_readers[ky].data_stdnames() return outdat @@ -294,7 +296,7 @@ def readfile(self, ens_start=0, ens_stop=None): hdr = self._read_hdr() except IOError: return outdat - id = hdr['id'] + id = hdr["id"] if id in [21, 22, 23, 24, 28]: # "burst data record" (vel + ast), # "avg data record" (vel_avg + ast_avg), "bottom track data record" (bt), # "interleaved burst data record" (vel_b5), "echosounder record" (echo) @@ -304,7 +306,7 @@ def readfile(self, ens_start=0, ens_stop=None): rdr = self._burst_readers[26] if not hasattr(rdr, "_nsamp_index"): first_pass = True - tmp_idx = rdr._nsamp_index = rdr._names.index('nsamp_alt') + tmp_idx = rdr._nsamp_index = rdr._names.index("nsamp_alt") shift = rdr._nsamp_shift = calcsize( defs._format(rdr._format[:tmp_idx], rdr._N[:tmp_idx]) ) @@ -327,10 +329,9 @@ def readfile(self, ens_start=0, ens_stop=None): "<" + "{}H".format(int(rdr.nbyte // 2)) ) # Initialize the array - outdat[26]['samp_alt'] = defs._nans( - [rdr._N[tmp_idx], - len(outdat[26]['samp_alt'])], - dtype=np.uint16) + outdat[26]["samp_alt"] = defs._nans( + [rdr._N[tmp_idx], len(outdat[26]["samp_alt"])], dtype=np.uint16 + ) else: if sz != rdr._N[tmp_idx]: raise Exception( @@ -342,7 +343,7 @@ def readfile(self, ens_start=0, ens_stop=None): c26 += 1 elif id in [27, 29, 30, 31, 35, 36]: # unknown how to handle - # "bottom track record", DVL, "altimeter record", "avg altimeter raw record", + # "bottom track record", DVL, "altimeter record", "avg altimeter raw record", # "raw echosounder data record", "raw echosounder transmit data record" if self.debug: logging.debug("Skipped ID: 0x{:02X} ({:02d})\n".format(id, id)) @@ -444,8 +445,14 @@ def _reorg(dat): cfg["inst_make"] = "Nortek" cfg["inst_type"] = "ADCP" - for id, tag in [(21, ''), (22, '_avg'), (23, '_bt'), - (24, '_b5'), (26, 'raw'), (28, '_echo')]: + for id, tag in [ + (21, ""), + (22, "_avg"), + (23, "_bt"), + (24, "_b5"), + (26, "raw"), + (28, "_echo"), + ]: if id in [24, 26]: collapse_exclude = [0] else: @@ -513,32 +520,54 @@ def _reorg(dat): outdat["long_name"][ky + tag] = "Ensemble Number" outdat["standard_name"][ky + tag] = "number_of_observations" - for ky in ['vel', 'amp', 'corr', 'prcnt_gd', 'echo', 'dist', - 'orientmat', 'angrt', 'quaternions', 'pressure_alt', - 'le_dist_alt', 'le_quality_alt', 'status_alt', - 'ast_dist_alt', 'ast_quality_alt', 'ast_offset_time_alt', - 'nsamp_alt', 'dsamp_alt', 'samp_alt', - 'status0', 'fom', 'temp_press', 'press_std', - 'pitch_std', 'roll_std', 'heading_std', 'xmit_energy', - ]: + for ky in [ + "vel", + "amp", + "corr", + "prcnt_gd", + "echo", + "dist", + "orientmat", + "angrt", + "quaternions", + "pressure_alt", + "le_dist_alt", + "le_quality_alt", + "status_alt", + "ast_dist_alt", + "ast_quality_alt", + "ast_offset_time_alt", + "nsamp_alt", + "dsamp_alt", + "samp_alt", + "status0", + "fom", + "temp_press", + "press_std", + "pitch_std", + "roll_std", + "heading_std", + "xmit_energy", + ]: if ky in dnow: outdat["data_vars"][ky + tag] = dnow[ky] # Move 'altimeter raw' data to its own down-sampled structure if 26 in dat: - for ky in list(outdat['data_vars']): - if ky.endswith('raw') and not ky.endswith('_altraw'): - outdat['data_vars'].pop(ky) - outdat['coords']['time_altraw'] = outdat['coords'].pop('timeraw') - outdat['data_vars']['samp_altraw'] = outdat['data_vars']['samp_altraw'].astype('float32') / 2**8 # convert "signed fractional" to float + for ky in list(outdat["data_vars"]): + if ky.endswith("raw") and not ky.endswith("_altraw"): + outdat["data_vars"].pop(ky) + outdat["coords"]["time_altraw"] = outdat["coords"].pop("timeraw") + outdat["data_vars"]["samp_altraw"] = ( + outdat["data_vars"]["samp_altraw"].astype("float32") / 2**8 + ) # convert "signed fractional" to float # Read altimeter status - outdat['data_vars'].pop('status_altraw') - status_alt = lib._alt_status2data(outdat['data_vars']['status_alt']) + outdat["data_vars"].pop("status_altraw") + status_alt = lib._alt_status2data(outdat["data_vars"]["status_alt"]) for ky in status_alt: - outdat['attrs'][ky] = lib._collapse( - status_alt[ky].astype('uint8'), name=ky) - outdat['data_vars'].pop('status_alt') + outdat["attrs"][ky] = lib._collapse(status_alt[ky].astype("uint8"), name=ky) + outdat["data_vars"].pop("status_alt") # Power level index power = {0: "high", 1: "med-high", 2: "med-low", 3: "low"} @@ -625,9 +654,9 @@ def _reduce(data): averaging. """ - dv = data['data_vars'] - dc = data['coords'] - da = data['attrs'] + dv = data["data_vars"] + dc = data["coords"] + da = data["attrs"] # Average these fields for ky in ["c_sound", "temp", "pressure", "temp_press", "temp_clock", "batt"]: @@ -637,30 +666,30 @@ def _reduce(data): for ky in ["heading", "pitch", "roll"]: lib._reduce_by_average_angle(dv, ky, ky + "_b5") - if 'vel' in dv: - dc['range'] = ((np.arange(dv['vel'].shape[1])+1) * - da['cell_size'] + - da['blank_dist']) - da['fs'] = da['filehead_config']['BURST']['SR'] - tmat = da['filehead_config']['XFBURST'] - if 'vel_avg' in dv: - dc['range_avg'] = ((np.arange(dv['vel_avg'].shape[1])+1) * - da['cell_size_avg'] + - da['blank_dist_avg']) - dv['orientmat'] = dv.pop('orientmat_avg') - tmat = da['filehead_config']['XFAVG'] - da['fs'] = da['filehead_config']['PLAN']['MIAVG'] - da['avg_interval_sec'] = da['filehead_config']['AVG']['AI'] - da['bandwidth'] = da['filehead_config']['AVG']['BW'] - if 'vel_b5' in dv: - dc['range_b5'] = ((np.arange(dv['vel_b5'].shape[1])+1) * - da['cell_size_b5'] + - da['blank_dist_b5']) - if 'echo_echo' in dv: - dv['echo'] = dv.pop('echo_echo') - dc['range_echo'] = ((np.arange(dv['echo'].shape[0])+1) * - da['cell_size_echo'] + - da['blank_dist_echo']) + if "vel" in dv: + dc["range"] = (np.arange(dv["vel"].shape[1]) + 1) * da["cell_size"] + da[ + "blank_dist" + ] + da["fs"] = da["filehead_config"]["BURST"]["SR"] + tmat = da["filehead_config"]["XFBURST"] + if "vel_avg" in dv: + dc["range_avg"] = (np.arange(dv["vel_avg"].shape[1]) + 1) * da[ + "cell_size_avg" + ] + da["blank_dist_avg"] + dv["orientmat"] = dv.pop("orientmat_avg") + tmat = da["filehead_config"]["XFAVG"] + da["fs"] = da["filehead_config"]["PLAN"]["MIAVG"] + da["avg_interval_sec"] = da["filehead_config"]["AVG"]["AI"] + da["bandwidth"] = da["filehead_config"]["AVG"]["BW"] + if "vel_b5" in dv: + dc["range_b5"] = (np.arange(dv["vel_b5"].shape[1]) + 1) * da[ + "cell_size_b5" + ] + da["blank_dist_b5"] + if "echo_echo" in dv: + dv["echo"] = dv.pop("echo_echo") + dc["range_echo"] = (np.arange(dv["echo"].shape[0]) + 1) * da[ + "cell_size_echo" + ] + da["blank_dist_echo"] if "orientmat" in data["data_vars"]: da["has_imu"] = 1 # logical @@ -670,15 +699,15 @@ def _reduce(data): else: da["has_imu"] = 0 - theta = da['filehead_config']['BEAMCFGLIST'][0] - if 'THETA=' in theta: - da['beam_angle'] = int(theta[13:15]) + theta = da["filehead_config"]["BEAMCFGLIST"][0] + if "THETA=" in theta: + da["beam_angle"] = int(theta[13:15]) - tm = np.zeros((tmat['ROWS'], tmat['COLS']), dtype=np.float32) - for irow in range(tmat['ROWS']): - for icol in range(tmat['COLS']): - tm[irow, icol] = tmat['M' + str(irow + 1) + str(icol + 1)] - dv['beam2inst_orientmat'] = tm + tm = np.zeros((tmat["ROWS"], tmat["COLS"]), dtype=np.float32) + for irow in range(tmat["ROWS"]): + for icol in range(tmat["COLS"]): + tm[irow, icol] = tmat["M" + str(irow + 1) + str(icol + 1)] + dv["beam2inst_orientmat"] = tm # If burst velocity isn't used, need to copy one for 'time' if "time" not in dc: diff --git a/mhkit/dolfyn/io/nortek2_defs.py b/mhkit/dolfyn/io/nortek2_defs.py index c6d9e4fe0..4bc67019e 100644 --- a/mhkit/dolfyn/io/nortek2_defs.py +++ b/mhkit/dolfyn/io/nortek2_defs.py @@ -414,14 +414,27 @@ def _calc_bt_struct(config, nb): def _calc_echo_struct(config, nc): flags = lib._headconfig_int2dict(config) dd = copy(_burst_hdr) - dd[19] = ('blank_dist', 'H', [], _LinFunc(0.001)) # m - if any([flags[nm] for nm in ['vel', 'amp', 'corr', 'le', 'ast', - 'altraw', 'p_gd', 'std']]): + dd[19] = ("blank_dist", "H", [], _LinFunc(0.001)) # m + if any( + [ + flags[nm] + for nm in ["vel", "amp", "corr", "le", "ast", "altraw", "p_gd", "std"] + ] + ): raise Exception("Echosounder ping contains invalid data?") - if flags['echo']: - dd += [('echo', 'H', [nc], _LinFunc(0.01, dtype=dt32), 'dB', - 'Echo Sounder Acoustic Signal Backscatter', 'acoustic_target_strength_in_sea_water')] - if flags['ahrs']: + if flags["echo"]: + dd += [ + ( + "echo", + "H", + [nc], + _LinFunc(0.01, dtype=dt32), + "dB", + "Echo Sounder Acoustic Signal Backscatter", + "acoustic_target_strength_in_sea_water", + ) + ] + if flags["ahrs"]: dd += _ahrs_def return _DataDef(dd) @@ -431,41 +444,106 @@ def _calc_burst_struct(config, nb, nc): dd = copy(_burst_hdr) if flags["echo"]: raise Exception("Echosounder data found in velocity ping?") - if flags['vel']: - dd.append(('vel', 'h', [nb, nc], None, 'm s-1', 'Water Velocity')) - if flags['amp']: - dd.append(('amp', 'B', [nb, nc], _LinFunc(0.5, dtype=dt32), '1', 'Acoustic Signal Amplitude', - 'signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water')) - if flags['corr']: - dd.append(('corr', 'B', [nb, nc], None, '%', 'Acoustic Signal Correlation', - 'beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water')) - if flags['le']: + if flags["vel"]: + dd.append(("vel", "h", [nb, nc], None, "m s-1", "Water Velocity")) + if flags["amp"]: + dd.append( + ( + "amp", + "B", + [nb, nc], + _LinFunc(0.5, dtype=dt32), + "1", + "Acoustic Signal Amplitude", + "signal_intensity_from_multibeam_acoustic_doppler_velocity_sensor_in_sea_water", + ) + ) + if flags["corr"]: + dd.append( + ( + "corr", + "B", + [nb, nc], + None, + "%", + "Acoustic Signal Correlation", + "beam_consistency_indicator_from_multibeam_acoustic_doppler_velocity_profiler_in_sea_water", + ) + ) + if flags["le"]: # There may be a problem here with reading 32bit floats if # nb and nc are odd - dd += [('le_dist_alt', 'f', [], _LinFunc(dtype=dt32), 'm', 'Altimeter Range Leading Edge Algorithm', - 'altimeter_range'), - ('le_quality_alt', 'H', [], _LinFunc(0.01, dtype=dt32), 'dB', - 'Altimeter Quality Indicator Leading Edge Algorithm'), - ('status_alt', 'H', [], None, '1', 'Altimeter Status')] - if flags['ast']: dd += [ - ('ast_dist_alt', 'f', [], _LinFunc(dtype=dt32), 'm', 'Altimeter Range Acoustic Surface Tracking', - 'altimeter_range'), - ('ast_quality_alt', 'H', [], _LinFunc(0.01, dtype=dt32), 'dB', - 'Altimeter Quality Indicator Acoustic Surface Tracking'), - ('ast_offset_time_alt', 'h', [], _LinFunc(0.0001, dtype=dt32), - 's', 'Acoustic Surface Tracking Time Offset to Velocity Ping'), - ('pressure_alt', 'f', [], None, 'dbar', 'Pressure measured during AST ping', - 'sea_water_pressure'), + ( + "le_dist_alt", + "f", + [], + _LinFunc(dtype=dt32), + "m", + "Altimeter Range Leading Edge Algorithm", + "altimeter_range", + ), + ( + "le_quality_alt", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "dB", + "Altimeter Quality Indicator Leading Edge Algorithm", + ), + ("status_alt", "H", [], None, "1", "Altimeter Status"), + ] + if flags["ast"]: + dd += [ + ( + "ast_dist_alt", + "f", + [], + _LinFunc(dtype=dt32), + "m", + "Altimeter Range Acoustic Surface Tracking", + "altimeter_range", + ), + ( + "ast_quality_alt", + "H", + [], + _LinFunc(0.01, dtype=dt32), + "dB", + "Altimeter Quality Indicator Acoustic Surface Tracking", + ), + ( + "ast_offset_time_alt", + "h", + [], + _LinFunc(0.0001, dtype=dt32), + "s", + "Acoustic Surface Tracking Time Offset to Velocity Ping", + ), + ( + "pressure_alt", + "f", + [], + None, + "dbar", + "Pressure measured during AST ping", + "sea_water_pressure", + ), # This use of 'x' here is a hack - ('spare', 'B7x', [], None), + ("spare", "B7x", [], None), ] - if flags['altraw']: + if flags["altraw"]: dd += [ - ('nsamp_alt', 'I', [], None, '1', 'Number of Altimeter Samples'), - ('dsamp_alt', 'H', [], _LinFunc(0.0001, dtype=dt32), 'm', - 'Altimeter Distance between Samples'), - ('samp_alt', 'h', [], None, '1', 'Altimeter Samples'), + ("nsamp_alt", "I", [], None, "1", "Number of Altimeter Samples"), + ( + "dsamp_alt", + "H", + [], + _LinFunc(0.0001, dtype=dt32), + "m", + "Altimeter Distance between Samples", + ), + ("samp_alt", "h", [], None, "1", "Altimeter Samples"), ] if flags["alt_raw"]: dd += [ diff --git a/mhkit/dolfyn/io/nortek2_lib.py b/mhkit/dolfyn/io/nortek2_lib.py index 95859611e..30f747991 100644 --- a/mhkit/dolfyn/io/nortek2_lib.py +++ b/mhkit/dolfyn/io/nortek2_lib.py @@ -109,13 +109,12 @@ def _calc_time(year, month, day, hour, minute, second, usec, zero_is_bad=True): def _create_index(infile, outfile, N_ens, debug): logging = getLogger() - print("Indexing {}...".format(infile), end='') - fin = open(_abspath(infile), 'rb') - fout = open(_abspath(outfile), 'wb') - fout.write(b'Index Ver:') - fout.write(struct.pack(' Date: Fri, 26 Jan 2024 10:14:14 -0700 Subject: [PATCH 47/87] remove debug --- mhkit/tests/dolfyn/test_tools.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index 8b1b7b0b2..dee4642d9 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -270,9 +270,6 @@ def test_fft_frequency(self): positive_freqs = freq_full[1 : int(nfft / 2)] negative_freqs = freq_full[int(nfft / 2) + 1 :] assert_allclose(positive_freqs, -negative_freqs[::-1]) - import ipdb - - ipdb.set_trace() # Test for half frequency range # TODO Fix based on james response freq_half = tools.fft.fft_frequency(nfft, fs, full=False) From eb4b89654faa64ea063e01b1a42f79c181cffb33 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 26 Jan 2024 10:22:46 -0700 Subject: [PATCH 48/87] black v24.1.0 --- examples/extreme_response_contour_example.ipynb | 4 +--- examples/extreme_response_full_sea_state_example.ipynb | 4 +--- mhkit/dolfyn/adp/clean.py | 1 + mhkit/dolfyn/adv/clean.py | 1 + mhkit/dolfyn/adv/turbulence.py | 3 +-- mhkit/dolfyn/io/nortek.py | 8 ++++---- mhkit/mooring/io.py | 1 + mhkit/tests/tidal/test_io.py | 1 + mhkit/tests/utils/test_cache.py | 1 + mhkit/tests/wave/io/hindcast/test_hindcast.py | 1 + mhkit/tidal/io/noaa.py | 1 + mhkit/utils/cache.py | 1 + mhkit/utils/upcrossing.py | 1 + mhkit/wave/contours.py | 4 +--- mhkit/wave/io/hindcast/hindcast.py | 1 + mhkit/wave/io/hindcast/wind_toolkit.py | 1 + mhkit/wave/io/wecsim.py | 6 +++--- 17 files changed, 22 insertions(+), 18 deletions(-) diff --git a/examples/extreme_response_contour_example.ipynb b/examples/extreme_response_contour_example.ipynb index 7695ebbd9..a716aa102 100644 --- a/examples/extreme_response_contour_example.ipynb +++ b/examples/extreme_response_contour_example.ipynb @@ -218,9 +218,7 @@ "i = 0\n", "n = len(hs_samples)\n", "for hs, te in zip(hs_samples, te_samples):\n", - " tp = te / (\n", - " 0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3\n", - " )\n", + " tp = te / (0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3)\n", " i += 1\n", " print(f\"Sea state {i}/{n}. (Hs, Te) = ({hs} m, {te} s). Tp = {tp} s\")\n", " # time & frequency arrays\n", diff --git a/examples/extreme_response_full_sea_state_example.ipynb b/examples/extreme_response_full_sea_state_example.ipynb index fab9b1535..28cf6c745 100644 --- a/examples/extreme_response_full_sea_state_example.ipynb +++ b/examples/extreme_response_full_sea_state_example.ipynb @@ -438,9 +438,7 @@ "i = 0\n", "n = len(sample_hs)\n", "for hs, te in zip(sample_hs, sample_te):\n", - " tp = te / (\n", - " 0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3\n", - " )\n", + " tp = te / (0.8255 + 0.03852 * gamma - 0.005537 * gamma**2 + 0.0003154 * gamma**3)\n", " i += 1\n", " print(f\"Sea state {i}/{n}. (Hs, Te) = ({hs} m, {te} s). Tp = {tp} s\")\n", " # time & frequency arrays\n", diff --git a/mhkit/dolfyn/adp/clean.py b/mhkit/dolfyn/adp/clean.py index 25d3b2df5..e89124d11 100644 --- a/mhkit/dolfyn/adp/clean.py +++ b/mhkit/dolfyn/adp/clean.py @@ -1,5 +1,6 @@ """Module containing functions to clean data """ + import numpy as np import xarray as xr from scipy.signal import medfilt diff --git a/mhkit/dolfyn/adv/clean.py b/mhkit/dolfyn/adv/clean.py index 5843a7ed5..7bf95d46a 100644 --- a/mhkit/dolfyn/adv/clean.py +++ b/mhkit/dolfyn/adv/clean.py @@ -1,5 +1,6 @@ """Module containing functions to clean data """ + import numpy as np import warnings from ..velocity import VelBinner diff --git a/mhkit/dolfyn/adv/turbulence.py b/mhkit/dolfyn/adv/turbulence.py index bfc3e6d75..4e231cc33 100644 --- a/mhkit/dolfyn/adv/turbulence.py +++ b/mhkit/dolfyn/adv/turbulence.py @@ -518,8 +518,7 @@ 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, ) diff --git a/mhkit/dolfyn/io/nortek.py b/mhkit/dolfyn/io/nortek.py index 897fce3c2..1a829bbea 100644 --- a/mhkit/dolfyn/io/nortek.py +++ b/mhkit/dolfyn/io/nortek.py @@ -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"] diff --git a/mhkit/mooring/io.py b/mhkit/mooring/io.py index 9e2e4d174..a85c92358 100644 --- a/mhkit/mooring/io.py +++ b/mhkit/mooring/io.py @@ -16,6 +16,7 @@ dataset = read_moordyn(filepath="FAST.MD.out", input_file="FAST.MD.input") """ + import os import pandas as pd diff --git a/mhkit/tests/tidal/test_io.py b/mhkit/tests/tidal/test_io.py index 09060daa9..eb870e75d 100644 --- a/mhkit/tests/tidal/test_io.py +++ b/mhkit/tests/tidal/test_io.py @@ -12,6 +12,7 @@ - Requesting NOAA data with invalid date format - Requesting NOAA data with the end date before the start date """ + from os.path import abspath, dirname, join, normpath, relpath import unittest import os diff --git a/mhkit/tests/utils/test_cache.py b/mhkit/tests/utils/test_cache.py index cfb2c0053..14aae0802 100644 --- a/mhkit/tests/utils/test_cache.py +++ b/mhkit/tests/utils/test_cache.py @@ -29,6 +29,7 @@ Author: ssolson Date: 2023-08-18 """ + import unittest import hashlib import tempfile diff --git a/mhkit/tests/wave/io/hindcast/test_hindcast.py b/mhkit/tests/wave/io/hindcast/test_hindcast.py index d4707ba41..73c57a2dd 100644 --- a/mhkit/tests/wave/io/hindcast/test_hindcast.py +++ b/mhkit/tests/wave/io/hindcast/test_hindcast.py @@ -22,6 +22,7 @@ Run the script directly as a standalone program, or import the TestWPTOhindcast class in another test suite. """ + import unittest from os.path import abspath, dirname, join, normpath from pandas.testing import assert_frame_equal diff --git a/mhkit/tidal/io/noaa.py b/mhkit/tidal/io/noaa.py index e7e044305..a3236ac9f 100644 --- a/mhkit/tidal/io/noaa.py +++ b/mhkit/tidal/io/noaa.py @@ -23,6 +23,7 @@ Reads a JSON file containing NOAA data saved from the request_noaa_data function and returns a DataFrame with timeseries site data and metadata. """ + import os import xml.etree.ElementTree as ET import datetime diff --git a/mhkit/utils/cache.py b/mhkit/utils/cache.py index 410ab9c85..423a12757 100644 --- a/mhkit/utils/cache.py +++ b/mhkit/utils/cache.py @@ -38,6 +38,7 @@ Author: ssolson Date: 2023-09-26 """ + import hashlib import json import os diff --git a/mhkit/utils/upcrossing.py b/mhkit/utils/upcrossing.py index 9c4c3eba8..5993d6544 100644 --- a/mhkit/utils/upcrossing.py +++ b/mhkit/utils/upcrossing.py @@ -33,6 +33,7 @@ """ + import numpy as np diff --git a/mhkit/wave/contours.py b/mhkit/wave/contours.py index e9331ecde..2a3808759 100644 --- a/mhkit/wave/contours.py +++ b/mhkit/wave/contours.py @@ -1194,9 +1194,7 @@ def _rosenblatt_copula(x1, x2, fit, component_1, kwargs): + mean_cond[3] * component_1**3 ) # Standard deviation of Ln(x2) as a function of x1 - sigma_cond = ( - std_cond[0] + std_cond[1] * component_1 + std_cond[2] * component_1**2 - ) + sigma_cond = std_cond[0] + std_cond[1] * component_1 + std_cond[2] * component_1**2 # lognormal inverse component_2_Rosenblatt = stats.lognorm.ppf( y_quantile, s=sigma_cond, loc=0, scale=np.exp(lamda_cond) diff --git a/mhkit/wave/io/hindcast/hindcast.py b/mhkit/wave/io/hindcast/hindcast.py index 8f8eebef5..4052745e9 100644 --- a/mhkit/wave/io/hindcast/hindcast.py +++ b/mhkit/wave/io/hindcast/hindcast.py @@ -28,6 +28,7 @@ Author: rpauly, aidanbharath, ssolson Date: 2023-09-26 """ + import os import sys from time import sleep diff --git a/mhkit/wave/io/hindcast/wind_toolkit.py b/mhkit/wave/io/hindcast/wind_toolkit.py index 1404a6cd0..19a5163d1 100644 --- a/mhkit/wave/io/hindcast/wind_toolkit.py +++ b/mhkit/wave/io/hindcast/wind_toolkit.py @@ -52,6 +52,7 @@ 2023-09-26 """ + import os import hashlib import pickle diff --git a/mhkit/wave/io/wecsim.py b/mhkit/wave/io/wecsim.py index a504ad6c6..662311e18 100644 --- a/mhkit/wave/io/wecsim.py +++ b/mhkit/wave/io/wecsim.py @@ -270,9 +270,9 @@ def _write_constraint_output(constraint): if num_constraints == 1: constraint_output = _write_constraint_output(constraint) elif num_constraints > 1: - constraint_output[ - f"constraint{constraint+1}" - ] = _write_constraint_output(constraint) + constraint_output[f"constraint{constraint+1}"] = ( + _write_constraint_output(constraint) + ) else: print("constraint class not used") constraint_output = [] From af9d191888e218491cdeff0bbdf4cdae91b93978 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 29 Jan 2024 08:33:52 -0700 Subject: [PATCH 49/87] fix implementation from #284 --- mhkit/dolfyn/tools/fft.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/mhkit/dolfyn/tools/fft.py b/mhkit/dolfyn/tools/fft.py index 16d5ede7f..a23874ccf 100644 --- a/mhkit/dolfyn/tools/fft.py +++ b/mhkit/dolfyn/tools/fft.py @@ -33,14 +33,23 @@ def fft_frequency(nfft, fs, full=False): def _getwindow(window, nfft): - if "hann" in window: - window = np.hanning(nfft) - elif "hamm" in window: - window = np.hamming(nfft) - elif window is None or np.sum(window == 1): + if window is None: window = np.ones(nfft) - if len(window) != nfft: - raise ValueError("Custom window length must be equal to nfft") + elif isinstance(window, (int, float)) and window == 1: + window = np.ones(nfft) + elif isinstance(window, str): + if "hann" in window: + window = np.hanning(nfft) + elif "hamm" in window: + window = np.hamming(nfft) + else: + raise ValueError("Unsupported window type: {}".format(window)) + elif isinstance(window, np.ndarray): + if len(window) != nfft: + raise ValueError("Custom window length must be equal to nfft") + else: + raise ValueError("Invalid window parameter") + return window From 08182e0945d33291669191934b32e9f0b2bc3b20 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 29 Jan 2024 08:34:09 -0700 Subject: [PATCH 50/87] finalize tests for `cpsd_quasisync_1D` --- mhkit/tests/dolfyn/test_tools.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index dee4642d9..2bc0f9231 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -327,10 +327,9 @@ def test_cpsd_quasisync_1D(self): self.assertEqual(cpsd.shape, (nfft // 2,)) # Test with a custom window - # TODO Fix based on james response - # custom_window = np.hamming(nfft) - # cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs, window=custom_window) - # self.assertEqual(cpsd.shape, (nfft // 2,)) + custom_window = np.hamming(nfft) + cpsd = tools.fft.cpsd_quasisync_1D(a, b, nfft, fs, window=custom_window) + self.assertEqual(cpsd.shape, (nfft // 2,)) if __name__ == "__main__": From 93278f3c5424e6ab1e2d4fc21532c1332d588d8c Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 29 Jan 2024 08:42:26 -0700 Subject: [PATCH 51/87] black --- mhkit/dolfyn/tools/fft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mhkit/dolfyn/tools/fft.py b/mhkit/dolfyn/tools/fft.py index a23874ccf..7d8c08503 100644 --- a/mhkit/dolfyn/tools/fft.py +++ b/mhkit/dolfyn/tools/fft.py @@ -49,7 +49,7 @@ def _getwindow(window, nfft): raise ValueError("Custom window length must be equal to nfft") else: raise ValueError("Invalid window parameter") - + return window From 41e3a42e3dea32b6818cb0775dc835c93151d30c Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 30 Jan 2024 09:53:53 -0700 Subject: [PATCH 52/87] remove "alt_raw" merge artifact --- mhkit/dolfyn/io/nortek2_defs.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/mhkit/dolfyn/io/nortek2_defs.py b/mhkit/dolfyn/io/nortek2_defs.py index 4bc67019e..c6a2e5ece 100644 --- a/mhkit/dolfyn/io/nortek2_defs.py +++ b/mhkit/dolfyn/io/nortek2_defs.py @@ -545,19 +545,6 @@ def _calc_burst_struct(config, nb, nc): ), ("samp_alt", "h", [], None, "1", "Altimeter Samples"), ] - if flags["alt_raw"]: - dd += [ - ("altraw_nsamp", "I", [], None, "1", "Number of Altimeter Samples"), - ( - "altraw_dsamp", - "H", - [], - _LinFunc(0.0001, dtype=dt32), - "m", - "Altimeter Distance between Samples", - ), - ("altraw_samp", "h", [], None), - ] if flags["ahrs"]: dd += _ahrs_def if flags["p_gd"]: From 16832d09142e099a14ae2dff80ed4663747462d5 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 30 Jan 2024 11:08:01 -0700 Subject: [PATCH 53/87] remove positive frequencies test --- mhkit/tests/dolfyn/test_tools.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index 2bc0f9231..0020e4b29 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -270,11 +270,7 @@ def test_fft_frequency(self): positive_freqs = freq_full[1 : int(nfft / 2)] negative_freqs = freq_full[int(nfft / 2) + 1 :] assert_allclose(positive_freqs, -negative_freqs[::-1]) - # Test for half frequency range - # TODO Fix based on james response - freq_half = tools.fft.fft_frequency(nfft, fs, full=False) - # assert_equal(len(freq_half), int(nfft / 2) - 1) - # assert_allclose(freq_half, positive_freqs) # Ignore the zero frequency + def test_stepsize(self): # Case 1: l < nfft From 434c78f2e27f4c813a846eff10d28ce270141c77 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 30 Jan 2024 11:11:46 -0700 Subject: [PATCH 54/87] black formatting --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 3e21cb02a..15e9483a7 100644 --- a/README.md +++ b/README.md @@ -92,3 +92,15 @@ The GitHub platform has the pull request feature that allows you to propose chan 7. If you want to allow anyone with push access to the upstream repository to make changes to your pull request, select **Allow edits from maintainers**. 8. To create a pull request that is ready for review, click **Create Pull Request**. To create a draft pull request, use the drop-down and select **Create Draft Pull Request**, then click **Draft Pull Request**. More information about draft pull requests can be found [here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests) 9. MHKiT-Python adminstrators will review your pull request and contact you if needed. + +## Code Formatting in MHKiT + +MHKiT adheres to the "black" code formatting standard to maintain a consistent and readable code style. Developers contributing to MHKiT have several options to ensure their code meets this standard: + +1. **Manual Formatting with Black**: Install the 'black' formatter and run it manually from the terminal to format your code. This can be done by executing a command like `black [file or directory]`. + +2. **IDE Extension**: If you are using an Integrated Development Environment (IDE) like Visual Studio Code (VS Code), you can install the 'black' formatter as an extension. This allows for automatic formatting of code within the IDE. + +3. **Pre-Commit Hook**: Enable the pre-commit hook in your development environment. This automatically formats your code with 'black' each time you make a commit, ensuring that all committed code conforms to the formatting standard. + +For detailed instructions on installing and using 'black', please refer to the [Black Documentation](https://black.readthedocs.io/en/stable/). This resource provides comprehensive guidance on installation, usage, and configuration of the formatter. From c771f2458b24b71f078a679b8cbd7134d4ad8483 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 30 Jan 2024 11:13:23 -0700 Subject: [PATCH 55/87] black --- mhkit/tests/dolfyn/test_tools.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mhkit/tests/dolfyn/test_tools.py b/mhkit/tests/dolfyn/test_tools.py index 0020e4b29..6aaa10a9c 100644 --- a/mhkit/tests/dolfyn/test_tools.py +++ b/mhkit/tests/dolfyn/test_tools.py @@ -271,7 +271,6 @@ def test_fft_frequency(self): negative_freqs = freq_full[int(nfft / 2) + 1 :] assert_allclose(positive_freqs, -negative_freqs[::-1]) - def test_stepsize(self): # Case 1: l < nfft step, nens, nfft = tools.fft._stepsize(100, 200) From c2513a77d0894d1505ce0ede091bbea9e402eb72 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 30 Jan 2024 14:56:54 -0700 Subject: [PATCH 56/87] black --- examples/power_example.ipynb | 10 +- mhkit/power/characteristics.py | 160 ++++++++++++++++------------ mhkit/power/quality.py | 181 ++++++++++++++++++-------------- mhkit/tests/power/test_power.py | 134 ++++++++++++----------- 4 files changed, 266 insertions(+), 219 deletions(-) diff --git a/examples/power_example.ipynb b/examples/power_example.ipynb index c3bc1ceb1..8997df4ab 100644 --- a/examples/power_example.ipynb +++ b/examples/power_example.ipynb @@ -151,10 +151,12 @@ ], "source": [ "# Read in time-series data of voltage (V) and current (I)\n", - "power_data = pd.read_csv('data/power/2020224_181521_PowRaw.csv',skip_blank_lines=True,index_col='Time_UTC')\n", + "power_data = pd.read_csv(\n", + " \"data/power/2020224_181521_PowRaw.csv\", skip_blank_lines=True, index_col=\"Time_UTC\"\n", + ")\n", "\n", "# Convert the time index to type \"datetime\"\n", - "power_data.index=pd.to_datetime(power_data.index)\n", + "power_data.index = pd.to_datetime(power_data.index)\n", "\n", "# Display the data\n", "power_data.head()" @@ -498,8 +500,8 @@ } ], "source": [ - "# Finally we can compute the total harmonic current distortion as a percentage \n", - "THCD = power.quality.total_harmonic_current_distortion(h_s) \n", + "# Finally we can compute the total harmonic current distortion as a percentage\n", + "THCD = power.quality.total_harmonic_current_distortion(h_s)\n", "THCD" ] } diff --git a/mhkit/power/characteristics.py b/mhkit/power/characteristics.py index eb511df22..d9ca8ec39 100644 --- a/mhkit/power/characteristics.py +++ b/mhkit/power/characteristics.py @@ -3,9 +3,8 @@ import numpy as np from scipy.signal import hilbert -def instantaneous_frequency(um, time_dimension="", to_pandas=True): -def instantaneous_frequency(um): +def instantaneous_frequency(um, time_dimension="", to_pandas=True): """ Calculates instantaneous frequency of measured voltage @@ -15,7 +14,7 @@ def instantaneous_frequency(um): Measured voltage (V) indexed by time time_dimension: string (optional) - Name of the xarray dimension corresponding to time. If not supplied, + Name of the xarray dimension corresponding to time. If not supplied, defaults to the first dimension. Does not affect pandas input. to_pandas: bool (Optional) @@ -26,23 +25,27 @@ def instantaneous_frequency(um): frequency: pandas DataFrame or xarray Dataset Frequency of the measured voltage (Hz) indexed by time with signal name columns - """ + """ if not isinstance(um, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('um must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(um)}') - if not isinstance(to_pandas, bool): raise TypeError( - f'to_pandas must be of type bool. Got: {type(to_pandas)}') + "um must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(um)}" + ) + if not isinstance(to_pandas, bool): + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") if not isinstance(time_dimension, str): raise TypeError( - f'time_dimension must be of type bool. Got: {type(time_dimension)}') + f"time_dimension must be of type bool. Got: {type(time_dimension)}" + ) # Convert input to xr.Dataset - um = _convert_to_dataset(um, 'data') - - if time_dimension != '' and time_dimension not in um.coords: - raise ValueError('time_dimension was supplied but is not a dimension ' - + f'of um. Got {time_dimension}') + um = _convert_to_dataset(um, "data") + + if time_dimension != "" and time_dimension not in um.coords: + raise ValueError( + "time_dimension was supplied but is not a dimension " + + f"of um. Got {time_dimension}" + ) # Get the dimension of interest if time_dimension == "": @@ -50,7 +53,9 @@ def instantaneous_frequency(um): # Calculate time step if isinstance(um.coords[time_dimension].values[0], np.datetime64): - t = (um[time_dimension] - np.datetime64('1970-01-01 00:00:00'))/np.timedelta64(1, 's') + t = ( + um[time_dimension] - np.datetime64("1970-01-01 00:00:00") + ) / np.timedelta64(1, "s") else: t = um[time_dimension] dt = np.diff(t) @@ -60,16 +65,21 @@ def instantaneous_frequency(um): for var in um.data_vars: f = hilbert(um[var]) instantaneous_phase = np.unwrap(np.angle(f)) - instantaneous_frequency = np.diff(instantaneous_phase)/(2.0*np.pi) * (1/dt) + instantaneous_frequency = ( + np.diff(instantaneous_phase) / (2.0 * np.pi) * (1 / dt) + ) frequency = frequency.assign({var: (time_dimension, instantaneous_frequency)}) - frequency = frequency.assign_coords({time_dimension: um.coords[time_dimension].values[0:-1]}) + frequency = frequency.assign_coords( + {time_dimension: um.coords[time_dimension].values[0:-1]} + ) if to_pandas: frequency = frequency.to_pandas() return frequency + def dc_power(voltage, current, to_pandas=True): """ Calculates DC power from voltage and current @@ -91,43 +101,54 @@ def dc_power(voltage, current, to_pandas=True): DC power [W] from each channel and gross power indexed by time """ if not isinstance(voltage, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('voltage must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(voltage)}') + raise TypeError( + "voltage must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(voltage)}" + ) if not isinstance(current, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('current must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(current)}') - if not isinstance(to_pandas, bool): raise TypeError( - f'to_pandas must be of type bool. Got: {type(to_pandas)}') + "current must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(current)}" + ) + if not isinstance(to_pandas, bool): + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") # Convert inputs to xr.Dataset - voltage = _convert_to_dataset(voltage, 'voltage') - current = _convert_to_dataset(current, 'current') + voltage = _convert_to_dataset(voltage, "voltage") + current = _convert_to_dataset(current, "current") # Check that sizes are the same - if not (voltage.sizes == current.sizes and len(voltage.data_vars) == len(current.data_vars)): - raise ValueError('current and voltage must have the same shape') + if not ( + voltage.sizes == current.sizes + and len(voltage.data_vars) == len(current.data_vars) + ): + raise ValueError("current and voltage must have the same shape") P = xr.Dataset() gross = None - + # Multiply current and voltage variables together, in order they're assigned - for i, (current_var, voltage_var) in enumerate(zip(current.data_vars,voltage.data_vars)): - temp = current[current_var]*voltage[voltage_var] - P = P.assign({f'{i}': temp}) + for i, (current_var, voltage_var) in enumerate( + zip(current.data_vars, voltage.data_vars) + ): + temp = current[current_var] * voltage[voltage_var] + P = P.assign({f"{i}": temp}) if gross is None: gross = temp else: gross = gross + temp - P = P.assign({'Gross': gross}) + P = P.assign({"Gross": gross}) if to_pandas: P = P.to_dataframe() return P -def ac_power_three_phase(voltage, current, power_factor, line_to_line=False, to_pandas=True): + +def ac_power_three_phase( + voltage, current, power_factor, line_to_line=False, to_pandas=True +): """ Calculates magnitude of active AC power from line to neutral voltage and current @@ -139,7 +160,7 @@ def ac_power_three_phase(voltage, current, power_factor, line_to_line=False, to_ current: pandas Series, pandas DataFrame, xarray DataArray, or xarray Dataset Measured three phase current [A] indexed by time - power_factor: float + power_factor: float Power factor for the efficiency of the system line_to_line: bool (Optional) @@ -151,36 +172,40 @@ def ac_power_three_phase(voltage, current, power_factor, line_to_line=False, to_ Returns -------- P: pandas DataFrame or xarray Dataset - Magnitude of active AC power [W] indexed by time with Power column + Magnitude of active AC power [W] indexed by time with Power column """ if not isinstance(voltage, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('voltage must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(voltage)}') + raise TypeError( + "voltage must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(voltage)}" + ) if not isinstance(current, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('current must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(current)}') - if not isinstance(line_to_line, bool): raise TypeError( - f'line_to_line must be of type bool. Got: {type(line_to_line)}') + "current must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(current)}" + ) + if not isinstance(line_to_line, bool): + raise TypeError(f"line_to_line must be of type bool. Got: {type(line_to_line)}") if not isinstance(to_pandas, bool): - raise TypeError( - f'to_pandas must be of type bool. Got: {type(to_pandas)}') + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") # Convert inputs to xr.Dataset - voltage = _convert_to_dataset(voltage, 'voltage') - current = _convert_to_dataset(current, 'current') + voltage = _convert_to_dataset(voltage, "voltage") + current = _convert_to_dataset(current, "current") # Check that sizes are the same if not len(voltage.data_vars) == 3: - raise ValueError('voltage must have three columns') + raise ValueError("voltage must have three columns") if not len(current.data_vars) == 3: - raise ValueError('current must have three columns') + raise ValueError("current must have three columns") if not current.sizes == voltage.sizes: - raise ValueError('current and voltage must be of the same size') + raise ValueError("current and voltage must be of the same size") - power = dc_power(voltage, current, to_pandas=False)['Gross'] - power.name = 'Power' - power = power.to_dataset() # force xr.DataArray to be consistently in xr.Dataset format + power = dc_power(voltage, current, to_pandas=False)["Gross"] + power.name = "Power" + power = ( + power.to_dataset() + ) # force xr.DataArray to be consistently in xr.Dataset format P = np.abs(power) * power_factor if line_to_line: @@ -191,60 +216,65 @@ def ac_power_three_phase(voltage, current, power_factor, line_to_line=False, to_ return P -def _convert_to_dataset(data, name='data'): + +def _convert_to_dataset(data, name="data"): """ Converts the given data to an xarray.Dataset. - + This function is designed to handle inputs that can be either a pandas DataFrame, a pandas Series, an xarray DataArray, or an xarray Dataset. It ensures that the output is consistently an xarray.Dataset. - + Parameters ---------- data: pandas DataFrame, pandas Series, xarray DataArray, or xarray Dataset - The data to be converted. - + The data to be converted. + name: str (Optional) The name to assign to the data variable in case the input is an xarray DataArray without a name. Default value is 'data'. - + Returns ------- xarray.Dataset The input data converted to an xarray.Dataset. If the input is already an xarray.Dataset, it is returned as is. - + Examples -------- >>> df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) >>> ds = _convert_to_dataset(df) >>> type(ds) - + >>> series = pd.Series([1, 2, 3], name='C') >>> ds = _convert_to_dataset(series) >>> type(ds) - + >>> data_array = xr.DataArray([1, 2, 3]) >>> ds = _convert_to_dataset(data_array, name='D') >>> type(ds) """ if not isinstance(data, (pd.DataFrame, pd.Series, xr.DataArray, xr.Dataset)): - raise TypeError("Input data must be of type pandas.DataFrame, pandas.Series, " - "xarray.DataArray, or xarray.Dataset") + raise TypeError( + "Input data must be of type pandas.DataFrame, pandas.Series, " + "xarray.DataArray, or xarray.Dataset" + ) if not isinstance(name, str): - raise TypeError("The 'name' parameter must be a string") + raise TypeError("The 'name' parameter must be a string") - # Takes data that could be pd.DataFrame, pd.Series, xr.DataArray, or + # Takes data that could be pd.DataFrame, pd.Series, xr.DataArray, or # xr.Dataset and converts it to xr.Dataset if isinstance(data, (pd.DataFrame, pd.Series)): data = data.to_xarray() if isinstance(data, xr.DataArray): if data.name is None: - data.name = name # xr.DataArray.to_dataset() breaks if the data variable is unnamed + data.name = ( + name # xr.DataArray.to_dataset() breaks if the data variable is unnamed + ) data = data.to_dataset() return data diff --git a/mhkit/power/quality.py b/mhkit/power/quality.py index 87f4111b5..2421fac3a 100644 --- a/mhkit/power/quality.py +++ b/mhkit/power/quality.py @@ -4,6 +4,7 @@ import xarray as xr from .characteristics import _convert_to_dataset + # This group of functions are to be used for power quality assessments def harmonics(x, freq, grid_freq, to_pandas=True): """ @@ -26,49 +27,50 @@ def harmonics(x, freq, grid_freq, to_pandas=True): Returns -------- harmonics: pandas DataFrame or xarray Dataset - Amplitude of the time-series data harmonics indexed by the harmonic + Amplitude of the time-series data harmonics indexed by the harmonic frequency with signal name columns """ if not isinstance(x, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('x must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(x)}') + raise TypeError( + "x must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(x)}" + ) if not isinstance(freq, (float, int)): - raise TypeError(f'freq must be of type float or integer. Got {type(freq)}') + raise TypeError(f"freq must be of type float or integer. Got {type(freq)}") if grid_freq not in [50, 60]: - raise ValueError(f'grid_freq must be either 50 or 60. Got {grid_freq}') + raise ValueError(f"grid_freq must be either 50 or 60. Got {grid_freq}") if not isinstance(to_pandas, bool): - raise TypeError( - f'to_pandas must be of type bool. Got {type(to_pandas)}') + raise TypeError(f"to_pandas must be of type bool. Got {type(to_pandas)}") # Convert input to xr.Dataset - x = _convert_to_dataset(x, 'data') + x = _convert_to_dataset(x, "data") + + sample_spacing = 1.0 / freq - sample_spacing = 1./freq - # Loop through all variables in x harmonics = xr.Dataset() for var in x.data_vars: dataarray = x[var] dataarray = dataarray.to_numpy() - + frequency_bin_centers = fftpack.fftfreq(len(dataarray), d=sample_spacing) harmonics_amplitude = np.abs(np.fft.fft(dataarray, axis=0)) - - harmonics = harmonics.assign({var: (['frequency'], harmonics_amplitude)}) - harmonics = harmonics.assign_coords({'frequency': frequency_bin_centers}) - harmonics = harmonics.sortby('frequency') + + harmonics = harmonics.assign({var: (["frequency"], harmonics_amplitude)}) + harmonics = harmonics.assign_coords({"frequency": frequency_bin_centers}) + harmonics = harmonics.sortby("frequency") if grid_freq == 60: hz = np.arange(0, 3060, 5) elif grid_freq == 50: hz = np.arange(0, 2570, 5) - harmonics = harmonics.reindex({'frequency': hz}, method='nearest') - harmonics = harmonics/len(x[var])*2 - + harmonics = harmonics.reindex({"frequency": hz}, method="nearest") + harmonics = harmonics / len(x[var]) * 2 + if to_pandas: harmonics = harmonics.to_pandas() @@ -82,13 +84,13 @@ def harmonic_subgroups(harmonics, grid_freq, frequency_dimension="", to_pandas=T Parameters ---------- harmonics: pandas Series, pandas DataFrame, xarray DataArray, or xarray Dataset - Harmonic amplitude indexed by the harmonic frequency + Harmonic amplitude indexed by the harmonic frequency grid_freq: int Value indicating if the power supply is 50 or 60 Hz. Options = 50 or 60 frequency_dimension: string (optional) - Name of the xarray dimension corresponding to frequency. If not supplied, + Name of the xarray dimension corresponding to frequency. If not supplied, defaults to the first dimension. Does not affect pandas input. to_pandas: bool (Optional) @@ -97,56 +99,60 @@ def harmonic_subgroups(harmonics, grid_freq, frequency_dimension="", to_pandas=T Returns -------- harmonic_subgroups: pandas DataFrame or xarray Dataset - Harmonic subgroups indexed by harmonic frequency + Harmonic subgroups indexed by harmonic frequency with signal name columns """ if not isinstance(harmonics, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('harmonics must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(harmonics)}') - + raise TypeError( + "harmonics must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(harmonics)}" + ) + if grid_freq not in [50, 60]: - raise ValueError(f'grid_freq must be either 50 or 60. Got {grid_freq}') + raise ValueError(f"grid_freq must be either 50 or 60. Got {grid_freq}") if not isinstance(to_pandas, bool): - raise TypeError( - f'to_pandas must be of type bool. Got: {type(to_pandas)}') + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") if not isinstance(frequency_dimension, str): raise TypeError( - f'frequency_dimension must be of type bool. Got: {type(frequency_dimension)}') + f"frequency_dimension must be of type bool. Got: {type(frequency_dimension)}" + ) # Convert input to xr.Dataset - harmonics = _convert_to_dataset(harmonics, 'harmonics') - - if frequency_dimension != '' and frequency_dimension not in harmonics.coords: - raise ValueError('frequency_dimension was supplied but is not a dimension ' - + f'of harmonics. Got {frequency_dimension}') + harmonics = _convert_to_dataset(harmonics, "harmonics") + + if frequency_dimension != "" and frequency_dimension not in harmonics.coords: + raise ValueError( + "frequency_dimension was supplied but is not a dimension " + + f"of harmonics. Got {frequency_dimension}" + ) if grid_freq == 60: hz = np.arange(0, 3060, 60) else: hz = np.arange(0, 2550, 50) - + # Sort input data index if frequency_dimension == "": frequency_dimension = list(harmonics.dims)[0] harmonics = harmonics.sortby(frequency_dimension) - + # Loop through all variables in harmonics harmonic_subgroups = xr.Dataset() for var in harmonics.data_vars: dataarray = harmonics[var] subgroup = np.zeros(np.size(hz)) - - for ihz in np.arange(0,len(hz)): - n = hz[ihz] + + for ihz in np.arange(0, len(hz)): + n = hz[ihz] ind = dataarray.indexes[frequency_dimension].get_loc(n) - - data_subset = dataarray.isel({frequency_dimension:[ind-1, ind, ind+1]}) - subgroup[ihz] = (data_subset**2).sum()**0.5 - - harmonic_subgroups = harmonic_subgroups.assign({var: (['frequency'], subgroup)}) - harmonic_subgroups = harmonic_subgroups.assign_coords({'frequency': hz}) + + data_subset = dataarray.isel({frequency_dimension: [ind - 1, ind, ind + 1]}) + subgroup[ihz] = (data_subset**2).sum() ** 0.5 + + harmonic_subgroups = harmonic_subgroups.assign({var: (["frequency"], subgroup)}) + harmonic_subgroups = harmonic_subgroups.assign_coords({"frequency": hz}) if to_pandas: harmonic_subgroups = harmonic_subgroups.to_pandas() @@ -154,7 +160,9 @@ def harmonic_subgroups(harmonics, grid_freq, frequency_dimension="", to_pandas=T return harmonic_subgroups -def total_harmonic_current_distortion(harmonics_subgroup, frequency_dimension="", to_pandas=True): +def total_harmonic_current_distortion( + harmonics_subgroup, frequency_dimension="", to_pandas=True +): """ Calculates the total harmonic current distortion (THC) based on IEC/TS 62600-30 @@ -164,7 +172,7 @@ def total_harmonic_current_distortion(harmonics_subgroup, frequency_dimension="" Subgrouped current harmonics indexed by harmonic frequency frequency_dimension: string (optional) - Name of the xarray dimension corresponding to frequency. If not supplied, + Name of the xarray dimension corresponding to frequency. If not supplied, defaults to the first dimension. Does not affect pandas input. to_pandas: bool (Optional) @@ -173,37 +181,45 @@ def total_harmonic_current_distortion(harmonics_subgroup, frequency_dimension="" Returns -------- THCD: pd.DataFrame or xarray Dataset - Total harmonic current distortion indexed by signal name with THCD column + Total harmonic current distortion indexed by signal name with THCD column """ - if not isinstance(harmonics_subgroup, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('harmonics_subgroup must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(harmonics_subgroup)}') + if not isinstance( + harmonics_subgroup, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset) + ): + raise TypeError( + "harmonics_subgroup must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(harmonics_subgroup)}" + ) if not isinstance(to_pandas, bool): - raise TypeError( - f'to_pandas must be of type bool. Got: {type(to_pandas)}') + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") if not isinstance(frequency_dimension, str): raise TypeError( - f'frequency_dimension must be of type bool. Got: {type(frequency_dimension)}') + f"frequency_dimension must be of type bool. Got: {type(frequency_dimension)}" + ) # Convert input to xr.Dataset - harmonics_subgroup = _convert_to_dataset(harmonics_subgroup, 'harmonics') + harmonics_subgroup = _convert_to_dataset(harmonics_subgroup, "harmonics") + + if frequency_dimension != "" and frequency_dimension not in harmonics.coords: + raise ValueError( + "frequency_dimension was supplied but is not a dimension " + + f"of harmonics. Got {frequency_dimension}" + ) - if frequency_dimension != '' and frequency_dimension not in harmonics.coords: - raise ValueError('frequency_dimension was supplied but is not a dimension ' - + f'of harmonics. Got {frequency_dimension}') - if frequency_dimension == "": frequency_dimension = list(harmonics_subgroup.dims)[0] - harmonics_sq = harmonics_subgroup.isel({frequency_dimension: slice(2,50)})**2 + harmonics_sq = harmonics_subgroup.isel({frequency_dimension: slice(2, 50)}) ** 2 harmonics_sum = harmonics_sq.sum() - THCD = (np.sqrt(harmonics_sum)/harmonics_subgroup.isel({frequency_dimension: 1}))*100 - + THCD = ( + np.sqrt(harmonics_sum) / harmonics_subgroup.isel({frequency_dimension: 1}) + ) * 100 + if isinstance(THCD, xr.DataArray): - THCD.name = ['THCD'] - + THCD.name = ["THCD"] + if to_pandas: THCD = THCD.to_pandas() @@ -217,13 +233,13 @@ def interharmonics(harmonics, grid_freq, frequency_dimension="", to_pandas=True) Parameters ----------- harmonics: pandas Series, pandas DataFrame, xarray DataArray, or xarray Dataset - Harmonic amplitude indexed by the harmonic frequency + Harmonic amplitude indexed by the harmonic frequency grid_freq: int Value indicating if the power supply is 50 or 60 Hz. Options = 50 or 60 frequency_dimension: string (optional) - Name of the xarray dimension corresponding to frequency. If not supplied, + Name of the xarray dimension corresponding to frequency. If not supplied, defaults to the first dimension. Does not affect pandas input. to_pandas: bool (Optional) @@ -235,22 +251,25 @@ def interharmonics(harmonics, grid_freq, frequency_dimension="", to_pandas=True) Interharmonics groups """ if not isinstance(harmonics, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset)): - raise TypeError('harmonics must be of type pd.Series, pd.DataFrame, ' + - f'xr.DataArray, or xr.Dataset. Got {type(harmonics)}') + raise TypeError( + "harmonics must be of type pd.Series, pd.DataFrame, " + + f"xr.DataArray, or xr.Dataset. Got {type(harmonics)}" + ) if grid_freq not in [50, 60]: - raise ValueError(f'grid_freq must be either 50 or 60. Got {grid_freq}') + raise ValueError(f"grid_freq must be either 50 or 60. Got {grid_freq}") if not isinstance(to_pandas, bool): - raise TypeError( - f'to_pandas must be of type bool. Got: {type(to_pandas)}') + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") # Convert input to xr.Dataset - harmonics = _convert_to_dataset(harmonics, 'harmonics') + harmonics = _convert_to_dataset(harmonics, "harmonics") - if frequency_dimension != '' and frequency_dimension not in harmonics.coords: - raise ValueError('frequency_dimension was supplied but is not a dimension ' - + f'of harmonics. Got {frequency_dimension}') + if frequency_dimension != "" and frequency_dimension not in harmonics.coords: + raise ValueError( + "frequency_dimension was supplied but is not a dimension " + + f"of harmonics. Got {frequency_dimension}" + ) if grid_freq == 60: hz = np.arange(0, 3060, 60) @@ -268,19 +287,19 @@ def interharmonics(harmonics, grid_freq, frequency_dimension="", to_pandas=True) dataarray = harmonics[var] subset = np.zeros(np.size(hz)) - for ihz in np.arange(0,len(hz)): + for ihz in np.arange(0, len(hz)): n = hz[ihz] ind = dataarray.indexes[frequency_dimension].get_loc(n) if grid_freq == 60: - data = dataarray.isel({frequency_dimension:slice(ind+1,ind+11)}) - subset[ihz] = (data**2).sum()**0.5 + data = dataarray.isel({frequency_dimension: slice(ind + 1, ind + 11)}) + subset[ihz] = (data**2).sum() ** 0.5 else: - data = dataarray.isel({frequency_dimension:slice(ind+1,ind+7)}) - subset[ihz] = (data**2).sum()**0.5 + data = dataarray.isel({frequency_dimension: slice(ind + 1, ind + 7)}) + subset[ihz] = (data**2).sum() ** 0.5 - interharmonics = interharmonics.assign({var: (['frequency'], subset)}) - interharmonics = interharmonics.assign_coords({'frequency': hz}) + interharmonics = interharmonics.assign({var: (["frequency"], subset)}) + interharmonics = interharmonics.assign_coords({"frequency": hz}) if to_pandas: interharmonics = interharmonics.to_pandas() diff --git a/mhkit/tests/power/test_power.py b/mhkit/tests/power/test_power.py index fce5a1aaf..e218d149f 100644 --- a/mhkit/tests/power/test_power.py +++ b/mhkit/tests/power/test_power.py @@ -1,4 +1,3 @@ - from os.path import abspath, dirname, join, normpath, relpath import mhkit.power as power import pandas as pd @@ -16,7 +15,7 @@ class TestDevice(unittest.TestCase): def setUpClass(self): self.t = 600 fs = 1000 - self.samples = np.linspace(0, self.t, int(fs*self.t), endpoint=False) + self.samples = np.linspace(0, self.t, int(fs * self.t), endpoint=False) self.frequency = 60 self.freq_array = np.ones(len(self.samples)) * 60 harmonics_int = np.arange(0, 60 * 60, 5) @@ -45,65 +44,66 @@ def tearDownClass(self): def test_harmonics_sine_wave_pandas(self): current = pd.Series(self.signal, index=self.samples) harmonics = power.quality.harmonics(current, 1000, self.frequency) - - for i, j in zip(harmonics['data'].values, self.harmonics_vals): + + for i, j in zip(harmonics["data"].values, self.harmonics_vals): self.assertAlmostEqual(i, j, 1) - + def test_harmonics_sine_wave_xarray(self): - current = xr.DataArray(data=self.signal, - dims='index', - coords={'index':self.samples}) + current = xr.DataArray( + data=self.signal, dims="index", coords={"index": self.samples} + ) harmonics = power.quality.harmonics(current, 1000, self.frequency) - - for i, j in zip(harmonics['data'].values, self.harmonics_vals): + + for i, j in zip(harmonics["data"].values, self.harmonics_vals): self.assertAlmostEqual(i, j, 1) def test_harmonic_subgroup_sine_wave_pandas(self): - harmonics = pd.DataFrame(self.harmonics_vals, - index=self.harmonics_int) + harmonics = pd.DataFrame(self.harmonics_vals, index=self.harmonics_int) hsg = power.quality.harmonic_subgroups(harmonics, self.frequency) - + for i, j in zip(hsg.values, self.harmonic_groups): self.assertAlmostEqual(i[0], j, 1) def test_harmonic_subgroup_sine_wave_xarray(self): - harmonics = xr.Dataset(data_vars={'harmonics':(['index'], self.harmonics_vals)}, - coords={'index':self.harmonics_int}) + harmonics = xr.Dataset( + data_vars={"harmonics": (["index"], self.harmonics_vals)}, + coords={"index": self.harmonics_int}, + ) hsg = power.quality.harmonic_subgroups(harmonics, self.frequency) - + for i, j in zip(hsg.values, self.harmonic_groups): self.assertAlmostEqual(i[0], j, 1) def test_TCHD_sine_wave_pandas(self): - harmonics = pd.DataFrame(self.harmonics_vals, - index=self.harmonics_int) + harmonics = pd.DataFrame(self.harmonics_vals, index=self.harmonics_int) hsg = power.quality.harmonic_subgroups(harmonics, self.frequency) TCHD = power.quality.total_harmonic_current_distortion(hsg) - + self.assertAlmostEqual(TCHD.values[0], self.thcd) def test_TCHD_sine_wave_xarray(self): - harmonics = xr.Dataset(data_vars={'harmonics':(['index'],self.harmonics_vals)}, - coords={'index':self.harmonics_int}) + harmonics = xr.Dataset( + data_vars={"harmonics": (["index"], self.harmonics_vals)}, + coords={"index": self.harmonics_int}, + ) hsg = power.quality.harmonic_subgroups(harmonics, self.frequency) TCHD = power.quality.total_harmonic_current_distortion(hsg) - + self.assertAlmostEqual(TCHD.values[0], self.thcd) def test_interharmonics_sine_wave_pandas(self): - harmonics = pd.DataFrame(self.harmonics_vals, - index=self.harmonics_int) - inter_harmonics = power.quality.interharmonics( - harmonics, self.frequency) + harmonics = pd.DataFrame(self.harmonics_vals, index=self.harmonics_int) + inter_harmonics = power.quality.interharmonics(harmonics, self.frequency) for i, j in zip(inter_harmonics.values, self.interharmonic): self.assertAlmostEqual(i[0], j, 1) - + def test_interharmonics_sine_wave_xarray(self): - harmonics = xr.Dataset(data_vars={'harmonics':(['index'],self.harmonics_vals)}, - coords={'index':self.harmonics_int}) - inter_harmonics = power.quality.interharmonics( - harmonics, self.frequency) + harmonics = xr.Dataset( + data_vars={"harmonics": (["index"], self.harmonics_vals)}, + coords={"index": self.harmonics_int}, + ) + inter_harmonics = power.quality.interharmonics(harmonics, self.frequency) for i, j in zip(inter_harmonics.values, self.interharmonic): self.assertAlmostEqual(i[0], j, 1) @@ -124,66 +124,62 @@ def test_instfreq_xarray(self): self.assertAlmostEqual(i[0], self.frequency, 1) def test_dc_power_pandas(self): - current = pd.DataFrame(self.current_data, columns=['A1','A2','A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1','V2','V3']) - + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) + P = power.characteristics.dc_power(voltage, current) - P_test = (self.current_data*self.voltage_data).sum() - self.assertEqual(P.sum()['Gross'], P_test) - - P = power.characteristics.dc_power(voltage['V1'], current['A1']) - P_test = (self.current_data[:,0]*self.voltage_data[:,0]).sum() - self.assertEqual(P.sum()['Gross'], P_test) + P_test = (self.current_data * self.voltage_data).sum() + self.assertEqual(P.sum()["Gross"], P_test) + + P = power.characteristics.dc_power(voltage["V1"], current["A1"]) + P_test = (self.current_data[:, 0] * self.voltage_data[:, 0]).sum() + self.assertEqual(P.sum()["Gross"], P_test) def test_dc_power_xarray(self): - current = pd.DataFrame(self.current_data, columns=['A1','A2','A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1','V2','V3']) + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) current = current.to_xarray() voltage = voltage.to_xarray() - + P = power.characteristics.dc_power(voltage, current) - P_test = (self.current_data*self.voltage_data).sum() - self.assertEqual(P.sum()['Gross'], P_test) - - P = power.characteristics.dc_power(voltage['V1'], current['A1']) - P_test = (self.current_data[:,0]*self.voltage_data[:,0]).sum() - self.assertEqual(P.sum()['Gross'], P_test) + P_test = (self.current_data * self.voltage_data).sum() + self.assertEqual(P.sum()["Gross"], P_test) + + P = power.characteristics.dc_power(voltage["V1"], current["A1"]) + P_test = (self.current_data[:, 0] * self.voltage_data[:, 0]).sum() + self.assertEqual(P.sum()["Gross"], P_test) def test_ac_power_three_phase_pandas(self): - current = pd.DataFrame(self.current_data, columns=['A1','A2','A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1','V2','V3']) + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) P1 = power.characteristics.ac_power_three_phase(voltage, current, 1, False) P1b = power.characteristics.ac_power_three_phase(voltage, current, 0.5, False) P2 = power.characteristics.ac_power_three_phase(voltage, current, 1, True) P2b = power.characteristics.ac_power_three_phase(voltage, current, 0.5, True) - P_test = (self.current_data*self.voltage_data).sum() + P_test = (self.current_data * self.voltage_data).sum() self.assertEqual(P1.sum().iloc[0], P_test) - self.assertEqual(P1b.sum().iloc[0], P_test/2) - self.assertAlmostEqual(P2.sum().iloc[0], P_test*np.sqrt(3), 2) - self.assertAlmostEqual(P2b.sum().iloc[0], P_test*np.sqrt(3)/2, 2) + self.assertEqual(P1b.sum().iloc[0], P_test / 2) + self.assertAlmostEqual(P2.sum().iloc[0], P_test * np.sqrt(3), 2) + self.assertAlmostEqual(P2b.sum().iloc[0], P_test * np.sqrt(3) / 2, 2) def test_ac_power_three_phase_xarray(self): - current = pd.DataFrame(self.current_data, columns=['A1','A2','A3']) - voltage = pd.DataFrame(self.voltage_data, columns=['V1','V2','V3']) + current = pd.DataFrame(self.current_data, columns=["A1", "A2", "A3"]) + voltage = pd.DataFrame(self.voltage_data, columns=["V1", "V2", "V3"]) current = current.to_xarray() voltage = voltage.to_xarray() - P1 = power.characteristics.ac_power_three_phase( - voltage, current, 1, False) - P1b = power.characteristics.ac_power_three_phase( - voltage, current, 0.5, False) - P2 = power.characteristics.ac_power_three_phase( - voltage, current, 1, True) - P2b = power.characteristics.ac_power_three_phase( - voltage, current, 0.5, True) + P1 = power.characteristics.ac_power_three_phase(voltage, current, 1, False) + P1b = power.characteristics.ac_power_three_phase(voltage, current, 0.5, False) + P2 = power.characteristics.ac_power_three_phase(voltage, current, 1, True) + P2b = power.characteristics.ac_power_three_phase(voltage, current, 0.5, True) - P_test = (self.current_data*self.voltage_data).sum() + P_test = (self.current_data * self.voltage_data).sum() self.assertEqual(P1.sum().iloc[0], P_test) - self.assertEqual(P1b.sum().iloc[0], P_test/2) - self.assertAlmostEqual(P2.sum().iloc[0], P_test*np.sqrt(3), 2) - self.assertAlmostEqual(P2b.sum().iloc[0], P_test*np.sqrt(3)/2, 2) + self.assertEqual(P1b.sum().iloc[0], P_test / 2) + self.assertAlmostEqual(P2.sum().iloc[0], P_test * np.sqrt(3), 2) + self.assertAlmostEqual(P2b.sum().iloc[0], P_test * np.sqrt(3) / 2, 2) if __name__ == "__main__": From 997847db86dbca867e8117e6ed1d90472c43425c Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 1 Feb 2024 10:42:34 -0700 Subject: [PATCH 57/87] add back copula tests --- mhkit/tests/wave/test_contours.py | 128 +++++++++++++++--------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/mhkit/tests/wave/test_contours.py b/mhkit/tests/wave/test_contours.py index c11ed53b4..57cdd1758 100644 --- a/mhkit/tests/wave/test_contours.py +++ b/mhkit/tests/wave/test_contours.py @@ -477,70 +477,70 @@ def test_standard_copulas(self): ) self.assertTrue(all(close)) - # def test_nonparametric_copulas(self): - # methods = [ - # "nonparametric_gaussian", - # "nonparametric_clayton", - # "nonparametric_gumbel", - # ] - - # np_copulas = wave.contours.environmental_contours( - # self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods - # ) - - # close = [] - # for method in methods: - # close.append( - # np.allclose( - # np_copulas[f"{method}_x1"], - # self.wdrt_copulas[f"{method}_x1"], - # atol=0.13, - # ) - # ) - # close.append( - # np.allclose( - # np_copulas[f"{method}_x2"], - # self.wdrt_copulas[f"{method}_x2"], - # atol=0.13, - # ) - # ) - # self.assertTrue(all(close)) - - # def test_kde_copulas(self): - # kde_copula = wave.contours.environmental_contours( - # self.wdrt_Hm0, - # self.wdrt_Te, - # self.wdrt_dt, - # self.wdrt_period, - # method=["bivariate_KDE"], - # bandwidth=[0.23, 0.23], - # ) - # log_kde_copula = wave.contours.environmental_contours( - # self.wdrt_Hm0, - # self.wdrt_Te, - # self.wdrt_dt, - # self.wdrt_period, - # method=["bivariate_KDE_log"], - # bandwidth=[0.02, 0.11], - # ) - - # close = [ - # np.allclose( - # kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] - # ), - # np.allclose( - # kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] - # ), - # np.allclose( - # log_kde_copula["bivariate_KDE_log_x1"], - # self.wdrt_copulas["bivariate_KDE_log_x1"], - # ), - # np.allclose( - # log_kde_copula["bivariate_KDE_log_x2"], - # self.wdrt_copulas["bivariate_KDE_log_x2"], - # ), - # ] - # self.assertTrue(all(close)) + def test_nonparametric_copulas(self): + methods = [ + "nonparametric_gaussian", + "nonparametric_clayton", + "nonparametric_gumbel", + ] + + np_copulas = wave.contours.environmental_contours( + self.wdrt_Hm0, self.wdrt_Te, self.wdrt_dt, self.wdrt_period, method=methods + ) + + close = [] + for method in methods: + close.append( + np.allclose( + np_copulas[f"{method}_x1"], + self.wdrt_copulas[f"{method}_x1"], + atol=0.13, + ) + ) + close.append( + np.allclose( + np_copulas[f"{method}_x2"], + self.wdrt_copulas[f"{method}_x2"], + atol=0.13, + ) + ) + self.assertTrue(all(close)) + + def test_kde_copulas(self): + kde_copula = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["bivariate_KDE"], + bandwidth=[0.23, 0.23], + ) + log_kde_copula = wave.contours.environmental_contours( + self.wdrt_Hm0, + self.wdrt_Te, + self.wdrt_dt, + self.wdrt_period, + method=["bivariate_KDE_log"], + bandwidth=[0.02, 0.11], + ) + + close = [ + np.allclose( + kde_copula["bivariate_KDE_x1"], self.wdrt_copulas["bivariate_KDE_x1"] + ), + np.allclose( + kde_copula["bivariate_KDE_x2"], self.wdrt_copulas["bivariate_KDE_x2"] + ), + np.allclose( + log_kde_copula["bivariate_KDE_log_x1"], + self.wdrt_copulas["bivariate_KDE_log_x1"], + ), + np.allclose( + log_kde_copula["bivariate_KDE_log_x2"], + self.wdrt_copulas["bivariate_KDE_log_x2"], + ), + ] + self.assertTrue(all(close)) def test_samples_contours(self): te_samples = np.array([10, 15, 20]) From e6546eb0cd8f9b0be0b333af0422b95b68a11540 Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 5 Feb 2024 11:00:05 -0700 Subject: [PATCH 58/87] pylint: extreme to multiple files --- mhkit/loads/extreme.py | 1010 ----------------------------- mhkit/loads/extreme/__init__.py | 39 ++ mhkit/loads/extreme/extremes.py | 253 ++++++++ mhkit/loads/extreme/mler.py | 363 +++++++++++ mhkit/loads/extreme/peaks.py | 468 +++++++++++++ mhkit/loads/extreme/sample.py | 33 + mhkit/tests/loads/test_extreme.py | 2 +- 7 files changed, 1157 insertions(+), 1011 deletions(-) delete mode 100644 mhkit/loads/extreme.py create mode 100644 mhkit/loads/extreme/__init__.py create mode 100644 mhkit/loads/extreme/extremes.py create mode 100644 mhkit/loads/extreme/mler.py create mode 100644 mhkit/loads/extreme/peaks.py create mode 100644 mhkit/loads/extreme/sample.py diff --git a/mhkit/loads/extreme.py b/mhkit/loads/extreme.py deleted file mode 100644 index 8fb549625..000000000 --- a/mhkit/loads/extreme.py +++ /dev/null @@ -1,1010 +0,0 @@ -import numpy as np -import pandas as pd -import xarray as xr -from scipy import stats, optimize, signal -from mhkit.wave.resource import frequency_moment -from mhkit.utils import upcrossing, custom - - -def _peaks_over_threshold(peaks, threshold, sampling_rate): - threshold_unit = np.percentile(peaks, 100 * threshold, method="hazen") - idx_peaks = np.arange(len(peaks)) - idx_storm_peaks, storm_peaks = global_peaks(idx_peaks, peaks - threshold_unit) - idx_storm_peaks = idx_storm_peaks.astype(int) - - # Two storms that are close enough (within specified window) are - # considered the same storm, to ensure independence. - independent_storm_peaks = [ - storm_peaks[0], - ] - idx_independent_storm_peaks = [ - idx_storm_peaks[0], - ] - # check first 14 days to determine window size - nlags = int(14 * 24 / sampling_rate) - x = peaks - np.mean(peaks) - acf = signal.correlate(x, x, mode="full") - lag = signal.correlation_lags(len(x), len(x), mode="full") - idx_zero = np.argmax(lag == 0) - positive_lag = lag[(idx_zero) : (idx_zero + nlags + 1)] - acf_positive = acf[(idx_zero) : (idx_zero + nlags + 1)] / acf[idx_zero] - - window_size = sampling_rate * positive_lag[acf_positive < 0.5][0] - # window size in "observations" instead of "hours" between peaks. - window = window_size / sampling_rate - # keep only independent storm peaks - for idx in idx_storm_peaks[1:]: - if (idx - idx_independent_storm_peaks[-1]) > window: - idx_independent_storm_peaks.append(idx) - independent_storm_peaks.append(peaks[idx] - threshold_unit) - elif peaks[idx] > independent_storm_peaks[-1]: - idx_independent_storm_peaks[-1] = idx - independent_storm_peaks[-1] = peaks[idx] - threshold_unit - - return independent_storm_peaks - - -def global_peaks(t, data): - """ - Find the global peaks of a zero-centered response time-series. - - The global peaks are the maxima between consecutive zero - up-crossings. - - Parameters - ---------- - t: np.array - Time array. - data: np.array - Response time-series. - - Returns - ------- - t_peaks: np.array - Time array for peaks - peaks: np.array - Peak values of the response time-series - """ - if not isinstance(t, np.ndarray): - raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") - if not isinstance(data, np.ndarray): - raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") - - # Find zero up-crossings - inds = upcrossing(t, data) - - # We also include the final point in the dataset - inds = np.append(inds, len(data) - 1) - - # As we want to return both the time and peak - # values, look for the index at the peak. - # The call to argmax gives us the index within the - # upcrossing period. Therefore to get the index in the - # original array we need to add on the index that - # starts the zero crossing period, ind1. - func = lambda ind1, ind2: np.argmax(data[ind1:ind2]) + ind1 - - peak_inds = np.array(custom(t, data, func, inds), dtype=int) - - return t[peak_inds], data[peak_inds] - - -def number_of_short_term_peaks(n, t, t_st): - """ - Estimate the number of peaks in a specified period. - - Parameters - ---------- - n : int - Number of peaks in analyzed timeseries. - t : float - Length of time of analyzed timeseries. - t_st: float - Short-term period for which to estimate the number of peaks. - - Returns - ------- - n_st : float - Number of peaks in short term period. - """ - if not isinstance(n, int): - raise TypeError(f"n must be of type int. Got: {type(n)}") - if not isinstance(t, float): - raise TypeError(f"t must be of type float. Got: {type(t)}") - if not isinstance(t_st, float): - raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") - - return n * t_st / t - - -def peaks_distribution_weibull(x): - """ - Estimate the peaks distribution by fitting a Weibull - distribution to the peaks of the response. - - The fitted parameters can be accessed through the `params` field of - the returned distribution. - - Parameters - ---------- - x : np.array - Global peaks. - - Returns - ------- - peaks: scipy.stats.rv_frozen - Probability distribution of the peaks. - """ - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") - - # peaks distribution - peaks_params = stats.exponweib.fit(x, f0=1, floc=0) - param_names = ["a", "c", "loc", "scale"] - peaks_params = {k: v for k, v in zip(param_names, peaks_params)} - peaks = stats.exponweib(**peaks_params) - # save the parameter info - peaks.params = peaks_params - return peaks - - -def peaks_distribution_weibull_tail_fit(x): - """ - Estimate the peaks distribution using the Weibull tail fit - method. - - The fitted parameters can be accessed through the `params` field of - the returned distribution. - - Parameters - ---------- - x : np.array - Global peaks. - - Returns - ------- - peaks: scipy.stats.rv_frozen - Probability distribution of the peaks. - """ - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") - - # Initial guess for Weibull parameters - p0 = stats.exponweib.fit(x, f0=1, floc=0) - p0 = np.array([p0[1], p0[3]]) - # Approximate CDF - x = np.sort(x) - npeaks = len(x) - F = np.zeros(npeaks) - for i in range(npeaks): - F[i] = i / (npeaks + 1.0) - # Divide into seven sets & fit Weibull - subset_shape_params = np.zeros(7) - subset_scale_params = np.zeros(7) - setLim = np.arange(0.60, 0.90, 0.05) - func = lambda x, c, s: stats.exponweib(a=1, c=c, loc=0, scale=s).cdf(x) - for set in range(7): - xset = x[(F > setLim[set])] - Fset = F[(F > setLim[set])] - popt, _ = optimize.curve_fit(func, xset, Fset, p0=p0) - subset_shape_params[set] = popt[0] - subset_scale_params[set] = popt[1] - # peaks distribution - peaks_params = [1, np.mean(subset_shape_params), 0, np.mean(subset_scale_params)] - param_names = ["a", "c", "loc", "scale"] - peaks_params = {k: v for k, v in zip(param_names, peaks_params)} - peaks = stats.exponweib(**peaks_params) - # save the parameter info - peaks.params = peaks_params - peaks.subset_shape_params = subset_shape_params - peaks.subset_scale_params = subset_scale_params - return peaks - - -def automatic_hs_threshold( - peaks, - sampling_rate, - initial_threshold_range=(0.990, 0.995, 0.001), - max_refinement=5, -): - """ - Find the best significant wave height threshold for the - peaks-over-threshold method. - - This method was developed by: - - > Neary, V. S., S. Ahn, B. E. Seng, M. N. Allahdadi, T. Wang, Z. Yang and R. He (2020). - > "Characterization of Extreme Wave Conditions for Wave Energy Converter Design and Project Risk Assessment.” - > J. Mar. Sci. Eng. 2020, 8(4), 289; https://doi.org/10.3390/jmse8040289. - - please cite this paper if using this method. - - After all thresholds in the initial range are evaluated, the search - range is refined around the optimal point until either (i) there - is minimal change from the previous refinement results, (ii) the - number of data points become smaller than about 1 per year, or (iii) - the maximum number of iterations is reached. - - Parameters - ---------- - peaks: np.array - Peak values of the response time-series - sampling_rate: float - Sampling rate in hours. - initial_threshold_range: tuple - Initial range of thresholds to search. Described as - (min, max, step). - max_refinement: int - Maximum number of times to refine the search range. - - Returns - ------- - best_threshold: float - Threshold that results in the best correlation. - """ - if not isinstance(sampling_rate, (float, int)): - raise TypeError( - f"sampling_rate must be of type float or int. Got: {type(sampling_rate)}" - ) - if not isinstance(peaks, np.ndarray): - raise TypeError(f"peaks must be of type np.ndarray. Got: {type(peaks)}") - if not len(initial_threshold_range) == 3: - raise ValueError( - f"initial_threshold_range must be length 3. Got: {len(initial_threshold_range)}" - ) - if not isinstance(max_refinement, int): - raise TypeError( - f"max_refinement must be of type int. Got: {type(max_refinement)}" - ) - - range_min, range_max, range_step = initial_threshold_range - best_threshold = -1 - years = len(peaks) / (365.25 * 24 / sampling_rate) - - for i in range(max_refinement): - thresholds = np.arange(range_min, range_max, range_step) - correlations = [] - - for threshold in thresholds: - distribution = stats.genpareto - over_threshold = _peaks_over_threshold(peaks, threshold, sampling_rate) - rate_per_year = len(over_threshold) / years - if rate_per_year < 2: - break - distributions_parameters = distribution.fit(over_threshold, floc=0.0) - _, (_, _, correlation) = stats.probplot( - peaks, distributions_parameters, distribution, fit=True - ) - correlations.append(correlation) - - max_i = np.argmax(correlations) - minimal_change = np.abs(best_threshold - thresholds[max_i]) < 0.0005 - best_threshold = thresholds[max_i] - if minimal_change and i < max_refinement - 1: - break - range_step /= 10 - if max_i == len(thresholds) - 1: - range_min = thresholds[max_i - 1] - range_max = thresholds[max_i] + 5 * range_step - elif max_i == 0: - range_min = thresholds[max_i] - 9 * range_step - range_max = thresholds[max_i + 1] - else: - range_min = thresholds[max_i - 1] - range_max = thresholds[max_i + 1] - - best_threshold_unit = np.percentile(peaks, 100 * best_threshold, method="hazen") - return best_threshold, best_threshold_unit - - -def peaks_distribution_peaks_over_threshold(x, threshold=None): - """ - Estimate the peaks distribution using the peaks over threshold - method. - - This fits a generalized Pareto distribution to all the peaks above - the specified threshold. The distribution is only defined for values - above the threshold and therefore cannot be used to obtain integral - metrics such as the expected value. A typical choice of threshold is - 1.4 standard deviations above the mean. The peaks over threshold - distribution can be accessed through the `pot` field of the returned - peaks distribution. - - Parameters - ---------- - x : np.array - Global peaks. - threshold : float - Threshold value. Only peaks above this value will be used. - Default value calculated as: `np.mean(x) + 1.4 * np.std(x)` - - Returns - ------- - peaks: scipy.stats.rv_frozen - Probability distribution of the peaks. - """ - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") - if threshold is None: - threshold = np.mean(x) + 1.4 * np.std(x) - if not isinstance(threshold, float): - raise TypeError( - f"If specified, threshold must be of type float. Got: {type(threshold)}" - ) - - # peaks over threshold - x = np.sort(x) - pot = x[(x > threshold)] - threshold - npeaks = len(x) - npot = len(pot) - # Fit a generalized Pareto - pot_params = stats.genpareto.fit(pot, floc=0.0) - param_names = ["c", "loc", "scale"] - pot_params = {k: v for k, v in zip(param_names, pot_params)} - pot = stats.genpareto(**pot_params) - # save the parameter info - pot.params = pot_params - - # peaks - class _Peaks(stats.rv_continuous): - def __init__(self, *args, **kwargs): - self.pot = kwargs.pop("pot_distribution") - self.threshold = kwargs.pop("threshold") - super().__init__(*args, **kwargs) - - def _cdf(self, x): - x = np.atleast_1d(np.array(x)) - out = np.zeros(x.shape) - out[x < self.threshold] = np.NaN - xt = x[x >= self.threshold] - if xt.size != 0: - pot_ccdf = 1.0 - self.pot.cdf(xt - self.threshold) - prop_pot = npot / npeaks - out[x >= self.threshold] = 1.0 - (prop_pot * pot_ccdf) - return out - - peaks = _Peaks(name="peaks", pot_distribution=pot, threshold=threshold) - # save the peaks over threshold distribution - peaks.pot = pot - return peaks - - -def ste_peaks(peaks_distribution, npeaks): - """ - Estimate the short-term extreme distribution from the peaks - distribution. - - Parameters - ---------- - peaks_distribution: scipy.stats.rv_frozen - Probability distribution of the peaks. - npeaks : float - Number of peaks in short term period. - - Returns - ------- - ste: scipy.stats.rv_frozen - Short-term extreme distribution. - """ - if not callable(peaks_distribution.cdf): - raise TypeError("peaks_distribution must be a scipy.stat distribution.") - if not isinstance(npeaks, float): - raise TypeError(f"npeaks must be of type float. Got: {type(npeaks)}") - - class _ShortTermExtreme(stats.rv_continuous): - def __init__(self, *args, **kwargs): - self.peaks = kwargs.pop("peaks_distribution") - self.npeaks = kwargs.pop("npeaks") - super().__init__(*args, **kwargs) - - def _cdf(self, x): - peaks_cdf = np.array(self.peaks.cdf(x)) - peaks_cdf[np.isnan(peaks_cdf)] = 0.0 - if len(peaks_cdf) == 1: - peaks_cdf = peaks_cdf[0] - return peaks_cdf**self.npeaks - - ste = _ShortTermExtreme( - name="short_term_extreme", peaks_distribution=peaks_distribution, npeaks=npeaks - ) - return ste - - -def block_maxima(t, x, t_st): - """ - Find the block maxima of a time-series. - - The timeseries (t,x) is divided into blocks of length t_st, and the - maxima of each bloock is returned. - - Parameters - ---------- - t : np.array - Time array. - x : np.array - global peaks timeseries. - t_st : float - Short-term period. - - Returns - ------- - block_maxima: np.array - Block maxima (i.e. largest peak in each block). - """ - if not isinstance(t, np.ndarray): - raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") - if not isinstance(t_st, float): - raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") - - nblock = int(t[-1] / t_st) - block_maxima = np.zeros(int(nblock)) - for iblock in range(nblock): - ix = x[(t >= iblock * t_st) & (t < (iblock + 1) * t_st)] - block_maxima[iblock] = np.max(ix) - return block_maxima - - -def ste_block_maxima_gev(block_maxima): - """ - Approximate the short-term extreme distribution using the block - maxima method and the Generalized Extreme Value distribution. - - Parameters - ---------- - block_maxima: np.array - Block maxima (i.e. largest peak in each block). - - Returns - ------- - ste: scipy.stats.rv_frozen - Short-term extreme distribution. - """ - if not isinstance(block_maxima, np.ndarray): - raise TypeError( - f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" - ) - - ste_params = stats.genextreme.fit(block_maxima) - param_names = ["c", "loc", "scale"] - ste_params = {k: v for k, v in zip(param_names, ste_params)} - ste = stats.genextreme(**ste_params) - ste.params = ste_params - return ste - - -def ste_block_maxima_gumbel(block_maxima): - """ - Approximate the short-term extreme distribution using the block - maxima method and the Gumbel (right) distribution. - - Parameters - ---------- - block_maxima: np.array - Block maxima (i.e. largest peak in each block). - - Returns - ------- - ste: scipy.stats.rv_frozen - Short-term extreme distribution. - """ - if not isinstance(block_maxima, np.ndarray): - raise TypeError( - f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" - ) - - ste_params = stats.gumbel_r.fit(block_maxima) - param_names = ["loc", "scale"] - ste_params = {k: v for k, v in zip(param_names, ste_params)} - ste = stats.gumbel_r(**ste_params) - ste.params = ste_params - return ste - - -def ste(t, data, t_st, method): - """ - Alias for `short_term_extreme`. - """ - ste = short_term_extreme(t, data, t_st, method) - return ste - - -def short_term_extreme(t, data, t_st, method): - """ - Approximate the short-term extreme distribution from a - timeseries of the response using chosen method. - - The availabe methods are: 'peaks_weibull', 'peaks_weibull_tail_fit', - 'peaks_over_threshold', 'block_maxima_gev', and 'block_maxima_gumbel'. - For the block maxima methods the timeseries needs to be many times - longer than the short-term period. For the peak-fitting methods the - timeseries can be of arbitrary length. - - Parameters - ---------- - t: np.array - Time array. - data: np.array - Response timeseries. - t_st: float - Short-term period. - method : string - Method for estimating the short-term extreme distribution. - - Returns - ------- - ste: scipy.stats.rv_frozen - Short-term extreme distribution. - """ - if not isinstance(t, np.ndarray): - raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") - if not isinstance(data, np.ndarray): - raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") - if not isinstance(t_st, float): - raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") - if not isinstance(method, str): - raise TypeError(f"method must be of type string. Got: {type(method)}") - - peaks_methods = { - "peaks_weibull": peaks_distribution_weibull, - "peaks_weibull_tail_fit": peaks_distribution_weibull_tail_fit, - "peaks_over_threshold": peaks_distribution_peaks_over_threshold, - } - blockmaxima_methods = { - "block_maxima_gev": ste_block_maxima_gev, - "block_maxima_gumbel": ste_block_maxima_gumbel, - } - - if method in peaks_methods.keys(): - fit_peaks = peaks_methods[method] - _, peaks = global_peaks(t, data) - npeaks = len(peaks) - time = t[-1] - t[0] - nst = number_of_short_term_peaks(npeaks, time, t_st) - peaks_dist = fit_peaks(peaks) - ste = ste_peaks(peaks_dist, nst) - elif method in blockmaxima_methods.keys(): - fit_maxima = blockmaxima_methods[method] - maxima = block_maxima(t, data, t_st) - ste = fit_maxima(maxima) - else: - print("Passed `method` not found.") - return ste - - -def full_seastate_long_term_extreme(ste, weights): - """ - Return the long-term extreme distribution of a response of - interest using the full sea state approach. - - Parameters - ---------- - ste: list[scipy.stats.rv_frozen] - Short-term extreme distribution of the quantity of interest for - each sample sea state. - weights: list, np.ndarray - The weights from the full sea state sampling - - Returns - ------- - ste: scipy.stats.rv_frozen - Short-term extreme distribution. - """ - if not isinstance(ste, list): - raise TypeError( - f"ste must be of type list[scipy.stats.rv_frozen]. Got: {type(ste)}" - ) - if not isinstance(weights, (list, np.ndarray)): - raise TypeError( - f"weights must be of type list or np.ndarray. Got: {type(weights)}" - ) - - class _LongTermExtreme(stats.rv_continuous): - def __init__(self, *args, **kwargs): - weights = kwargs.pop("weights") - # make sure weights add to 1.0 - self.weights = weights / np.sum(weights) - self.ste = kwargs.pop("ste") - self.n = len(self.weights) - super().__init__(*args, **kwargs) - - def _cdf(self, x): - f = 0.0 - for w_i, ste_i in zip(self.weights, self.ste): - f += w_i * ste_i.cdf(x) - return f - - return _LongTermExtreme(name="long_term_extreme", weights=weights, ste=ste) - - -def mler_coefficients( - rao, wave_spectrum, response_desired, frequency_dimension="", to_pandas=True -): - """ - Calculate MLER (most likely extreme response) coefficients from a - sea state spectrum and a response RAO. - - Parameters - ---------- - rao: numpy ndarray - Response amplitude operator. - wave_spectrum: pandas Series, pandas DataFrame, xarray DataArray, or xarray Dataset - Wave spectral density [m^2/Hz] indexed by frequency [Hz]. - DataFrame and Dataset inputs should only have one data variable - response_desired: int or float - Desired response, units should correspond to a motion RAO or - units of force for a force RAO. - frequency_dimension: string (optional) - Name of the xarray dimension corresponding to frequency. If not supplied, - defaults to the first dimension. Does not affect pandas input. - to_pandas: bool (optional) - Flag to output pandas instead of xarray. Default = True. - - Returns - ------- - mler: pandas DataFrame or xarray Dataset - DataFrame containing conditioned wave spectral amplitude - coefficient [m^2-s], and Phase [rad] indexed by freq [Hz]. - """ - try: - rao = np.array(rao) - except: - pass - - if not isinstance(rao, np.ndarray): - raise TypeError(f"rao must be of type np.ndarray. Got: {type(rao)}") - if not isinstance( - wave_spectrum, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset) - ): - raise TypeError( - f"wave_spectrum must be of type pd.Series, pd.DataFrame, xr.DataArray, or xr.Dataset. Got: {type(wave_spectrum)}" - ) - if not isinstance(response_desired, (int, float)): - raise TypeError( - f"response_desired must be of type int or float. Got: {type(response_desired)}" - ) - if not isinstance(to_pandas, bool): - raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - - # Convert input to xarray DataArray - if isinstance(wave_spectrum, (pd.Series, pd.DataFrame)): - wave_spectrum = wave_spectrum.squeeze().to_xarray() - - if isinstance(wave_spectrum, xr.Dataset): - if len(wave_spectrum.data_vars) > 1: - raise ValueError( - f"wave_spectrum can only contain one variable. Got {list(wave_spectrum.data_vars)}." - ) - wave_spectrum = wave_spectrum.to_array() - - if frequency_dimension == "": - frequency_dimension = list(wave_spectrum.coords)[0] - - # convert from Hz to rad/s - freq_hz = wave_spectrum.coords[frequency_dimension].values - freq = freq_hz * (2 * np.pi) - wave_spectrum = wave_spectrum.to_numpy() / (2 * np.pi) - - # get frequency step - dw = 2.0 * np.pi / (len(freq) - 1) - - # Note: waves.A is "S" in Quon2016; 'waves' naming convention - # matches WEC-Sim conventions (EWQ) - # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 - spectrum_r = np.abs(rao) ** 2 * (2 * wave_spectrum) - - # calculate spectral moments and other important spectral values. - m0 = (frequency_moment(pd.Series(spectrum_r, index=freq), 0)).iloc[0, 0] - m1 = (frequency_moment(pd.Series(spectrum_r, index=freq), 1)).iloc[0, 0] - m2 = (frequency_moment(pd.Series(spectrum_r, index=freq), 2)).iloc[0, 0] - wBar = m1 / m0 - - # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 - # Drummen version. Dietz has negative of this. - _coeff_a_rn = ( - np.abs(rao) - * np.sqrt(2 * wave_spectrum * dw) - * ((m2 - freq * m1) + wBar * (freq * m0 - m1)) - / (m0 * m2 - m1**2) - ) - - # save the new spectral info to pass out - # Phase delay should be a positive number in this convention (AP) - _phase = -np.unwrap(np.angle(rao)) - - # for negative values of Amp, shift phase by pi and flip sign - # for negative amplitudes, add a pi phase shift, then flip sign on - # negative Amplitudes - _phase[_coeff_a_rn < 0] -= np.pi - _coeff_a_rn[_coeff_a_rn < 0] *= -1 - - # calculate the conditioned spectrum [m^2-s/rad] - _s = wave_spectrum * _coeff_a_rn**2 * response_desired**2 - _a = 2 * wave_spectrum * _coeff_a_rn**2 * response_desired**2 - - # if the response amplitude we ask for is negative, we will add - # a pi phase shift to the phase information. This is because - # the sign of self.desiredRespAmp is lost in the squaring above. - # Ordinarily this would be put into the final equation, but we - # are shaping the wave information so that it is buried in the - # new spectral information, S. (AP) - if response_desired < 0: - _phase += np.pi - - mler = xr.Dataset( - data_vars={ - "WaveSpectrum": (["frequency"], _s), - "Phase": (["frequency"], _phase), - }, - coords={"frequency": freq_hz}, - ) - mler.fillna(0) - - if to_pandas: - mler = mler.to_pandas() - - return mler - - -def mler_simulation(parameters=None): - """ - Define the simulation parameters that are used in various MLER - functionalities. - - See `extreme_response_contour_example.ipynb` example for how this is - useful. If no input is given, then default values are returned. - - Parameters - ---------- - parameters: dict (optional) - Simulation parameters. - Keys: - ----- - 'startTime': starting time [s] - 'endTime': ending time [s] - 'dT': time-step size [s] - 'T0': time of maximum event [s] - 'startx': start of simulation space [m] - 'endX': end of simulation space [m] - 'dX': horizontal spacing [m] - 'X': position of maximum event [m] - - Returns - ------- - sim: dict - Simulation parameters including spatial and time calculated - arrays. - """ - if not isinstance(parameters, (type(None), dict)): - raise TypeError( - f"If specified, parameters must be of type dict. Got: {type(parameters)}" - ) - - sim = {} - - if parameters == None: - sim["startTime"] = -150.0 # [s] Starting time - sim["endTime"] = 150.0 # [s] Ending time - sim["dT"] = 1.0 # [s] Time-step size - sim["T0"] = 0.0 # [s] Time of maximum event - - sim["startX"] = -300.0 # [m] Start of simulation space - sim["endX"] = 300.0 # [m] End of simulation space - sim["dX"] = 1.0 # [m] Horiontal spacing - sim["X0"] = 0.0 # [m] Position of maximum event - else: - sim = parameters - - # maximum timestep index - sim["maxIT"] = int(np.ceil((sim["endTime"] - sim["startTime"]) / sim["dT"] + 1)) - sim["T"] = np.linspace(sim["startTime"], sim["endTime"], sim["maxIT"]) - - sim["maxIX"] = int(np.ceil((sim["endX"] - sim["startX"]) / sim["dX"] + 1)) - sim["X"] = np.linspace(sim["startX"], sim["endX"], sim["maxIX"]) - - return sim - - -def mler_wave_amp_normalize( - wave_amp, mler, sim, k, frequency_dimension="", to_pandas=True -): - """ - Function that renormalizes the incoming amplitude of the MLER wave - to the desired peak height (peak to MSL). - - Parameters - ---------- - wave_amp: float - Desired wave amplitude (peak to MSL). - mler: pandas DataFrame or xarray Dataset - MLER coefficients generated by 'mler_coefficients' function. - sim: dict - Simulation parameters formatted by output from - 'mler_simulation'. - k: numpy ndarray - Wave number - frequency_dimension: string (optional) - Name of the xarray dimension corresponding to frequency. If not supplied, - defaults to the first dimension. Does not affect pandas input. - to_pandas: bool (optional) - Flag to output pandas instead of xarray. Default = True. - - Returns - ------- - mler_norm : pandas DataFrame or xarray Dataset - MLER coefficients - """ - try: - k = np.array(k) - except: - pass - if not isinstance(mler, (pd.DataFrame, xr.Dataset)): - raise TypeError( - f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" - ) - if not isinstance(wave_amp, (int, float)): - raise TypeError(f"wave_amp must be of type int or float. Got: {type(wave_amp)}") - if not isinstance(sim, dict): - raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k, np.ndarray): - raise TypeError(f"k must be of type ndarray. Got: {type(k)}") - if not isinstance(to_pandas, bool): - raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - - # If input is pandas, convert to xarray - if isinstance(mler, pd.DataFrame): - mler = mler.to_xarray() - - if frequency_dimension == "": - frequency_dimension = list(mler.coords)[0] - freq = mler.coords[frequency_dimension].values * 2 * np.pi - dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - - wave_amp_time = np.zeros((sim["maxIX"], sim["maxIT"])) - for ix, x in enumerate(sim["X"]): - for it, t in enumerate(sim["T"]): - # conditioned wave - wave_amp_time[ix, it] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.cos(freq * (t - sim["T0"]) - k * (x - sim["X0"]) + mler["Phase"]) - ) - - tmp_max_amp = np.max(np.abs(wave_amp_time)) - - # renormalization of wave amplitudes - rescale_fact = np.abs(wave_amp) / np.abs(tmp_max_amp) - - # rescale the wave spectral amplitude coefficients - mler_norm = mler["WaveSpectrum"] * rescale_fact**2 - mler_norm = mler_norm.to_dataset() - mler_norm = mler_norm.assign({"Phase": (frequency_dimension, mler["Phase"].data)}) - - if to_pandas: - mler_norm = mler_norm.to_pandas() - - return mler_norm - - -def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): - """ - Generate the wave amplitude time series at X0 from the calculated - MLER coefficients - - Parameters - ---------- - rao: numpy ndarray - Response amplitude operator. - mler: pandas DataFrame or xarray Dataset - MLER coefficients dataframe generated from an MLER function. - sim: dict - Simulation parameters formatted by output from - 'mler_simulation'. - k: numpy ndarray - Wave number. - frequency_dimension: string (optional) - Name of the xarray dimension corresponding to frequency. If not supplied, - defaults to the first dimension. Does not affect pandas input. - to_pandas: bool (optional) - Flag to output pandas instead of xarray. Default = True. - - Returns - ------- - mler_ts: pandas DataFrame or xarray Dataset - Time series of wave height [m] and linear response [*] indexed - by time [s]. - - """ - try: - rao = np.array(rao) - except: - pass - try: - k = np.array(k) - except: - pass - if not isinstance(rao, np.ndarray): - raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") - if not isinstance(mler, (pd.DataFrame, xr.Dataset)): - raise TypeError( - f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" - ) - if not isinstance(sim, dict): - raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k, np.ndarray): - raise TypeError(f"k must be of type ndarray. Got: {type(k)}") - if not isinstance(to_pandas, bool): - raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - - # If input is pandas, convert to xarray - if isinstance(mler, pd.DataFrame): - mler = mler.to_xarray() - - if frequency_dimension == "": - frequency_dimension = list(mler.coords)[0] - freq = mler.coords[frequency_dimension].values * 2 * np.pi - dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - - # calculate the series - wave_amp_time = np.zeros((sim["maxIT"], 2)) - xi = sim["X0"] - for i, ti in enumerate(sim["T"]): - # conditioned wave - wave_amp_time[i, 0] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) - ) - # Response calculation - wave_amp_time[i, 1] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.abs(rao) - * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) - ) - - mler_ts = xr.Dataset( - data_vars={ - "WaveHeight": (["time"], wave_amp_time[:, 0]), - "LinearResponse": (["time"], wave_amp_time[:, 1]), - }, - coords={"time": sim["T"]}, - ) - - if to_pandas: - mler_ts = mler_ts.to_pandas() - - return mler_ts - - -def return_year_value(ppf, return_year, short_term_period_hr): - """ - Calculate the value from a given distribution corresponding to a particular - return year. - - Parameters - ---------- - ppf: callable function of 1 argument - Percentage Point Function (inverse CDF) of short term distribution. - return_year: int, float - Return period in years. - short_term_period_hr: int, float - Short term period the distribution is created from in hours. - - Returns - ------- - value: float - The value corresponding to the return period from the distribution. - """ - if not callable(ppf): - raise TypeError("ppf must be a callable Percentage Point Function") - if not isinstance(return_year, (float, int)): - raise TypeError( - f"return_year must be of type float or int. Got: {type(return_year)}" - ) - if not isinstance(short_term_period_hr, (float, int)): - raise TypeError( - f"short_term_period_hr must be of type float or int. Got: {type(short_term_period_hr)}" - ) - - p = 1 / (return_year * 365.25 * 24 / short_term_period_hr) - - return ppf(1 - p) diff --git a/mhkit/loads/extreme/__init__.py b/mhkit/loads/extreme/__init__.py new file mode 100644 index 000000000..134566faf --- /dev/null +++ b/mhkit/loads/extreme/__init__.py @@ -0,0 +1,39 @@ +""" +This package provides tools and functions for extreme value analysis +and wave data statistics. + +It includes methods for calculating peaks over threshold, estimating +short-term extreme distributions,and performing wave amplitude +normalization for most likely extreme response analysis. +""" + +from .extremes import ( + ste_peaks, + block_maxima, + ste_block_maxima_gev, + ste_block_maxima_gumbel, + ste, + short_term_extreme, + full_seastate_long_term_extreme, +) + +from .mler import ( + mler_coefficients, + mler_simulation, + mler_wave_amp_normalize, + mler_export_time_series, +) + +from .peaks import ( + _peaks_over_threshold, + global_peaks, + number_of_short_term_peaks, + peaks_distribution_weibull, + peaks_distribution_weibull_tail_fit, + automatic_hs_threshold, + peaks_distribution_peaks_over_threshold, +) + +from .sample import ( + return_year_value, +) diff --git a/mhkit/loads/extreme/extremes.py b/mhkit/loads/extreme/extremes.py new file mode 100644 index 000000000..d03b9e5f8 --- /dev/null +++ b/mhkit/loads/extreme/extremes.py @@ -0,0 +1,253 @@ +import numpy as np +from scipy import stats + +import mhkit.loads.extreme as extreme + + +def ste_peaks(peaks_distribution, npeaks): + """ + Estimate the short-term extreme distribution from the peaks + distribution. + + Parameters + ---------- + peaks_distribution: scipy.stats.rv_frozen + Probability distribution of the peaks. + npeaks : float + Number of peaks in short term period. + + Returns + ------- + ste: scipy.stats.rv_frozen + Short-term extreme distribution. + """ + if not callable(peaks_distribution.cdf): + raise TypeError("peaks_distribution must be a scipy.stat distribution.") + if not isinstance(npeaks, float): + raise TypeError(f"npeaks must be of type float. Got: {type(npeaks)}") + + class _ShortTermExtreme(stats.rv_continuous): + def __init__(self, *args, **kwargs): + self.peaks = kwargs.pop("peaks_distribution") + self.npeaks = kwargs.pop("npeaks") + super().__init__(*args, **kwargs) + + def _cdf(self, x): + peaks_cdf = np.array(self.peaks.cdf(x)) + peaks_cdf[np.isnan(peaks_cdf)] = 0.0 + if len(peaks_cdf) == 1: + peaks_cdf = peaks_cdf[0] + return peaks_cdf**self.npeaks + + ste = _ShortTermExtreme( + name="short_term_extreme", peaks_distribution=peaks_distribution, npeaks=npeaks + ) + return ste + + +def block_maxima(t, x, t_st): + """ + Find the block maxima of a time-series. + + The timeseries (t,x) is divided into blocks of length t_st, and the + maxima of each bloock is returned. + + Parameters + ---------- + t : np.array + Time array. + x : np.array + global peaks timeseries. + t_st : float + Short-term period. + + Returns + ------- + block_maxima: np.array + Block maxima (i.e. largest peak in each block). + """ + if not isinstance(t, np.ndarray): + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") + if not isinstance(x, np.ndarray): + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + if not isinstance(t_st, float): + raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") + + nblock = int(t[-1] / t_st) + block_maxima = np.zeros(int(nblock)) + for iblock in range(nblock): + ix = x[(t >= iblock * t_st) & (t < (iblock + 1) * t_st)] + block_maxima[iblock] = np.max(ix) + return block_maxima + + +def ste_block_maxima_gev(block_maxima): + """ + Approximate the short-term extreme distribution using the block + maxima method and the Generalized Extreme Value distribution. + + Parameters + ---------- + block_maxima: np.array + Block maxima (i.e. largest peak in each block). + + Returns + ------- + ste: scipy.stats.rv_frozen + Short-term extreme distribution. + """ + if not isinstance(block_maxima, np.ndarray): + raise TypeError( + f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" + ) + + ste_params = stats.genextreme.fit(block_maxima) + param_names = ["c", "loc", "scale"] + ste_params = {k: v for k, v in zip(param_names, ste_params)} + ste = stats.genextreme(**ste_params) + ste.params = ste_params + return ste + + +def ste_block_maxima_gumbel(block_maxima): + """ + Approximate the short-term extreme distribution using the block + maxima method and the Gumbel (right) distribution. + + Parameters + ---------- + block_maxima: np.array + Block maxima (i.e. largest peak in each block). + + Returns + ------- + ste: scipy.stats.rv_frozen + Short-term extreme distribution. + """ + if not isinstance(block_maxima, np.ndarray): + raise TypeError( + f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" + ) + + ste_params = stats.gumbel_r.fit(block_maxima) + param_names = ["loc", "scale"] + ste_params = {k: v for k, v in zip(param_names, ste_params)} + ste = stats.gumbel_r(**ste_params) + ste.params = ste_params + return ste + + +def ste(t, data, t_st, method): + """ + Alias for `short_term_extreme`. + """ + ste = short_term_extreme(t, data, t_st, method) + return ste + + +def short_term_extreme(t, data, t_st, method): + """ + Approximate the short-term extreme distribution from a + timeseries of the response using chosen method. + + The availabe methods are: 'peaks_weibull', 'peaks_weibull_tail_fit', + 'peaks_over_threshold', 'block_maxima_gev', and 'block_maxima_gumbel'. + For the block maxima methods the timeseries needs to be many times + longer than the short-term period. For the peak-fitting methods the + timeseries can be of arbitrary length. + + Parameters + ---------- + t: np.array + Time array. + data: np.array + Response timeseries. + t_st: float + Short-term period. + method : string + Method for estimating the short-term extreme distribution. + + Returns + ------- + ste: scipy.stats.rv_frozen + Short-term extreme distribution. + """ + if not isinstance(t, np.ndarray): + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") + if not isinstance(data, np.ndarray): + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") + if not isinstance(t_st, float): + raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") + if not isinstance(method, str): + raise TypeError(f"method must be of type string. Got: {type(method)}") + + peaks_methods = { + "peaks_weibull": extreme.peaks_distribution_weibull, + "peaks_weibull_tail_fit": extreme.peaks_distribution_weibull_tail_fit, + "peaks_over_threshold": extreme.peaks_distribution_peaks_over_threshold, + } + blockmaxima_methods = { + "block_maxima_gev": ste_block_maxima_gev, + "block_maxima_gumbel": ste_block_maxima_gumbel, + } + + if method in peaks_methods.keys(): + fit_peaks = peaks_methods[method] + _, peaks = extreme.global_peaks(t, data) + npeaks = len(peaks) + time = t[-1] - t[0] + nst = extreme.number_of_short_term_peaks(npeaks, time, t_st) + peaks_dist = fit_peaks(peaks) + ste = ste_peaks(peaks_dist, nst) + elif method in blockmaxima_methods.keys(): + fit_maxima = blockmaxima_methods[method] + maxima = block_maxima(t, data, t_st) + ste = fit_maxima(maxima) + else: + print("Passed `method` not found.") + return ste + + +def full_seastate_long_term_extreme(ste, weights): + """ + Return the long-term extreme distribution of a response of + interest using the full sea state approach. + + Parameters + ---------- + ste: list[scipy.stats.rv_frozen] + Short-term extreme distribution of the quantity of interest for + each sample sea state. + weights: list, np.ndarray + The weights from the full sea state sampling + + Returns + ------- + ste: scipy.stats.rv_frozen + Short-term extreme distribution. + """ + if not isinstance(ste, list): + raise TypeError( + f"ste must be of type list[scipy.stats.rv_frozen]. Got: {type(ste)}" + ) + if not isinstance(weights, (list, np.ndarray)): + raise TypeError( + f"weights must be of type list or np.ndarray. Got: {type(weights)}" + ) + + class _LongTermExtreme(stats.rv_continuous): + def __init__(self, *args, **kwargs): + weights = kwargs.pop("weights") + # make sure weights add to 1.0 + self.weights = weights / np.sum(weights) + self.ste = kwargs.pop("ste") + self.n = len(self.weights) + super().__init__(*args, **kwargs) + + def _cdf(self, x): + f = 0.0 + for w_i, ste_i in zip(self.weights, self.ste): + f += w_i * ste_i.cdf(x) + return f + + return _LongTermExtreme(name="long_term_extreme", weights=weights, ste=ste) diff --git a/mhkit/loads/extreme/mler.py b/mhkit/loads/extreme/mler.py new file mode 100644 index 000000000..1ea251808 --- /dev/null +++ b/mhkit/loads/extreme/mler.py @@ -0,0 +1,363 @@ +import numpy as np +import pandas as pd +import xarray as xr +from scipy import stats, optimize, signal +from mhkit.wave.resource import frequency_moment +from mhkit.utils import upcrossing, custom + + +def mler_coefficients( + rao, wave_spectrum, response_desired, frequency_dimension="", to_pandas=True +): + """ + Calculate MLER (most likely extreme response) coefficients from a + sea state spectrum and a response RAO. + + Parameters + ---------- + rao: numpy ndarray + Response amplitude operator. + wave_spectrum: pandas Series, pandas DataFrame, xarray DataArray, or xarray Dataset + Wave spectral density [m^2/Hz] indexed by frequency [Hz]. + DataFrame and Dataset inputs should only have one data variable + response_desired: int or float + Desired response, units should correspond to a motion RAO or + units of force for a force RAO. + frequency_dimension: string (optional) + Name of the xarray dimension corresponding to frequency. If not supplied, + defaults to the first dimension. Does not affect pandas input. + to_pandas: bool (optional) + Flag to output pandas instead of xarray. Default = True. + + Returns + ------- + mler: pandas DataFrame or xarray Dataset + DataFrame containing conditioned wave spectral amplitude + coefficient [m^2-s], and Phase [rad] indexed by freq [Hz]. + """ + try: + rao = np.array(rao) + except: + pass + + if not isinstance(rao, np.ndarray): + raise TypeError(f"rao must be of type np.ndarray. Got: {type(rao)}") + if not isinstance( + wave_spectrum, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset) + ): + raise TypeError( + f"wave_spectrum must be of type pd.Series, pd.DataFrame, xr.DataArray, or xr.Dataset. Got: {type(wave_spectrum)}" + ) + if not isinstance(response_desired, (int, float)): + raise TypeError( + f"response_desired must be of type int or float. Got: {type(response_desired)}" + ) + if not isinstance(to_pandas, bool): + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") + + # Convert input to xarray DataArray + if isinstance(wave_spectrum, (pd.Series, pd.DataFrame)): + wave_spectrum = wave_spectrum.squeeze().to_xarray() + + if isinstance(wave_spectrum, xr.Dataset): + if len(wave_spectrum.data_vars) > 1: + raise ValueError( + f"wave_spectrum can only contain one variable. Got {list(wave_spectrum.data_vars)}." + ) + wave_spectrum = wave_spectrum.to_array() + + if frequency_dimension == "": + frequency_dimension = list(wave_spectrum.coords)[0] + + # convert from Hz to rad/s + freq_hz = wave_spectrum.coords[frequency_dimension].values + freq = freq_hz * (2 * np.pi) + wave_spectrum = wave_spectrum.to_numpy() / (2 * np.pi) + + # get frequency step + dw = 2.0 * np.pi / (len(freq) - 1) + + # Note: waves.A is "S" in Quon2016; 'waves' naming convention + # matches WEC-Sim conventions (EWQ) + # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 + spectrum_r = np.abs(rao) ** 2 * (2 * wave_spectrum) + + # calculate spectral moments and other important spectral values. + m0 = (frequency_moment(pd.Series(spectrum_r, index=freq), 0)).iloc[0, 0] + m1 = (frequency_moment(pd.Series(spectrum_r, index=freq), 1)).iloc[0, 0] + m2 = (frequency_moment(pd.Series(spectrum_r, index=freq), 2)).iloc[0, 0] + wBar = m1 / m0 + + # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 + # Drummen version. Dietz has negative of this. + _coeff_a_rn = ( + np.abs(rao) + * np.sqrt(2 * wave_spectrum * dw) + * ((m2 - freq * m1) + wBar * (freq * m0 - m1)) + / (m0 * m2 - m1**2) + ) + + # save the new spectral info to pass out + # Phase delay should be a positive number in this convention (AP) + _phase = -np.unwrap(np.angle(rao)) + + # for negative values of Amp, shift phase by pi and flip sign + # for negative amplitudes, add a pi phase shift, then flip sign on + # negative Amplitudes + _phase[_coeff_a_rn < 0] -= np.pi + _coeff_a_rn[_coeff_a_rn < 0] *= -1 + + # calculate the conditioned spectrum [m^2-s/rad] + _s = wave_spectrum * _coeff_a_rn**2 * response_desired**2 + _a = 2 * wave_spectrum * _coeff_a_rn**2 * response_desired**2 + + # if the response amplitude we ask for is negative, we will add + # a pi phase shift to the phase information. This is because + # the sign of self.desiredRespAmp is lost in the squaring above. + # Ordinarily this would be put into the final equation, but we + # are shaping the wave information so that it is buried in the + # new spectral information, S. (AP) + if response_desired < 0: + _phase += np.pi + + mler = xr.Dataset( + data_vars={ + "WaveSpectrum": (["frequency"], _s), + "Phase": (["frequency"], _phase), + }, + coords={"frequency": freq_hz}, + ) + mler.fillna(0) + + if to_pandas: + mler = mler.to_pandas() + + return mler + + +def mler_simulation(parameters=None): + """ + Define the simulation parameters that are used in various MLER + functionalities. + + See `extreme_response_contour_example.ipynb` example for how this is + useful. If no input is given, then default values are returned. + + Parameters + ---------- + parameters: dict (optional) + Simulation parameters. + Keys: + ----- + 'startTime': starting time [s] + 'endTime': ending time [s] + 'dT': time-step size [s] + 'T0': time of maximum event [s] + 'startx': start of simulation space [m] + 'endX': end of simulation space [m] + 'dX': horizontal spacing [m] + 'X': position of maximum event [m] + + Returns + ------- + sim: dict + Simulation parameters including spatial and time calculated + arrays. + """ + if not isinstance(parameters, (type(None), dict)): + raise TypeError( + f"If specified, parameters must be of type dict. Got: {type(parameters)}" + ) + + sim = {} + + if parameters == None: + sim["startTime"] = -150.0 # [s] Starting time + sim["endTime"] = 150.0 # [s] Ending time + sim["dT"] = 1.0 # [s] Time-step size + sim["T0"] = 0.0 # [s] Time of maximum event + + sim["startX"] = -300.0 # [m] Start of simulation space + sim["endX"] = 300.0 # [m] End of simulation space + sim["dX"] = 1.0 # [m] Horiontal spacing + sim["X0"] = 0.0 # [m] Position of maximum event + else: + sim = parameters + + # maximum timestep index + sim["maxIT"] = int(np.ceil((sim["endTime"] - sim["startTime"]) / sim["dT"] + 1)) + sim["T"] = np.linspace(sim["startTime"], sim["endTime"], sim["maxIT"]) + + sim["maxIX"] = int(np.ceil((sim["endX"] - sim["startX"]) / sim["dX"] + 1)) + sim["X"] = np.linspace(sim["startX"], sim["endX"], sim["maxIX"]) + + return sim + + +def mler_wave_amp_normalize( + wave_amp, mler, sim, k, frequency_dimension="", to_pandas=True +): + """ + Function that renormalizes the incoming amplitude of the MLER wave + to the desired peak height (peak to MSL). + + Parameters + ---------- + wave_amp: float + Desired wave amplitude (peak to MSL). + mler: pandas DataFrame or xarray Dataset + MLER coefficients generated by 'mler_coefficients' function. + sim: dict + Simulation parameters formatted by output from + 'mler_simulation'. + k: numpy ndarray + Wave number + frequency_dimension: string (optional) + Name of the xarray dimension corresponding to frequency. If not supplied, + defaults to the first dimension. Does not affect pandas input. + to_pandas: bool (optional) + Flag to output pandas instead of xarray. Default = True. + + Returns + ------- + mler_norm : pandas DataFrame or xarray Dataset + MLER coefficients + """ + try: + k = np.array(k) + except: + pass + if not isinstance(mler, (pd.DataFrame, xr.Dataset)): + raise TypeError( + f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" + ) + if not isinstance(wave_amp, (int, float)): + raise TypeError(f"wave_amp must be of type int or float. Got: {type(wave_amp)}") + if not isinstance(sim, dict): + raise TypeError(f"sim must be of type dict. Got: {type(sim)}") + if not isinstance(k, np.ndarray): + raise TypeError(f"k must be of type ndarray. Got: {type(k)}") + if not isinstance(to_pandas, bool): + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") + + # If input is pandas, convert to xarray + if isinstance(mler, pd.DataFrame): + mler = mler.to_xarray() + + if frequency_dimension == "": + frequency_dimension = list(mler.coords)[0] + freq = mler.coords[frequency_dimension].values * 2 * np.pi + dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta + + wave_amp_time = np.zeros((sim["maxIX"], sim["maxIT"])) + for ix, x in enumerate(sim["X"]): + for it, t in enumerate(sim["T"]): + # conditioned wave + wave_amp_time[ix, it] = np.sum( + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.cos(freq * (t - sim["T0"]) - k * (x - sim["X0"]) + mler["Phase"]) + ) + + tmp_max_amp = np.max(np.abs(wave_amp_time)) + + # renormalization of wave amplitudes + rescale_fact = np.abs(wave_amp) / np.abs(tmp_max_amp) + + # rescale the wave spectral amplitude coefficients + mler_norm = mler["WaveSpectrum"] * rescale_fact**2 + mler_norm = mler_norm.to_dataset() + mler_norm = mler_norm.assign({"Phase": (frequency_dimension, mler["Phase"].data)}) + + if to_pandas: + mler_norm = mler_norm.to_pandas() + + return mler_norm + + +def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): + """ + Generate the wave amplitude time series at X0 from the calculated + MLER coefficients + + Parameters + ---------- + rao: numpy ndarray + Response amplitude operator. + mler: pandas DataFrame or xarray Dataset + MLER coefficients dataframe generated from an MLER function. + sim: dict + Simulation parameters formatted by output from + 'mler_simulation'. + k: numpy ndarray + Wave number. + frequency_dimension: string (optional) + Name of the xarray dimension corresponding to frequency. If not supplied, + defaults to the first dimension. Does not affect pandas input. + to_pandas: bool (optional) + Flag to output pandas instead of xarray. Default = True. + + Returns + ------- + mler_ts: pandas DataFrame or xarray Dataset + Time series of wave height [m] and linear response [*] indexed + by time [s]. + + """ + try: + rao = np.array(rao) + except: + pass + try: + k = np.array(k) + except: + pass + if not isinstance(rao, np.ndarray): + raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") + if not isinstance(mler, (pd.DataFrame, xr.Dataset)): + raise TypeError( + f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" + ) + if not isinstance(sim, dict): + raise TypeError(f"sim must be of type dict. Got: {type(sim)}") + if not isinstance(k, np.ndarray): + raise TypeError(f"k must be of type ndarray. Got: {type(k)}") + if not isinstance(to_pandas, bool): + raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") + + # If input is pandas, convert to xarray + if isinstance(mler, pd.DataFrame): + mler = mler.to_xarray() + + if frequency_dimension == "": + frequency_dimension = list(mler.coords)[0] + freq = mler.coords[frequency_dimension].values * 2 * np.pi + dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta + + # calculate the series + wave_amp_time = np.zeros((sim["maxIT"], 2)) + xi = sim["X0"] + for i, ti in enumerate(sim["T"]): + # conditioned wave + wave_amp_time[i, 0] = np.sum( + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) + ) + # Response calculation + wave_amp_time[i, 1] = np.sum( + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.abs(rao) + * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) + ) + + mler_ts = xr.Dataset( + data_vars={ + "WaveHeight": (["time"], wave_amp_time[:, 0]), + "LinearResponse": (["time"], wave_amp_time[:, 1]), + }, + coords={"time": sim["T"]}, + ) + + if to_pandas: + mler_ts = mler_ts.to_pandas() + + return mler_ts diff --git a/mhkit/loads/extreme/peaks.py b/mhkit/loads/extreme/peaks.py new file mode 100644 index 000000000..6cfeb2dee --- /dev/null +++ b/mhkit/loads/extreme/peaks.py @@ -0,0 +1,468 @@ +""" +This module provides utilities for analyzing wave data, specifically +for identifying significant wave heights and estimating wave peak +distributions using statistical methods. It includes functionalities +for calculating the window size for independence based on the +auto-correlation function, identifying peaks over a specified +threshold, determining the global peaks of a zero-centered response +time-series, estimating the number of short-term peaks, and fitting +Weibull distributions to wave peak data. + +Functions: +- _calculate_window_size: Calculates the window size for peak + independence using the auto-correlation function of wave peaks. +- _peaks_over_threshold: Identifies peaks over a specified + threshold and returns independent storm peak values adjusted by + the threshold. +- global_peaks: Identifies global peaks in a zero-centered + response time-series based on consecutive zero up-crossings. +- number_of_short_term_peaks: Estimates the number of peaks within a + specified short-term period. +- peaks_distribution_weibull: Estimates the peaks distribution by + fitting a Weibull distribution to the peaks of the response. +- peaks_distribution_weibull_tail_fit: Estimates the peaks distribution + using the Weibull tail fit method. +- automatic_hs_threshold: Determines the best significant wave height + threshold for the peaks-over-threshold method. +- peaks_distribution_peaks_over_threshold: Estimates the peaks + distribution using the peaks over threshold method by fitting a + generalized Pareto distribution. + +Each function is designed to operate on wave data represented as NumPy +arrays, utilizing statistical methods from the SciPy library to +perform analyses and estimations. + +References: +- Neary, V. S., S. Ahn, B. E. Seng, M. N. Allahdadi, T. Wang, Z. Yang, + and R. He (2020). "Characterization of Extreme Wave Conditions for + Wave Energy Converter Design and Project Risk Assessment.” J. Mar. + Sci. Eng. 2020, 8(4), 289; https://doi.org/10.3390/jmse8040289. + +""" + +from typing import List, Tuple, Optional + +import numpy as np +from numpy.typing import NDArray +from scipy import stats, optimize, signal +from scipy.stats import rv_continuous + +from mhkit.utils import upcrossing + + +def _calculate_window_size(peaks: NDArray[np.float64], sampling_rate: float) -> float: + """ + Calculate the window size for independence based on the auto-correlation function. + + Parameters + ---------- + peaks : np.ndarray + A NumPy array of peak values from a time series. + sampling_rate : float + The sampling rate of the time series in Hz (samples per second). + + Returns + ------- + float + The window size determined by the auto-correlation function. + """ + nlags = int(14 * 24 / sampling_rate) + x = peaks - np.mean(peaks) + acf = signal.correlate(x, x, mode="full") + lag = signal.correlation_lags(len(x), len(x), mode="full") + idx_zero = np.argmax(lag == 0) + positive_lag = lag[idx_zero : idx_zero + nlags + 1] + acf_positive = acf[idx_zero : idx_zero + nlags + 1] / acf[idx_zero] + + window_size = sampling_rate * positive_lag[acf_positive < 0.5][0] + return window_size / sampling_rate + + +def _peaks_over_threshold( + peaks: NDArray[np.float64], threshold: float, sampling_rate: float +) -> List[float]: + """ + Identifies peaks in a time series that are over a specified threshold and + returns a list of independent storm peak values adjusted by the threshold. + Independence is determined by a window size calculated from the auto-correlation + function to ensure that peaks are separated by at least the duration + corresponding to the first significant drop in auto-correlation. + + Parameters + ---------- + peaks : np.ndarray + A NumPy array of peak values from a time series. + threshold : float + The percentile threshold (0-1) to identify significant peaks. + For example, 0.95 for the 95th percentile. + sampling_rate : float + The sampling rate of the time series in Hz (samples per second). + + Returns + ------- + List[float] + A list of peak values exceeding the specified threshold, adjusted + for independence based on the calculated window size. + + Notes + ----- + This function requires the global_peaks function to identify the + maxima between consecutive zero up-crossings and uses the signal processing + capabilities from scipy.signal for calculating the auto-correlation function. + """ + threshold_unit = np.percentile(peaks, 100 * threshold, method="hazen") + idx_peaks = np.arange(len(peaks)) + idx_storm_peaks, storm_peaks = global_peaks(idx_peaks, peaks - threshold_unit) + idx_storm_peaks = idx_storm_peaks.astype(int) + + independent_storm_peaks = [storm_peaks[0]] + idx_independent_storm_peaks = [idx_storm_peaks[0]] + + window = _calculate_window_size(peaks, sampling_rate) + + for idx in idx_storm_peaks[1:]: + if (idx - idx_independent_storm_peaks[-1]) > window: + idx_independent_storm_peaks.append(idx) + independent_storm_peaks.append(peaks[idx] - threshold_unit) + elif peaks[idx] > independent_storm_peaks[-1]: + idx_independent_storm_peaks[-1] = idx + independent_storm_peaks[-1] = peaks[idx] - threshold_unit + + return independent_storm_peaks + + +def global_peaks(t: np.ndarray, data: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + """ + Find the global peaks of a zero-centered response time-series. + + The global peaks are the maxima between consecutive zero + up-crossings. + + Parameters + ---------- + t: np.array + Time array. + data: np.array + Response time-series. + + Returns + ------- + t_peaks: np.array + Time array for peaks + peaks: np.array + Peak values of the response time-series + """ + if not isinstance(t, np.ndarray): + raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") + if not isinstance(data, np.ndarray): + raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") + + # Find zero up-crossings + inds = upcrossing(t, data) + + # We also include the final point in the dataset + inds = np.append(inds, len(data) - 1) + + # As we want to return both the time and peak + # values, look for the index at the peak. + # The call to argmax gives us the index within the + # upcrossing period. Therefore to get the index in the + # original array we need to add on the index that + # starts the zero crossing period, ind1. + def find_peak_index(ind1, ind2): + return np.argmax(data[ind1:ind2]) + ind1 + + peak_inds = np.array( + [find_peak_index(ind1, inds[i + 1]) for i, ind1 in enumerate(inds[:-1])], + dtype=int, + ) + + return t[peak_inds], data[peak_inds] + + +def number_of_short_term_peaks(n: int, t: float, t_st: float) -> float: + """ + Estimate the number of peaks in a specified period. + + Parameters + ---------- + n : int + Number of peaks in analyzed timeseries. + t : float + Length of time of analyzed timeseries. + t_st: float + Short-term period for which to estimate the number of peaks. + + Returns + ------- + n_st : float + Number of peaks in short term period. + """ + if not isinstance(n, int): + raise TypeError(f"n must be of type int. Got: {type(n)}") + if not isinstance(t, float): + raise TypeError(f"t must be of type float. Got: {type(t)}") + if not isinstance(t_st, float): + raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") + + return n * t_st / t + + +def peaks_distribution_weibull(x: NDArray[np.float_]) -> rv_continuous: + """ + Estimate the peaks distribution by fitting a Weibull + distribution to the peaks of the response. + + The fitted parameters can be accessed through the `params` field of + the returned distribution. + + Parameters + ---------- + x : NDArray[np.float_] + Global peaks. + + Returns + ------- + peaks: scipy.stats.rv_frozen + Probability distribution of the peaks. + """ + if not isinstance(x, np.ndarray): + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + + # peaks distribution + peaks_params = stats.exponweib.fit(x, f0=1, floc=0) + param_names = ["a", "c", "loc", "scale"] + peaks_params = {k: v for k, v in zip(param_names, peaks_params)} + peaks = stats.exponweib(**peaks_params) + # save the parameter info + peaks.params = peaks_params + return peaks + + +def peaks_distribution_weibull_tail_fit(x: NDArray[np.float_]) -> rv_continuous: + """ + Estimate the peaks distribution using the Weibull tail fit + method. + + The fitted parameters can be accessed through the `params` field of + the returned distribution. + + Parameters + ---------- + x : np.array + Global peaks. + + Returns + ------- + peaks: scipy.stats.rv_frozen + Probability distribution of the peaks. + """ + if not isinstance(x, np.ndarray): + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + + # Initial guess for Weibull parameters + p0 = stats.exponweib.fit(x, f0=1, floc=0) + p0 = np.array([p0[1], p0[3]]) + # Approximate CDF + x = np.sort(x) + npeaks = len(x) + F = np.zeros(npeaks) + for i in range(npeaks): + F[i] = i / (npeaks + 1.0) + # Divide into seven sets & fit Weibull + subset_shape_params = np.zeros(7) + subset_scale_params = np.zeros(7) + set_lim = np.arange(0.60, 0.90, 0.05) + + def weibull_cdf(x, c, s): + return stats.exponweib(a=1, c=c, loc=0, scale=s).cdf(x) + + for local_set in range(7): + x_set = x[(F > set_lim[local_set])] + f_set = F[(F > set_lim[local_set])] + # pylint: disable=W0632 + popt, _ = optimize.curve_fit(weibull_cdf, x_set, f_set, p0=p0) + subset_shape_params[local_set] = popt[0] + subset_scale_params[local_set] = popt[1] + # peaks distribution + peaks_params = [1, np.mean(subset_shape_params), 0, np.mean(subset_scale_params)] + param_names = ["a", "c", "loc", "scale"] + peaks_params = {k: v for k, v in zip(param_names, peaks_params)} + peaks = stats.exponweib(**peaks_params) + # save the parameter info + peaks.params = peaks_params + peaks.subset_shape_params = subset_shape_params + peaks.subset_scale_params = subset_scale_params + return peaks + + +def automatic_hs_threshold( + peaks: NDArray[np.float_], + sampling_rate: float, + initial_threshold_range: Tuple[float, float, float] = (0.990, 0.995, 0.001), + max_refinement: int = 5, +) -> Tuple[float, float]: + """ + Find the best significant wave height threshold for the + peaks-over-threshold method. + + This method was developed by: + + > Neary, V. S., S. Ahn, B. E. Seng, M. N. Allahdadi, T. Wang, Z. Yang and R. He (2020). + > "Characterization of Extreme Wave Conditions for Wave Energy Converter Design and Project Risk Assessment.” + > J. Mar. Sci. Eng. 2020, 8(4), 289; https://doi.org/10.3390/jmse8040289. + + Please cite this paper if using this method. + + After all thresholds in the initial range are evaluated, the search + range is refined around the optimal point until either (i) there + is minimal change from the previous refinement results, (ii) the + number of data points become smaller than about 1 per year, or (iii) + the maximum number of iterations is reached. + + Parameters + ---------- + peaks: NDArray[np.float_] + Peak values of the response time-series. + sampling_rate: float + Sampling rate in hours. + initial_threshold_range: Tuple[float, float, float] + Initial range of thresholds to search. Described as + (min, max, step). + max_refinement: int + Maximum number of times to refine the search range. + + Returns + ------- + Tuple[float, float] + The best threshold and its corresponding unit. + + """ + if not isinstance(sampling_rate, (float, int)): + raise TypeError( + f"sampling_rate must be of type float or int. Got: {type(sampling_rate)}" + ) + if not isinstance(peaks, np.ndarray): + raise TypeError(f"peaks must be of type np.ndarray. Got: {type(peaks)}") + if not len(initial_threshold_range) == 3: + raise ValueError( + f"initial_threshold_range must be length 3. Got: {len(initial_threshold_range)}" + ) + if not isinstance(max_refinement, int): + raise TypeError( + f"max_refinement must be of type int. Got: {type(max_refinement)}" + ) + + range_min, range_max, range_step = initial_threshold_range + best_threshold = -1 + years = len(peaks) / (365.25 * 24 / sampling_rate) + + for i in range(max_refinement): + thresholds = np.arange(range_min, range_max, range_step) + correlations = [] + + for threshold in thresholds: + distribution = stats.genpareto + over_threshold = _peaks_over_threshold(peaks, threshold, sampling_rate) + rate_per_year = len(over_threshold) / years + if rate_per_year < 2: + break + distributions_parameters = distribution.fit(over_threshold, floc=0.0) + _, (_, _, correlation) = stats.probplot( + peaks, distributions_parameters, distribution, fit=True + ) + correlations.append(correlation) + + max_i = np.argmax(correlations) + minimal_change = np.abs(best_threshold - thresholds[max_i]) < 0.0005 + best_threshold = thresholds[max_i] + if minimal_change and i < max_refinement - 1: + break + range_step /= 10 + if max_i == len(thresholds) - 1: + range_min = thresholds[max_i - 1] + range_max = thresholds[max_i] + 5 * range_step + elif max_i == 0: + range_min = thresholds[max_i] - 9 * range_step + range_max = thresholds[max_i + 1] + else: + range_min = thresholds[max_i - 1] + range_max = thresholds[max_i + 1] + + best_threshold_unit = np.percentile(peaks, 100 * best_threshold, method="hazen") + return best_threshold, best_threshold_unit + + +def peaks_distribution_peaks_over_threshold( + x: NDArray[np.float_], threshold: Optional[float] = None +) -> rv_continuous: + """ + Estimate the peaks distribution using the peaks over threshold + method. + + This fits a generalized Pareto distribution to all the peaks above + the specified threshold. The distribution is only defined for values + above the threshold and therefore cannot be used to obtain integral + metrics such as the expected value. A typical choice of threshold is + 1.4 standard deviations above the mean. The peaks over threshold + distribution can be accessed through the `pot` field of the returned + peaks distribution. + + Parameters + ---------- + x : NDArray[np.float_] + Global peaks. + threshold : Optional[float] + Threshold value. Only peaks above this value will be used. + Default value calculated as: `np.mean(x) + 1.4 * np.std(x)` + + Returns + ------- + peaks: rv_continuous + Probability distribution of the peaks. + """ + if not isinstance(x, np.ndarray): + raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + if threshold is None: + threshold = np.mean(x) + 1.4 * np.std(x) + if threshold is not None and not isinstance(threshold, float): + raise TypeError( + f"If specified, threshold must be of type float. Got: {type(threshold)}" + ) + + # peaks over threshold + x = np.sort(x) + pot = x[x > threshold] - threshold + npeaks = len(x) + npot = len(pot) + # Fit a generalized Pareto + pot_params = stats.genpareto.fit(pot, floc=0.0) + param_names = ["c", "loc", "scale"] + pot_params = {k: v for k, v in zip(param_names, pot_params)} + pot = stats.genpareto(**pot_params) + # save the parameter info + pot.params = pot_params + + # peaks + class _Peaks(rv_continuous): + def __init__( + self, pot_distribution: rv_continuous, threshold: float, *args, **kwargs + ): + self.pot = pot_distribution + self.threshold = threshold + super().__init__(*args, **kwargs) + + def _cdf(self, x: NDArray[np.float_], *args, **kwargs) -> NDArray[np.float_]: + x = np.atleast_1d(x) + out = np.zeros_like(x) + out[x < self.threshold] = np.NaN + xt = x[x >= self.threshold] + if xt.size != 0: + pot_ccdf = 1.0 - self.pot.cdf(xt - self.threshold, *args, **kwargs) + prop_pot = npot / npeaks + out[x >= self.threshold] = 1.0 - (prop_pot * pot_ccdf) + return out + + peaks = _Peaks(name="peaks", pot_distribution=pot, threshold=threshold) + peaks.pot = pot + return peaks diff --git a/mhkit/loads/extreme/sample.py b/mhkit/loads/extreme/sample.py new file mode 100644 index 000000000..b9c0e0960 --- /dev/null +++ b/mhkit/loads/extreme/sample.py @@ -0,0 +1,33 @@ +def return_year_value(ppf, return_year, short_term_period_hr): + """ + Calculate the value from a given distribution corresponding to a particular + return year. + + Parameters + ---------- + ppf: callable function of 1 argument + Percentage Point Function (inverse CDF) of short term distribution. + return_year: int, float + Return period in years. + short_term_period_hr: int, float + Short term period the distribution is created from in hours. + + Returns + ------- + value: float + The value corresponding to the return period from the distribution. + """ + if not callable(ppf): + raise TypeError("ppf must be a callable Percentage Point Function") + if not isinstance(return_year, (float, int)): + raise TypeError( + f"return_year must be of type float or int. Got: {type(return_year)}" + ) + if not isinstance(short_term_period_hr, (float, int)): + raise TypeError( + f"short_term_period_hr must be of type float or int. Got: {type(short_term_period_hr)}" + ) + + p = 1 / (return_year * 365.25 * 24 / short_term_period_hr) + + return ppf(1 - p) diff --git a/mhkit/tests/loads/test_extreme.py b/mhkit/tests/loads/test_extreme.py index e0ede2e93..2d74f35cc 100644 --- a/mhkit/tests/loads/test_extreme.py +++ b/mhkit/tests/loads/test_extreme.py @@ -42,7 +42,7 @@ def _example_crest_analysis(self, t, signal): return crests, crest_inds def test_global_peaks(self): - peaks_t, peaks_val = loads.extreme.global_peaks(self.t, self.signal) + peaks_t, peaks_val = loads.extremes.global_peaks(self.t, self.signal) test_crests, test_crests_ind = self._example_crest_analysis(self.t, self.signal) From de051ea88c6e297fb05db325d455245d5c4d8846 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 6 Feb 2024 10:01:52 -0700 Subject: [PATCH 59/87] lint --- mhkit/loads/extreme/sample.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/mhkit/loads/extreme/sample.py b/mhkit/loads/extreme/sample.py index b9c0e0960..262cd9821 100644 --- a/mhkit/loads/extreme/sample.py +++ b/mhkit/loads/extreme/sample.py @@ -1,4 +1,23 @@ -def return_year_value(ppf, return_year, short_term_period_hr): +""" +This module provides statistical analysis tools for extreme value +analysis in environmental and engineering applications. It focuses on +estimating values corresponding to specific return periods based on +the statistical distribution of observed or simulated data. + +Functionality: +- return_year_value: Calculates the value from a given distribution + corresponding to a specified return year. This function is particularly + useful for determining design values for engineering structures or for + risk assessment in environmental studies. + +""" + +from typing import Callable + + +def return_year_value( + ppf: Callable[[float], float], return_year: float, short_term_period_hr: float +) -> float: """ Calculate the value from a given distribution corresponding to a particular return year. From b1f7a6a9e4fe08d775a4b23b8b989c4e37ff97bd Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 6 Feb 2024 10:02:20 -0700 Subject: [PATCH 60/87] clean up module docstring --- mhkit/loads/extreme/peaks.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/mhkit/loads/extreme/peaks.py b/mhkit/loads/extreme/peaks.py index 6cfeb2dee..026b3b861 100644 --- a/mhkit/loads/extreme/peaks.py +++ b/mhkit/loads/extreme/peaks.py @@ -1,12 +1,7 @@ """ This module provides utilities for analyzing wave data, specifically for identifying significant wave heights and estimating wave peak -distributions using statistical methods. It includes functionalities -for calculating the window size for independence based on the -auto-correlation function, identifying peaks over a specified -threshold, determining the global peaks of a zero-centered response -time-series, estimating the number of short-term peaks, and fitting -Weibull distributions to wave peak data. +distributions using statistical methods. Functions: - _calculate_window_size: Calculates the window size for peak @@ -28,10 +23,6 @@ distribution using the peaks over threshold method by fitting a generalized Pareto distribution. -Each function is designed to operate on wave data represented as NumPy -arrays, utilizing statistical methods from the SciPy library to -perform analyses and estimations. - References: - Neary, V. S., S. Ahn, B. E. Seng, M. N. Allahdadi, T. Wang, Z. Yang, and R. He (2020). "Characterization of Extreme Wave Conditions for From 13ca14b7233f740c2bf5e7fe3895c0dc3bd9518c Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 6 Feb 2024 10:48:22 -0700 Subject: [PATCH 61/87] fix too many local args --- mhkit/loads/extreme/mler.py | 175 ++++++++++++++++++++++-------------- 1 file changed, 109 insertions(+), 66 deletions(-) diff --git a/mhkit/loads/extreme/mler.py b/mhkit/loads/extreme/mler.py index 1ea251808..2b81486e1 100644 --- a/mhkit/loads/extreme/mler.py +++ b/mhkit/loads/extreme/mler.py @@ -1,14 +1,39 @@ -import numpy as np +""" +This module provides functionalities to calculate and analyze Most +Likely Extreme Response (MLER) coefficients for wave energy converter +design and risk assessment. It includes functions to: + + - Calculate MLER coefficients (`mler_coefficients`) from a sea state + spectrum and a response Amplitude Response Operator (ARO). + - Define and manipulate simulation parameters (`mler_simulation`) used + across various MLER analyses. + - Renormalize the incoming amplitude of the MLER wave + (`mler_wave_amp_normalize`) to match the desired peak height for more + accurate modeling and analysis. + - Export the wave amplitude time series (`mler_export_time_series`) + based on the calculated MLER coefficients for further analysis or + visualization. +""" + +from typing import Union, List, Optional, Dict + import pandas as pd import xarray as xr -from scipy import stats, optimize, signal +import numpy as np +from numpy.typing import NDArray + from mhkit.wave.resource import frequency_moment -from mhkit.utils import upcrossing, custom + +SimulationParameters = Dict[str, Union[float, int, np.ndarray]] def mler_coefficients( - rao, wave_spectrum, response_desired, frequency_dimension="", to_pandas=True -): + rao: Union[NDArray[np.float_], pd.Series, List[float], List[int], xr.DataArray], + wave_spectrum: Union[pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset], + response_desired: Union[int, float], + frequency_dimension: str = "", + to_pandas: bool = True, +) -> Union[pd.DataFrame, xr.Dataset]: """ Calculate MLER (most likely extreme response) coefficients from a sea state spectrum and a response RAO. @@ -35,18 +60,25 @@ def mler_coefficients( DataFrame containing conditioned wave spectral amplitude coefficient [m^2-s], and Phase [rad] indexed by freq [Hz]. """ - try: - rao = np.array(rao) - except: - pass - if not isinstance(rao, np.ndarray): - raise TypeError(f"rao must be of type np.ndarray. Got: {type(rao)}") + if isinstance(rao, (list, pd.Series, xr.DataArray)): + rao_array = np.array(rao) + elif isinstance(rao, np.ndarray): + rao_array = rao + else: + raise TypeError( + "Unsupported type for 'rao'. Must be one of: list, pd.Series, \ + np.ndarray, xr.DataArray." + ) + + if not isinstance(rao_array, np.ndarray): + raise TypeError(f"rao must be of type np.ndarray. Got: {type(rao_array)}") if not isinstance( wave_spectrum, (pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset) ): raise TypeError( - f"wave_spectrum must be of type pd.Series, pd.DataFrame, xr.DataArray, or xr.Dataset. Got: {type(wave_spectrum)}" + f"wave_spectrum must be of type pd.Series, pd.DataFrame, " + f"xr.DataArray, or xr.Dataset. Got: {type(wave_spectrum)}" ) if not isinstance(response_desired, (int, float)): raise TypeError( @@ -70,36 +102,38 @@ def mler_coefficients( frequency_dimension = list(wave_spectrum.coords)[0] # convert from Hz to rad/s - freq_hz = wave_spectrum.coords[frequency_dimension].values - freq = freq_hz * (2 * np.pi) + freq_hz = wave_spectrum.coords[frequency_dimension].values * (2 * np.pi) wave_spectrum = wave_spectrum.to_numpy() / (2 * np.pi) # get frequency step - dw = 2.0 * np.pi / (len(freq) - 1) + dw = 2.0 * np.pi / (len(freq_hz) - 1) # Note: waves.A is "S" in Quon2016; 'waves' naming convention # matches WEC-Sim conventions (EWQ) # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 - spectrum_r = np.abs(rao) ** 2 * (2 * wave_spectrum) + spectrum_r = np.abs(rao_array) ** 2 * (2 * wave_spectrum) # calculate spectral moments and other important spectral values. - m0 = (frequency_moment(pd.Series(spectrum_r, index=freq), 0)).iloc[0, 0] - m1 = (frequency_moment(pd.Series(spectrum_r, index=freq), 1)).iloc[0, 0] - m2 = (frequency_moment(pd.Series(spectrum_r, index=freq), 2)).iloc[0, 0] - wBar = m1 / m0 + m0 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 0).iloc[0, 0] + m1_m2 = ( + frequency_moment(pd.Series(spectrum_r, index=freq_hz), 1).iloc[0, 0], + frequency_moment(pd.Series(spectrum_r, index=freq_hz), 2).iloc[0, 0], + ) # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 # Drummen version. Dietz has negative of this. _coeff_a_rn = ( np.abs(rao) * np.sqrt(2 * wave_spectrum * dw) - * ((m2 - freq * m1) + wBar * (freq * m0 - m1)) - / (m0 * m2 - m1**2) + * ( + (m1_m2[1] - freq_hz * m1_m2[0]) + + (m1_m2[0] / m0) * (freq_hz * m0 - m1_m2[0]) + ) + / (m0 * m1_m2[1] - m1_m2[0] ** 2) ) - # save the new spectral info to pass out # Phase delay should be a positive number in this convention (AP) - _phase = -np.unwrap(np.angle(rao)) + _phase = -np.unwrap(np.angle(rao_array)) # for negative values of Amp, shift phase by pi and flip sign # for negative amplitudes, add a pi phase shift, then flip sign on @@ -108,8 +142,7 @@ def mler_coefficients( _coeff_a_rn[_coeff_a_rn < 0] *= -1 # calculate the conditioned spectrum [m^2-s/rad] - _s = wave_spectrum * _coeff_a_rn**2 * response_desired**2 - _a = 2 * wave_spectrum * _coeff_a_rn**2 * response_desired**2 + conditioned_spectrum = wave_spectrum * _coeff_a_rn**2 * response_desired**2 # if the response amplitude we ask for is negative, we will add # a pi phase shift to the phase information. This is because @@ -121,21 +154,20 @@ def mler_coefficients( _phase += np.pi mler = xr.Dataset( - data_vars={ - "WaveSpectrum": (["frequency"], _s), - "Phase": (["frequency"], _phase), + { + "WaveSpectrum": (["frequency"], conditioned_spectrum), + "Phase": (["frequency"], _phase + np.pi * (response_desired < 0)), }, coords={"frequency": freq_hz}, ) mler.fillna(0) - if to_pandas: - mler = mler.to_pandas() + return mler.to_pandas() if to_pandas else mler - return mler - -def mler_simulation(parameters=None): +def mler_simulation( + parameters: Optional[SimulationParameters] = None, +) -> SimulationParameters: """ Define the simulation parameters that are used in various MLER functionalities. @@ -149,14 +181,19 @@ def mler_simulation(parameters=None): Simulation parameters. Keys: ----- - 'startTime': starting time [s] - 'endTime': ending time [s] - 'dT': time-step size [s] - 'T0': time of maximum event [s] - 'startx': start of simulation space [m] - 'endX': end of simulation space [m] - 'dX': horizontal spacing [m] - 'X': position of maximum event [m] + - 'startTime': starting time [s] + - 'endTime': ending time [s] + - 'dT': time-step size [s] + - 'T0': time of maximum event [s] + - 'startx': start of simulation space [m] + - 'endX': end of simulation space [m] + - 'dX': horizontal spacing [m] + - 'X': position of maximum event [m] + The following keys are calculated from the above parameters: + - 'maxIT': int, maximum timestep index + - 'T': np.ndarray, time array + - 'maxIX': int, maximum index for space + - 'X': np.ndarray, space array Returns ------- @@ -171,12 +208,11 @@ def mler_simulation(parameters=None): sim = {} - if parameters == None: + if parameters is None: sim["startTime"] = -150.0 # [s] Starting time sim["endTime"] = 150.0 # [s] Ending time sim["dT"] = 1.0 # [s] Time-step size sim["T0"] = 0.0 # [s] Time of maximum event - sim["startX"] = -300.0 # [m] Start of simulation space sim["endX"] = 300.0 # [m] End of simulation space sim["dX"] = 1.0 # [m] Horiontal spacing @@ -195,8 +231,13 @@ def mler_simulation(parameters=None): def mler_wave_amp_normalize( - wave_amp, mler, sim, k, frequency_dimension="", to_pandas=True -): + wave_amp: float, + mler: Union[pd.DataFrame, xr.Dataset], + sim: SimulationParameters, + k: Union[NDArray[np.float_], List[float], pd.Series], + frequency_dimension: str = "", + to_pandas: bool = True, +) -> Union[pd.DataFrame, xr.Dataset]: """ Function that renormalizes the incoming amplitude of the MLER wave to the desired peak height (peak to MSL). @@ -223,10 +264,8 @@ def mler_wave_amp_normalize( mler_norm : pandas DataFrame or xarray Dataset MLER coefficients """ - try: - k = np.array(k) - except: - pass + if not isinstance(k, np.ndarray): + k = np.array(k, dtype=float) if not isinstance(mler, (pd.DataFrame, xr.Dataset)): raise TypeError( f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" @@ -274,7 +313,14 @@ def mler_wave_amp_normalize( return mler_norm -def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): +def mler_export_time_series( + rao: Union[NDArray[np.float_], List[float], pd.Series], + mler: Union[pd.DataFrame, xr.Dataset], + sim: SimulationParameters, + k: Union[NDArray[np.float_], List[float], pd.Series], + frequency_dimension: str = "", + to_pandas: bool = True, +) -> Union[pd.DataFrame, xr.Dataset]: """ Generate the wave amplitude time series at X0 from the calculated MLER coefficients @@ -303,24 +349,19 @@ def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas by time [s]. """ - try: - rao = np.array(rao) - except: - pass - try: - k = np.array(k) - except: - pass - if not isinstance(rao, np.ndarray): - raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") + rao_array = np.array(rao, dtype=float) if not isinstance(rao, np.ndarray) else rao + k_array = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k + + if not isinstance(rao_array, np.ndarray): + raise TypeError(f"rao must be of type ndarray. Got: {type(rao_array)}") if not isinstance(mler, (pd.DataFrame, xr.Dataset)): raise TypeError( f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" ) if not isinstance(sim, dict): raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k, np.ndarray): - raise TypeError(f"k must be of type ndarray. Got: {type(k)}") + if not isinstance(k_array, np.ndarray): + raise TypeError(f"k must be of type ndarray. Got: {type(k_array)}") if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") @@ -340,13 +381,15 @@ def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas # conditioned wave wave_amp_time[i, 0] = np.sum( np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) + * np.cos( + freq * (ti - sim["T0"]) + mler["Phase"] - k_array * (xi - sim["X0"]) + ) ) # Response calculation wave_amp_time[i, 1] = np.sum( np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.abs(rao) - * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) + * np.abs(rao_array) + * np.cos(freq * (ti - sim["T0"]) - k_array * (xi - sim["X0"])) ) mler_ts = xr.Dataset( From d25369aeb9e7a99dd363ac45c6b0e7a381b46c77 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 6 Feb 2024 14:59:27 -0700 Subject: [PATCH 62/87] linting --- mhkit/loads/extreme/mler.py | 247 +++++++++++++++++++++++++----------- 1 file changed, 172 insertions(+), 75 deletions(-) diff --git a/mhkit/loads/extreme/mler.py b/mhkit/loads/extreme/mler.py index 2b81486e1..8ba1cfb2b 100644 --- a/mhkit/loads/extreme/mler.py +++ b/mhkit/loads/extreme/mler.py @@ -15,7 +15,7 @@ visualization. """ -from typing import Union, List, Optional, Dict +from typing import Union, List, Optional, Dict, Any import pandas as pd import xarray as xr @@ -106,7 +106,7 @@ def mler_coefficients( wave_spectrum = wave_spectrum.to_numpy() / (2 * np.pi) # get frequency step - dw = 2.0 * np.pi / (len(freq_hz) - 1) + d_w = 2.0 * np.pi / (len(freq_hz) - 1) # Note: waves.A is "S" in Quon2016; 'waves' naming convention # matches WEC-Sim conventions (EWQ) @@ -114,7 +114,7 @@ def mler_coefficients( spectrum_r = np.abs(rao_array) ** 2 * (2 * wave_spectrum) # calculate spectral moments and other important spectral values. - m0 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 0).iloc[0, 0] + m_0 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 0).iloc[0, 0] m1_m2 = ( frequency_moment(pd.Series(spectrum_r, index=freq_hz), 1).iloc[0, 0], frequency_moment(pd.Series(spectrum_r, index=freq_hz), 2).iloc[0, 0], @@ -124,12 +124,12 @@ def mler_coefficients( # Drummen version. Dietz has negative of this. _coeff_a_rn = ( np.abs(rao) - * np.sqrt(2 * wave_spectrum * dw) + * np.sqrt(2 * wave_spectrum * d_w) * ( (m1_m2[1] - freq_hz * m1_m2[0]) - + (m1_m2[0] / m0) * (freq_hz * m0 - m1_m2[0]) + + (m1_m2[0] / m_0) * (freq_hz * m_0 - m1_m2[0]) ) - / (m0 * m1_m2[1] - m1_m2[0] ** 2) + / (m_0 * m1_m2[1] - m1_m2[0] ** 2) ) # save the new spectral info to pass out # Phase delay should be a positive number in this convention (AP) @@ -235,8 +235,7 @@ def mler_wave_amp_normalize( mler: Union[pd.DataFrame, xr.Dataset], sim: SimulationParameters, k: Union[NDArray[np.float_], List[float], pd.Series], - frequency_dimension: str = "", - to_pandas: bool = True, + **kwargs: Any, ) -> Union[pd.DataFrame, xr.Dataset]: """ Function that renormalizes the incoming amplitude of the MLER wave @@ -264,8 +263,11 @@ def mler_wave_amp_normalize( mler_norm : pandas DataFrame or xarray Dataset MLER coefficients """ - if not isinstance(k, np.ndarray): - k = np.array(k, dtype=float) + frequency_dimension = kwargs.get("frequency_dimension", "") + to_pandas = kwargs.get("to_pandas", True) + + k_array = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k + if not isinstance(mler, (pd.DataFrame, xr.Dataset)): raise TypeError( f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" @@ -274,43 +276,55 @@ def mler_wave_amp_normalize( raise TypeError(f"wave_amp must be of type int or float. Got: {type(wave_amp)}") if not isinstance(sim, dict): raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k, np.ndarray): - raise TypeError(f"k must be of type ndarray. Got: {type(k)}") + if not isinstance(frequency_dimension, str): + raise TypeError( + "frequency_dimension must be of type bool." + + f"Got: {type(frequency_dimension)}" + ) if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") # If input is pandas, convert to xarray - if isinstance(mler, pd.DataFrame): - mler = mler.to_xarray() - - if frequency_dimension == "": - frequency_dimension = list(mler.coords)[0] - freq = mler.coords[frequency_dimension].values * 2 * np.pi - dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - - wave_amp_time = np.zeros((sim["maxIX"], sim["maxIT"])) - for ix, x in enumerate(sim["X"]): - for it, t in enumerate(sim["T"]): - # conditioned wave - wave_amp_time[ix, it] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.cos(freq * (t - sim["T0"]) - k * (x - sim["X0"]) + mler["Phase"]) + mler_xr = mler.to_xarray() if isinstance(mler, pd.DataFrame) else mler() + + # Determine frequency dimension + freq_dim = frequency_dimension or list(mler_xr.coords)[0] + # freq = mler_xr.coords[freq_dim].values * 2 * np.pi + # d_w = np.diff(freq).mean() + + wave_amp_time = np.array( + [ + np.sum( + np.sqrt( + 2 + * mler_xr["WaveSpectrum"].values + * np.diff(mler_xr.coords[freq_dim].values * 2 * np.pi).mean() + ) + * np.cos( + mler_xr.coords[freq_dim].values * 2 * np.pi * (t - sim["T0"]) + - k_array * (x - sim["X0"]) + + mler_xr["Phase"].values + ) ) + for x in np.linspace(sim["startX"], sim["endX"], sim["maxIX"]) + for t in np.linspace(sim["startTime"], sim["endTime"], sim["maxIT"]) + ] + ).reshape(sim["maxIX"], sim["maxIT"]) - tmp_max_amp = np.max(np.abs(wave_amp_time)) - - # renormalization of wave amplitudes - rescale_fact = np.abs(wave_amp) / np.abs(tmp_max_amp) - - # rescale the wave spectral amplitude coefficients - mler_norm = mler["WaveSpectrum"] * rescale_fact**2 - mler_norm = mler_norm.to_dataset() - mler_norm = mler_norm.assign({"Phase": (frequency_dimension, mler["Phase"].data)}) - - if to_pandas: - mler_norm = mler_norm.to_pandas() + rescale_fact = np.abs(wave_amp) / np.max(np.abs(wave_amp_time)) - return mler_norm + # Rescale the wave spectral amplitude coefficients and assign phase + mler_norm = xr.Dataset( + { + "WaveSpectrum": ( + ["frequency"], + mler_xr["WaveSpectrum"].data * rescale_fact**2, + ), + "Phase": (["frequency"], mler_xr["Phase"].data), + }, + coords={"frequency": (["frequency"], mler_xr.coords[freq_dim].data)}, + ) + return mler_norm.to_pandas() if to_pandas else mler_norm def mler_export_time_series( @@ -318,8 +332,7 @@ def mler_export_time_series( mler: Union[pd.DataFrame, xr.Dataset], sim: SimulationParameters, k: Union[NDArray[np.float_], List[float], pd.Series], - frequency_dimension: str = "", - to_pandas: bool = True, + **kwargs: Any, ) -> Union[pd.DataFrame, xr.Dataset]: """ Generate the wave amplitude time series at X0 from the calculated @@ -349,12 +362,17 @@ def mler_export_time_series( by time [s]. """ + frequency_dimension = kwargs.get("frequency_dimension", "") + to_pandas = kwargs.get("to_pandas", True) + rao_array = np.array(rao, dtype=float) if not isinstance(rao, np.ndarray) else rao k_array = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k + # If input is pandas, convert to xarray + mler_xr = mler if isinstance(mler, xr.Dataset) else mler.to_xarray() if not isinstance(rao_array, np.ndarray): raise TypeError(f"rao must be of type ndarray. Got: {type(rao_array)}") - if not isinstance(mler, (pd.DataFrame, xr.Dataset)): + if not isinstance(mler_xr, (xr.Dataset)): raise TypeError( f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" ) @@ -365,42 +383,121 @@ def mler_export_time_series( if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - # If input is pandas, convert to xarray - if isinstance(mler, pd.DataFrame): - mler = mler.to_xarray() + # Handle optional frequency dimension + freq_dim = frequency_dimension if frequency_dimension else list(mler_xr.coords)[0] + freq = mler_xr.coords[freq_dim].values * 2 * np.pi + dw = np.diff(freq).mean() - if frequency_dimension == "": - frequency_dimension = list(mler.coords)[0] - freq = mler.coords[frequency_dimension].values * 2 * np.pi - dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - - # calculate the series - wave_amp_time = np.zeros((sim["maxIT"], 2)) - xi = sim["X0"] - for i, ti in enumerate(sim["T"]): - # conditioned wave - wave_amp_time[i, 0] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.cos( - freq * (ti - sim["T0"]) + mler["Phase"] - k_array * (xi - sim["X0"]) - ) - ) - # Response calculation - wave_amp_time[i, 1] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.abs(rao_array) - * np.cos(freq * (ti - sim["T0"]) - k_array * (xi - sim["X0"])) - ) + # Calculation loop optimized with numpy operations + cos_terms = np.cos( + freq * (sim["T"][:, None] - sim["T0"]) + - k_array * (sim["X0"] - sim["X0"]) + + mler_xr["Phase"].values + ) + wave_height = np.sum(np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * cos_terms, axis=1) + linear_response = np.sum( + np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * np.abs(rao_array) * cos_terms, + axis=1, + ) + # Construct the output dataset mler_ts = xr.Dataset( - data_vars={ - "WaveHeight": (["time"], wave_amp_time[:, 0]), - "LinearResponse": (["time"], wave_amp_time[:, 1]), + { + "WaveHeight": ("time", wave_height), + "LinearResponse": ("time", linear_response), }, coords={"time": sim["T"]}, ) - if to_pandas: - mler_ts = mler_ts.to_pandas() - - return mler_ts + # Convert to pandas DataFrame if requested + return mler_ts.to_dataframe() if to_pandas else mler_ts + + +# ORIGINAL TO MATCH +# def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): +# """ +# Generate the wave amplitude time series at X0 from the calculated +# MLER coefficients + +# Parameters +# ---------- +# rao: numpy ndarray +# Response amplitude operator. +# mler: pandas DataFrame or xarray Dataset +# MLER coefficients dataframe generated from an MLER function. +# sim: dict +# Simulation parameters formatted by output from +# 'mler_simulation'. +# k: numpy ndarray +# Wave number. +# frequency_dimension: string (optional) +# Name of the xarray dimension corresponding to frequency. If not supplied, +# defaults to the first dimension. Does not affect pandas input. +# to_pandas: bool (optional) +# Flag to output pandas instead of xarray. Default = True. + +# Returns +# ------- +# mler_ts: pandas DataFrame or xarray Dataset +# Time series of wave height [m] and linear response [*] indexed +# by time [s]. + +# """ +# try: +# rao = np.array(rao) +# except: +# pass +# try: +# k = np.array(k) +# except: +# pass +# if not isinstance(rao, np.ndarray): +# raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") +# if not isinstance(mler, (pd.DataFrame, xr.Dataset)): +# raise TypeError( +# f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" +# ) +# if not isinstance(sim, dict): +# raise TypeError(f"sim must be of type dict. Got: {type(sim)}") +# if not isinstance(k, np.ndarray): +# raise TypeError(f"k must be of type ndarray. Got: {type(k)}") +# if not isinstance(to_pandas, bool): +# raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") + +# # If input is pandas, convert to xarray +# if isinstance(mler, pd.DataFrame): +# mler = mler.to_xarray() + +# if frequency_dimension == "": +# frequency_dimension = list(mler.coords)[0] +# freq = mler.coords[frequency_dimension].values * 2 * np.pi +# dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta + +# # calculate the series +# wave_amp_time = np.zeros((sim["maxIT"], 2)) +# xi = sim["X0"] +# for i, ti in enumerate(sim["T"]): +# # conditioned wave +# wave_amp_time[i, 0] = np.sum( +# np.sqrt(2 * mler["WaveSpectrum"] * dw) +# * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) +# ) +# # Response calculation +# wave_amp_time[i, 1] = np.sum( +# np.sqrt(2 * mler["WaveSpectrum"] * dw) +# * np.abs(rao) +# * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) +# ) + +# mler_ts = xr.Dataset( +# data_vars={ +# "WaveHeight": (["time"], wave_amp_time[:, 0]), +# "LinearResponse": (["time"], wave_amp_time[:, 1]), +# }, +# coords={"time": sim["T"]}, +# ) + +# if to_pandas: +# mler_ts = mler_ts.to_pandas() + +# return mler_ts From 0009bf6717f026fa4aaeaed6e6ef4a4862f84c37 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 6 Feb 2024 14:59:49 -0700 Subject: [PATCH 63/87] match correct module name --- mhkit/tests/loads/test_extreme.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mhkit/tests/loads/test_extreme.py b/mhkit/tests/loads/test_extreme.py index 2d74f35cc..e0ede2e93 100644 --- a/mhkit/tests/loads/test_extreme.py +++ b/mhkit/tests/loads/test_extreme.py @@ -42,7 +42,7 @@ def _example_crest_analysis(self, t, signal): return crests, crest_inds def test_global_peaks(self): - peaks_t, peaks_val = loads.extremes.global_peaks(self.t, self.signal) + peaks_t, peaks_val = loads.extreme.global_peaks(self.t, self.signal) test_crests, test_crests_ind = self._example_crest_analysis(self.t, self.signal) From 8a17e29dbc66613283f1b88003974e697074ac8f Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 9 Feb 2024 11:23:19 -0700 Subject: [PATCH 64/87] middle of getting linted versions working --- mhkit/loads/extreme/mler.py | 367 +++++++++++++++++++++++------------- 1 file changed, 236 insertions(+), 131 deletions(-) diff --git a/mhkit/loads/extreme/mler.py b/mhkit/loads/extreme/mler.py index 8ba1cfb2b..27d3ed24f 100644 --- a/mhkit/loads/extreme/mler.py +++ b/mhkit/loads/extreme/mler.py @@ -153,9 +153,12 @@ def mler_coefficients( if response_desired < 0: _phase += np.pi + _s = np.zeros(len(freq_hz * (2 * np.pi))) # [m^2-s/rad] + _s[:] = wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 + mler = xr.Dataset( { - "WaveSpectrum": (["frequency"], conditioned_spectrum), + "WaveSpectrum": (["frequency"], _s), "Phase": (["frequency"], _phase + np.pi * (response_desired < 0)), }, coords={"frequency": freq_hz}, @@ -165,6 +168,108 @@ def mler_coefficients( return mler.to_pandas() if to_pandas else mler +# Original in transition +def og_mler_coefficients( + rao: Union[NDArray[np.float_], pd.Series, List[float], List[int], xr.DataArray], + wave_spectrum: Union[pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset], + response_desired: Union[int, float], + frequency_dimension: str = "", + to_pandas: bool = True, +) -> Union[pd.DataFrame, xr.Dataset]: + """ + Calculate MLER (most likely extreme response) coefficients from a + sea state spectrum and a response RAO. + + Parameters + ---------- + rao: numpy ndarray + Response amplitude operator. + wave_spectrum: pd.DataFrame + Wave spectral density [m^2/Hz] indexed by frequency [Hz]. + response_desired: int or float + Desired response, units should correspond to a motion RAO or + units of force for a force RAO. + + Returns + ------- + mler: pd.DataFrame + DataFrame containing conditioned wave spectral amplitude + coefficient [m^2-s], and Phase [rad] indexed by freq [Hz]. + """ + try: + rao = np.array(rao) + except: + pass + assert isinstance(rao, np.ndarray), "rao must be of type np.ndarray" + assert isinstance( + wave_spectrum, pd.DataFrame + ), "wave_spectrum must be of type pd.DataFrame" + assert isinstance( + response_desired, (int, float) + ), "response_desired must be of type int or float" + + freq_hz = wave_spectrum.index.values + # convert from Hz to rad/s + freq = freq_hz * (2 * np.pi) + # change from Hz to rad/s + wave_spectrum = wave_spectrum.iloc[:, 0].values / (2 * np.pi) + # get delta + dw = (2 * np.pi - 0.0) / (len(freq) - 1) + + spectrum_r = np.zeros(len(freq)) # [(response units)^2-s/rad] + _s = np.zeros(len(freq)) # [m^2-s/rad] + _a = np.zeros(len(freq)) # [m^2-s/rad] + _coeff_a_rn = np.zeros(len(freq)) # [1/(response units)] + _phase = np.zeros(len(freq)) + + # Note: waves.A is "S" in Quon2016; 'waves' naming convention + # matches WEC-Sim conventions (EWQ) + # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 + spectrum_r[:] = np.abs(rao) ** 2 * (2 * wave_spectrum) + + # calculate spectral moments and other important spectral values. + m0 = (frequency_moment(pd.Series(spectrum_r, index=freq), 0)).iloc[0, 0] + m1 = (frequency_moment(pd.Series(spectrum_r, index=freq), 1)).iloc[0, 0] + m2 = (frequency_moment(pd.Series(spectrum_r, index=freq), 2)).iloc[0, 0] + wBar = m1 / m0 + + # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 + # Drummen version. Dietz has negative of this. + _coeff_a_rn[:] = ( + np.abs(rao) + * np.sqrt(2 * wave_spectrum * dw) + * ((m2 - freq * m1) + wBar * (freq * m0 - m1)) + / (m0 * m2 - m1**2) + ) + + # save the new spectral info to pass out + # Phase delay should be a positive number in this convention (AP) + _phase[:] = -np.unwrap(np.angle(rao)) + + # for negative values of Amp, shift phase by pi and flip sign + # for negative amplitudes, add a pi phase shift, then flip sign on + # negative Amplitudes + _phase[_coeff_a_rn < 0] -= np.pi + _coeff_a_rn[_coeff_a_rn < 0] *= -1 + + # calculate the conditioned spectrum [m^2-s/rad] + _s[:] = wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 + _a[:] = 2 * wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 + + # if the response amplitude we ask for is negative, we will add + # a pi phase shift to the phase information. This is because + # the sign of self.desiredRespAmp is lost in the squaring above. + # Ordinarily this would be put into the final equation, but we + # are shaping the wave information so that it is buried in the + # new spectral information, S. (AP) + if response_desired < 0: + _phase += np.pi + + mler = pd.DataFrame(data={"WaveSpectrum": _s, "Phase": _phase}, index=freq_hz) + mler = mler.fillna(0) + return mler + + def mler_simulation( parameters: Optional[SimulationParameters] = None, ) -> SimulationParameters: @@ -327,13 +432,94 @@ def mler_wave_amp_normalize( return mler_norm.to_pandas() if to_pandas else mler_norm -def mler_export_time_series( - rao: Union[NDArray[np.float_], List[float], pd.Series], - mler: Union[pd.DataFrame, xr.Dataset], - sim: SimulationParameters, - k: Union[NDArray[np.float_], List[float], pd.Series], - **kwargs: Any, -) -> Union[pd.DataFrame, xr.Dataset]: +# def mler_export_time_series( +# rao: Union[NDArray[np.float_], List[float], pd.Series], +# mler: Union[pd.DataFrame, xr.Dataset], +# sim: SimulationParameters, +# k: Union[NDArray[np.float_], List[float], pd.Series], +# **kwargs: Any, +# ) -> Union[pd.DataFrame, xr.Dataset]: +# """ +# Generate the wave amplitude time series at X0 from the calculated +# MLER coefficients + +# Parameters +# ---------- +# rao: numpy ndarray +# Response amplitude operator. +# mler: pandas DataFrame or xarray Dataset +# MLER coefficients dataframe generated from an MLER function. +# sim: dict +# Simulation parameters formatted by output from +# 'mler_simulation'. +# k: numpy ndarray +# Wave number. +# frequency_dimension: string (optional) +# Name of the xarray dimension corresponding to frequency. If not supplied, +# defaults to the first dimension. Does not affect pandas input. +# to_pandas: bool (optional) +# Flag to output pandas instead of xarray. Default = True. + +# Returns +# ------- +# mler_ts: pandas DataFrame or xarray Dataset +# Time series of wave height [m] and linear response [*] indexed +# by time [s]. + +# """ +# frequency_dimension = kwargs.get("frequency_dimension", "") +# to_pandas = kwargs.get("to_pandas", True) + +# rao_array = np.array(rao, dtype=float) if not isinstance(rao, np.ndarray) else rao +# k_array = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k +# # If input is pandas, convert to xarray +# mler_xr = mler if isinstance(mler, xr.Dataset) else mler.to_xarray() + +# if not isinstance(rao_array, np.ndarray): +# raise TypeError(f"rao must be of type ndarray. Got: {type(rao_array)}") +# if not isinstance(mler_xr, (xr.Dataset)): +# raise TypeError( +# f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" +# ) +# if not isinstance(sim, dict): +# raise TypeError(f"sim must be of type dict. Got: {type(sim)}") +# if not isinstance(k_array, np.ndarray): +# raise TypeError(f"k must be of type ndarray. Got: {type(k_array)}") +# if not isinstance(to_pandas, bool): +# raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") + +# # Handle optional frequency dimension +# freq_dim = frequency_dimension if frequency_dimension else list(mler_xr.coords)[0] +# freq = mler_xr.coords[freq_dim].values * 2 * np.pi +# dw = np.diff(freq).mean() + +# # Calculation loop optimized with numpy operations +# cos_terms = np.cos( +# freq * (sim["T"][:, None] - sim["T0"]) +# - k_array * (sim["X0"] - sim["X0"]) +# + mler_xr["Phase"].values +# ) +# wave_height = np.sum(np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * cos_terms, axis=1) +# linear_response = np.sum( +# np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * np.abs(rao_array) * cos_terms, +# axis=1, +# ) + +# # Construct the output dataset +# mler_ts = xr.Dataset( +# { +# "WaveHeight": ("time", wave_height), +# "LinearResponse": ("time", linear_response), +# }, +# coords={"time": sim["T"]}, +# ) + +# # Convert to pandas DataFrame if requested +# return mler_ts.to_dataframe() if to_pandas else mler_ts + + +# ORIGINAL TO MATCH +def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): """ Generate the wave amplitude time series at X0 from the calculated MLER coefficients @@ -362,142 +548,61 @@ def mler_export_time_series( by time [s]. """ - frequency_dimension = kwargs.get("frequency_dimension", "") - to_pandas = kwargs.get("to_pandas", True) - - rao_array = np.array(rao, dtype=float) if not isinstance(rao, np.ndarray) else rao - k_array = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k - # If input is pandas, convert to xarray - mler_xr = mler if isinstance(mler, xr.Dataset) else mler.to_xarray() - - if not isinstance(rao_array, np.ndarray): - raise TypeError(f"rao must be of type ndarray. Got: {type(rao_array)}") - if not isinstance(mler_xr, (xr.Dataset)): + try: + rao = np.array(rao) + except: + pass + try: + k = np.array(k) + except: + pass + if not isinstance(rao, np.ndarray): + raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") + if not isinstance(mler, (pd.DataFrame, xr.Dataset)): raise TypeError( f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" ) if not isinstance(sim, dict): raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k_array, np.ndarray): - raise TypeError(f"k must be of type ndarray. Got: {type(k_array)}") + if not isinstance(k, np.ndarray): + raise TypeError(f"k must be of type ndarray. Got: {type(k)}") if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - # Handle optional frequency dimension - freq_dim = frequency_dimension if frequency_dimension else list(mler_xr.coords)[0] - freq = mler_xr.coords[freq_dim].values * 2 * np.pi - dw = np.diff(freq).mean() + # If input is pandas, convert to xarray + if isinstance(mler, pd.DataFrame): + mler = mler.to_xarray() - # Calculation loop optimized with numpy operations - cos_terms = np.cos( - freq * (sim["T"][:, None] - sim["T0"]) - - k_array * (sim["X0"] - sim["X0"]) - + mler_xr["Phase"].values - ) - wave_height = np.sum(np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * cos_terms, axis=1) - linear_response = np.sum( - np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * np.abs(rao_array) * cos_terms, - axis=1, - ) + if frequency_dimension == "": + frequency_dimension = list(mler.coords)[0] + freq = mler.coords[frequency_dimension].values * 2 * np.pi + dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta + + # calculate the series + wave_amp_time = np.zeros((sim["maxIT"], 2)) + xi = sim["X0"] + for i, ti in enumerate(sim["T"]): + # conditioned wave + wave_amp_time[i, 0] = np.sum( + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) + ) + # Response calculation + wave_amp_time[i, 1] = np.sum( + np.sqrt(2 * mler["WaveSpectrum"] * dw) + * np.abs(rao) + * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) + ) - # Construct the output dataset mler_ts = xr.Dataset( - { - "WaveHeight": ("time", wave_height), - "LinearResponse": ("time", linear_response), + data_vars={ + "WaveHeight": (["time"], wave_amp_time[:, 0]), + "LinearResponse": (["time"], wave_amp_time[:, 1]), }, coords={"time": sim["T"]}, ) - # Convert to pandas DataFrame if requested - return mler_ts.to_dataframe() if to_pandas else mler_ts - - -# ORIGINAL TO MATCH -# def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): -# """ -# Generate the wave amplitude time series at X0 from the calculated -# MLER coefficients - -# Parameters -# ---------- -# rao: numpy ndarray -# Response amplitude operator. -# mler: pandas DataFrame or xarray Dataset -# MLER coefficients dataframe generated from an MLER function. -# sim: dict -# Simulation parameters formatted by output from -# 'mler_simulation'. -# k: numpy ndarray -# Wave number. -# frequency_dimension: string (optional) -# Name of the xarray dimension corresponding to frequency. If not supplied, -# defaults to the first dimension. Does not affect pandas input. -# to_pandas: bool (optional) -# Flag to output pandas instead of xarray. Default = True. - -# Returns -# ------- -# mler_ts: pandas DataFrame or xarray Dataset -# Time series of wave height [m] and linear response [*] indexed -# by time [s]. - -# """ -# try: -# rao = np.array(rao) -# except: -# pass -# try: -# k = np.array(k) -# except: -# pass -# if not isinstance(rao, np.ndarray): -# raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") -# if not isinstance(mler, (pd.DataFrame, xr.Dataset)): -# raise TypeError( -# f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" -# ) -# if not isinstance(sim, dict): -# raise TypeError(f"sim must be of type dict. Got: {type(sim)}") -# if not isinstance(k, np.ndarray): -# raise TypeError(f"k must be of type ndarray. Got: {type(k)}") -# if not isinstance(to_pandas, bool): -# raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - -# # If input is pandas, convert to xarray -# if isinstance(mler, pd.DataFrame): -# mler = mler.to_xarray() - -# if frequency_dimension == "": -# frequency_dimension = list(mler.coords)[0] -# freq = mler.coords[frequency_dimension].values * 2 * np.pi -# dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - -# # calculate the series -# wave_amp_time = np.zeros((sim["maxIT"], 2)) -# xi = sim["X0"] -# for i, ti in enumerate(sim["T"]): -# # conditioned wave -# wave_amp_time[i, 0] = np.sum( -# np.sqrt(2 * mler["WaveSpectrum"] * dw) -# * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) -# ) -# # Response calculation -# wave_amp_time[i, 1] = np.sum( -# np.sqrt(2 * mler["WaveSpectrum"] * dw) -# * np.abs(rao) -# * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) -# ) - -# mler_ts = xr.Dataset( -# data_vars={ -# "WaveHeight": (["time"], wave_amp_time[:, 0]), -# "LinearResponse": (["time"], wave_amp_time[:, 1]), -# }, -# coords={"time": sim["T"]}, -# ) - -# if to_pandas: -# mler_ts = mler_ts.to_pandas() + if to_pandas: + mler_ts = mler_ts.to_pandas() -# return mler_ts + return mler_ts From 30786873043ca32c93444e6d72597db9bf924070 Mon Sep 17 00:00:00 2001 From: ssolson Date: Wed, 14 Feb 2024 14:05:09 -0700 Subject: [PATCH 65/87] mler perfect lint --- mhkit/loads/extreme/mler.py | 356 +++++++++++------------------------- 1 file changed, 103 insertions(+), 253 deletions(-) diff --git a/mhkit/loads/extreme/mler.py b/mhkit/loads/extreme/mler.py index 27d3ed24f..b1da5c588 100644 --- a/mhkit/loads/extreme/mler.py +++ b/mhkit/loads/extreme/mler.py @@ -27,6 +27,60 @@ SimulationParameters = Dict[str, Union[float, int, np.ndarray]] +def _calculate_spectral_values( + freq_hz: Union[np.ndarray, pd.Series], + rao_array: np.ndarray, + wave_spectrum: Union[pd.Series, pd.DataFrame, np.ndarray], + d_w: float, +) -> Dict[str, Union[float, np.ndarray]]: + """ + Calculates spectral moments and the coefficient A_{R,n} from a given sea state spectrum + and a response RAO. + + Parameters + ---------- + spectrum_r : Union[np.ndarray, pd.Series] + Real part of the spectrum. + freq_hz : Union[np.ndarray, pd.Series] + Frequencies in Hz corresponding to spectrum_r. + rao : numpy ndarray + Response Amplitude Operator (RAO) of the system. + wave_spectrum : Union[pd.Series, pd.DataFrame, np.ndarray] + Wave spectrum values corresponding to freq_hz. + d_w : float + Delta omega, the frequency interval. + + Returns + ------- + Dict[str, Union[float, np.ndarray]] + A dictionary containing spectral moments (m_0, m_1, m_2) and the coefficient A_{R,n}. + """ + # Note: waves.A is "S" in Quon2016; 'waves' naming convention + # matches WEC-Sim conventions (EWQ) + # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 + spectrum_r = np.abs(rao_array) ** 2 * (2 * wave_spectrum) + + # Calculate spectral moments + m_0 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 0).iloc[0, 0] + m_1 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 1).iloc[0, 0] + m_2 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 2).iloc[0, 0] + + # Calculate coefficient A_{R,n} + coeff_a_rn = ( + np.abs(rao_array) + * np.sqrt(2 * wave_spectrum * d_w) + * ((m_2 - freq_hz * m_1) + (m_1 / m_0) * (freq_hz * m_0 - m_1)) + / (m_0 * m_2 - m_1**2) + ) + + return { + "m_0": m_0, + "m_1": m_1, + "m_2": m_2, + "coeff_a_rn": coeff_a_rn, + } + + def mler_coefficients( rao: Union[NDArray[np.float_], pd.Series, List[float], List[int], xr.DataArray], wave_spectrum: Union[pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset], @@ -108,29 +162,8 @@ def mler_coefficients( # get frequency step d_w = 2.0 * np.pi / (len(freq_hz) - 1) - # Note: waves.A is "S" in Quon2016; 'waves' naming convention - # matches WEC-Sim conventions (EWQ) - # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 - spectrum_r = np.abs(rao_array) ** 2 * (2 * wave_spectrum) + spectral_values = _calculate_spectral_values(freq_hz, rao_array, wave_spectrum, d_w) - # calculate spectral moments and other important spectral values. - m_0 = frequency_moment(pd.Series(spectrum_r, index=freq_hz), 0).iloc[0, 0] - m1_m2 = ( - frequency_moment(pd.Series(spectrum_r, index=freq_hz), 1).iloc[0, 0], - frequency_moment(pd.Series(spectrum_r, index=freq_hz), 2).iloc[0, 0], - ) - - # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 - # Drummen version. Dietz has negative of this. - _coeff_a_rn = ( - np.abs(rao) - * np.sqrt(2 * wave_spectrum * d_w) - * ( - (m1_m2[1] - freq_hz * m1_m2[0]) - + (m1_m2[0] / m_0) * (freq_hz * m_0 - m1_m2[0]) - ) - / (m_0 * m1_m2[1] - m1_m2[0] ** 2) - ) # save the new spectral info to pass out # Phase delay should be a positive number in this convention (AP) _phase = -np.unwrap(np.angle(rao_array)) @@ -138,11 +171,13 @@ def mler_coefficients( # for negative values of Amp, shift phase by pi and flip sign # for negative amplitudes, add a pi phase shift, then flip sign on # negative Amplitudes - _phase[_coeff_a_rn < 0] -= np.pi - _coeff_a_rn[_coeff_a_rn < 0] *= -1 + _phase[spectral_values["coeff_a_rn"] < 0] -= np.pi + spectral_values["coeff_a_rn"][spectral_values["coeff_a_rn"] < 0] *= -1 # calculate the conditioned spectrum [m^2-s/rad] - conditioned_spectrum = wave_spectrum * _coeff_a_rn**2 * response_desired**2 + conditioned_spectrum = ( + wave_spectrum * spectral_values["coeff_a_rn"] ** 2 * response_desired**2 + ) # if the response amplitude we ask for is negative, we will add # a pi phase shift to the phase information. This is because @@ -153,12 +188,9 @@ def mler_coefficients( if response_desired < 0: _phase += np.pi - _s = np.zeros(len(freq_hz * (2 * np.pi))) # [m^2-s/rad] - _s[:] = wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 - mler = xr.Dataset( { - "WaveSpectrum": (["frequency"], _s), + "WaveSpectrum": (["frequency"], np.array(conditioned_spectrum)), "Phase": (["frequency"], _phase + np.pi * (response_desired < 0)), }, coords={"frequency": freq_hz}, @@ -168,108 +200,6 @@ def mler_coefficients( return mler.to_pandas() if to_pandas else mler -# Original in transition -def og_mler_coefficients( - rao: Union[NDArray[np.float_], pd.Series, List[float], List[int], xr.DataArray], - wave_spectrum: Union[pd.Series, pd.DataFrame, xr.DataArray, xr.Dataset], - response_desired: Union[int, float], - frequency_dimension: str = "", - to_pandas: bool = True, -) -> Union[pd.DataFrame, xr.Dataset]: - """ - Calculate MLER (most likely extreme response) coefficients from a - sea state spectrum and a response RAO. - - Parameters - ---------- - rao: numpy ndarray - Response amplitude operator. - wave_spectrum: pd.DataFrame - Wave spectral density [m^2/Hz] indexed by frequency [Hz]. - response_desired: int or float - Desired response, units should correspond to a motion RAO or - units of force for a force RAO. - - Returns - ------- - mler: pd.DataFrame - DataFrame containing conditioned wave spectral amplitude - coefficient [m^2-s], and Phase [rad] indexed by freq [Hz]. - """ - try: - rao = np.array(rao) - except: - pass - assert isinstance(rao, np.ndarray), "rao must be of type np.ndarray" - assert isinstance( - wave_spectrum, pd.DataFrame - ), "wave_spectrum must be of type pd.DataFrame" - assert isinstance( - response_desired, (int, float) - ), "response_desired must be of type int or float" - - freq_hz = wave_spectrum.index.values - # convert from Hz to rad/s - freq = freq_hz * (2 * np.pi) - # change from Hz to rad/s - wave_spectrum = wave_spectrum.iloc[:, 0].values / (2 * np.pi) - # get delta - dw = (2 * np.pi - 0.0) / (len(freq) - 1) - - spectrum_r = np.zeros(len(freq)) # [(response units)^2-s/rad] - _s = np.zeros(len(freq)) # [m^2-s/rad] - _a = np.zeros(len(freq)) # [m^2-s/rad] - _coeff_a_rn = np.zeros(len(freq)) # [1/(response units)] - _phase = np.zeros(len(freq)) - - # Note: waves.A is "S" in Quon2016; 'waves' naming convention - # matches WEC-Sim conventions (EWQ) - # Response spectrum [(response units)^2-s/rad] -- Quon2016 Eqn. 3 - spectrum_r[:] = np.abs(rao) ** 2 * (2 * wave_spectrum) - - # calculate spectral moments and other important spectral values. - m0 = (frequency_moment(pd.Series(spectrum_r, index=freq), 0)).iloc[0, 0] - m1 = (frequency_moment(pd.Series(spectrum_r, index=freq), 1)).iloc[0, 0] - m2 = (frequency_moment(pd.Series(spectrum_r, index=freq), 2)).iloc[0, 0] - wBar = m1 / m0 - - # calculate coefficient A_{R,n} [(response units)^-1] -- Quon2016 Eqn. 8 - # Drummen version. Dietz has negative of this. - _coeff_a_rn[:] = ( - np.abs(rao) - * np.sqrt(2 * wave_spectrum * dw) - * ((m2 - freq * m1) + wBar * (freq * m0 - m1)) - / (m0 * m2 - m1**2) - ) - - # save the new spectral info to pass out - # Phase delay should be a positive number in this convention (AP) - _phase[:] = -np.unwrap(np.angle(rao)) - - # for negative values of Amp, shift phase by pi and flip sign - # for negative amplitudes, add a pi phase shift, then flip sign on - # negative Amplitudes - _phase[_coeff_a_rn < 0] -= np.pi - _coeff_a_rn[_coeff_a_rn < 0] *= -1 - - # calculate the conditioned spectrum [m^2-s/rad] - _s[:] = wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 - _a[:] = 2 * wave_spectrum * _coeff_a_rn[:] ** 2 * response_desired**2 - - # if the response amplitude we ask for is negative, we will add - # a pi phase shift to the phase information. This is because - # the sign of self.desiredRespAmp is lost in the squaring above. - # Ordinarily this would be put into the final equation, but we - # are shaping the wave information so that it is buried in the - # new spectral information, S. (AP) - if response_desired < 0: - _phase += np.pi - - mler = pd.DataFrame(data={"WaveSpectrum": _s, "Phase": _phase}, index=freq_hz) - mler = mler.fillna(0) - return mler - - def mler_simulation( parameters: Optional[SimulationParameters] = None, ) -> SimulationParameters: @@ -432,94 +362,13 @@ def mler_wave_amp_normalize( return mler_norm.to_pandas() if to_pandas else mler_norm -# def mler_export_time_series( -# rao: Union[NDArray[np.float_], List[float], pd.Series], -# mler: Union[pd.DataFrame, xr.Dataset], -# sim: SimulationParameters, -# k: Union[NDArray[np.float_], List[float], pd.Series], -# **kwargs: Any, -# ) -> Union[pd.DataFrame, xr.Dataset]: -# """ -# Generate the wave amplitude time series at X0 from the calculated -# MLER coefficients - -# Parameters -# ---------- -# rao: numpy ndarray -# Response amplitude operator. -# mler: pandas DataFrame or xarray Dataset -# MLER coefficients dataframe generated from an MLER function. -# sim: dict -# Simulation parameters formatted by output from -# 'mler_simulation'. -# k: numpy ndarray -# Wave number. -# frequency_dimension: string (optional) -# Name of the xarray dimension corresponding to frequency. If not supplied, -# defaults to the first dimension. Does not affect pandas input. -# to_pandas: bool (optional) -# Flag to output pandas instead of xarray. Default = True. - -# Returns -# ------- -# mler_ts: pandas DataFrame or xarray Dataset -# Time series of wave height [m] and linear response [*] indexed -# by time [s]. - -# """ -# frequency_dimension = kwargs.get("frequency_dimension", "") -# to_pandas = kwargs.get("to_pandas", True) - -# rao_array = np.array(rao, dtype=float) if not isinstance(rao, np.ndarray) else rao -# k_array = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k -# # If input is pandas, convert to xarray -# mler_xr = mler if isinstance(mler, xr.Dataset) else mler.to_xarray() - -# if not isinstance(rao_array, np.ndarray): -# raise TypeError(f"rao must be of type ndarray. Got: {type(rao_array)}") -# if not isinstance(mler_xr, (xr.Dataset)): -# raise TypeError( -# f"mler must be of type pd.DataFrame or xr.Dataset. Got: {type(mler)}" -# ) -# if not isinstance(sim, dict): -# raise TypeError(f"sim must be of type dict. Got: {type(sim)}") -# if not isinstance(k_array, np.ndarray): -# raise TypeError(f"k must be of type ndarray. Got: {type(k_array)}") -# if not isinstance(to_pandas, bool): -# raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - -# # Handle optional frequency dimension -# freq_dim = frequency_dimension if frequency_dimension else list(mler_xr.coords)[0] -# freq = mler_xr.coords[freq_dim].values * 2 * np.pi -# dw = np.diff(freq).mean() - -# # Calculation loop optimized with numpy operations -# cos_terms = np.cos( -# freq * (sim["T"][:, None] - sim["T0"]) -# - k_array * (sim["X0"] - sim["X0"]) -# + mler_xr["Phase"].values -# ) -# wave_height = np.sum(np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * cos_terms, axis=1) -# linear_response = np.sum( -# np.sqrt(2 * mler_xr["WaveSpectrum"] * dw) * np.abs(rao_array) * cos_terms, -# axis=1, -# ) - -# # Construct the output dataset -# mler_ts = xr.Dataset( -# { -# "WaveHeight": ("time", wave_height), -# "LinearResponse": ("time", linear_response), -# }, -# coords={"time": sim["T"]}, -# ) - -# # Convert to pandas DataFrame if requested -# return mler_ts.to_dataframe() if to_pandas else mler_ts - - -# ORIGINAL TO MATCH -def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas=True): +def mler_export_time_series( + rao: Union[NDArray[np.float_], List[float], pd.Series], + mler: Union[pd.DataFrame, xr.Dataset], + sim: SimulationParameters, + k: Union[NDArray[np.float_], List[float], pd.Series], + **kwargs: Any, +) -> Union[pd.DataFrame, xr.Dataset]: """ Generate the wave amplitude time series at X0 from the calculated MLER coefficients @@ -548,14 +397,9 @@ def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas by time [s]. """ - try: - rao = np.array(rao) - except: - pass - try: - k = np.array(k) - except: - pass + frequency_dimension = kwargs.get("frequency_dimension", "") + to_pandas = kwargs.get("to_pandas", True) + if not isinstance(rao, np.ndarray): raise TypeError(f"rao must be of type ndarray. Got: {type(rao)}") if not isinstance(mler, (pd.DataFrame, xr.Dataset)): @@ -564,45 +408,51 @@ def mler_export_time_series(rao, mler, sim, k, frequency_dimension="", to_pandas ) if not isinstance(sim, dict): raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k, np.ndarray): + if not isinstance(k, np.ndarray, list, pd.Series): raise TypeError(f"k must be of type ndarray. Got: {type(k)}") if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") + if not isinstance(frequency_dimension, bool): + raise TypeError( + f"frequency_dimension must be of type str. Got: {type(frequency_dimension)}" + ) + rao = np.array(rao, dtype=float) if not isinstance(rao, np.ndarray) else rao + k = np.array(k, dtype=float) if not isinstance(k, np.ndarray) else k # If input is pandas, convert to xarray - if isinstance(mler, pd.DataFrame): - mler = mler.to_xarray() + mler = mler if isinstance(mler, xr.Dataset) else mler.to_xarray() - if frequency_dimension == "": - frequency_dimension = list(mler.coords)[0] + # Handle optional frequency dimension + frequency_dimension = ( + frequency_dimension if frequency_dimension else list(mler.coords)[0] + ) freq = mler.coords[frequency_dimension].values * 2 * np.pi - dw = (max(freq) - min(freq)) / (len(freq) - 1) # get delta - - # calculate the series - wave_amp_time = np.zeros((sim["maxIT"], 2)) - xi = sim["X0"] - for i, ti in enumerate(sim["T"]): - # conditioned wave - wave_amp_time[i, 0] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) - * np.cos(freq * (ti - sim["T0"]) + mler["Phase"] - k * (xi - sim["X0"])) + d_w = np.diff(freq).mean() + + wave_height = np.zeros(len(sim["T"])) + linear_response = np.zeros(len(sim["T"])) + for i, t_i in enumerate(sim["T"]): + cos_terms = np.cos( + freq * (t_i - sim["T0"]) + - k * (sim["X0"] - sim["X0"]) + + mler["Phase"].values ) - # Response calculation - wave_amp_time[i, 1] = np.sum( - np.sqrt(2 * mler["WaveSpectrum"] * dw) + wave_height[i] = np.sum(np.sqrt(2 * mler["WaveSpectrum"] * d_w) * cos_terms) + + linear_response[i] = np.sum( + np.sqrt(2 * mler["WaveSpectrum"] * d_w) * np.abs(rao) - * np.cos(freq * (ti - sim["T0"]) - k * (xi - sim["X0"])) + * np.cos(freq * (t_i - sim["T0"]) - k * (sim["X0"] - sim["X0"])) ) + # Construct the output dataset mler_ts = xr.Dataset( - data_vars={ - "WaveHeight": (["time"], wave_amp_time[:, 0]), - "LinearResponse": (["time"], wave_amp_time[:, 1]), + { + "WaveHeight": (["time"], wave_height), + "LinearResponse": (["time"], linear_response), }, coords={"time": sim["T"]}, ) - if to_pandas: - mler_ts = mler_ts.to_pandas() - - return mler_ts + # Convert to pandas DataFrame if requested + return mler_ts.to_dataframe() if to_pandas else mler_ts From 591fed4a735df0e5342c1b9595e7900b7c506baa Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 19 Feb 2024 10:59:43 -0700 Subject: [PATCH 66/87] fix type errors --- mhkit/loads/extreme/mler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mhkit/loads/extreme/mler.py b/mhkit/loads/extreme/mler.py index b1da5c588..2922fc3b9 100644 --- a/mhkit/loads/extreme/mler.py +++ b/mhkit/loads/extreme/mler.py @@ -408,11 +408,11 @@ def mler_export_time_series( ) if not isinstance(sim, dict): raise TypeError(f"sim must be of type dict. Got: {type(sim)}") - if not isinstance(k, np.ndarray, list, pd.Series): + if not isinstance(k, (np.ndarray, list, pd.Series)): raise TypeError(f"k must be of type ndarray. Got: {type(k)}") if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") - if not isinstance(frequency_dimension, bool): + if not isinstance(frequency_dimension, str): raise TypeError( f"frequency_dimension must be of type str. Got: {type(frequency_dimension)}" ) From 05d3d66695c1c5c08f4180b83efaaa4725694f2f Mon Sep 17 00:00:00 2001 From: ssolson Date: Mon, 19 Feb 2024 11:09:08 -0700 Subject: [PATCH 67/87] lint --- mhkit/loads/extreme/extremes.py | 172 +++++++++++++++++++------------- 1 file changed, 104 insertions(+), 68 deletions(-) diff --git a/mhkit/loads/extreme/extremes.py b/mhkit/loads/extreme/extremes.py index d03b9e5f8..2c50dd08e 100644 --- a/mhkit/loads/extreme/extremes.py +++ b/mhkit/loads/extreme/extremes.py @@ -1,10 +1,42 @@ +""" +This module provides functionality for estimating the short-term and +long-term extreme distributions of responses in a time series. It +includes methods for analyzing peaks, block maxima, and applying +statistical distributions to model extreme events. The module supports +various methods for short-term extreme estimation, including peaks +fitting with Weibull, tail fitting, peaks over threshold, and block +maxima methods with GEV (Generalized Extreme Value) and Gumbel +distributions. Additionally, it offers functionality to approximate +the long-term extreme distribution by weighting short-term extremes +across different sea states. + +Functions: +- ste_peaks: Estimates the short-term extreme distribution from peaks + distribution using specified statistical methods. +- block_maxima: Finds the block maxima in a time-series data to be used + in block maxima methods. +- ste_block_maxima_gev: Approximates the short-term extreme distribution + using the block maxima method with the GEV distribution. +- ste_block_maxima_gumbel: Approximates the short-term extreme + distribution using the block maxima method with the Gumbel distribution. +- ste: Alias for `short_term_extreme`, facilitating easier access to the + primary functionality of estimating short-term extremes. +- short_term_extreme: Core function to approximate the short-term extreme + distribution from a time series using chosen methods. +- full_seastate_long_term_extreme: Combines short-term extreme + distributions using weights to estimate the long-term extreme distribution. +""" + +from typing import Union + import numpy as np from scipy import stats +from scipy.stats import rv_continuous -import mhkit.loads.extreme as extreme +from mhkit.loads import extreme -def ste_peaks(peaks_distribution, npeaks): +def ste_peaks(peaks_distribution: rv_continuous, npeaks: float) -> rv_continuous: """ Estimate the short-term extreme distribution from the peaks distribution. @@ -18,7 +50,7 @@ def ste_peaks(peaks_distribution, npeaks): Returns ------- - ste: scipy.stats.rv_frozen + short_term_extreme: scipy.stats.rv_frozen Short-term extreme distribution. """ if not callable(peaks_distribution.cdf): @@ -32,29 +64,29 @@ def __init__(self, *args, **kwargs): self.npeaks = kwargs.pop("npeaks") super().__init__(*args, **kwargs) - def _cdf(self, x): - peaks_cdf = np.array(self.peaks.cdf(x)) + def _cdf(self, x, *args, **kwargs): + peaks_cdf = np.array(self.peaks.cdf(x, *args, **kwargs)) peaks_cdf[np.isnan(peaks_cdf)] = 0.0 if len(peaks_cdf) == 1: peaks_cdf = peaks_cdf[0] return peaks_cdf**self.npeaks - ste = _ShortTermExtreme( + short_term_extreme_peaks = _ShortTermExtreme( name="short_term_extreme", peaks_distribution=peaks_distribution, npeaks=npeaks ) - return ste + return short_term_extreme_peaks -def block_maxima(t, x, t_st): +def block_maxima(time: np.ndarray, global_peaks: np.ndarray, t_st: float) -> np.ndarray: """ Find the block maxima of a time-series. - The timeseries (t,x) is divided into blocks of length t_st, and the + The timeseries (time, global_peaks) is divided into blocks of length t_st, and the maxima of each bloock is returned. Parameters ---------- - t : np.array + time : np.array Time array. x : np.array global peaks timeseries. @@ -63,60 +95,60 @@ def block_maxima(t, x, t_st): Returns ------- - block_maxima: np.array + block_max: np.array Block maxima (i.e. largest peak in each block). """ - if not isinstance(t, np.ndarray): - raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + if not isinstance(time, np.ndarray): + raise TypeError(f"time must be of type np.ndarray. Got: {type(time)}") + if not isinstance(global_peaks, np.ndarray): + raise TypeError( + f"global_peaks must be of type np.ndarray. Got: {type(global_peaks)}" + ) if not isinstance(t_st, float): raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") - nblock = int(t[-1] / t_st) - block_maxima = np.zeros(int(nblock)) + nblock = int(time[-1] / t_st) + block_max = np.zeros(int(nblock)) for iblock in range(nblock): - ix = x[(t >= iblock * t_st) & (t < (iblock + 1) * t_st)] - block_maxima[iblock] = np.max(ix) - return block_maxima + i_x = global_peaks[(time >= iblock * t_st) & (time < (iblock + 1) * t_st)] + block_max[iblock] = np.max(i_x) + return block_max -def ste_block_maxima_gev(block_maxima): +def ste_block_maxima_gev(block_max): """ Approximate the short-term extreme distribution using the block maxima method and the Generalized Extreme Value distribution. Parameters ---------- - block_maxima: np.array + block_max: np.array Block maxima (i.e. largest peak in each block). Returns ------- - ste: scipy.stats.rv_frozen + short_term_extreme_rv: scipy.stats.rv_frozen Short-term extreme distribution. """ - if not isinstance(block_maxima, np.ndarray): - raise TypeError( - f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" - ) + if not isinstance(block_max, np.ndarray): + raise TypeError(f"block_max must be of type np.ndarray. Got: {type(block_max)}") - ste_params = stats.genextreme.fit(block_maxima) + ste_params = stats.genextreme.fit(block_max) param_names = ["c", "loc", "scale"] - ste_params = {k: v for k, v in zip(param_names, ste_params)} - ste = stats.genextreme(**ste_params) - ste.params = ste_params - return ste + ste_params = dict(zip(param_names, ste_params)) + short_term_extreme_rv = stats.genextreme(**ste_params) + short_term_extreme_rv.params = ste_params + return short_term_extreme_rv -def ste_block_maxima_gumbel(block_maxima): +def ste_block_maxima_gumbel(block_max): """ Approximate the short-term extreme distribution using the block maxima method and the Gumbel (right) distribution. Parameters ---------- - block_maxima: np.array + block_max: np.array Block maxima (i.e. largest peak in each block). Returns @@ -124,28 +156,28 @@ def ste_block_maxima_gumbel(block_maxima): ste: scipy.stats.rv_frozen Short-term extreme distribution. """ - if not isinstance(block_maxima, np.ndarray): - raise TypeError( - f"block_maxima must be of type np.ndarray. Got: {type(block_maxima)}" - ) + if not isinstance(block_max, np.ndarray): + raise TypeError(f"block_max must be of type np.ndarray. Got: {type(block_max)}") - ste_params = stats.gumbel_r.fit(block_maxima) + ste_params = stats.gumbel_r.fit(block_max) param_names = ["loc", "scale"] - ste_params = {k: v for k, v in zip(param_names, ste_params)} - ste = stats.gumbel_r(**ste_params) - ste.params = ste_params - return ste + ste_params = dict(zip(param_names, ste_params)) + short_term_extreme_rv = stats.gumbel_r(**ste_params) + short_term_extreme_rv.params = ste_params + return short_term_extreme_rv -def ste(t, data, t_st, method): +def ste(time: np.ndarray, data: np.ndarray, t_st: float, method: str) -> rv_continuous: """ Alias for `short_term_extreme`. """ - ste = short_term_extreme(t, data, t_st, method) - return ste + ste_dist = short_term_extreme(time, data, t_st, method) + return ste_dist -def short_term_extreme(t, data, t_st, method): +def short_term_extreme( + time: np.ndarray, data: np.ndarray, t_st: float, method: str +) -> Union[rv_continuous, None]: """ Approximate the short-term extreme distribution from a timeseries of the response using chosen method. @@ -158,7 +190,7 @@ def short_term_extreme(t, data, t_st, method): Parameters ---------- - t: np.array + time: np.array Time array. data: np.array Response timeseries. @@ -169,11 +201,11 @@ def short_term_extreme(t, data, t_st, method): Returns ------- - ste: scipy.stats.rv_frozen + short_term_extreme_dist: scipy.stats.rv_frozen Short-term extreme distribution. """ - if not isinstance(t, np.ndarray): - raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") + if not isinstance(time, np.ndarray): + raise TypeError(f"time must be of type np.ndarray. Got: {type(time)}") if not isinstance(data, np.ndarray): raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") if not isinstance(t_st, float): @@ -191,24 +223,24 @@ def short_term_extreme(t, data, t_st, method): "block_maxima_gumbel": ste_block_maxima_gumbel, } - if method in peaks_methods.keys(): + if method in peaks_methods: fit_peaks = peaks_methods[method] - _, peaks = extreme.global_peaks(t, data) + _, peaks = extreme.global_peaks(time, data) npeaks = len(peaks) - time = t[-1] - t[0] + time = time[-1] - time[0] nst = extreme.number_of_short_term_peaks(npeaks, time, t_st) peaks_dist = fit_peaks(peaks) - ste = ste_peaks(peaks_dist, nst) - elif method in blockmaxima_methods.keys(): + short_term_extreme_dist = ste_peaks(peaks_dist, nst) + elif method in blockmaxima_methods: fit_maxima = blockmaxima_methods[method] - maxima = block_maxima(t, data, t_st) - ste = fit_maxima(maxima) + maxima = block_maxima(time, data, t_st) + short_term_extreme_dist = fit_maxima(maxima) else: print("Passed `method` not found.") - return ste + return short_term_extreme_dist -def full_seastate_long_term_extreme(ste, weights): +def full_seastate_long_term_extreme(short_term_extreme_dist, weights): """ Return the long-term extreme distribution of a response of interest using the full sea state approach. @@ -226,9 +258,10 @@ def full_seastate_long_term_extreme(ste, weights): ste: scipy.stats.rv_frozen Short-term extreme distribution. """ - if not isinstance(ste, list): + if not isinstance(short_term_extreme_dist, list): raise TypeError( - f"ste must be of type list[scipy.stats.rv_frozen]. Got: {type(ste)}" + "short_term_extreme_dist must be of type list[scipy.stats.rv_frozen]." + + f"Got: {type(short_term_extreme_dist)}" ) if not isinstance(weights, (list, np.ndarray)): raise TypeError( @@ -241,13 +274,16 @@ def __init__(self, *args, **kwargs): # make sure weights add to 1.0 self.weights = weights / np.sum(weights) self.ste = kwargs.pop("ste") - self.n = len(self.weights) + # Disabled bc not sure where/ how n is applied + self.n = len(self.weights) # pylint: disable=invalid-name super().__init__(*args, **kwargs) - def _cdf(self, x): - f = 0.0 + def _cdf(self, x, *args, **kwargs): + weighted_cdf = 0.0 for w_i, ste_i in zip(self.weights, self.ste): - f += w_i * ste_i.cdf(x) - return f + weighted_cdf += w_i * ste_i.cdf(x, *args, **kwargs) + return weighted_cdf - return _LongTermExtreme(name="long_term_extreme", weights=weights, ste=ste) + return _LongTermExtreme( + name="long_term_extreme", weights=weights, ste=short_term_extreme_dist + ) From dd6dfef11d7f9335b43cec66e074845edd243856 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 20 Feb 2024 10:47:53 -0700 Subject: [PATCH 68/87] pylint loads 80% --- .github/workflows/pylint.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/pylint.yml diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml new file mode 100644 index 000000000..eb7e80950 --- /dev/null +++ b/.github/workflows/pylint.yml @@ -0,0 +1,34 @@ +name: Pylint Loads + +on: [push, pull_request] + +jobs: + formatting-and-linting: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pylint + + - name: Run Pylint on mhkit/loads/ and check score + run: | + # Run pylint and capture the output + pylint_output=$(pylint mhkit/loads/ --output-format=text) + echo "$pylint_output" + # Extract the score from the output + score=$(echo "$pylint_output" | grep "Your code has been rated at" | awk '{print $7}' | sed 's/\/10//') + echo "Pylint score: $score" + # Define the minimum acceptable score + min_score=8.0 + # Compare the score with the minimum acceptable score + python -c "import sys; sys.exit(0 if $score >= $min_score else 1)" From 77cf60c83e22fd6c977bc22be219dde1a9592a91 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 20 Feb 2024 10:50:55 -0700 Subject: [PATCH 69/87] remove comments --- .github/workflows/pylint.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index eb7e80950..54f528bf2 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -22,13 +22,9 @@ jobs: - name: Run Pylint on mhkit/loads/ and check score run: | - # Run pylint and capture the output pylint_output=$(pylint mhkit/loads/ --output-format=text) echo "$pylint_output" - # Extract the score from the output score=$(echo "$pylint_output" | grep "Your code has been rated at" | awk '{print $7}' | sed 's/\/10//') echo "Pylint score: $score" - # Define the minimum acceptable score min_score=8.0 - # Compare the score with the minimum acceptable score python -c "import sys; sys.exit(0 if $score >= $min_score else 1)" From f5185e1615528859f86e4184312f73bce6651209 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 20 Feb 2024 10:53:15 -0700 Subject: [PATCH 70/87] try this --- .github/workflows/pylint.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 54f528bf2..bf35abd66 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -22,9 +22,15 @@ jobs: - name: Run Pylint on mhkit/loads/ and check score run: | - pylint_output=$(pylint mhkit/loads/ --output-format=text) + # Run pylint and capture the output + pylint_output=$(pylint mhkit/loads/ --output-format=text || true) echo "$pylint_output" - score=$(echo "$pylint_output" | grep "Your code has been rated at" | awk '{print $7}' | sed 's/\/10//') + # Extract the score from the output, handling cases where score is not found + score=$(echo "$pylint_output" | grep "Your code has been rated at" | awk '{print $7}' | sed 's/\/10//' || echo "0") echo "Pylint score: $score" + # Define the minimum acceptable score min_score=8.0 - python -c "import sys; sys.exit(0 if $score >= $min_score else 1)" + # Check if score is a number, exit with code 1 (failure) if not + python -c "import sys; score='$score'; sys.exit(0 if score.replace('.', '', 1).isdigit() else 1)" + # Compare the score with the minimum acceptable score, exit with code 1 if below threshold + python -c "import sys; sys.exit(0 if float('$score') >= $min_score else 1)" From 3c6f892cfa13cf1ff845a5fd8ca6a36fd29f5152 Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 20 Feb 2024 10:54:28 -0700 Subject: [PATCH 71/87] set to 7 --- .github/workflows/pylint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index bf35abd66..4077091a9 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -29,7 +29,7 @@ jobs: score=$(echo "$pylint_output" | grep "Your code has been rated at" | awk '{print $7}' | sed 's/\/10//' || echo "0") echo "Pylint score: $score" # Define the minimum acceptable score - min_score=8.0 + min_score=7.0 # Check if score is a number, exit with code 1 (failure) if not python -c "import sys; score='$score'; sys.exit(0 if score.replace('.', '', 1).isdigit() else 1)" # Compare the score with the minimum acceptable score, exit with code 1 if below threshold From 7605238ebcc405082f5410f80303eca0551871ed Mon Sep 17 00:00:00 2001 From: ssolson Date: Tue, 20 Feb 2024 15:31:01 -0700 Subject: [PATCH 72/87] 100% peaks --- mhkit/loads/extreme/peaks.py | 156 ++++++++++++++++++++--------------- 1 file changed, 89 insertions(+), 67 deletions(-) diff --git a/mhkit/loads/extreme/peaks.py b/mhkit/loads/extreme/peaks.py index 026b3b861..3f588237a 100644 --- a/mhkit/loads/extreme/peaks.py +++ b/mhkit/loads/extreme/peaks.py @@ -57,13 +57,13 @@ def _calculate_window_size(peaks: NDArray[np.float64], sampling_rate: float) -> float The window size determined by the auto-correlation function. """ - nlags = int(14 * 24 / sampling_rate) - x = peaks - np.mean(peaks) - acf = signal.correlate(x, x, mode="full") - lag = signal.correlation_lags(len(x), len(x), mode="full") + n_lags = int(14 * 24 / sampling_rate) + deviations_from_mean = peaks - np.mean(peaks) + acf = signal.correlate(deviations_from_mean, deviations_from_mean, mode="full") + lag = signal.correlation_lags(len(peaks), len(peaks), mode="full") idx_zero = np.argmax(lag == 0) - positive_lag = lag[idx_zero : idx_zero + nlags + 1] - acf_positive = acf[idx_zero : idx_zero + nlags + 1] / acf[idx_zero] + positive_lag = lag[idx_zero : idx_zero + n_lags + 1] + acf_positive = acf[idx_zero : idx_zero + n_lags + 1] / acf[idx_zero] window_size = sampling_rate * positive_lag[acf_positive < 0.5][0] return window_size / sampling_rate @@ -122,7 +122,7 @@ def _peaks_over_threshold( return independent_storm_peaks -def global_peaks(t: np.ndarray, data: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: +def global_peaks(time: np.ndarray, data: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: """ Find the global peaks of a zero-centered response time-series. @@ -131,25 +131,25 @@ def global_peaks(t: np.ndarray, data: np.ndarray) -> Tuple[np.ndarray, np.ndarra Parameters ---------- - t: np.array + time: np.array Time array. data: np.array Response time-series. Returns ------- - t_peaks: np.array + time_peaks: np.array Time array for peaks peaks: np.array Peak values of the response time-series """ - if not isinstance(t, np.ndarray): - raise TypeError(f"t must be of type np.ndarray. Got: {type(t)}") + if not isinstance(time, np.ndarray): + raise TypeError(f"time must be of type np.ndarray. Got: {type(time)}") if not isinstance(data, np.ndarray): raise TypeError(f"data must be of type np.ndarray. Got: {type(data)}") # Find zero up-crossings - inds = upcrossing(t, data) + inds = upcrossing(time, data) # We also include the final point in the dataset inds = np.append(inds, len(data) - 1) @@ -168,20 +168,20 @@ def find_peak_index(ind1, ind2): dtype=int, ) - return t[peak_inds], data[peak_inds] + return time[peak_inds], data[peak_inds] -def number_of_short_term_peaks(n: int, t: float, t_st: float) -> float: +def number_of_short_term_peaks(n_peaks: int, time: float, time_st: float) -> float: """ Estimate the number of peaks in a specified period. Parameters ---------- - n : int + n_peaks : int Number of peaks in analyzed timeseries. - t : float + time : float Length of time of analyzed timeseries. - t_st: float + time_st: float Short-term period for which to estimate the number of peaks. Returns @@ -189,17 +189,17 @@ def number_of_short_term_peaks(n: int, t: float, t_st: float) -> float: n_st : float Number of peaks in short term period. """ - if not isinstance(n, int): - raise TypeError(f"n must be of type int. Got: {type(n)}") - if not isinstance(t, float): - raise TypeError(f"t must be of type float. Got: {type(t)}") - if not isinstance(t_st, float): - raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") + if not isinstance(n_peaks, int): + raise TypeError(f"n_peaks must be of type int. Got: {type(n_peaks)}") + if not isinstance(time, float): + raise TypeError(f"time must be of type float. Got: {type(time)}") + if not isinstance(time_st, float): + raise TypeError(f"time_st must be of type float. Got: {type(time_st)}") - return n * t_st / t + return n_peaks * time_st / time -def peaks_distribution_weibull(x: NDArray[np.float_]) -> rv_continuous: +def peaks_distribution_weibull(peaks_data: NDArray[np.float_]) -> rv_continuous: """ Estimate the peaks distribution by fitting a Weibull distribution to the peaks of the response. @@ -209,7 +209,7 @@ def peaks_distribution_weibull(x: NDArray[np.float_]) -> rv_continuous: Parameters ---------- - x : NDArray[np.float_] + peaks_data : NDArray[np.float_] Global peaks. Returns @@ -217,20 +217,25 @@ def peaks_distribution_weibull(x: NDArray[np.float_]) -> rv_continuous: peaks: scipy.stats.rv_frozen Probability distribution of the peaks. """ - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + if not isinstance(peaks_data, np.ndarray): + raise TypeError( + f"peaks_data must be of type np.ndarray. Got: {type(peaks_data)}" + ) # peaks distribution - peaks_params = stats.exponweib.fit(x, f0=1, floc=0) + peaks_params = stats.exponweib.fit(peaks_data, f0=1, floc=0) param_names = ["a", "c", "loc", "scale"] - peaks_params = {k: v for k, v in zip(param_names, peaks_params)} + peaks_params = dict(zip(param_names, peaks_params)) peaks = stats.exponweib(**peaks_params) # save the parameter info peaks.params = peaks_params return peaks -def peaks_distribution_weibull_tail_fit(x: NDArray[np.float_]) -> rv_continuous: +# pylint: disable=R0914 +def peaks_distribution_weibull_tail_fit( + peaks_data: NDArray[np.float_], +) -> rv_continuous: """ Estimate the peaks distribution using the Weibull tail fit method. @@ -240,7 +245,7 @@ def peaks_distribution_weibull_tail_fit(x: NDArray[np.float_]) -> rv_continuous: Parameters ---------- - x : np.array + peaks_data : np.array Global peaks. Returns @@ -248,37 +253,41 @@ def peaks_distribution_weibull_tail_fit(x: NDArray[np.float_]) -> rv_continuous: peaks: scipy.stats.rv_frozen Probability distribution of the peaks. """ - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + if not isinstance(peaks_data, np.ndarray): + raise TypeError( + f"peaks_data must be of type np.ndarray. Got: {type(peaks_data)}" + ) # Initial guess for Weibull parameters - p0 = stats.exponweib.fit(x, f0=1, floc=0) - p0 = np.array([p0[1], p0[3]]) + p_0 = stats.exponweib.fit(peaks_data, f0=1, floc=0) + p_0 = np.array([p_0[1], p_0[3]]) # Approximate CDF - x = np.sort(x) - npeaks = len(x) - F = np.zeros(npeaks) - for i in range(npeaks): - F[i] = i / (npeaks + 1.0) + peaks_data = np.sort(peaks_data) + n_peaks = len(peaks_data) + cdf_positions = np.zeros(n_peaks) + for i in range(n_peaks): + cdf_positions[i] = i / (n_peaks + 1.0) # Divide into seven sets & fit Weibull subset_shape_params = np.zeros(7) subset_scale_params = np.zeros(7) set_lim = np.arange(0.60, 0.90, 0.05) - def weibull_cdf(x, c, s): - return stats.exponweib(a=1, c=c, loc=0, scale=s).cdf(x) + def weibull_cdf(data_points, shape, scale): + return stats.exponweib(a=1, c=shape, loc=0, scale=scale).cdf(data_points) for local_set in range(7): - x_set = x[(F > set_lim[local_set])] - f_set = F[(F > set_lim[local_set])] + global_peaks_set = peaks_data[(cdf_positions > set_lim[local_set])] + cdf_positions_set = cdf_positions[(cdf_positions > set_lim[local_set])] # pylint: disable=W0632 - popt, _ = optimize.curve_fit(weibull_cdf, x_set, f_set, p0=p0) - subset_shape_params[local_set] = popt[0] - subset_scale_params[local_set] = popt[1] + p_opt, _ = optimize.curve_fit( + weibull_cdf, global_peaks_set, cdf_positions_set, p0=p_0 + ) + subset_shape_params[local_set] = p_opt[0] + subset_scale_params[local_set] = p_opt[1] # peaks distribution peaks_params = [1, np.mean(subset_shape_params), 0, np.mean(subset_scale_params)] param_names = ["a", "c", "loc", "scale"] - peaks_params = {k: v for k, v in zip(param_names, peaks_params)} + peaks_params = dict(zip(param_names, peaks_params)) peaks = stats.exponweib(**peaks_params) # save the parameter info peaks.params = peaks_params @@ -287,6 +296,7 @@ def weibull_cdf(x, c, s): return peaks +# pylint: disable=R0914 def automatic_hs_threshold( peaks: NDArray[np.float_], sampling_rate: float, @@ -300,7 +310,8 @@ def automatic_hs_threshold( This method was developed by: > Neary, V. S., S. Ahn, B. E. Seng, M. N. Allahdadi, T. Wang, Z. Yang and R. He (2020). - > "Characterization of Extreme Wave Conditions for Wave Energy Converter Design and Project Risk Assessment.” + > "Characterization of Extreme Wave Conditions for Wave Energy Converter Design and + > Project Risk Assessment.” > J. Mar. Sci. Eng. 2020, 8(4), 289; https://doi.org/10.3390/jmse8040289. Please cite this paper if using this method. @@ -385,7 +396,7 @@ def automatic_hs_threshold( def peaks_distribution_peaks_over_threshold( - x: NDArray[np.float_], threshold: Optional[float] = None + peaks_data: NDArray[np.float_], threshold: Optional[float] = None ) -> rv_continuous: """ Estimate the peaks distribution using the peaks over threshold @@ -401,7 +412,7 @@ def peaks_distribution_peaks_over_threshold( Parameters ---------- - x : NDArray[np.float_] + peaks_data : NDArray[np.float_] Global peaks. threshold : Optional[float] Threshold value. Only peaks above this value will be used. @@ -412,24 +423,26 @@ def peaks_distribution_peaks_over_threshold( peaks: rv_continuous Probability distribution of the peaks. """ - if not isinstance(x, np.ndarray): - raise TypeError(f"x must be of type np.ndarray. Got: {type(x)}") + if not isinstance(peaks_data, np.ndarray): + raise TypeError( + f"peaks_data must be of type np.ndarray. Got: {type(peaks_data)}" + ) if threshold is None: - threshold = np.mean(x) + 1.4 * np.std(x) + threshold = np.mean(peaks_data) + 1.4 * np.std(peaks_data) if threshold is not None and not isinstance(threshold, float): raise TypeError( f"If specified, threshold must be of type float. Got: {type(threshold)}" ) # peaks over threshold - x = np.sort(x) - pot = x[x > threshold] - threshold - npeaks = len(x) + peaks_data = np.sort(peaks_data) + pot = peaks_data[peaks_data > threshold] - threshold + npeaks = len(peaks_data) npot = len(pot) # Fit a generalized Pareto pot_params = stats.genpareto.fit(pot, floc=0.0) param_names = ["c", "loc", "scale"] - pot_params = {k: v for k, v in zip(param_names, pot_params)} + pot_params = dict(zip(param_names, pot_params)) pot = stats.genpareto(**pot_params) # save the parameter info pot.params = pot_params @@ -443,15 +456,24 @@ def __init__( self.threshold = threshold super().__init__(*args, **kwargs) - def _cdf(self, x: NDArray[np.float_], *args, **kwargs) -> NDArray[np.float_]: - x = np.atleast_1d(x) - out = np.zeros_like(x) - out[x < self.threshold] = np.NaN - xt = x[x >= self.threshold] - if xt.size != 0: - pot_ccdf = 1.0 - self.pot.cdf(xt - self.threshold, *args, **kwargs) + # pylint: disable=arguments-differ + def _cdf(self, data_points, *args, **kwds) -> NDArray[np.float_]: + # Convert data_points to a NumPy array if it's not already + data_points = np.atleast_1d(data_points) + out = np.zeros_like(data_points) + + # Use the instance's threshold attribute instead of passing as a parameter + below_threshold = data_points < self.threshold + out[below_threshold] = np.NaN + + above_threshold_indices = ~below_threshold + if np.any(above_threshold_indices): + points_above_threshold = data_points[above_threshold_indices] + pot_ccdf = 1.0 - self.pot.cdf( + points_above_threshold - self.threshold, *args, **kwds + ) prop_pot = npot / npeaks - out[x >= self.threshold] = 1.0 - (prop_pot * pot_ccdf) + out[above_threshold_indices] = 1.0 - (prop_pot * pot_ccdf) return out peaks = _Peaks(name="peaks", pot_distribution=pot, threshold=threshold) From c2fc1a613d2c3dc4bd68f0423589e6a016456009 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 22 Feb 2024 08:58:12 -0700 Subject: [PATCH 73/87] pylint 10/10 extereme --- mhkit/loads/extreme/__init__.py | 8 ++++---- mhkit/loads/extreme/extremes.py | 34 ++++++++++++++++++--------------- mhkit/loads/extreme/sample.py | 4 ++-- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/mhkit/loads/extreme/__init__.py b/mhkit/loads/extreme/__init__.py index 134566faf..318a2cdc8 100644 --- a/mhkit/loads/extreme/__init__.py +++ b/mhkit/loads/extreme/__init__.py @@ -7,7 +7,7 @@ normalization for most likely extreme response analysis. """ -from .extremes import ( +from mhkit.loads.extreme.extremes import ( ste_peaks, block_maxima, ste_block_maxima_gev, @@ -17,14 +17,14 @@ full_seastate_long_term_extreme, ) -from .mler import ( +from mhkit.loads.extreme.mler import ( mler_coefficients, mler_simulation, mler_wave_amp_normalize, mler_export_time_series, ) -from .peaks import ( +from mhkit.loads.extreme.peaks import ( _peaks_over_threshold, global_peaks, number_of_short_term_peaks, @@ -34,6 +34,6 @@ peaks_distribution_peaks_over_threshold, ) -from .sample import ( +from mhkit.loads.extreme.sample import ( return_year_value, ) diff --git a/mhkit/loads/extreme/extremes.py b/mhkit/loads/extreme/extremes.py index 2c50dd08e..d89545c9d 100644 --- a/mhkit/loads/extreme/extremes.py +++ b/mhkit/loads/extreme/extremes.py @@ -33,7 +33,7 @@ from scipy import stats from scipy.stats import rv_continuous -from mhkit.loads import extreme +import mhkit.loads.extreme.peaks as peaks_distributions def ste_peaks(peaks_distribution: rv_continuous, npeaks: float) -> rv_continuous: @@ -77,7 +77,9 @@ def _cdf(self, x, *args, **kwargs): return short_term_extreme_peaks -def block_maxima(time: np.ndarray, global_peaks: np.ndarray, t_st: float) -> np.ndarray: +def block_maxima( + time: np.ndarray, global_peaks_data: np.ndarray, time_st: float +) -> np.ndarray: """ Find the block maxima of a time-series. @@ -88,9 +90,9 @@ def block_maxima(time: np.ndarray, global_peaks: np.ndarray, t_st: float) -> np. ---------- time : np.array Time array. - x : np.array + global_peaks_data : np.array global peaks timeseries. - t_st : float + time_st : float Short-term period. Returns @@ -100,17 +102,19 @@ def block_maxima(time: np.ndarray, global_peaks: np.ndarray, t_st: float) -> np. """ if not isinstance(time, np.ndarray): raise TypeError(f"time must be of type np.ndarray. Got: {type(time)}") - if not isinstance(global_peaks, np.ndarray): + if not isinstance(global_peaks_data, np.ndarray): raise TypeError( - f"global_peaks must be of type np.ndarray. Got: {type(global_peaks)}" + f"global_peaks_data must be of type np.ndarray. Got: {type(global_peaks_data)}" ) - if not isinstance(t_st, float): - raise TypeError(f"t_st must be of type float. Got: {type(t_st)}") + if not isinstance(time_st, float): + raise TypeError(f"time_st must be of type float. Got: {type(time_st)}") - nblock = int(time[-1] / t_st) + nblock = int(time[-1] / time_st) block_max = np.zeros(int(nblock)) for iblock in range(nblock): - i_x = global_peaks[(time >= iblock * t_st) & (time < (iblock + 1) * t_st)] + i_x = global_peaks_data[ + (time >= iblock * time_st) & (time < (iblock + 1) * time_st) + ] block_max[iblock] = np.max(i_x) return block_max @@ -214,9 +218,9 @@ def short_term_extreme( raise TypeError(f"method must be of type string. Got: {type(method)}") peaks_methods = { - "peaks_weibull": extreme.peaks_distribution_weibull, - "peaks_weibull_tail_fit": extreme.peaks_distribution_weibull_tail_fit, - "peaks_over_threshold": extreme.peaks_distribution_peaks_over_threshold, + "peaks_weibull": peaks_distributions.peaks_distribution_weibull, + "peaks_weibull_tail_fit": peaks_distributions.peaks_distribution_weibull_tail_fit, + "peaks_over_threshold": peaks_distributions.peaks_distribution_peaks_over_threshold, } blockmaxima_methods = { "block_maxima_gev": ste_block_maxima_gev, @@ -225,10 +229,10 @@ def short_term_extreme( if method in peaks_methods: fit_peaks = peaks_methods[method] - _, peaks = extreme.global_peaks(time, data) + _, peaks = peaks_distributions.global_peaks(time, data) npeaks = len(peaks) time = time[-1] - time[0] - nst = extreme.number_of_short_term_peaks(npeaks, time, t_st) + nst = peaks_distributions.number_of_short_term_peaks(npeaks, time, t_st) peaks_dist = fit_peaks(peaks) short_term_extreme_dist = ste_peaks(peaks_dist, nst) elif method in blockmaxima_methods: diff --git a/mhkit/loads/extreme/sample.py b/mhkit/loads/extreme/sample.py index 262cd9821..3da0377de 100644 --- a/mhkit/loads/extreme/sample.py +++ b/mhkit/loads/extreme/sample.py @@ -47,6 +47,6 @@ def return_year_value( f"short_term_period_hr must be of type float or int. Got: {type(short_term_period_hr)}" ) - p = 1 / (return_year * 365.25 * 24 / short_term_period_hr) + probability_of_exceedance = 1 / (return_year * 365.25 * 24 / short_term_period_hr) - return ppf(1 - p) + return ppf(1 - probability_of_exceedance) From 50355de0a5a434f1e0031d55829ad2f85d900e94 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 22 Feb 2024 09:02:14 -0700 Subject: [PATCH 74/87] should run perfect on extreme --- .github/workflows/pylint.yml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 4077091a9..010a4eec5 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -20,17 +20,6 @@ jobs: python -m pip install --upgrade pip pip install pylint - - name: Run Pylint on mhkit/loads/ and check score + - name: Run Pylint on mhkit/loads/ run: | - # Run pylint and capture the output - pylint_output=$(pylint mhkit/loads/ --output-format=text || true) - echo "$pylint_output" - # Extract the score from the output, handling cases where score is not found - score=$(echo "$pylint_output" | grep "Your code has been rated at" | awk '{print $7}' | sed 's/\/10//' || echo "0") - echo "Pylint score: $score" - # Define the minimum acceptable score - min_score=7.0 - # Check if score is a number, exit with code 1 (failure) if not - python -c "import sys; score='$score'; sys.exit(0 if score.replace('.', '', 1).isdigit() else 1)" - # Compare the score with the minimum acceptable score, exit with code 1 if below threshold - python -c "import sys; sys.exit(0 if float('$score') >= $min_score else 1)" + pylint mhkit/loads/exterme From d2b121d08048868578d36e93132f9c680cea477f Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 22 Feb 2024 09:05:40 -0700 Subject: [PATCH 75/87] mhkit/loads/extreme/ --- .github/workflows/pylint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 010a4eec5..9a7e2dad1 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -22,4 +22,4 @@ jobs: - name: Run Pylint on mhkit/loads/ run: | - pylint mhkit/loads/exterme + pylint mhkit/loads/extreme/ From 8e55cc3bb3be6635d6b7630c9d58e4e2a6e8f593 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 22 Feb 2024 09:46:22 -0700 Subject: [PATCH 76/87] does this fix install issues? --- .github/workflows/pylint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 9a7e2dad1..8d7cd693b 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -17,7 +17,7 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip + python -m pip install --upgrade pip wheel pip install pylint - name: Run Pylint on mhkit/loads/ From 8323b430a4e615a719cfeba2d1530cc345701649 Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 22 Feb 2024 09:54:55 -0700 Subject: [PATCH 77/87] install package --- .github/workflows/pylint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 8d7cd693b..64d018c4b 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -19,6 +19,7 @@ jobs: run: | python -m pip install --upgrade pip wheel pip install pylint + pip instlal . - name: Run Pylint on mhkit/loads/ run: | From 0b4811721c37580b3906f23705c8d077a44f102d Mon Sep 17 00:00:00 2001 From: ssolson Date: Thu, 22 Feb 2024 09:57:17 -0700 Subject: [PATCH 78/87] install --- .github/workflows/pylint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 64d018c4b..f1b7d1c73 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -19,7 +19,7 @@ jobs: run: | python -m pip install --upgrade pip wheel pip install pylint - pip instlal . + pip install . - name: Run Pylint on mhkit/loads/ run: | From 515606704e89bbb082493aa2d87d819244e02c61 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 08:12:23 -0700 Subject: [PATCH 79/87] remove [] empyty array input --- mhkit/loads/general.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index e9a959426..b2573efb2 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -5,7 +5,7 @@ import fatpack -def bin_statistics(data, bin_against, bin_edges, data_signal=[], to_pandas=True): +def bin_statistics(data, bin_against, bin_edges, data_signal=None, to_pandas=True): """ Bins calculated statistics against data signal (or channel) according to IEC TS 62600-3:2020 ED1. @@ -76,6 +76,8 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=[], to_pandas=True) if isinstance(data, pd.DataFrame): data = data.to_xarray() + if data_signal is None: + data_signal = [] # Determine variables to analyze if len(data_signal) == 0: # if not specified, bin all variables data_signal = list(data.keys()) From 38f114b315664ec3091e40063e0110f79674bfbf Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 08:44:30 -0700 Subject: [PATCH 80/87] lint 10/10 --- mhkit/loads/general.py | 121 +++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 59 deletions(-) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index b2573efb2..165ce0609 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -1,3 +1,32 @@ +""" +This module provides tools for analyzing and processing data signals +related to turbine blade performance and fatigue analysis. It implements +methodologies based on standards such as IEC TS 62600-3:2020 ED1, +incorporating statistical binning, moment calculations, and fatigue +damage estimation using the rainflow counting algorithm. Key +functionalities include: + + - `bin_statistics`: Bins time-series data against a specified signal, + such as wind speed, to calculate mean and standard deviation statistics + for each bin, following IEC TS 62600-3:2020 ED1 guidelines. It supports + output in both pandas DataFrame and xarray Dataset formats. + + - `blade_moments`: Calculates the flapwise and edgewise moments of turbine + blades using derived calibration coefficients and raw strain signals. + This function is crucial for understanding the loading and performance + characteristics of turbine blades. + + - `damage_equivalent_load`: Estimates the damage equivalent load (DEL) + of a single data signal using a 4-point rainflow counting algorithm. + This method is vital for assessing fatigue life and durability of + materials under variable amplitude loading. + +References: +- C. Amzallag et. al., International Journal of Fatigue, 16 (1994) 287-293. +- ISO 12110-2, Metallic materials - Fatigue testing - Variable amplitude fatigue testing. +- G. Marsh et. al., International Journal of Fatigue, 82 (2016) 757-765. +""" + from scipy.stats import binned_statistic import pandas as pd import xarray as xr @@ -36,38 +65,9 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=None, to_pandas=Tru f"data must be of type pd.DataFrame or xr.Dataset. Got: {type(data)}" ) - if isinstance(bin_against, str): - raise TypeError( - f"bin_against must be numeric, not a string. Got: {bin_against}" - ) - - if not isinstance(bin_against, (list, xr.DataArray, pd.Series, np.ndarray)): - raise TypeError( - f"bin_against must be of type list, xr.DataArray, pd.Series, or np.ndarray. Got: {type(bin_against)}" - ) - - if not isinstance(bin_against, np.ndarray): - try: - bin_against = np.asarray(bin_against) - except: - raise TypeError( - f"bin_against must be of type np.ndarray. Got: {type(bin_against)}" - ) - - # Check if bin_edges is a string and raise an error if it is - if isinstance(bin_edges, str): - raise TypeError(f"bin_edges must not be a string. Got: {bin_edges}") - - # Check if bin_edges is one of the expected types, and convert if necessary - if isinstance(bin_edges, (list, xr.DataArray, pd.Series)): - try: - bin_edges = np.asarray(bin_edges) - except: - pass - - # Check if bin_edges is now a NumPy array, and raise an error if it's not - if not isinstance(bin_edges, np.ndarray): - raise TypeError(f"bin_edges must be of type np.ndarray. Got: {type(bin_edges)}") + # Use _to_numeric_array to process bin_against and bin_edges + bin_against = _to_numeric_array(bin_against, "bin_against") + bin_edges = _to_numeric_array(bin_edges, "bin_edges") if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") @@ -152,20 +152,10 @@ def blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_r Blade edgewise moment in SI units """ - try: - blade_coefficients = np.asarray(blade_coefficients) - except: - raise TypeError( - f"blade_coefficients must be of type np.ndarray. Got: {type(blade_coefficients)}" - ) - try: - flap_raw = np.asarray(flap_raw) - except: - raise TypeError(f"flap_raw must be of type np.ndarray. Got: {type(flap_raw)}") - try: - edge_raw = np.asarray(edge_raw) - except: - raise TypeError(f"edge_raw must be of type np.ndarray. Got: {type(edge_raw)}") + # Convert and validate blade_coefficients, flap_raw, and edge_raw + blade_coefficients = _to_numeric_array(blade_coefficients, "blade_coefficients") + flap_raw = _to_numeric_array(flap_raw, "flap_raw") + edge_raw = _to_numeric_array(edge_raw, "edge_raw") if not isinstance(flap_offset, (float, int)): raise TypeError( @@ -181,10 +171,10 @@ def blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_r edge_signal = edge_raw - edge_offset # apply matrix to get load signals - M_flap = blade_coefficients[0] * flap_signal + blade_coefficients[1] * edge_signal - M_edge = blade_coefficients[2] * flap_signal + blade_coefficients[3] * edge_signal + m_flap = blade_coefficients[0] * flap_signal + blade_coefficients[1] * edge_signal + m_edge = blade_coefficients[2] * flap_signal + blade_coefficients[3] * edge_signal - return M_flap, M_edge + return m_flap, m_edge def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): @@ -219,12 +209,7 @@ def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): Damage equivalent load (DEL) of single data signal """ - try: - data_signal = np.array(data_signal) - except: - raise TypeError( - f"data_signal must be of type np.ndarray. Got: {type(data_signal)}" - ) + _to_numeric_array(data_signal, "data_signal") if not isinstance(m, (float, int)): raise TypeError(f"m must be of type float or int. Got: {type(m)}") if not isinstance(bin_num, (float, int)): @@ -237,9 +222,27 @@ def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): rainflow_ranges = fatpack.find_rainflow_ranges(data_signal, k=256) # Range count and bin - Nrf, Srf = fatpack.find_range_count(rainflow_ranges, bin_num) + n_rf, s_rf = fatpack.find_range_count(rainflow_ranges, bin_num) + + del_s = s_rf**m * n_rf / data_length + del_value = del_s.sum() ** (1 / m) + + return del_value - DELs = Srf**m * Nrf / data_length - DEL = DELs.sum() ** (1 / m) - return DEL +# Function to check and convert input to numeric np.ndarray +def _to_numeric_array(data, name): + if isinstance(data, (list, np.ndarray, pd.Series, xr.DataArray)): + data = np.asarray(data) + if not np.issubdtype(data.dtype, np.number): + raise TypeError( + (f"{name} must contain numeric data." + f" Got data type: {data.dtype}") + ) + else: + raise TypeError( + ( + f"{name} must be a list, np.ndarray, pd.Series," + + f" or xr.DataArray. Got: {type(data)}" + ) + ) + return data From b3019b1630f83ef572a727a3ecb8729343c1a304 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:20:44 -0700 Subject: [PATCH 81/87] list works; throw error on string data --- mhkit/tests/loads/test_loads.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mhkit/tests/loads/test_loads.py b/mhkit/tests/loads/test_loads.py index a4e07e5d3..8c119a38e 100644 --- a/mhkit/tests/loads/test_loads.py +++ b/mhkit/tests/loads/test_loads.py @@ -272,7 +272,7 @@ def test_plot_bin_statistics_type_errors(self): # Test invalid data types one at a time with self.assertRaises(TypeError): loads.graphics.plot_bin_statistics( - [1, 2, 3], # Invalid bin_centers (list instead of np.ndarray) + ["a", 2, 3], # Invalid bin_centers bin_mean, bin_max, bin_min, @@ -284,7 +284,7 @@ def test_plot_bin_statistics_type_errors(self): with self.assertRaises(TypeError): loads.graphics.plot_bin_statistics( bin_centers, - [10, 20, 30], # Invalid bin_mean (list instead of np.ndarray) + ["a", 20, 30], # Invalid bin_mean bin_max, bin_min, bin_mean_std, @@ -296,7 +296,7 @@ def test_plot_bin_statistics_type_errors(self): loads.graphics.plot_bin_statistics( bin_centers, bin_mean, - [15, 25, 35], # Invalid bin_max (list instead of np.ndarray) + ["a", 25, 35], # Invalid bin_max bin_min, bin_mean_std, bin_max_std, @@ -308,7 +308,7 @@ def test_plot_bin_statistics_type_errors(self): bin_centers, bin_mean, bin_max, - [5, 15, 25], # Invalid bin_min (list instead of np.ndarray) + ["a", 15, 25], # Invalid bin_min bin_mean_std, bin_max_std, bin_min_std, @@ -320,7 +320,7 @@ def test_plot_bin_statistics_type_errors(self): bin_mean, bin_max, bin_min, - [1, 2, 3], # Invalid bin_mean_std (list instead of np.ndarray) + ["a", 2, 3], # Invalid bin_mean_std bin_max_std, bin_min_std, ) @@ -332,7 +332,7 @@ def test_plot_bin_statistics_type_errors(self): bin_max, bin_min, bin_mean_std, - [0.5, 1.5, 2.5], # Invalid bin_max_std (list instead of np.ndarray) + ["a", 1.5, 2.5], # Invalid bin_max_std bin_min_std, ) @@ -344,7 +344,7 @@ def test_plot_bin_statistics_type_errors(self): bin_min, bin_mean_std, bin_max_std, - [0.8, 1.8, 2.8], # Invalid bin_min_std (list instead of np.ndarray) + ["a", 1.8, 2.8], # Invalid bin_min_std ) From 7c744ae70092b00ebf64de1bfa178e375fb19036 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:20:54 -0700 Subject: [PATCH 82/87] entire loads module --- .github/workflows/pylint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index f1b7d1c73..b539abde3 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -23,4 +23,4 @@ jobs: - name: Run Pylint on mhkit/loads/ run: | - pylint mhkit/loads/extreme/ + pylint mhkit/loads/ From c25a28f295e36be5a303c93c3799f1d2598f68df Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:21:15 -0700 Subject: [PATCH 83/87] docstring --- mhkit/loads/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mhkit/loads/__init__.py b/mhkit/loads/__init__.py index d6c0551cc..4c21c7391 100644 --- a/mhkit/loads/__init__.py +++ b/mhkit/loads/__init__.py @@ -1,3 +1,12 @@ +""" +The `loads` package of the MHKiT (Marine and Hydrokinetic Toolkit) library +provides tools and functionalities for analyzing and visualizing loads data +from marine and hydrokinetic (MHK) devices. This package is designed to +assist engineers, researchers, and analysts in understanding the forces and +stresses applied to MHK devices under various operational and environmental +conditions. +""" + from mhkit.loads import general from mhkit.loads import graphics from mhkit.loads import extreme From 77b63558f59e2a2503fa25aa48cd704f5548da79 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:21:23 -0700 Subject: [PATCH 84/87] 10/10 --- mhkit/loads/general.py | 31 +++--------- mhkit/loads/graphics.py | 102 ++++++++++++++++++++-------------------- 2 files changed, 58 insertions(+), 75 deletions(-) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index 165ce0609..e8903dbc8 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -32,6 +32,7 @@ import xarray as xr import numpy as np import fatpack +from mhkit.utils.type_handling import to_numeric_array def bin_statistics(data, bin_against, bin_edges, data_signal=None, to_pandas=True): @@ -66,8 +67,8 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=None, to_pandas=Tru ) # Use _to_numeric_array to process bin_against and bin_edges - bin_against = _to_numeric_array(bin_against, "bin_against") - bin_edges = _to_numeric_array(bin_edges, "bin_edges") + bin_against = to_numeric_array(bin_against, "bin_against") + bin_edges = to_numeric_array(bin_edges, "bin_edges") if not isinstance(to_pandas, bool): raise TypeError(f"to_pandas must be of type bool. Got: {type(to_pandas)}") @@ -153,9 +154,9 @@ def blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_r """ # Convert and validate blade_coefficients, flap_raw, and edge_raw - blade_coefficients = _to_numeric_array(blade_coefficients, "blade_coefficients") - flap_raw = _to_numeric_array(flap_raw, "flap_raw") - edge_raw = _to_numeric_array(edge_raw, "edge_raw") + blade_coefficients = to_numeric_array(blade_coefficients, "blade_coefficients") + flap_raw = to_numeric_array(flap_raw, "flap_raw") + edge_raw = to_numeric_array(edge_raw, "edge_raw") if not isinstance(flap_offset, (float, int)): raise TypeError( @@ -209,7 +210,7 @@ def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): Damage equivalent load (DEL) of single data signal """ - _to_numeric_array(data_signal, "data_signal") + to_numeric_array(data_signal, "data_signal") if not isinstance(m, (float, int)): raise TypeError(f"m must be of type float or int. Got: {type(m)}") if not isinstance(bin_num, (float, int)): @@ -228,21 +229,3 @@ def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): del_value = del_s.sum() ** (1 / m) return del_value - - -# Function to check and convert input to numeric np.ndarray -def _to_numeric_array(data, name): - if isinstance(data, (list, np.ndarray, pd.Series, xr.DataArray)): - data = np.asarray(data) - if not np.issubdtype(data.dtype, np.number): - raise TypeError( - (f"{name} must contain numeric data." + f" Got data type: {data.dtype}") - ) - else: - raise TypeError( - ( - f"{name} must be a list, np.ndarray, pd.Series," - + f" or xr.DataArray. Got: {type(data)}" - ) - ) - return data diff --git a/mhkit/loads/graphics.py b/mhkit/loads/graphics.py index d37cb1a2c..b146898ff 100644 --- a/mhkit/loads/graphics.py +++ b/mhkit/loads/graphics.py @@ -1,9 +1,26 @@ +""" +This module provides functionalities for plotting statistical data +related to a given variable or dataset. + + - `plot_statistics` is designed to plot raw statistical measures + (mean, maximum, minimum, and optional standard deviation) of a + variable across a series of x-axis values. It allows for + customization of plot labels, title, and saving the plot to a file. + + - `plot_bin_statistics` extends these capabilities to binned data, + offering a way to visualize binned statistics (mean, maximum, minimum) + along with their respective standard deviations. This function also + supports label and title customization, as well as saving the plot to + a specified path. +""" + import matplotlib.pyplot as plt -import numpy as np -import pandas as pd + +from mhkit.utils.type_handling import to_numeric_array -def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): +# pylint: disable=R0914 +def plot_statistics(x, y_mean, y_max, y_min, y_stdev=None, **kwargs): """ Plot showing standard raw statistics of variable @@ -33,20 +50,15 @@ def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): -------- ax : matplotlib pyplot axes """ + if y_stdev is None: + y_stdev = [] input_variables = [x, y_mean, y_max, y_min, y_stdev] - for i in range(len(input_variables)): - var_name = ["x", "y_mean", "y_max", "y_min", "y_stdev"][i] - if not isinstance(input_variables[i], (np.ndarray, pd.Series, int, float)): - raise TypeError( - f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}" - ) - - try: - input_variables[i] = np.array(input_variables[i]) - except: - pass + variable_names = ["x", "y_mean", "y_max", "y_min", "y_stdev"] + # Convert each input variable to a numeric array, ensuring all are numeric + for i, variable in enumerate(input_variables): + input_variables[i] = to_numeric_array(variable, variable_names[i]) x, y_mean, y_max, y_min, y_stdev = input_variables @@ -74,16 +86,16 @@ def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): ax.grid(alpha=0.4) ax.legend(loc="best") - if x_label != None: + if x_label: ax.set_xlabel(x_label) - if y_label != None: + if y_label: ax.set_ylabel(y_label) - if title != None: + if title: ax.set_title(title) fig.tight_layout() - if save_path == None: + if save_path is None: plt.show() else: fig.savefig(save_path) @@ -91,6 +103,7 @@ def plot_statistics(x, y_mean, y_max, y_min, y_stdev=[], **kwargs): return ax +# pylint: disable=R0913 def plot_bin_statistics( bin_centers, bin_mean, @@ -144,36 +157,23 @@ def plot_bin_statistics( bin_max_std, bin_min_std, ] + variable_names = [ + "bin_centers", + "bin_mean", + "bin_max", + "bin_min", + "bin_mean_std", + "bin_max_std", + "bin_min_std", + ] - for i in range(len(input_variables)): - var_name = [ - "bin_centers", - "bin_mean", - "bin_max", - "bin_min", - "bin_mean_std", - "bin_max_std", - "bin_min_std", - ][i] - if not isinstance(input_variables[i], (np.ndarray, pd.Series, int, float)): - raise TypeError( - f"{var_name} must be of type np.ndarray, int, or float. Got: {type(input_variables[i])}" - ) - - try: - input_variables[i] = np.array(input_variables[i]) - except: - pass - - ( - bin_centers, - bin_mean, - bin_max, - bin_min, - bin_mean_std, - bin_max_std, - bin_min_std, - ) = input_variables + # Convert each input variable to a numeric array, ensuring all are numeric + for i, variable in enumerate(input_variables): + input_variables[i] = to_numeric_array(variable, variable_names[i]) + + bin_centers, bin_mean, bin_max, bin_min, bin_mean_std, bin_max_std, bin_min_std = ( + input_variables + ) x_label = kwargs.get("x_label", None) y_label = kwargs.get("y_label", None) @@ -221,16 +221,16 @@ def plot_bin_statistics( ax.grid(alpha=0.5) ax.legend(loc="best") - if x_label != None: + if x_label: ax.set_xlabel(x_label) - if y_label != None: + if y_label: ax.set_ylabel(y_label) - if title != None: + if title: ax.set_title(title) fig.tight_layout() - if save_path == None: + if save_path is None: plt.show() else: fig.savefig(save_path) From b34b5ea39234d6d11c55877bde16f174442c9bc2 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:21:52 -0700 Subject: [PATCH 85/87] type_handling function for checking numeric arrays --- mhkit/utils/type_handling.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 mhkit/utils/type_handling.py diff --git a/mhkit/utils/type_handling.py b/mhkit/utils/type_handling.py new file mode 100644 index 000000000..844850b2d --- /dev/null +++ b/mhkit/utils/type_handling.py @@ -0,0 +1,23 @@ +import numpy as np +import pandas as pd +import xarray as xr + + +def to_numeric_array(data, name): + """ + Convert input data to a numeric array, ensuring all elements are numeric. + """ + if isinstance(data, (list, np.ndarray, pd.Series, xr.DataArray)): + data = np.asarray(data) + if not np.issubdtype(data.dtype, np.number): + raise TypeError( + (f"{name} must contain numeric data." + f" Got data type: {data.dtype}") + ) + else: + raise TypeError( + ( + f"{name} must be a list, np.ndarray, pd.Series," + + f" or xr.DataArray. Got: {type(data)}" + ) + ) + return data From 8103c0e99dcfb82dfc9ae0a33de002d5a6acd451 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:32:13 -0700 Subject: [PATCH 86/87] typehints --- mhkit/loads/graphics.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/mhkit/loads/graphics.py b/mhkit/loads/graphics.py index b146898ff..3403dda7f 100644 --- a/mhkit/loads/graphics.py +++ b/mhkit/loads/graphics.py @@ -14,13 +14,22 @@ a specified path. """ +from typing import Optional, Dict, Any +import numpy as np import matplotlib.pyplot as plt from mhkit.utils.type_handling import to_numeric_array # pylint: disable=R0914 -def plot_statistics(x, y_mean, y_max, y_min, y_stdev=None, **kwargs): +def plot_statistics( + x: np.ndarray, + y_mean: np.ndarray, + y_max: np.ndarray, + y_min: np.ndarray, + y_stdev: Optional[np.ndarray] = None, + **kwargs: Dict[str, Any], +) -> plt.Axes: """ Plot showing standard raw statistics of variable @@ -105,15 +114,15 @@ def plot_statistics(x, y_mean, y_max, y_min, y_stdev=None, **kwargs): # pylint: disable=R0913 def plot_bin_statistics( - bin_centers, - bin_mean, - bin_max, - bin_min, - bin_mean_std, - bin_max_std, - bin_min_std, - **kwargs, -): + bin_centers: np.ndarray, + bin_mean: np.ndarray, + bin_max: np.ndarray, + bin_min: np.ndarray, + bin_mean_std: np.ndarray, + bin_max_std: np.ndarray, + bin_min_std: np.ndarray, + **kwargs: Dict[str, Any], +) -> plt.Axes: """ Plot showing standard binned statistics of single variable From 40f8ebf505a514f62bc2c836a134fc39e39557b7 Mon Sep 17 00:00:00 2001 From: ssolson Date: Fri, 23 Feb 2024 12:33:27 -0700 Subject: [PATCH 87/87] typehints --- mhkit/loads/general.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/mhkit/loads/general.py b/mhkit/loads/general.py index e8903dbc8..119731443 100644 --- a/mhkit/loads/general.py +++ b/mhkit/loads/general.py @@ -27,6 +27,7 @@ - G. Marsh et. al., International Journal of Fatigue, 82 (2016) 757-765. """ +from typing import Union, List, Tuple, Optional from scipy.stats import binned_statistic import pandas as pd import xarray as xr @@ -35,7 +36,13 @@ from mhkit.utils.type_handling import to_numeric_array -def bin_statistics(data, bin_against, bin_edges, data_signal=None, to_pandas=True): +def bin_statistics( + data: Union[pd.DataFrame, xr.Dataset], + bin_against: np.ndarray, + bin_edges: np.ndarray, + data_signal: Optional[List[str]] = None, + to_pandas: bool = True, +) -> Tuple[Union[pd.DataFrame, xr.Dataset], Union[pd.DataFrame, xr.Dataset]]: """ Bins calculated statistics against data signal (or channel) according to IEC TS 62600-3:2020 ED1. @@ -128,7 +135,13 @@ def bin_statistics(data, bin_against, bin_edges, data_signal=None, to_pandas=Tru return bin_mean, bin_std -def blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_raw): +def blade_moments( + blade_coefficients: np.ndarray, + flap_offset: float, + flap_raw: np.ndarray, + edge_offset: float, + edge_raw: np.ndarray, +) -> Tuple[np.ndarray, np.ndarray]: """ Transfer function for deriving blade flap and edge moments using blade matrix. @@ -178,7 +191,12 @@ def blade_moments(blade_coefficients, flap_offset, flap_raw, edge_offset, edge_r return m_flap, m_edge -def damage_equivalent_load(data_signal, m, bin_num=100, data_length=600): +def damage_equivalent_load( + data_signal: np.ndarray, + m: Union[float, int], + bin_num: int = 100, + data_length: Union[float, int] = 600, +) -> float: """ Calculates the damage equivalent load of a single data signal (or channel) based on IEC TS 62600-3:2020 ED1. 4-point rainflow counting algorithm from