예제 #1
0
def get_datalist_radar(inargs, date):
    """
    Get data time series for radar observation.
    Parameters
    ----------
    inargs : : argparse object
      Argparse object with all input arguments
    date : str
      Date in format yyyymmddhh. If 'all', radar data for all days are returned
    radar_mask : 2D or 3D numpy array
      Radar mask to create masked arrays.

    Returns
    -------
    datalist : list
      List of 2D masked arrays
    """
    # Get file name
    radarpref = (get_config(inargs, 'paths', 'radar_data') +
                 get_config(inargs, 'paths', 'radar_prefx'))
    radarsufx = get_config(inargs, 'paths', 'radar_sufix')
    dtradar = timedelta(minutes=10)
    if date is 'all':
        date_start = (yyyymmddhh_strtotime(inargs.date_start) +
                      timedelta(hours=inargs.time_start) - dtradar)
        date_end = (yyyymmddhh_strtotime(inargs.date_end) +
                    timedelta(hours=inargs.time_end) - dtradar)
    else:
        dateobj = yyyymmddhh_strtotime(date)
        date_start = dateobj + timedelta(hours=inargs.time_start) - dtradar
        date_end = dateobj + timedelta(hours=inargs.time_end) - dtradar
    datalist = getfobj_ncdf_timeseries(radarpref,
                                       date_start,
                                       date_end,
                                       timedelta(hours=inargs.time_inc),
                                       reftime=date_start,
                                       ncdffn_sufx=radarsufx,
                                       fieldn='pr',
                                       abs_datestr='yymmddhhmm',
                                       dwdradar=True,
                                       return_arrays=True)
    # Crop data
    l11, l12, l21, l22, l11_rad, l12_rad, l21_rad, l22_rad = \
        get_domain_limits(inargs)
    for i, data in enumerate(datalist):
        datalist[i] = data[l11_rad:l12_rad, l21_rad:l22_rad]

    return datalist
예제 #2
0
        #meanQtot = rootgrp.createVariable('meanQtot', 'f8', ('time','n','x','y'))

    if args.ana == 'vert':
        levs = rootgrp.variables['levs']
        height = rootgrp.variables['height']
        Mtot = rootgrp.variables['Mtot']
        Msouth = rootgrp.variables['Msouth']
        Mnorth = rootgrp.variables['Mnorth']

# End allocation
################################################################################

# Preliminaries before time loop
if args.ana == 'prec':
    # Load radar data for all times
    dateobj = yyyymmddhh_strtotime(args.date)
    dtradar = timedelta(minutes=10)
    radarts = getfobj_ncdf_timeseries(radarpref,
                                      dateobj + tstart - dtradar,
                                      dateobj + tend - dtradar,
                                      tinc,
                                      reftime=dateobj,
                                      ncdffn_sufx=radarsufx,
                                      fieldn='pr',
                                      abs_datestr='yymmddhhmm',
                                      dwdradar=True)
    # Get mask
    radarmask = get_totmask(radarts)

    # Crop data
    radarmask = radarmask[lx1 + 62:lx2 - 42, ly1 + 22:ly2 - 42]
