Skip to content

Commit

Permalink
#2202 Added APIs to check the point data (missing data and data types)
Browse files Browse the repository at this point in the history
  • Loading branch information
Howard Soh committed Jul 22, 2022
1 parent d6c8cfb commit 93263b5
Showing 1 changed file with 37 additions and 20 deletions.
57 changes: 37 additions & 20 deletions scripts/python/met_point_obs.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
met_point_data = point_obs_data.get_point_data()
'''

import os
from abc import ABC, abstractmethod
import numpy as np

Expand All @@ -37,6 +38,7 @@ def __init__(self, use_var_id=True):
'''
Constructor
'''
self.input_name = None
self.use_var_id = use_var_id # True if variable index, False if GRIB code

# Header
Expand Down Expand Up @@ -75,8 +77,20 @@ def __init__(self, use_var_id=True):

@abstractmethod
def read_data(self, args):
# args should be list or dictionary
# The variables at __init__ should be filled as python list or numpy array
# args can be input_file_name, list, or dictionary
# - The variables at __init__ should be filled as python list or numpy array
# - set self.input_name
#
# Here is a template
'''
if isinstance(args, dict):
in_filename = args.get('in_name',None)
elif isinstance(args, list):
in_filename = args[0]
else:
in_filename = args
self.input_name = in_filename
'''
pass

def check_data_member_float(self, local_var, var_name):
Expand Down Expand Up @@ -115,24 +129,27 @@ def check_data_member_string(self, local_var, var_name):
v=var_name, t=type(local_var)))

def check_point_data(self):
self.check_data_member_int(self.hdr_typ,'hdr_typ')
self.check_data_member_int(self.hdr_sid,'hdr_sid')
self.check_data_member_int(self.hdr_vld,'hdr_vld')
self.check_data_member_float(self.hdr_lat,'hdr_lat')
self.check_data_member_float(self.hdr_lon,'hdr_lon')
self.check_data_member_float(self.hdr_elv,'hdr_elv')
self.check_data_member_string(self.hdr_typ_table,'hdr_typ_table')
self.check_data_member_string(self.hdr_sid_table,'hdr_sid_table')
self.check_data_member_string(self.hdr_vld_table,'hdr_vld_table')

self.check_data_member_int(self.obs_qty,'obs_qty')
self.check_data_member_int(self.obs_hid,'obs_hid')
self.check_data_member_int(self.obs_vid,'obs_vid')
self.check_data_member_float(self.obs_lvl,'obs_lvl')
self.check_data_member_float(self.obs_hgt,'obs_hgt')
self.check_data_member_float(self.obs_val,'obs_val')
self.check_data_member_string(self.obs_qty_table,'bs_qty_table')
self.check_data_member_string(self.obs_var_table,'bs_var_table')
if self.input_name is not None and not os.path.exists(self.input_name):
self.log_error('The netcdf input {f} does not exist'.format(f=self.input_name))
else:
self.check_data_member_int(self.hdr_typ,'hdr_typ')
self.check_data_member_int(self.hdr_sid,'hdr_sid')
self.check_data_member_int(self.hdr_vld,'hdr_vld')
self.check_data_member_float(self.hdr_lat,'hdr_lat')
self.check_data_member_float(self.hdr_lon,'hdr_lon')
self.check_data_member_float(self.hdr_elv,'hdr_elv')
self.check_data_member_string(self.hdr_typ_table,'hdr_typ_table')
self.check_data_member_string(self.hdr_sid_table,'hdr_sid_table')
self.check_data_member_string(self.hdr_vld_table,'hdr_vld_table')

self.check_data_member_int(self.obs_qty,'obs_qty')
self.check_data_member_int(self.obs_hid,'obs_hid')
self.check_data_member_int(self.obs_vid,'obs_vid')
self.check_data_member_float(self.obs_lvl,'obs_lvl')
self.check_data_member_float(self.obs_hgt,'obs_hgt')
self.check_data_member_float(self.obs_val,'obs_val')
self.check_data_member_string(self.obs_qty_table,'bs_qty_table')
self.check_data_member_string(self.obs_var_table,'bs_var_table')

def get_point_data(self):
if self.nhdr <= 0:
Expand Down

0 comments on commit 93263b5

Please sign in to comment.