Source code for pyart.io.arm_sonde

"""
Utilities for ARM sonde NetCDF files.

"""

import netCDF4
import numpy as np

from ..core import HorizontalWindProfile


[docs]def read_arm_sonde(filename): """ Read a ARM sonde file returning a wind profile. Parameters ---------- filename : str Name of ARM sonde NetCDF file to read data from. Return ------ launch_datetime : datetime Date and time corresponding to radiosonde launch time, i.e., first recorded time. profile : HorizontalWindProfile Profile of the horizontal winds """ dset = netCDF4.Dataset(filename, 'r') launch_datetime = netCDF4.num2date( dset.variables['time'][0], dset.variables['time'].units) height = dset.variables['alt'][:] # meters above mean sea level speed = dset.variables['wspd'][:] # m s-1 direction = dset.variables['deg'][:] # degrees clockwise from north lat = dset.variables['lat'][:] # degrees north lon = dset.variables['lon'][:] # degrees east profile = HorizontalWindProfile( height, speed, direction, latitude=lat, longitude=lon) dset.close() return launch_datetime, profile
[docs]def read_arm_sonde_vap(filename, radar=None, target_datetime=None): """ Read a ARM interpolated or merged sonde returning a wind profile. Parameters ---------- filename : str Name of ARM interpolate or merged sonde NetCDF file to read data from. radar : Radar, optional If provided the profile returned is that which is closest in time to the first ray collected in this radar. Either radar or target_datetime must be provided. target_datetime : datetime, optional If specified the profile returned is that which is closest in time to this datetime. Return ------ profile_datetime : datetime Date and time of the profile. profile : HorizontalWindProfile Profile of the horizontal winds. """ # check parameters if radar is None and target_datetime is None: raise ValueError('Either radar or target_datetime must be specified.') if radar is not None and target_datetime is not None: raise ValueError( 'Either radar or target_datetime must be specified, not both.') if radar is not None: time_0 = radar.time['data'][0] time_units = radar.time['units'] target_datetime = netCDF4.num2date(time_0, time_units) dset = netCDF4.Dataset(filename, 'r') # find index of time closest to target datetime sonde_datetimes = netCDF4.num2date( dset.variables['time'][:], dset.variables['time'].units) idx = np.abs(sonde_datetimes - target_datetime).argmin() profile_datetime = sonde_datetimes[idx] # extract wind profile height = dset.variables['height'][:] * 1000 # km -> m speed = dset.variables['wspd'][idx, :] direction = dset.variables['wdir'][idx, :] profile = HorizontalWindProfile(height, speed, direction) dset.close() return profile_datetime, profile