def plot_prec_stamps(inargs):
    """
    Plots precipitation stamps of obs, det and ensemble every hour for each
    date and time specified

    Parameters
    ----------
    inargs : argparse object
      Argparse object with all input arguments

    """

    # Loop over dates
    for idate, date in enumerate(make_datelist(inargs)):
        print('Date ' + date)
        # Loop over times
        for t in make_timelist(timedelta(hours=inargs.time_start),
                               timedelta(hours=inargs.time_end),
                               timedelta(hours=1)):
            print('Time ' + str(t))
            # Load all CU objects
            fobjlist = []
            titlelist = []

            # 1st: Radar
            radarpref = (get_config(inargs, 'paths', 'radar_data') +
                         get_config(inargs, 'paths', 'radar_prefx'))
            radarsufx = get_config(inargs, 'paths', 'radar_sufix')
            dtradar = timedelta(minutes=10)

            radartime = yymmddhhmm(yyyymmddhh_strtotime(date) + t - dtradar)
            radarfn = radarpref + radartime + radarsufx
            radar_fobj = getfobj_ncdf(radarfn, fieldn='pr', dwdradar=True)
            # Crop data
            l11, l12, l21, l22, l11_rad, l12_rad, l21_rad, l22_rad = \
                get_domain_limits(inargs)
            l11_diff = l11_rad - l11
            l12_diff = l12_rad - l12
            l21_diff = l21_rad - l21
            l22_diff = l22_rad - l22
            radar_fobj.data = radar_fobj.data[l11_diff:l12_diff,
                                              l21_diff:l22_diff]
            radar_fobj.lats = radar_fobj.lats[l11_diff:l12_diff,
                                              l21_diff:l22_diff]
            radar_fobj.lons = radar_fobj.lons[l11_diff:l12_diff,
                                              l21_diff:l22_diff]
            fobjlist.append(radar_fobj)
            titlelist.append('Radar')

            # 2nd: det
            ncdffn_pref = (get_config(inargs, 'paths', 'raw_data') + date +
                           '/deout_ceu_pspens/' + 'det' + '/OUTPUT/lfff')
            fobjlist.append(
                getfobj_ncdf(ncdffn_pref + ddhhmmss(t) + '.nc_30m_surf',
                             'PREC_ACCUM'))
            titlelist.append('Det')

            # 3rd: ens
            ncdffn = 'lfff' + ddhhmmss(t) + '.nc_30m_surf'
            date_dir = (get_config(inargs, 'paths', 'raw_data') + date +
                        '/deout_ceu_pspens/')
            fobjlist.extend(
                getfobj_ncdf_ens(date_dir,
                                 'sub',
                                 inargs.nens,
                                 ncdffn,
                                 dir_suffix='/OUTPUT/',
                                 fieldn='PREC_ACCUM',
                                 nfill=1))
            titlelist.extend(
                ['Member ' + str(i + 1) for i in range(inargs.nens)])

            # Now plot
            n_panels = len(fobjlist)
            n_cols = 4
            n_rows = int(np.ceil(float(n_panels) / n_cols))

            pw = get_config(inargs, 'plotting', 'page_width')
            fig, axmat = plt.subplots(n_rows,
                                      n_cols,
                                      figsize=(pw, 3.0 * n_rows))
            axflat = np.ravel(axmat)

            for i in range(len(fobjlist)):
                plt.sca(axflat[i])
                cf = plot_stamp(inargs, fobjlist[i], cmPrec, levelsPrec,
                                axflat[i], 'PREC_ACCUM')
                axflat[i].set_title(titlelist[i])
            cb = fig.colorbar(cf,
                              cax=fig.add_axes([0.4, 0.15, 0.2, 0.02]),
                              orientation='horizontal')
            cb.set_label('Accumulation [mm/h]')
            titlestr = ((yyyymmddhh_strtotime(date) +
                         t).strftime('%d %b - %H UTC'))
            fig.suptitle(titlestr)
            plt.subplots_adjust(wspace=0.02, left=0.02, right=0.98)

            # Save figure and log
            save_fig_and_log(fig,
                             None,
                             inargs,
                             'prec_stamps',
                             datestr=((yyyymmddhh_strtotime(date) +
                                       t).strftime('%Y%m%d_%H')))
