You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by bo...@apache.org on 2013/08/17 00:11:10 UTC
svn commit: r1514906 -
/incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py
Author: boustani
Date: Fri Aug 16 22:11:10 2013
New Revision: 1514906
URL: http://svn.apache.org/r1514906
Log:
gettin parameter info more efficiently
Modified:
incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py
Modified: incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py
URL: http://svn.apache.org/viewvc/incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py?rev=1514906&r1=1514905&r2=1514906&view=diff
==============================================================================
--- incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py (original)
+++ incubator/climate/branches/RefactorInput/ocw/data_source/rcmed.py Fri Aug 16 22:11:10 2013
@@ -33,7 +33,7 @@ from dataset import Dataset
URL = 'http://rcmes.jpl.nasa.gov/query-api/query.php?'
-def parameters_metadata():
+def get_parameters_metadata():
'''Get the metadata of all parameter from RCMED.
:returns: Dictionary of information for each parameter stored in one list
@@ -56,20 +56,21 @@ def parameters_metadata():
return param_info_list
-def _make_mask_array(values, parameter_id):
+def _make_mask_array(values, parameter_id, parameters_metadata):
'''Created masked array to deal with missing values
:param values: Numpy array of values which may contain missing values
:type values: Numpy array
:param parameter_id: Parameter's id
:type parameter_id: Integer
+ :param parameters_metadata: Metadata for all parameters
+ :type parameters_metadata: List of dictionaries
:returns: Masked array of values
:rtype: Masked array
'''
-
- all_param_info = parameters_metadata()
- for each in all_param_info:
+
+ for each in parameters_metadata:
if each['parameter_id'].encode() == str(parameter_id):
missing_values = each['missingdataflag'].encode()
break
@@ -278,11 +279,11 @@ def _generate_query_url(dataset_id, para
return url_request
-def _get_parameter_info(dataset_id, parameter_id):
+def _get_parameter_info(parameters_metadata, parameter_id):
'''General information for given parameter id.
- :param dataset_id: Dataset id.
- :type dataset_id: Integer
+ :param parameters_metadata: Metadata for all parameters
+ :type parameters_metadata: List of dictionaries
:param parameter_id: Parameter id
:type parameter_id: Integer
@@ -290,19 +291,15 @@ def _get_parameter_info(dataset_id, para
:rtype: (string, string, string, string, string, string, string)
'''
- query = [('datasetId',dataset_id), ('parameterId',parameter_id)]
- query_url = urllib.urlencode(query)
- url = URL + query_url + "&info=yes"
- string = urllib2.urlopen(url)
- data_string = string.read()
- data_string = json.loads(data_string)
- database = data_string["database"]
- time_step = data_string["timestep"]
- realm = data_string["realm"]
- instrument = data_string["instrument"]
- start_date = data_string["start_date"]
- end_date = data_string["end_date"]
- unit = data_string["units"]
+ for dic in parameters_metadata:
+ if int(dic['parameter_id']) == parameter_id:
+ database = dic['database']
+ time_step = dic['timestep']
+ realm = dic['realm']
+ instrument = dic['instrument']
+ start_date = dic['start_date']
+ end_date = dic['end_date']
+ unit = dic['units']
return (database, time_step, realm, instrument, start_date, end_date, unit)
@@ -330,10 +327,9 @@ def parameter_dataset(dataset_id, parame
:returns: Dataset object
:rtype: Object
'''
-
- parameter_info = _get_parameter_info(dataset_id, parameter_id)
- time_step = parameter_info[1]
- parameter_name = parameter_info[0]
+
+ parameters_metadata = get_parameters_metadata()
+ parameter_name, time_step, _, _, _, _, _= _get_parameter_info(parameters_metadata, parameter_id)
url = _generate_query_url(dataset_id, parameter_id, min_lat, max_lat, min_lon, max_lon, start_time, end_time, time_step)
lats, lons, levels, times, values = _get_data(url)
@@ -345,6 +341,6 @@ def parameter_dataset(dataset_id, parame
unique_lats_lons_levels_times = _make_unique(lats, lons, levels, times)
unique_times = _calculate_time(unique_lats_lons_levels_times[3], time_step)
values = _reshape_values(values, unique_lats_lons_levels_times)
- values = _make_mask_array(values, parameter_id)
+ values = _make_mask_array(values, parameter_id, parameters_metadata)
return Dataset(unique_lats_lons_levels_times[0], unique_lats_lons_levels_times[1], unique_times, values, parameter_name)
\ No newline at end of file