Source code for pyrad.prod.process_traj_products

"""
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