Source code for epygram.args_catalog

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) Météo France (2014-)
# This software is governed by the CeCILL-C license under French law.
# http://www.cecill.info
"""
Contains a catalog of reusable command-line arguments for argparse,
with a function *add_arg_to_parser* to import them to an *argparse* parser.

The arguments are classified by categories, each category being a dict.

Each argument is a list composed as follows:
['name', 'alternate_name1', 'alternate_name2', ..., dict(kw1, kw2, kw3, ...)]
where the keywords 'kwi' are argparse.ArgumentParser.add_argument() optional
arguments.
"""

from __future__ import print_function, absolute_import, unicode_literals, division

from epygram import config
from epygram.formats import grib_utilities
import multiprocessing


[docs]def add_arg_to_parser(parser, arg, **flychanges): """ Wrapper to add one item *arg* of the following dictionaries to a *parser*. *flychanges* enable to change argument options on the fly. """ arg[-1].update(flychanges.items()) parser.add_argument(*arg[:-1], **arg[-1])
_defaults = {} _defaults.update(config.__dict__) # : Arguments dealing with files files_management = { 'principal_file':[ 'filename', dict(type=str, help='name of the file to be processed.')], 'several_files':[ 'filenames', dict(type=str, nargs='+', help='names of the files to be processed.')], 'file_to_refer_in_diff':[ '-d', '--diff', dict(type=str, dest='refname', help='name of the 2nd (reference) file to be processed, to which\ comparison is done.')], 'file_to_refer_in_diffonly':[ '-D', '--diffonly', dict(type=str, dest='Drefname', help='same as -d/--diff, but only fields difference is processed.')], 'source_file':[ '-s', '--source', dict(type=str, dest='refname', help='name of the 2nd file from which to extract the fields.', required=True)], 'replace_by_diff':[ '-d', '--diff', dict(action='store_const', const='diff', dest='replace_op', help='replaces the fields by the difference fields\ (filename - source).', default=False)], 'replace_by_reversediff':[ '-r', '--reversediff', dict(action='store_const', const='reversediff', dest='replace_op', help='replaces the fields by the reverse difference fields\ (source - filename).', default=False)], 'replace_by_addition':[ '-a', '--add', dict(action='store_const', const='add', dest='replace_op', help='replaces the fields by the addition fields\ (filename + source).', default=False)], 'replace_by_product':[ '-m', '--multiply', dict(action='store_const', const='multiply', dest='replace_op', help='replaces the fields by the product fields\ (filename * source).', default=False)], 'in_place':[ '-i', '--in_place', dict(action='store_true', help='the operation on fields is done "in place" on the file,\ not on a new file.', default=False)], } # : Arguments dealing with fields fields_management = { 'field':[ '-f', '-F', '--field', dict(help="*fid* = *field identifier* of of the field(s) to be\ processed. Syntax depends on format:\ GRIB: handgrip, e.g. 'shortName:t,level:850'.\ FA: name, e.g. 'S050TEMPERATURE'; regular expressions may\ be used, such as 'S00[2-6]WIND.[U-V].PHYS',\ 'SURFALBEDO*' or 'SURF?.OF.OZONE'.\ To obtain the list of fields in file, use the 'epy_what'\ tool.", default=None)], 'windfield':[ '-w', '--computewind', dict(help="to process wind as a vector.\ Syntax depends on format:\ FA: 'S*WIND' or 'P*VENT', 'H*VENT', 'V*VENT', 'CLSVENT.*',\ or 'CLS*.RAF'; * designing the level: combination of\ (*, ?, digits).\ GRIB: handgrip, e.g. 'shortName:u+v,level:850' or\ 'indicatorOfParameter:33+34,level:850' or \ 'parameterCategory:2,parameterNumber:2+3,level:850'.\ Not implemented in difference mode.", default=None)], 'windfieldU':[ '--wU', '--Ucomponentofwind', dict(help="to process wind as a vector. U component of wind.\ (same syntax as -f).\ Not implemented in difference mode.", dest="Ucomponentofwind", default=None)], 'windfieldV':[ '--wV', '--Vcomponentofwind', dict(help="to process wind as a vector. V component of wind.\ (same syntax as -f).\ Not implemented in difference mode.", dest="Vcomponentofwind", default=None)], 'FA_field':[ '-f', '-F', '--field', dict(help="name of the field to be processed.\ To obtain the list of fields in file, use the 'fa_what'\ tool.", default=None)], 'FA_windfield':[ '-w', '--computewind', dict(help="to process wind module, using the following syntax:\ 'S*WIND' or 'P*VENT', 'H*VENT', 'V*VENT', 'CLSVENT.*', 'CLS*.RAF',\ * designing the level: combination of (*, ?, digits).\ Not implemented in difference mode.", default=None)], 'FA_multiple_fields':[ '-f', '-F', '--field', dict(help="name of the field to be processed.\ Regular expressions can be used, such as\ 'S00[2-6]WIND.[U-V].PHYS' to process meridian and zonal winds of levels 2 to 6,\ 'SURFALBEDO*' to process all kinds of albedo,\ 'SURF?.OF.OZONE' to process all kinds of ozone (A,B,C).\ In case this option is not used, no more than '-l' option,\ all fields present in file are processed.\ Fields not found in file are ignored.\ To obtain the list of fields in file, use the 'fa_what'\ tool.", default=None)], 'vertical_field':[ '-F', '-f', '--field', dict(help="designation of the fields from which to extract profile.\ Syntax depends on format:\ GRIB: handgrip designing the parameter and the type of\ levels.\ FA: name of the upper-air field to be processed,\ with a * for level.\ To obtain the list of fields in file, use the 'epy_what'\ tool.", required=True, default=None)], 'FA_vertical_field':[ '-F', '-f', '--field', dict(help="name of the upper-air field to be processed, with a * for\ level. To obtain the list of fields in file, use the\ 'fa_what' tool.", required=True, default=None)], 'DDHLFA_multiple_fields':[ '-f', '-F', '--field', dict(help="name of the field to be processed.\ Regular expressions can be used, such as\ 'F*FLUVERTDYN' or 'VKK[0-1]'.\ In case this option is not used, no more than '-l' option,\ all fields present in file are processed.\ Fields not found in file are ignored.\ To obtain the list of fields in file, use the 'ddhlfa_what'\ tool.", default=None)], 'DDHLFA_domain':[ '-n', '--domain_number', dict(help="number of the domain to plot. \ Multiple domains must be given within quotes, separated by comma. \ To obtain the list of domains in file, \ use the 'ddhlfa_what' tool.", required=True)], 'GRIB_field':[ '-F', '-f', '--field', dict(help="(possibly partial) handgrip of the field to be processed.\ To obtain the list of fields in file (and their handgrip), \ use EPyGrAM's 'grib_what' tool or GRIB_API's 'grib_dump'.\ Ex: -f 'shortName:t,level:850'.", default=None)], 'GRIB_secondfield':[ '-2', '--secondfield', dict(help="(possibly partial) handgrip of the second field to be\ processed. To obtain the list of fields in file (and their\ handgrip), use EPyGrAM's 'grib_what' tool or GRIB_API's\ 'grib_dump'. Ex: -f 'shortName:t,level:850'.", default=None)], '2fields_mode':[ '-y', '--2fields_mode', dict(help="mode for 2-fields joining:\ - 'vectorize': sets a vector with each field as a component\ - 'superpose': superpose second field over the first with\ contourlines\ - '-': computes and plots the difference field\ - '+': computes and plots the sum field\ - '*': computes and plots the product field\ - '/': computes and plots the division field", default=None)], 'list_of_fields':[ '-l', '--listoffields', dict(help="name of an external file containing the list of fields\ to be processed, with the same specifications as for -f\ argument.", default=None)], 'reverse_fields_selection':[ '-r', '--reverse', dict(action='store_true', help="reverse fields selection: all but those requested.", default=False)], 'sort_fields':[ '-s', '--sortfields', dict(action='store_true', help="not for GRIB: sort fields with regards to\ their name and type.", default=False)], 'GRIB_sort':[ '-k', '--sortbykey', dict(help="GRIB only: sort fields with regards to the given fid key.\ Only for *mode* == 'one+list' or 'fid_list'.", dest='sortfields', default=False)], 'GRIB_what_mode':[ '-m', '--mode', dict(help="information display mode (GRIB only): 'one+list' gives the \ validity/geometry of the first field in GRIB, plus \ the list of fid; 'fid_list' gives only the fid of \ each field in GRIB; 'what' gives the values of the \ keys from each GRIB message that are used to generate \ an **epygram** field from the message (slower); \ 'ls' gives the values of the 'ls' keys from each GRIB \ message; 'mars' gives the values of the 'mars' keys \ from each GRIB message.", choices=('one+list', 'fid_list', 'what', 'ls', 'mars'), default='one+list')], 'FA_set_compression':[ '-k', '--kompression', dict(help="bits number for FA gridpoint compression : KNBITS/KNBPDG.\ Defaults to " + str(_defaults.get('FA_default_compression', {'KNBPDG':('undefined')}).get('KNBPDG', 'undefined')) + ".", type=int, default=None)], 'GRIB2_packing':[ '--GRIB2_packing', dict(help="packing for writing GRIB2s.\ Defaults to " + str(_defaults.get('GRIB2_default_packing', {2:'undefined'}).get(2, 'undefined')) + ".", default=None)], 'netCDF_compression':[ '--nc_comp', dict(type=int, help="compression level to compress fields in netCDF. \ Ranges from 0 to 9. 0 is no compression, 1 is low-but-fast \ compression, 9 is high-but-slow compression. \ Default to " + str(_defaults.get('netCDF_default_compression', "4")), choices=list(range(0, 10)), default=str(_defaults.get('netCDF_default_compression', 4)))], } # : Arguments dealing with output output_options = { 'output':[ '-o', '--output', dict(help="store graphical output in file in with specified format,\ among ('png', pdf). Pdf is kind of disadvised, for it is\ very slow and produces much too big files...", choices=['png', 'pdf'], default=_defaults.get('default_graphical_output', False))], 'outputfilename':[ '-O', '--outputfilename', dict(help="store output in the specified filename (without format for\ graphical output, to be completed by -o/--output).", default=False)], 'one_pdf':[ '-p', '--pdf', dict(action='store_true', help="store output (eventually multiple plots) in one .pdf file.", default=False)], 'noplot':[ '-n', '--noplot', dict(action='store_true', help="disable plot. Profile/spectrum will be computed\ and written as text output but not plotted.", default=False)], 'GeoPoints_llv':[ '--llv', dict(action='store_true', help="simplify GeoPoints format to LAT, LON, VALUE only.", default=False)], 'precision':[ '-e', '--precision', dict(help="precision on values (number of decimals in scientific\ format). Default = 4.", default=4)], 'lonlat_precision':[ '-E', '--lonlat_precision', dict(help="precision on longitudes/latitudes (number of decimals). \ Default = 4.", default=4)], 'GeoPoints_precision':[ '-e', '--precision', dict(help="precision on GeoPoints' values (number of decimals in \ scientific format). Default = " + str(_defaults.get('GeoPoints_precision', 4)) + '.', default=_defaults.get('GeoPoints_precision', 4))], 'GeoPoints_lonlat_precision':[ '-E', '--lonlat_precision', dict(help="precision on GeoPoints' longitudes/latitudes (number of \ decimals). Default = " + str(_defaults.get('GeoPoints_lonlat_precision', 4)) + '.', default=_defaults.get('GeoPoints_precision', 4))], 'get_field_compression':[ '-c', '--compression', dict(action='store_true', help="get compression options of each field.", default=False)], 'get_field_details':[ '-d', '--details', dict(help="get some details about each field.\ E.g. 'spectral' to inquire the spectralness of fields, or\ 'compression' to inquire compression parameters, 'grid' or \ 'comment' for LFI.", default=None)], 'GRIB_short_fid':[ '-s', '--grib_short_fid', dict(help="condense GRIB fid.", action='store_true', default=False)], 'GRIB_other_options':[ '--GRIB_other_options', dict(help="a set of key:value pairs, separated by commas, to be given to\ the GRIB message when writing.\ Ex: 'typeOfGeneratingProcess:12,productionStatusOfProcessedData:2'.", default=None)], 'stdout':[ '-o', '--stdout', dict(action='store_true', help="redirects output to standard output (rather than file).", default=False)], 'output_format':[ '-o', '--output_format', dict(help="format of conversion output, among:\ 'grb' (GRIB2), 'geo' (GeoPoints), 'nc' (netCDF4).", choices=['grb', 'geo', 'nc'], required=True)], 'reproject_wind':[ '--rw', '--reproject_wind', dict(action='store_true', help="reprojects a wind vector (u, v) onto true\ zonal/meridian axes (assuming it is projected onto grid axes\ in fields).", dest='reproject_wind', default=False)], 'only_maxdiff':[ '--oxd', '--only_maxdiff', dict(action='store_true', help='if diffonly and activated, only print the maximum absolute\ difference (and min/max values of fields for magnitude', dest='only_maxdiff', default=False)] } # : Miscellaneous arguments misc_options = { 'LAMzone':[ '-z', '--zone', dict(help="zone of the domain, in LAM case:\ 'C' for zone C, 'CI' for zone C+I, 'CIE' for zone C+I+E.\ Default is 'CI'.", choices=['C', 'CI', 'CIE'], default='CI')], 'array_flattening_order':[ '--order', dict(help="for LAM arrays, whether to flatten in C (row-major) or\ Fortran (column-major) order 2D arrays. Default = 'C'.", default='C')], 'flatten_horizontal_grids':[ '--flatten', dict(help="for netCDF, flatten 2D horizontal grids to 1D.", action='store_true', default=False)], 'operation_on_field':[ '-x', '--operation', dict(help="do the requested operation on field right after reading it. \ Syntax: '-,273.15' (e.g. for K => C) or 'exp' to take the \ exponential of the field. \ The operand must be among (+,-,*,/) or 'normalize' or any\ numpy function.\ For '-' operand, use short-name option -x without spacetab\ between option and argument.", default=None)], 'diffoperation_on_field':[ '-X', '--diffoperation', dict(help="do the requested operation on difference field right after \ computing it. \ Syntax: '-,273.15' (e.g. for K => C) or 'exp' to take the \ exponential of the field. \ The operand must be among (+,-,*,/) or 'normalize' or any\ numpy function.\ For '-' operand, use short-name option -X without spacetab\ between option and argument.", default=None)], 'pressure_unit_hpa':[ '-u', '--pressure_unit_hpa', dict(action='store_true', help="converts pressure in Pa to hPa.", default=False)], 'composition_with_field':[ '--compose_with', dict(help="compose a transformed field with another field. \ Syntax: 'otherfield, composition, [file=otherfile], [preset='norm'|'ceil']'. \ The *composition* must be among (+,-,*,/).\ If *file* is filled (optional), the *otherfield* is read in it.\ If *preset* is filled (optional), one or several operation can be done \ on the *otherfield* before operation.\ Ex: 'SFX.FRAC_WATER, *, file=mypgd.fa, preset=ceil' \ will set non-water points of the plotted field (e.g. SFX.TS_WATER) to 0.", default=None)], 'mask_threshold':[ '--mt', '--mask_threshold', dict(help="set a threshold to mask values. E.g. 'min=0.0' will\ mask negative values. 'min=0.0,max=1e8' will mask values\ outside these boundaries.", default=None, dest='mask_threshold')], 'femars.diff_to_avg':[ '--avg', '--diff_to_avg', dict(help="instead of computing member to member differences, \ compute member-to-average-of-members differences.", action='store_true', default=False, dest='diff_to_avg')], } # : Arguments dealing with graphical options graphical_options = { 'legend':[ '-L', '--legend', dict(help="legend to be written over field plot.", default=None)], 'scientifical_unit':[ '-u', '--unit', dict(help="optional unit for labeling plot axis. Defaults to 'SI'.", default='SI')], 'vertical_logscale':[ '-s', '--logscale', dict(action='store_true', help="plots with vertical logscale.", default=False)], 'specific_map_projection':[ '-j', '--projection', dict(help="specific graphical projection of plots, among\ ('kav7', 'ortho', 'cyl', 'moll',\ 'nsper[,sat_height=3000,lon=15.0,lat=55]').\ Default depend on the actual projection of fields,\ or 'moll' (Mollweide projection) for Gauss geometry.\ For 'nsper', the additional parameters are optional:\ *sat_height* defines the satellite height in km, with\ a defaults value of 3000;\ *lon* and *lat* define the satellite nadir position, with\ default values to the field centre.\ Overwritten by 'zoom' option.", default=None)], 'graphicmode':[ '-g', '--graphicmode', dict(help="graphical mode for plots, among\ ('colorshades', 'contourlines', 'points'). Default is\ 'colorshades'. There is a known bug (yet unsolved) with\ Arpege & contourlines.", choices=['colorshades', 'contourlines', 'points'], default='colorshades')], 'minmax':[ '-m', '--minmax', dict(help="min and max values for the plot.\ Syntax: 'min, max'. '0.0, max' also works.\ Default is the field min/max values.\ In diff mode, this is valuable for resource and reference\ only, (min, max) for difference plot should be defined\ with --diffminmax option. For negative values, use\ short-name option -m without spacetab between option and\ argument.", default=None)], 'diffminmax':[ '-M', '--diffminmax', dict(help="min and max values for the difference plot.\ Syntax: 'min, max'. '0.0, max' also works.\ Default is the difference field min/max values.\ For negative values, use short-name option -M without\ spacetab between option and argument.", default=None)], 'levels_number':[ '-n', '--levelsnumber', dict(help="number of levels for contours and shades.\ Default is 50.", type=int, default=50)], 'diff_levels_number':[ '-N', '--difflevelsnumber', dict(help="number of levels for difference contours and shades.\ Default is 50.", type=int, default=50)], 'colormap':[ '-c', '--colormap', dict(help="name of the **matplotlib** colormap to use.\ Default is 'jet'\ (Cf. http://matplotlib.org/examples/color/colormaps_reference.html \ for standard matplotlib colormaps, or epygram.config.epygram_colormaps.keys() \ in a python interpreter for epygram's own colormaps).\ Custom colormaps can be defined (http://colormap.org or\ manually) and added in userconfig,\ in usercolormaps = {'my_cmap':'path_to_my_cmap'}.", default='jet')], 'diffcolormap':[ '-C', '--diffcolormap', dict(help="name of the **matplotlib** colormap to use for diff.\ Default is 'RdBu_r'\ (Cf. http://matplotlib.org/examples/color/colormaps_reference.html \ for standard matplotlib colormaps, or epygram.config.epygram_colormaps.keys() \ in a python interpreter for epygram's own colormaps).\ Custom colormaps can be defined (http://colormap.org or\ manually) and added in userconfig,\ in usercolormaps = {'my_cmap':'path_to_my_cmap'}.", default='RdBu_r')], 'center_cmap_on_0':[ '-t', '--center_cmap_on_0', dict(action='store_true', help="to center the colormap on the value 0. Can be useful\ for wind plots for instance.", default=False)], 'diff_center_cmap_on_0':[ '-T', '--diffcenter_cmap_on_0', dict(action='store_false', help="NOT to center the colormap of diff plots on the value 0.\ May be useful for fluxes decumulation.", default=True)], 'gis_quality':[ '-q', '--gisquality', dict(help="quality of the GIS used to draw coastlines, rivers and\ countries; among ('c', 'l', 'i', 'h', 'f'), by increasing\ quality.", choices=['c', 'l', 'i', 'h', 'f'], default='i')], 'draw_rivers':[ '-r', '--drawrivers', dict(action='store_true', help="draw rivers on map. (Much more slow)", default=False)], 'french_departments':[ '--depts', dict(action='store_true', help="draw french departments on map (instead of countries\ boundaries).", default=False)], 'parallels':[ '--parallels', dict(help="*meridians* and *parallels* enable to fine-tune the choice\ of lines to plot, with either:\ - 'auto': automatic scaling to the basemap extents (default)\ - 'default': range(0,360,10) and range(-90,90,10)\ - a list of values\ - a grid step, e.g. 5 to plot each 5 degree\ - None: no one is plot\ - 'equator' // 'polarcircles' // 'tropics' or any\ combination (,) will plot only these.", type=str, default='auto')], 'meridians':[ '--meridians', dict(help="Same as parallels, cf. parallels doc.\ Preset values are 'greenwich' and 'datechange'.", type=str, default='auto')], 'vectors_subsampling':[ '-s', '--vectors_subsampling', dict(help="Subsampling factor for plotting vectors barbs\ (-w: computewind option). Defaults to 20.", type=int, default=20)], 'points_size':[ '-p', '--pointsize', dict(help="size of points for *graphicmode* == 'points'.\ Defaults to 20.", type=int, default=20)], 'lonlat_zoom':[ '--zoom', dict(help="optional zoom on the specified region of the plot.\ Forces to 'cyl' projection. Syntax: 'lonmin=-5, lonmax=1.2,\ latmin=40.8, latmax=51'. Overwrites 'projection' option.", default=None)], 'vertical_zoom':[ '--zoom', dict(help="optional zoom (vertical reduction) on the profile plot. \ Ex: 'ymax=150, ymin=850'. The unit must be that of the \ vertical coordinate requested (hPa, m, level number).", default=None)], 'spectra_zoom':[ '--zoom', dict(help="optional zoom on the spectra plot. Ex: 'xmax=10, ymin=1.0'.", default=None)], 'emagram_like_profiles':[ '-e', '--emagramlike', dict(action='store_true', help="plots profiles in a emagram-like style (only with\ -P/--hybridP2pressure). Should not be used for other than\ Temperature profiles.", default=False)], 'superpose_spectra_plots':[ '-s', '--superposeplots', dict(action='store_true', help='for superposing spectra of all requested fields in one\ plot.', default=False)], 'spectra_slopes':[ '-k', '--kindofslopes', dict(help="optional kind of slopes to be plotted, with syntax:\ sequence of (exp offset label) between simple quotes ('),\ with slope = offset * k**exp.\ offset is optional, with default = 1.0.\ Label is optional and denotes how do the exp appears in\ legend (by default, exp=0.5 will appear 1/2 => add a label\ 0.5 for it to appear unchanged.). If label is provided,\ offset must be provided as well.\ Ex: 'exp1, exp2 offset2 label2, exp3 offset3'.\ or '-3 1.0, -5./3. 1e-2 -5/3' (default).", default='-3 1.0 -3, -5./3. 1e-2 -5/3')], 'vector_symbol':[ '--vs', '--vector_symbol', dict(help="symbol to be used for vectors, among ('barbs', 'arrows', 'stream').", dest='vector_symbol', default=_defaults['vector_symbol'])], 'quiverkey':[ '--qk', '--quiverkey', dict(help="arguments to be passed to pyplot.quiverkey(), in case\ *vector_symbol* == 'arrows'. E.g. X=1.05,Y=1.05,U=10.,label='10m/s'.", dest='quiverkey', default=None)], 'figures_dpi':[ '--fd', '--figures_dpi', dict(help="quality of saved figures.", dest='figures_dpi', type=int, default=_defaults['default_figures_dpi'])], 'bluemarble':[ '--bluemarble', dict(help="displays NASA's \"blue marble\" as background, with\ a transparency set to the given value [0.0, 1.0].", type=float, default=0.0)], 'background':[ '--background', dict(help="sets a background color to continents and oceans.", action='store_true', default=False)], 'section_abscissa':[ '--section_abscissa', '--sa', dict(help="abscissa of section, among ('distance', 'lon', 'lat').", default='distance')], 'global_shift_center':[ '--global_shift_center', '--gsc', dict(help="for global lon/lat grids, shift the center by the requested \ angle (in degrees). Enables a [0,360] grid to be shifted to \ a [-180,180] grid, for instance (with -180 argument).", type=float, default=None)], 'bins':[ '-b', '--bins', dict(help="number of bins or bins edges (separated by commas). \ 'range(0,100,12.5)' also works. Default is 50.", type=str, default='50')], 'diffbins':[ '-B', '--diffbins', dict(help="number of bins or bins edges (separated by commas) \ for diff plot. \ 'range(0,100,12.5)' also works. Default is 50.", type=str, default='50')], 'center_hist_on_0':[ '-t', '--center_hist_on_0', dict(action='store_true', help="to center the histogram on the value 0. Can be useful\ for wind plots for instance.", default=False)], 'diff_center_hist_on_0':[ '-T', '--diffcenter_hist_on_0', dict(action='store_false', help="NOT to center the histogram of diff on the value 0.\ May be useful for fluxes decumulation.", default=True)], } # : Arguments dealing with extraction stuff extraction_options = { 'point_coordinates':[ '-c', '--coordinates', dict(help="lon/lat coordinates of the point.\ Syntax: 'lon, lat'.", required=True, default=None)], 'section_starting_point':[ '-s', '--starting_point', dict(help="lon/lat coordinate of starting point of the section.\ Syntax: 'lon, lat'.", required=True, default=None)], 'section_ending_point':[ '-e', '--ending_point', dict(help="lon/lat coordinate of ending point of the section.\ Syntax: 'lon, lat'.", required=True, default=None)], 'horizontal_interpolation':[ '-i', '--interpolation', dict(help="interpolation mode from field grid to point/section\ coordinates. Among ('nearest', 'linear', 'cubic').\ Defaults to 'nearest'.", choices=['nearest', 'linear', 'cubic'], default='nearest')], 'external_distance':[ '-z', '--external_distance', dict(help="for 'nearest' interpolation mode, the nearest is chosen\ among the 4 nearest points regarding the point whose value\ of field *EXT* is the closest to *VALUE*, with syntax:\ *external_distance* = 'VALUE; EXT'. EXT being a fid.", default=None)], 'section_transect_points_number':[ '-p', '--points_number', dict(help="number of points from starting point to ending point\ (included). Defaults to the number of points computed from\ the fields resolution, or from the resolution given via\ option -r.", type=int, default=None)], 'section_transect_resolution':[ '-r', '--resolution', dict(help="resolution of the section. Defaults to the fields\ resolution, or computed from the number of points given via\ option -p.", type=float, default=None)], 'verticalcoord2pressure':[ '-P', '--verticalcoord2pressure', dict(action='store_const', dest='Yconvert', const='pressure', help="compute pressure as vertical coordinate, if possible.", default=None)], 'verticalcoord2height':[ '-H', '--verticalcoord2height', dict(action='store_const', dest='Yconvert', const='height', help="compute height as vertical coordinate, if possible.", default=None)], 'verticalcoord2altitude':[ '-A', '--verticalcoord2altitude', dict(action='store_const', dest='Yconvert', const='altitude', help="compute altitude as vertical coordinate, if possible.", default=None)], 'no_cheap_height_conversion':[ '--no_cheap_height', dict(action='store_false', dest='cheap_height', help="for the computation of heights (-A/-H) to be done \ taking hydrometeors into account (in R \ computation) and NH Pressure departure \ (Non-Hydrostatic data). Slower but more accurate.", default=True)] } # : Arguments dealing with runtime options runtime_options = { 'verbose':[ '-v', '--verbose', dict(action='store_true', help="run verbosely. Else, only messages of level Error will be\ displayed.", default=False)], 'percentage':[ '-p', '--percentage', dict(action='store_true', help="display the percentage done on the run.", default=False)], 'threads_number':[ '-t', '--threads_number', dict(help="number of threads to be run in parallel.", type=int, default=multiprocessing.cpu_count() // 2)], } # : Operational arguments operational_options = { 'suite':[ '-S', '--suite', dict(help="name of the suite, among (oper, dble, research, test).\ Defaults to research. Used to build GRIB's \ *productionStatusOfProcessedData*.", default='research')], 'typeOfGeneratingProcess':[ '-g', '--typeOfGeneratingProcess', dict(help="GRIB's type of generating process.", choices=list(grib_utilities.typeOfGeneratingProcess_dict.keys()), default='Forecast')], 'numod':[ '-N', '--NUMOD', dict(help="model identifier (known as NUMOD at Meteo-France). \ A.k.a. 'generatingProcessIdentifier' in GRIB_API. \ Default is 255.", dest='numod', default=None, type=int)], } # : Arguments for domain_maker domain_maker_options = { 'mode':[ '-l', dict(dest='mode', action='store_const', help="mode: define domain by specifying a lon/lat domain that must\ be included inside.", const='lonlat_included', default='center_dims')], 'no_display':[ '-n', '--no_display', dict(action='store_true', help="run without displaying the domain.", default=_defaults.get('noninteractive_backend', False))], 'maximize_CI_in_E':[ '-m', '--maximize_CI_in_E', dict(action='store_true', help="forces the C+I zone to be the greatest possible inside a\ given (discrete) C+I+E size. \ In other words, with a given (discrete) C+I+E size, forces\ the E-zone to be the smallest possible.", default=False)], }