Skip to content

Commit

Permalink
Fixes for average mode
Browse files Browse the repository at this point in the history
  • Loading branch information
jmcvey3 committed Jul 12, 2023
1 parent 9f7a979 commit b6561a0
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 12 deletions.
24 changes: 16 additions & 8 deletions dolfyn/io/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,14 @@ def _create_dataset(data):
Direction 'dir' coordinates are set in `set_coords`
"""
ds = xr.Dataset()
tag = ['_b5', '_echo', '_bt', '_gps', '_ast', '_sl']
tag = ['_avg', '_b5', '_echo', '_bt', '_gps', '_ast', '_sl']

FoR = {}
n_beams = max(min(data['attrs']['n_beams'], 4), 3) # need to keep dimension at 3 or 4
try:
beams = data['attrs']['n_beams']
except:
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'})
Expand Down Expand Up @@ -200,7 +204,7 @@ def _create_dataset(data):
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[:2]):
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'
else:
Expand Down Expand Up @@ -235,13 +239,17 @@ def _create_dataset(data):
else: # amp, corr, prcnt_gd, status
dim0 = 'beam'

if not any(val in key for val in tag):
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',
'dim_2': 'time'})
'dim_1': 'range'+tg,
'dim_2': 'time'+tg})
ds[key] = ds[key].assign_coords({dim0: FoR[dim0],
'range': data['coords']['range'],
'time': data['coords']['time']})
'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]
Expand Down
26 changes: 23 additions & 3 deletions dolfyn/io/nortek2.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,6 @@ def _reorg(dat):
cfg['inst_model'] = (cfh['ID'].split(',')[0][5:-1])
cfg['inst_make'] = 'Nortek'
cfg['inst_type'] = 'ADCP'
cfg['rotate_vars'] = ['vel', ]

for id, tag in [(21, ''), (22, '_avg'), (23, '_bt'),
(24, '_b5'), (26, '_ast'), (28, '_echo')]:
Expand Down Expand Up @@ -523,9 +522,15 @@ def _reorg(dat):
[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']
else:
cfg['rotate_vars'] = ['vel', ]
cy = cfg['coord_sys_axes']
outdat['attrs']['coord_sys'] = {'XYZ': 'inst',
'ENU': 'earth',
'beam': 'beam'}[cfg['coord_sys_axes']]
'beam': 'beam'}[cy]

# Copy appropriate vars to rotate_vars
for ky in ['accel', 'angrt', 'mag']:
Expand All @@ -534,6 +539,8 @@ def _reorg(dat):
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

Expand Down Expand Up @@ -562,10 +569,16 @@ def _reduce(data):
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'] +
Expand All @@ -587,9 +600,16 @@ def _reduce(data):
theta = da['filehead_config']['BEAMCFGLIST'][0]
if 'THETA=' in theta:
da['beam_angle'] = int(theta[13:15])
tmat = da['filehead_config']['XFBURST']

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:
for val in dc:
if 'time' in val:
time = val
dc['time'] = dc[time]
2 changes: 1 addition & 1 deletion dolfyn/io/nortek2_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ def _headconfig_int2dict(val, mode='burst'):
mode: {'burst', 'bt'}
For 'burst' configs, or 'bottom-track' configs.
"""
if mode == 'burst':
if (mode == 'burst') or (mode == 'avg'):
return dict(
press_valid=_getbit(val, 0),
temp_valid=_getbit(val, 1),
Expand Down

0 comments on commit b6561a0

Please sign in to comment.