mirror of https://github.com/ecmwf/eccodes.git
168 lines
4.8 KiB
Python
Executable File
168 lines
4.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys
|
|
from gribapi import *
|
|
import random
|
|
import traceback
|
|
|
|
VERBOSE=1
|
|
WRITE=0
|
|
|
|
class Usage(Exception):
|
|
def __init__(self):
|
|
pass
|
|
|
|
def test():
|
|
# test new from sample
|
|
#grib_release(grib_new_from_samples("GRIB2"))
|
|
|
|
if len(sys.argv) < 2:
|
|
raise Usage
|
|
|
|
infile = sys.argv[1]
|
|
outfile = infile + ".out"
|
|
multifile = infile + ".multi"
|
|
clonefile = infile + ".clone"
|
|
binstrfile = infile + ".binstr"
|
|
|
|
fid = open(infile,"r")
|
|
while 1:
|
|
gid = grib_new_from_file(fid)
|
|
if not gid: break
|
|
grib_release(gid)
|
|
fid.close()
|
|
|
|
fid = open(infile,"r")
|
|
out = open(outfile,"w")
|
|
multi = open(outfile,"w")
|
|
clone_fid = open(clonefile,"w")
|
|
binstr_fid = open(binstrfile,"w")
|
|
|
|
#print "Writing from binary string to ",binstrfile
|
|
#x = grib_read_file(fid)
|
|
#print len(x)
|
|
#grib_write_file(binstr_fid,x)
|
|
#grib_close_file(binstr_fid)
|
|
|
|
print "Operating on file '%s'" % infile
|
|
|
|
n = grib_count_in_file(fid)
|
|
print "Message count ",n
|
|
|
|
# multi support test
|
|
grib_multi_support_on()
|
|
ismulti = "no" if (n == grib_count_in_file(fid)) else "yes"
|
|
print "Is multi field - %s" % ismulti
|
|
grib_multi_support_off()
|
|
# end multi support test
|
|
|
|
# gribex support test on/off
|
|
print "Gribex support on/off"
|
|
grib_gribex_mode_on()
|
|
grib_gribex_mode_off
|
|
# end gribex support test
|
|
|
|
print "Browsing through messages "
|
|
for i in range(n):
|
|
gid = grib_new_from_file(fid)
|
|
|
|
#grib_dump(gid)
|
|
#grib_print(gid,"centre")
|
|
|
|
if i == 0:
|
|
print "Message size: ",grib_get_message_size(gid)
|
|
nval = grib_get_size(gid,"values")
|
|
print "Number of values in message %d is %d" % (i,nval)
|
|
|
|
print "== %s %s %s %d ==" % \
|
|
( \
|
|
grib_get_string(gid,"shortName"), \
|
|
grib_get_string(gid,"name"), \
|
|
grib_get_string(gid,"typeOfLevel"), \
|
|
grib_get_long(gid,"level"), \
|
|
)
|
|
|
|
print "Nearest point to 10,10: "
|
|
print grib_find_nearest(gid,10,10)
|
|
|
|
print grib_find_nearest(gid,10,10,npoints=4)
|
|
|
|
rand_list = []
|
|
for i in range(0,5):
|
|
rand_index = random.randint(1,nval)
|
|
rand_list.append(rand_index)
|
|
myval = grib_get_double_element(gid,"values",rand_index)
|
|
print "Random index value[%d] = %.8f" % (rand_index,myval)
|
|
|
|
all4rand = grib_get_double_elements(gid,"values",rand_list)
|
|
print "All at once index values: ",all4rand
|
|
|
|
centre = grib_get_string(gid,"centre")
|
|
grib_set_string(gid,"centre","ecmf")
|
|
new_centre = grib_get_string(gid,"centre")
|
|
print "Before/after string centre: %s/%s" % (centre,new_centre)
|
|
|
|
centre = grib_get_long(gid,"centre")
|
|
grib_set_long(gid,"centre",99)
|
|
new_centre = grib_get_long(gid,"centre")
|
|
print "Before/after numeric centre: %d/%d" % (centre,new_centre)
|
|
|
|
centre = grib_get_double(gid,"centre")
|
|
grib_set_double(gid,"centre",9)
|
|
new_centre = grib_get_double(gid,"centre")
|
|
print "Before/after numeric floating point centre: %f/%f" % (centre,new_centre)
|
|
|
|
vals = grib_get_double_array(gid,"values")
|
|
print "Values before: ",vals[:10]
|
|
grib_set_double_array(gid,"values",(1.0, 2.0, 3.14))
|
|
vals = grib_get_double_array(gid,"values")
|
|
print "Values after: ",vals[:10]
|
|
|
|
print "Saving modified message to %s" % outfile
|
|
if WRITE: grib_write(gid,out)
|
|
|
|
print "Creating and saving a clone to %s" % clonefile
|
|
clone_gid = grib_clone(gid)
|
|
if WRITE: grib_write(clone_gid,clone_fid)
|
|
grib_release(clone_gid)
|
|
|
|
Ni = grib_get(gid,"Ni")
|
|
print "Setting Ni to missing from --> ",Ni
|
|
grib_set_missing(gid,"Ni")
|
|
assert grib_is_missing(gid,"Ni")
|
|
miss_Ni = grib_get(gid,"Ni")
|
|
print "Ni is now --> ",miss_Ni
|
|
grib_set(gid,"Ni",Ni)
|
|
new_Ni = grib_get(gid,"Ni")
|
|
print "Set Ni back to its original value --> ",new_Ni
|
|
assert Ni == new_Ni
|
|
|
|
#grib_multi_write(gid,multi)
|
|
|
|
|
|
grib_release(gid)
|
|
|
|
fid.close()
|
|
out.close()
|
|
clone_fid.close()
|
|
print "Closed file"
|
|
|
|
|
|
def main():
|
|
try:
|
|
test()
|
|
except GribInternalError as err:
|
|
if VERBOSE:
|
|
traceback.print_exc(file=sys.stderr)
|
|
else:
|
|
print >>sys.stderr,err.msg
|
|
|
|
return 1
|
|
except Usage:
|
|
print "Usage: %s infile" % sys.argv[0]
|
|
sys.exit(2)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
print "------------------------------------"
|