Merge branch 'develop' into bugfix/Tigge_S2S_Uerra__marsKeys

This commit is contained in:
Shahram Najm 2022-07-28 17:11:32 +01:00
commit 586002e473
44 changed files with 193 additions and 83 deletions

View File

@ -1,2 +1,3 @@
SET(ENABLE_EXTRA_TESTS ON CACHE BOOL "Enable extra tests")
SET(ENABLE_ECCODES_THREADS ON CACHE BOOL "Enable POSIX threads")
SET(ENABLE_MEMFS ON CACHE BOOL "Enable MEMFS")

View File

@ -1,2 +1,2 @@
# All python tests fail due to error loading the SWIG generated extension module
SET( ENABLE_PYTHON OFF CACHE BOOL "Disable Python")
SET( ENABLE_PYTHON2 OFF CACHE BOOL "Disable Python")

View File

@ -5,3 +5,5 @@
# All python tests fails due to error loading the shared python lib: undefined symbol: __tsan_init
#SET( ENABLE_PYTHON OFF CACHE BOOL "Disable Python")
SET(ENABLE_MEMFS ON CACHE BOOL "Enable MEMFS")

View File

@ -75,17 +75,17 @@ index=1290
index=1171
index=1170
reduced_gaussian_sub_area.grib1
#3
index=19985
index=19984
#1
index=19665
index=19985
index=19664
index=19984
reduced_gaussian_sub_area.grib2
#3
index=19985
index=19984
#1
index=19665
index=19985
index=19664
index=19984
reduced_gaussian_surface.grib1
#4
index=1291

View File

@ -2,10 +2,10 @@
set -eu
# Usage:
# create_legacy_def.sh $paramId
# create_legacy_def.sh $paramId $paramId...
#
# This script will insert the local ECMWF GRIB2 representation
# for that paramId into the files:
# for each paramId into the files:
# definitions/grib2/localConcepts/ecmf/paramId.legacy.def
# definitions/grib2/localConcepts/ecmf/shortName.legacy.def
# etc
@ -22,7 +22,13 @@ set -eu
# The parameterNumber = $paramId - parameterCategory*1000
#
pid=$1
if [ $# -eq 0 ]; then
echo "Usage: $0 pid1 pid2 ..." 2>&1
exit 1
fi
# Input list of paramId values
pids="$@"
sample2=samples/GRIB2.tmpl
temp=$TMPDIR/temp.create_legacy_def.grib
@ -49,23 +55,38 @@ output_def()
fi
}
grib_set -s paramId=$pid $sample2 $temp
name=$(grib_get -p name $temp)
shortName=$(grib_get -p shortName $temp)
units=$(grib_get -p units $temp)
cfName=$(grib_get -p cfName $temp)
cfVarName=$(grib_get -p cfVarName $temp)
count=0
for pid in $pids; do
echo "Doing $pid..."
set +e
grib_set -s paramId=$pid $sample2 $temp 2>/dev/null
status=$?
set -e
if [ $status -ne 0 ]; then
grib_set -s stepType=accum,paramId=$pid $sample2 $temp
fi
name=$(grib_get -p name $temp)
shortName=$(grib_get -p shortName $temp)
units=$(grib_get -p units $temp)
cfName=$(grib_get -p cfName $temp)
cfVarName=$(grib_get -p cfVarName $temp)
count=$((count+1))
dis=192
cat=$((pid/1000))
num=$((pid - cat*1000))
dis=192
cat=$((pid/1000))
num=$((pid - cat*1000))
output_def "$name" "$pid" $dis $cat $num >> $defs/paramId.legacy.def
output_def "$name" "$name" $dis $cat $num >> $defs/name.legacy.def
output_def "$name" "$shortName" $dis $cat $num >> $defs/shortName.legacy.def
output_def "$name" "$units" $dis $cat $num >> $defs/units.legacy.def
output_def "$name" "$cfVarName" $dis $cat $num >> $defs/cfVarName.legacy.def
output_def "$name" "$cfName" $dis $cat $num >> $defs/cfName.legacy.def
output_def "$name" "$pid" $dis $cat $num >> $defs/paramId.legacy.def
output_def "$name" "$name" $dis $cat $num >> $defs/name.legacy.def
output_def "$name" "$shortName" $dis $cat $num >> $defs/shortName.legacy.def
output_def "$name" "$units" $dis $cat $num >> $defs/units.legacy.def
output_def "$name" "$cfVarName" $dis $cat $num >> $defs/cfVarName.legacy.def
output_def "$name" "$cfName" $dis $cat $num >> $defs/cfName.legacy.def
echo "Files updated. Check directory $defs"
done
echo "Number of legacy parameters added: $count"
if [ $count -gt 0 ]; then
echo "Files updated. Check directory $defs"
fi
rm -f $temp