def plot_individual(inargs):
    """
    
    Parameters
    ----------
    inargs

    Returns
    -------

    """

    # Get data
    date_dir = (get_config(inargs, 'paths', 'raw_data') + inargs.date_start +
                '/deout_ceu_pspens/')
    t = timedelta(hours=inargs.time_start)

    if inargs.ind_var == 'PREC_ACCUM':
        ncdffn = 'lfff' + ddhhmmss(t) + '.nc_30m_surf'
        fobj = getfobj_ncdf(date_dir + str(inargs.ind_ens) + '/OUTPUT/' +
                            ncdffn,
                            fieldn='PREC_ACCUM')
        cmap = None
        colors = cmPrec
        levels = levelsPrec
    elif inargs.ind_var == 'radar':
        radarpref = (get_config(inargs, 'paths', 'radar_data') +
                     get_config(inargs, 'paths', 'radar_prefx'))
        radarsufx = get_config(inargs, 'paths', 'radar_sufix')
        dtradar = timedelta(minutes=10)
        radartime = yymmddhhmm(
            yyyymmddhh_strtotime(inargs.date_start) + t - dtradar)
        radarfn = radarpref + radartime + radarsufx
        radar_fobj = getfobj_ncdf(radarfn, fieldn='pr', dwdradar=True)
        # Crop data
        l11, l12, l21, l22, l11_rad, l12_rad, l21_rad, l22_rad = \
            get_domain_limits(inargs)
        l11_diff = l11_rad - l11
        l12_diff = l12_rad - l12
        l21_diff = l21_rad - l21
        l22_diff = l22_rad - l22
        radar_fobj.data = radar_fobj.data[l11_diff:l12_diff, l21_diff:l22_diff]
        radar_fobj.lats = radar_fobj.lats[l11_diff:l12_diff, l21_diff:l22_diff]
        radar_fobj.lons = radar_fobj.lons[l11_diff:l12_diff, l21_diff:l22_diff]
        fobj = radar_fobj
    elif inargs.ind_var in ['obj_m', 'obj_prec']:
        if inargs.ind_var == 'obj_m':
            lvl = 30
            ncdffn = 'lfff' + ddhhmmss(t) + '.nc_30m'
            fobj = getfobj_ncdf(date_dir + str(inargs.ind_ens) + '/OUTPUT/' +
                                ncdffn,
                                fieldn='W',
                                levs=lvl)
            opt_field = (getfield_ncdf(
                date_dir + str(inargs.ind_ens) + '/OUTPUT/' + ncdffn,
                fieldn='QC',
                levs=lvl) + getfield_ncdf(
                    date_dir + str(inargs.ind_ens) + '/OUTPUT/' + ncdffn,
                    fieldn='QS',
                    levs=lvl) + getfield_ncdf(
                        date_dir + str(inargs.ind_ens) + '/OUTPUT/' + ncdffn,
                        fieldn='QI',
                        levs=lvl))
        else:
            ncdffn = 'lfff' + ddhhmmss(t) + '.nc_30m_surf'
            fobj = getfobj_ncdf(date_dir + str(inargs.ind_ens) + '/OUTPUT/' +
                                ncdffn,
                                fieldn='PREC_ACCUM')
            opt_field = None

        labels, size_list, sum_list = identify_clouds(fobj.data,
                                                      1.,
                                                      opt_field=opt_field,
                                                      water=True,
                                                      neighborhood=3,
                                                      opt_thresh=0)
        fobj.data = labels
        cmap = plt.cm.prism
        colors = None
        levels = None
    else:
        raise Exception('Wrong variable!')

    # Set up figure
    pw = get_config(inargs, 'plotting', 'page_width')
    width_fraction = 2. / 9.
    ratio = 1.
    fig, ax = plt.subplots(1,
                           1,
                           figsize=(pw * width_fraction,
                                    pw * width_fraction * ratio))

    cf = plot_stamp(inargs, fobj, cmPrec, levelsPrec, ax, 'PREC_ACCUM')

    if inargs.ind_colorbar:
        cb = fig.colorbar(cf, orientation='horizontal', shrink=0.6)
        cb.set_label('Accumulation [mm/h]')

    plt.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.95)

    save_fig_and_log(fig, None, inargs, 'prec_individual', tight=False)
from cosmo_utils.pyncdf import getfobj_ncdf_timeseries
radarpref = '/project/meteo/w2w/A6/radolan/netcdf_cosmo_de/raa01-rw_10000-'
radarsufx = '-dwd---bin.nc'
from datetime import timedelta
from cosmo_utils.helpers import yyyymmddhh_strtotime
tstart = '2016052801'
tend = '2016060900'

dtradar = timedelta(minutes=10)

radarts = getfobj_ncdf_timeseries(radarpref,
                                  yyyymmddhh_strtotime(tstart) - dtradar,
                                  yyyymmddhh_strtotime(tend) - dtradar,
                                  timedelta(minutes=60),
                                  reftime=yyyymmddhh_strtotime(tstart),
                                  ncdffn_sufx=radarsufx,
                                  fieldn='pr',
                                  abs_datestr='yymmddhhmm',
                                  dwdradar=True)

