Repository: climate Updated Branches: refs/heads/master d4eeb03ee -> 06161fa4a
CLIMATE-654 - Clean up duplicate unit conversion code - Cleanup duplicate unit conversion code in dataset_processor that was introduced in CLIMATE-643. water_flux_unit_conversion is no longer duplicated unnecessarily in variable_unit_conversion. - Factor out temperature_unit_conversion code from variable_unit_conversion. Formatting and isolation now matches that of water_flux_unit_conversion. These are both called from the variable_unit_conversion function so there's a convenient wrapper for this functionality (as was the functionality prior to this refactor). Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/6fd064a3 Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/6fd064a3 Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/6fd064a3 Branch: refs/heads/master Commit: 6fd064a31ea658cb082947557aaf90d3298f878a Parents: d4eeb03 Author: Michael Joyce <[email protected]> Authored: Mon Aug 3 07:47:13 2015 -0700 Committer: Michael Joyce <[email protected]> Committed: Mon Aug 3 07:47:13 2015 -0700 ---------------------------------------------------------------------- ocw/dataset_processor.py | 52 +++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/6fd064a3/ocw/dataset_processor.py ---------------------------------------------------------------------- diff --git a/ocw/dataset_processor.py b/ocw/dataset_processor.py index acd2ad4..d7b1a3f 100755 --- a/ocw/dataset_processor.py +++ b/ocw/dataset_processor.py @@ -500,10 +500,10 @@ def water_flux_unit_conversion(dataset): :returns: A Dataset with values converted to new units. :rtype: :class:`dataset.Dataset` ''' - waterFluxVariables = ['pr', 'evspsbl', 'mrro', 'swe'] + water_flux_variables = ['pr', 'prec','evspsbl', 'mrro', 'swe'] variable = dataset.variable.lower() - if any(subString in variable for subString in waterFluxVariables): + if any(sub_string in variable for sub_string in water_flux_variables): dataset_units = dataset.units.lower() if variable in 'swe': if any(unit in dataset_units for unit in ['m', 'meter']): @@ -516,6 +516,29 @@ def water_flux_unit_conversion(dataset): dataset.units = 'mm/day' return dataset + +def temperature_unit_conversion(dataset): + ''' Convert temperature units as necessary + + Automatically convert Celcius to Kelvin in the given dataset. + + :param dataset: The dataset for which units should be updated. + :type dataset; :class:`dataset.Dataset` + + :returns: The dataset with (potentially) updated units. + :rtype: :class:`dataset.Dataset` + ''' + temperature_variables = ['temp','tas','tasmax','taxmin','T'] + variable = dataset.variable.lower() + + if any(sub_string in variable for sub_string in temperature_variables): + dataset_units = dataset.units.lower() + if dataset_units == 'c': + dataset.values = 273.15 + dataset.values + dataset.units = 'K' + + return dataset + def variable_unit_conversion(dataset): ''' Convert water flux or temperature variables units as necessary @@ -529,28 +552,9 @@ def variable_unit_conversion(dataset): :rtype: :class:`dataset.Dataset` ''' - water_flux_variables = ['pr', 'prec','evspsbl', 'mrro', 'swe'] - temperature_variables = ['temp','tas','tasmax','taxmin','T'] - variable = dataset.variable.lower() - - if any(subString in variable for subString in water_flux_variables): - dataset_units = dataset.units.lower() - if variable in 'swe': - if any(unit in dataset_units for unit in ['m', 'meter']): - dataset.values = 1.e3 * dataset.values - dataset.units = 'km' - else: - if any(unit in dataset_units - for unit in ['kg m-2 s-1', 'mm s-1', 'mm/sec']): - dataset.values = 86400. * dataset.values - dataset.units = 'mm/day' - - if any(subString in variable for subString in temperature_variables): - dataset_units = dataset.units.lower() - if dataset_units == 'c': - dataset.values = 273.15+dataset.values - dataset.units = 'K' - + dataset = water_flux_unit_conversion(dataset) + dataset = temperature_unit_conversion(dataset) + return dataset def _rcmes_normalize_datetimes(datetimes, timestep):
