File: grib_statistics.sh

package info (click to toggle)
eccodes 2.45.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 154,404 kB
  • sloc: cpp: 162,953; ansic: 26,308; sh: 21,742; f90: 6,854; perl: 6,361; python: 5,172; java: 2,226; javascript: 1,427; yacc: 854; fortran: 543; lex: 359; makefile: 283; xml: 183; awk: 66
file content (110 lines) | stat: -rwxr-xr-x 3,605 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/sh
# (C) Copyright 2005- ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
# 
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#

. ./include.ctest.sh

label="grib_statistics_test"
temp1=temp1.$label.grib
temp2=temp2.$label.grib
tempFilt=temp2.$label.filt
tempText=temp2.$label.txt

files="regular_latlon_surface.grib2 regular_latlon_surface.grib1"

for file in $files; do

# Note: When we get min,max etc for the 1st time, dirty_statistics is 1
# so the statistics accessor will decode the data values (because dirty_statistics==1)
# Once it is finished, it sets dirty_statistics to 0.
# If you get min,max again, no computation is done (because dirty_statistics==0)
# But once the data values are changed, then dirty_statistics is once again 1
cat > $tempFilt <<EOF
    set Ni=2;
    set Nj=2;
    set decimalPrecision=4;
    print "Will set values...";
    set values={2.0,2.0,2.0,2.0};
    assert(dirty_statistics == 1);
    print "values=[values]";
    print "max=[max] min=[min] average=[average]";
    assert(dirty_statistics == 0);
    print "max=[max] min=[min] average=[average]";
    print "Will set values...";
    set values={2.0,5.0,2.0,2.0};
    assert(dirty_statistics == 1);
    print "values=[values]";
    print "max=[max] min=[min] average=[average]";
    assert(dirty_statistics == 0);
EOF

${tools_dir}/grib_filter $tempFilt ${data_dir}/$file > $tempText
diff ${data_dir}/statistics.out.good $tempText

done
rm -f $tempText $tempFilt


# GRIB with no missing values but some entries = 9999
# See ECC-478
# ---------------------------------------------------
input=${data_dir}/lfpw.grib1
stats=`${tools_dir}/grib_get -w count=50 -F%.2f -n statistics $input`
[ "$stats" = "10098.00 0.00 1064.19 3066.07 2.57 4.61 0.00" ]

# Scaling values in presence of real 9999 values
${tools_dir}/grib_set -s scaleValuesBy=0.5                     $input $temp1
${tools_dir}/grib_set -s missingValue=1.0E34,scaleValuesBy=0.5 $input $temp2
${tools_dir}/grib_compare $temp1 $temp2

# Offsetting values in presence of real 9999 values
${tools_dir}/grib_set -s offsetValuesBy=0.5                     $input $temp1
${tools_dir}/grib_set -s missingValue=1.0E34,offsetValuesBy=0.5 $input $temp2
${tools_dir}/grib_compare $temp1 $temp2


# ECC-2083
# --------
${tools_dir}/grib_copy -wcount=1 $data_dir/satellite.grib $temp1
${tools_dir}/grib_set -s scaleValuesBy=1e-7 $temp1 $temp2
${tools_dir}/grib_ls -n statistics $temp1
${tools_dir}/grib_ls -n statistics $temp2

skew1=$( ${tools_dir}/grib_get -F%.1f -p skew $temp1 )
kurt1=$( ${tools_dir}/grib_get -F%.1f -p kurtosis $temp1 )
[ "$skew1" = "-1.0" ]
[ "$kurt1" = "0.6" ]

skew2=$( ${tools_dir}/grib_get -F%.1f -p skew $temp2 )
kurt2=$( ${tools_dir}/grib_get -F%.1f -p kurtosis $temp2 )
[ "$skew1" = "$skew2" ]
[ "$kurt1" = "$kurt2" ]


# Decode as string - Null op
cat >$tempFilt<<EOF
    print "[computeStatistics:s]";
EOF
input=$data_dir/sample.grib2
${tools_dir}/grib_filter $tempFilt $input


# Error condition: Empty field
grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
$tools_dir/grib_set -s packingType=grid_second_order_row_by_row,bitmapPresent=1 $grib1_sample $temp1
set +e
$tools_dir/grib_get -p min,max $temp1 2>$tempText
status=$?
set -e
[ $status -ne 0 ]
grep -q "Cannot compute statistics for field with no values" $tempText


# Clean up
rm -f $temp1 $temp2 $tempFilt $tempText