View File

@ -93,6 +93,8 @@ concept stepType {
"ratio" = {selectStepTemplateInterval=1; stepTypeInternal="ratio";}
"stdanom" = {selectStepTemplateInterval=1; stepTypeInternal="stdanom";}
"sum" = {selectStepTemplateInterval=1; stepTypeInternal="sum";}
"severity" = {selectStepTemplateInterval=1; stepTypeInternal="severity";}
"mode" = {selectStepTemplateInterval=1; stepTypeInternal="mode";}
}
# 0=atmospheric chemical constituents

View File

@ -68,6 +68,8 @@ if (numberOfTimeRange == 1 || numberOfTimeRange == 2) {
"ratio" = {typeOfStatisticalProcessing=9;}
"stdanom" = {typeOfStatisticalProcessing=10;}
"sum" = {typeOfStatisticalProcessing=11;}
"severity" = {typeOfStatisticalProcessing=100;}
"mode" = {typeOfStatisticalProcessing=101;}
}
meta startStep step_in_units(forecastTime,indicatorOfUnitOfTimeRange,stepUnits,
indicatorOfUnitForTimeRange,lengthOfTimeRange) : no_copy;

View File

@ -66,7 +66,7 @@ print("MEMFS: Starting")
# Exclude experimental features e.g. GRIB3 and TAF
# The BUFR codetables is not used in the engine
EXCLUDED = ["grib3", "codetables", "taf", "stations", "grib1_mlgrib2_ieee32"]
EXCLUDED = ["grib3", "codetables", "taf", "metar", "stations", "grib1_mlgrib2_ieee32"]
EXCLUDE = {
None: [],

View File

@ -224,7 +224,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
size_t n_vals = 0;
size_t size = 0;
unsigned char* decoded = NULL;
unsigned char* p = NULL;
/*unsigned char* p = NULL;*/
long pos = 0;
long nn = 0;
@ -310,11 +310,14 @@ static int unpack_double(grib_accessor* a, double* val, size_t* len)
/* printf("bscale=%g dscale=%g reference_value=%g\n",bscale,dscale,reference_value); */
pos = 0;
p = decoded;
#if 0
p = decoded;
for (i = 0; i < n_vals; i++) {
val[i] = (double)(((grib_decode_unsigned_long(p, &pos, bits8) * bscale) + reference_value) * dscale);
}
/*-------------------------------------------*/
#endif
/* ECC-1427: Performance improvement */
grib_decode_double_array(decoded, &pos, bits8 , reference_value, bscale, dscale, n_vals, val);
*len = n_vals;
cleanup:

View File

@ -342,10 +342,7 @@ int grib_nearest_find_generic(
double lat1 = 0, lat2 = 0; /* inlat will be between these */
const double LAT_DELTA = 10.0; /* in degrees */
if (grib_is_missing(h, Ni_keyname, &ret)) {
grib_context_log(h->context, GRIB_LOG_DEBUG, "Key '%s' is missing", Ni_keyname);
return ret ? ret : GRIB_GEOCALCULUS_PROBLEM;
}
/* Note: If this is being called for a REDUCED grid, its Ni will be missing */
if (grib_is_missing(h, Nj_keyname, &ret)) {
grib_context_log(h->context, GRIB_LOG_DEBUG, "Key '%s' is missing", Nj_keyname);

View File

@ -130,17 +130,60 @@ static int init(grib_nearest* nearest, grib_handle* h, grib_arguments* args)
typedef void (*get_reduced_row_proc)(long pl, double lon_first, double lon_last, long* npoints, long* ilon_first, long* ilon_last);
static int find_global(grib_nearest* nearest, grib_handle* h,
double inlat, double inlon, unsigned long flags,
double* outlats, double* outlons, double* values,
double* distances, int* indexes, size_t* len);
static int is_legacy(grib_handle* h)
{
long is_legacy = 0;
return (grib_get_long(h, "legacyGaussSubarea", &is_legacy) == GRIB_SUCCESS && is_legacy == 1);
}
/* Old implementation in src/deprecated/grib_nearest_class_reduced.old */
static int find(grib_nearest* nearest, grib_handle* h,
double inlat, double inlon, unsigned long flags,
double* outlats, double* outlons, double* values,
double* distances, int* indexes, size_t* len)
{
int err = 0;
grib_nearest_reduced* self = (grib_nearest_reduced*)nearest;
if (self->global) {
err = find_global(nearest, h,
inlat, inlon, flags,
outlats, outlons, values,
distances, indexes, len);
}
else
{
/* ECC-762, ECC-1432: Use brute force generic algorithm
* for reduced grid subareas. Review in the future
*/
int lons_count = 0; /*dummy*/
err = grib_nearest_find_generic(
nearest, h, inlat, inlon, flags,
self->values_key,
"Ni",
self->Nj,
&(self->lats),
&(self->lats_count),
&(self->lons),
&(lons_count),
&(self->distances),
outlats, outlons,
values, distances, indexes, len);
}
return err;
}
/* Old implementation in src/deprecated/grib_nearest_class_reduced.old */
static int find_global(grib_nearest* nearest, grib_handle* h,
double inlat, double inlon, unsigned long flags,
double* outlats, double* outlons, double* values,
double* distances, int* indexes, size_t* len)
{
grib_nearest_reduced* self = (grib_nearest_reduced*)nearest;
int ret = 0, kk = 0, ii = 0, jj = 0;

View File

@ -1477,8 +1477,17 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
switch (packing_spec->accuracy) {
case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT: {
long bitsPerValue = 0;
Assert(grib_get_long(h, "bitsPerValue", &bitsPerValue) == 0);
SET_LONG_VALUE("bitsPerValue", bitsPerValue);
if ((packing_spec->packing_type == GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE ||
packing_spec->packing_type == GRIB_UTIL_PACKING_TYPE_CCSDS) &&
strcmp(input_packing_type, "grid_ieee")==0)
{
SET_LONG_VALUE("bitsPerValue", 32);
}
else
{
Assert(grib_get_long(h, "bitsPerValue", &bitsPerValue) == 0);
SET_LONG_VALUE("bitsPerValue", bitsPerValue);
}
} break;
case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES:

View File

@ -62,7 +62,8 @@ endforeach()
if( HAVE_BUILD_TOOLS )
# These tests do not require any data downloads
list(APPEND tests_no_data_reqd
# and are generally quick
list(APPEND tests_basic
unit_tests
julian
grib_dump_samples
@ -112,12 +113,9 @@ if( HAVE_BUILD_TOOLS )
bufr_ecc-359
bufr_ecc-517
bufr_rdbSubTypes
bufr_templates
grib_efas
grib_sh_imag
grib_sh_spectral_complex
pseudo_diag
wrap
grib_levtype
grib_typeOfLevel
grib_grid_unstructured
@ -127,14 +125,16 @@ if( HAVE_BUILD_TOOLS )
grib_g1day_of_the_year_date
grib_g1fcperiod)
# These tests do require data downloads
list(APPEND tests_data_reqd
# These tests require data downloads
# and/or take much longer
list(APPEND tests_extra
grib_data_quality_checks
grib_bpv_limit
grib_complex
grib_double_cmp
grib_change_packing
grib_grid_space_view
bufr_templates
bufr_dump_data
bufr_dump_descriptors
bufr_dump_subset
@ -201,6 +201,8 @@ if( HAVE_BUILD_TOOLS )
gts_ls
gts_count
gts_compare
wrap
pseudo_diag
metar_ls
metar_get
metar_dump
@ -265,21 +267,21 @@ if( HAVE_BUILD_TOOLS )
grib_mars_keys)
if( HAVE_FORTRAN AND ENABLE_EXTRA_TESTS )
list(APPEND tests_data_reqd bufr_dump_encode_fortran)
list(APPEND tests_data_reqd bufr_dump_decode_fortran)
list(APPEND tests_extra bufr_dump_encode_fortran)
list(APPEND tests_extra bufr_dump_decode_fortran)
endif()
if( ENABLE_EXTRA_TESTS )
list(APPEND tests_data_reqd grib_util_set_spec)
list(APPEND tests_data_reqd grib_padding)
list(APPEND tests_data_reqd grib_tigge_conversions1)
list(APPEND tests_data_reqd grib_tigge_conversions2)
list(APPEND tests_data_reqd bufr_dump_encode_C)
list(APPEND tests_data_reqd bufr_dump_decode_C)
list(APPEND tests_no_data_reqd list_codetable_flagtable_keys)
list(APPEND tests_extra grib_util_set_spec)
list(APPEND tests_extra grib_padding)
list(APPEND tests_extra grib_tigge_conversions1)
list(APPEND tests_extra grib_tigge_conversions2)
list(APPEND tests_extra bufr_dump_encode_C)
list(APPEND tests_extra bufr_dump_decode_C)
list(APPEND tests_extra list_codetable_flagtable_keys)
endif()
# These tests do not require any data downloads
foreach( test ${tests_no_data_reqd} )
foreach( test ${tests_basic} )
ecbuild_add_test( TARGET eccodes_t_${test}
TYPE SCRIPT
LABELS "sanity"
@ -294,7 +296,7 @@ if( HAVE_BUILD_TOOLS )
# Note: making the test dependent on the grib files (with DEPENDS)
# means they will be downloaded at "make" time
# rather than when you do "ctest". Use TEST_DEPENDS instead
foreach( test ${tests_data_reqd} )
foreach( test ${tests_extra} )
ecbuild_add_test( TARGET eccodes_t_${test}
TYPE SCRIPT
CONDITION ENABLE_EXTRA_TESTS

View File

@ -13,7 +13,7 @@
cd ${data_dir}/bufr
# Define a common label for all the tmp files
label="bufr_change_edition"
label="bufr_change_edition_test"
fBufrTmp=${label}".bufr.tmp"

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="bufr_indexing"
label="bufr_indexing_test"
tempIndex=temp.$label.$$.idx
tempOut=temp.$label.$$.out
tempRef=temp.$label.$$.ref

View File

@ -11,7 +11,7 @@
. ./include.ctest.sh
pwd
# Define a common label for all the tmp files
label="codes_split_file"
label="codes_split_file_test"
temp=$label.temp.grib
# Do all the work in a temporary directory

View File

@ -12,7 +12,7 @@
REDIRECT=/dev/null
label="grib1to3"
label="grib1to3_test"
temp=temp.$label.grib3
sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
${tools_dir}/grib_set -s editionNumber=3 $sample_g1 $temp

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
set -u
label="grib2_templates"
label="grib2_templates_test"
temp1=temp1.$label.grib2
temp2=temp2.$label.grib2

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib2_version"
label="grib2_version_test"
if [ ! -d "$ECCODES_DEFINITION_PATH" ]; then
echo "Test $0 disabled. No definitions directory"
exit 0

View File

@ -11,7 +11,7 @@
REDIRECT=/dev/null
label="grib2to3"
label="grib2to3_test"
temp=temp.$label.grib3
sample_g2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
${tools_dir}/grib_set -s editionNumber=3 $sample_g2 $temp

View File

@ -11,7 +11,7 @@
REDIRECT=/dev/null
label="grib3_templates"
label="grib3_templates_test"
temp1=temp1.$label.grib3
temp2=temp2.$label.grib3

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_change_scanning"
label="grib_change_scanning_test"
editions="1 2"
gridTypes="regular_ll rotated_ll"

View File

@ -9,7 +9,7 @@
. ./include.ctest.sh
label="grib_check_gaussian_grids"
label="grib_check_gaussian_grids_test"
temp=temp.$label.grib

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_complex"
label="grib_complex_test"
temp=${label}".grib.tmp"
temp1=${label}".1.tmp"
temp2=${label}".2.tmp"

View File

@ -13,7 +13,7 @@
# ---------------------------------------------------------
# Tests for data quality checks
# ---------------------------------------------------------
label="grib_data_quality"
label="grib_data_quality_test"
tempOut=temp.1.${label}.out
temp2=temp.2.${label}.out
tempErr=temp.${label}.err

View File

@ -9,7 +9,7 @@
#
. ./include.ctest.sh
label="grib_dump_debug"
label="grib_dump_debug_test"
temp=temp.$label.txt
REDIRECT=/dev/null

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_dump_json"
label="grib_dump_json_test"
temp=${label}".temp.json"
REDIRECT=/dev/null

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_efas"
label="grib_efas_test"
sample=temp.sample.$label.grib
temp1=temp1.$label.grib
temp2=temp2.$label.grib

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_g1fcperiod"
label="grib_g1fcperiod_test"
sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
temp=temp.$label.grib

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_g1monthlydate"
label="grib_g1monthlydate_test"
sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
temp=temp.$label.grib

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_grid_unstructured"
label="grib_grid_unstructured_test"
# Only relevant for GRIB2
sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_indexing"
label="grib_indexing_test"
temp=temp.$label.index.out
infile=${data_dir}/index.grib

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_lam_bf"
label="grib_lam_bf_test"
temp=temp.$label.txt
if [ $ECCODES_ON_WINDOWS -eq 1 ]; then

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_lam_gp"
label="grib_lam_gp_test"
temp=temp.$label.txt
dump_and_check()

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
set -u
label="grib_levtype"
label="grib_levtype_test"
if [ ! -d "$ECCODES_DEFINITION_PATH" ]; then
echo "Test $0 disabled. No definitions directory"

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_mars_keys"
label="grib_mars_keys_test"
tempOut=temp.${label}.out
tempGrib=temp.${label}.grib
tempRef=temp.${label}.ref

View File

@ -119,6 +119,22 @@ ${tools_dir}/grib_ls -l 0,0,1 $tempGrib > $temp
grep -q "Grid Point chosen #2 index=480 " $temp
# Subarea: Reduced Gaussian grid
# ------------------------------
input_grb=${data_dir}/reduced_gaussian_sub_area.grib1
${tools_dir}/grib_get -F%3.6g -l 89.656,220,1 $input_grb > $temp
grep -q "274.038" $temp
${tools_dir}/grib_ls -l 89.656,220,1 $input_grb > $temp
grep -q "Grid Point chosen #1 index=0 " $temp
${tools_dir}/grib_ls -l 0.225,399.6,1 $input_grb > $temp
grep -q "Grid Point chosen #1 index=53563 " $temp
${tools_dir}/grib_get -F%3.6g -l 11.91,366.3,1 $input_grb > $temp
grep -q "299.632" $temp
${tools_dir}/grib_ls -l 11.91,366.3,1 $input_grb > $temp
grep -q "Grid Point chosen #1 index=43089 " $temp
# Clean up
rm -f $temp $tempRef $tempGrib

View File

@ -11,7 +11,7 @@
. ./include.ctest.sh
REDIRECT=/dev/null
label="grib_packing_order"
label="grib_packing_order_test"
temp=${label}".grib.tmp"
temp_simple1=${label}".simple1.tmp"
temp_simple2=${label}".simple2.tmp"

View File

@ -10,7 +10,7 @@
. ./include.ctest.sh
label="grib_png"
label="grib_png_test"
temp=${label}".grib.tmp"
temp1=${label}".1.tmp"
temp2=${label}".2.tmp"

View File

@ -62,6 +62,7 @@ diff ${data_dir}/step_grib1.log ${templog}
rm -f ${templog}
# GRIB-180
# ------------
# Set PDT 4.8 where you can find the EndOfOverallTimeInterval keys
grib2File=${data_dir}/reduced_latlon_surface_constant.grib2
${tools_dir}/grib_set -sproductDefinitionTemplateNumber=8 $grib2File ${grib2File}.p8tmp
@ -81,6 +82,7 @@ hourEnd=$1; dayEnd=$2
# ECC-134 case-sensitivity
# --------------------------
grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
temp=temp.step.$$.grib
@ -93,6 +95,7 @@ unit=`${tools_dir}/grib_get -p indicatorOfUnitOfTimeRange $temp`
[ "$unit" = "3" ]
# m is for Minute (code 0)
# -------------------------
${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=m $grib1_sample $temp
unit=`${tools_dir}/grib_get -p unitOfTimeRange $temp`
[ "$unit" = "0" ]
@ -101,9 +104,18 @@ unit=`${tools_dir}/grib_get -p indicatorOfUnitOfTimeRange $temp`
[ "$unit" = "0" ]
# ECC-457
# ---------
input=${data_dir}/tp_ecmwf.grib
stepRange=`${tools_dir}/grib_get -w count=1 -p stepRange,startStep,endStep,stepType $input`
[ "$stepRange" = "12 12 12 instant" ]
# ECC-1430: stepType: 'severity' and 'mode'
# -----------------------------------------
${tools_dir}/grib_set -s stepType=severity,paramId=260318 $grib2_sample $temp
grib_check_key_equals $temp productDefinitionTemplateNumber,typeOfStatisticalProcessing '8 100'
${tools_dir}/grib_set -s stepType=mode,paramId=260320 $grib2_sample $temp
grib_check_key_equals $temp productDefinitionTemplateNumber,typeOfStatisticalProcessing '8 101'
# Clean up
rm -f $temp
rm -f $grib2File.p8tmp ${grib2File}.tmp x.grib

View File

@ -16,7 +16,7 @@
REDIRECT=/dev/null
label="grib_tigge_conv1"
label="grib_tigge_conv1_test"
dir="${data_dir}/tigge"
temp1="temp.${label}.grib1_"
temp2="temp.${label}.grib2_"

View File

@ -16,7 +16,7 @@
REDIRECT=/dev/null
label="grib_tigge_conv2"
label="grib_tigge_conv2_test"
dir="${data_dir}/tigge"
temp1="temp.${label}.grib1_"
temp2="temp.${label}.grib2_"

View File

@ -144,7 +144,7 @@ static int process_file(const char* filename)
}
if (lon1 != 0) {
error(filename, msg_num, "latitudeOfFirstGridPointInDegrees=%f but should be 0\n", lon1);
error(filename, msg_num, "longitudeOfFirstGridPointInDegrees=%f but should be 0\n", lon1);
}
expected_lon2 = 360.0 - 360.0 / (4 * N);

View File

@ -105,7 +105,7 @@ static grib_options_help grib_options_help_list[] = {
{ "T:", "T | B | M | A", "Message type. T->GTS, B->BUFR, M->METAR (Experimental), A->Any (Experimental).\n\t\t\t\tThe input file is interpreted according to the message type.\n" },
{ "V", 0, "Version.\n" },
{ "W:", "width", "\n\t\tMinimum width of each column in output. Default is 10.\n" },
{ "X:", "offset", "\n\t\tInput file offset in bytes. Processing of the input file will start from \"offset\".\n" },
{ "X:", "offset", "\n\t\tInput file offset in bytes. Processing of the input file will start from the given offset.\n" },
{ "x", 0, "Fast parsing option, only headers are loaded.\n" },
{ "k:", "key1,key2,...",
"\n\t\tSpecify a list of keys to index on. By default the input files are indexed on the MARS keys."