from cosmo_utils.diag import get_totmask
radarmask = get_totmask(radarts)

sxo, syo = (357, 357)
# Determine analysis domain
lx1 = (sxo - 256 - 1) / 2  # ATTENTION first dimension is actually y
lx2 = -(lx1 + 1)  # Number of grid pts to exclude at border
ly1 = (syo - 256 - 1) / 2
ly2 = -(ly1 + 1)
# Crop data
radarmask = radarmask[lx1 + 62:lx2 - 42, ly1 + 22:ly2 - 42]
예제 #6
0
def plot_prec_stamps(inargs):
    """
    Plots precipitation stamps of obs, det and ensemble every hour for each
    date and time specified
    
    Parameters
    ----------
    inargs : argparse object
      Argparse object with all input arguments

    """

    # TODO: Update colors
    cmPrec = ((1, 1, 1), (0, 0.627, 1), (0.137, 0.235, 0.98),
              (0.392, 0, 0.627), (0.784, 0, 0.627))
    # (0.1  , 0.1   , 0.784),
    levelsPrec = [0, 1, 3, 10, 30, 100.]

    # Loop over dates
    for idate, date in enumerate(make_datelist(inargs)):

        # Loop over times
        for t in make_timelist(timedelta(hours=inargs.time_start),
                               timedelta(hours=inargs.time_end),
                               timedelta(hours=1)):

            # Load all CU objects
            fobjlist = []
            titlelist = []

            # 1st: Radar
            fobjlist.append(get_and_crop_radar_fobj(inargs, date, t))
            titlelist.append('Radar')

            # 2nd: det
            ncdffn_pref = (get_config(inargs, 'paths', 'raw_data') + date +
                           '/deout_ceu_pspens/' + 'det' + '/OUTPUT/lfff')
            fobjlist.append(
                getfobj_ncdf(ncdffn_pref + ddhhmmss(t) + '.nc_30m_surf',
                             'PREC_ACCUM'))
            titlelist.append('Det')

            # 3rd: ens
            ncdffn = 'lfff' + ddhhmmss(t) + '.nc_30m_surf'
            date_dir = (get_config(inargs, 'paths', 'raw_data') + date +
                        '/deout_ceu_pspens/')
            fobjlist.extend(
                getfobj_ncdf_ens(date_dir,
                                 'sub',
                                 inargs.nens,
                                 ncdffn,
                                 dir_suffix='/OUTPUT/',
                                 fieldn='PREC_ACCUM',
                                 nfill=1))
            titlelist.extend(['Mem ' + str(i + 1) for i in range(inargs.nens)])

            # Now plot
            n_panels = len(fobjlist)
            n_cols = 4
            n_rows = int(np.ceil(float(n_panels) / n_cols))
            fig, axmat = plt.subplots(n_rows,
                                      n_cols,
                                      figsize=(10, 3.5 * n_rows))
            axflat = np.ravel(axmat)

            for i in range(len(fobjlist)):
                plt.sca(axflat[i])
                cf, tmp = ax_contourf(axflat[i],
                                      fobjlist[i],
                                      colors=cmPrec,
                                      pllevels=levelsPrec,
                                      ji0=(50 + inargs.zoom_lat1,
                                           50 + inargs.zoom_lon1),
                                      ji1=(357 - 51 + inargs.zoom_lat2,
                                           357 - 51 + inargs.zoom_lon2),
                                      sp_title=titlelist[i],
                                      Basemap_drawrivers=False,
                                      npars=0,
                                      nmers=0)
            cb = fig.colorbar(cf,
                              cax=fig.add_axes([0.4, 0.1, 0.2, 0.02]),
                              orientation='horizontal')
            cb.set_label('Accumulation [mm/h]')
        titlestr = (yyyymmddhh_strtotime(date).strftime(
            get_config(inargs, 'plotting', 'date_fmt')) + ' ' +
                    str(t.seconds / 3600).zfill(2) + 'UTC')
        fig.suptitle(titlestr)
        plt.tight_layout(rect=[0, 0.1, 1, 0.93])

        # Save figure and log
        save_fig_and_log(fig,
                         None,
                         inargs,
                         'prec_stamps',
                         date=date,
                         time=str(t.seconds / 3600).zfill(2))