"""
pyrad.prod.process_product
==========================
Functions for obtaining Pyrad products from the datasets
.. autosummary::
:toctree: generated/
generate_traj_product
"""
from ..util import warn
from ..io.io_aux import get_save_dir, make_filename
from ..io.timeseries import TimeSeries
from ..graph.plots import plot_pos
[docs]
def generate_traj_product(traj, prdcfg):
"""
Generates trajectory products. Accepted product types:
'TRAJ_MAP': Plots the trajectory on a lat-lon map with the altitude
color coded
'TRAJ_PLOT': Plots time series of the trajectory respect to the radar
elevation, azimuth or range
User defined parameters:
'datatype': str
The type of parameter: 'EL', 'AZ', or 'RANGE'
'TRAJ_TEXT': Writes the trajectory information in a csv file
Parameters
----------
traj : Trajectory object
prdcfg : dictionary of dictionaries
product configuration dictionary of dictionaries
Returns
-------
None
"""
dssavedir = prdcfg["dsname"]
if "dssavename" in prdcfg:
dssavedir = prdcfg["dssavename"]
if prdcfg["type"] == "TRAJ_PLOT":
timeinfo = traj.time_vector[0]
savedir = get_save_dir(
prdcfg["basepath"],
prdcfg["procname"],
dssavedir,
prdcfg["prdname"],
timeinfo=timeinfo,
)
ts = TimeSeries("", traj.time_vector, timeformat="%Y-%m-%d %H:%M:%S.%f")
if prdcfg["datatype"] == "EL":
fname = make_filename(
"ts",
prdcfg["dstype"],
"TRAJ",
prdcfg["imgformat"],
prdcfginfo="EL",
timeinfo=timeinfo,
timeformat="%Y%m%d%H%M%S",
runinfo=prdcfg["runinfo"],
)
ts.add_dataseries(
"Elevation", "Elevation", "deg", traj.radar_list[0].elevation_vec
)
ts.plot(savedir + fname[0])
elif prdcfg["datatype"] == "AZ":
fname = make_filename(
"ts",
prdcfg["dstype"],
"TRAJ",
prdcfg["imgformat"],
prdcfginfo="AZ",
timeinfo=timeinfo,
timeformat="%Y%m%d%H%M%S",
runinfo=prdcfg["runinfo"],
)
ts.add_dataseries(
"Azimuth", "Azimuth", "deg", traj.radar_list[0].azimuth_vec
)
ts.plot(savedir + fname[0])
elif prdcfg["datatype"] == "RANGE":
fname = make_filename(
"ts",
prdcfg["dstype"],
"TRAJ",
prdcfg["imgformat"],
prdcfginfo="RANGE",
timeinfo=timeinfo,
timeformat="%Y%m%d%H%M%S",
runinfo=prdcfg["runinfo"],
)
ts.add_dataseries("Range", "Range", "m", traj.radar_list[0].range_vec)
ts.plot(savedir + fname[0])
else:
raise Exception(
"ERROR: Unknown datatype '%s' (dataset: '%s')"
% (prdcfg["datatype"], prdcfg["dsname"])
)
return None
if prdcfg["type"] == "TRAJ_TEXT":
timeinfo = traj.time_vector[0]
savedir = get_save_dir(
prdcfg["basepath"],
prdcfg["procname"],
dssavedir,
prdcfg["prdname"],
timeinfo=timeinfo,
)
fname = make_filename(
"ts",
prdcfg["dstype"],
"TRAJ",
["csv"],
prdcfginfo=None,
timeinfo=timeinfo,
timeformat="%Y%m%d%H%M%S",
runinfo=prdcfg["runinfo"],
)
description = [
"Description:",
"Time series of a plane trajectory in radar " "coordinates.",
]
ts = TimeSeries(
description, traj.time_vector, timeformat="%Y-%m-%d %H:%M:%S.%f"
)
ts.add_dataseries(
"Elevation", "Elevation", "deg", traj.radar_list[0].elevation_vec
)
ts.add_dataseries("Azimuth", "Azimuth", "deg", traj.radar_list[0].azimuth_vec)
ts.add_dataseries("Range", "Range", "m", traj.radar_list[0].range_vec)
ts.add_dataseries(
"Absolute Speed", "Absolute Speed", "m/s", traj.radar_list[0].v_abs
)
ts.add_dataseries("Radial Speed", "Radial Speed", "m/s", traj.radar_list[0].v_r)
ts.add_dataseries(
"Elevation Speed", "Elevation Speed", "deg/s", traj.radar_list[0].v_el
)
ts.add_dataseries(
"Azimuth Speed", "Azimuth Speed", "deg/s", traj.radar_list[0].v_az
)
ts.write(savedir + fname[0])
return None
if prdcfg["type"] == "TRAJ_MAP": # Trajectory on a map
timeinfo = traj.time_vector[0]
savedir = get_save_dir(
prdcfg["basepath"],
prdcfg["procname"],
dssavedir,
prdcfg["prdname"],
timeinfo=timeinfo,
)
fname = make_filename(
"ts",
prdcfg["dstype"],
"TRAJ",
prdcfg["imgformat"],
prdcfginfo="MAP",
timeinfo=timeinfo,
timeformat="%Y%m%d%H%M%S",
runinfo=prdcfg["runinfo"],
)
title = "Trajectory Starting at %s" % traj.time_vector[0].strftime("%Y-%m-%d")
fname_list = fname
for i, fname in enumerate(fname_list):
fname_list[i] = savedir + fname
# Get traj
lat = traj.wgs84_lat_deg
lon = traj.wgs84_lon_deg
alt = traj.wgs84_alt_m
plot_pos(
lat,
lon,
alt,
fname_list,
cb_label="Altitude [m]",
titl=title,
save_fig=True,
)
return None
warn(" Unsupported product type: " + prdcfg["type"])
return None