Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Commit

Permalink
CLIMATE-938 Unify format of the time information from a netCDF file.
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelArthurAnderson committed Mar 4, 2018
1 parent e8d8d42 commit 4807c4b
Showing 1 changed file with 27 additions and 11 deletions.
38 changes: 27 additions & 11 deletions ocw/dataset_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,19 @@
# limitations under the License.
#

from ocw import dataset as ds
import ocw.utils as utils

import datetime
import logging

import netCDF4
import numpy as np
import numpy.ma as ma
from scipy.interpolate import griddata
import scipy.ndimage
from scipy.stats import rankdata
from scipy.ndimage import map_coordinates
import netCDF4
from matplotlib.path import Path
from scipy.interpolate import griddata
from scipy.ndimage import map_coordinates

import logging
import ocw.utils as utils
from ocw import dataset as ds

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -149,7 +148,7 @@ def temporal_rebin_with_time_index(target_dataset, nt_average):
It is the same as the number of time indicies to be averaged.
length of time dimension in the rebinned dataset) =
(original time dimension length/nt_average)
:type temporal_resolution: integer
:type nt_average: integer
:returns: A new temporally rebinned Dataset
:rtype: :class:`dataset.Dataset`
Expand Down Expand Up @@ -505,10 +504,27 @@ def temporal_slice(target_dataset, start_time, end_time):
:raises: ValueError
'''
# https://issues.apache.org/jira/browse/CLIMATE-938
# netCDF datetimes allow for a variety of calendars while Python has
# only one. This would throw an error about a calendar mismatch when
# comparing a Python datetime object to a netcdf datetime object.
# Cast the date as best we can so the comparison will compare like
# data types This will still throw an excdeption if the start / end date are
# not valid in given calendar. February 29th in a DatetimeNoLeap calendar for example.
slice_start_time =\
type(target_dataset.times.item(0))(start_time.year, start_time.month, start_time.day,
start_time.hour, start_time.minute, start_time.second)

slice_end_time =\
type(target_dataset.times.item(0))(end_time.year, end_time.month, end_time.day,
end_time.hour, end_time.minute, end_time.second)

start_time_index = np.where(
target_dataset.times >= start_time)[0][0]
target_dataset.times >= slice_start_time)[0][0]

end_time_index = np.where(
target_dataset.times <= end_time)[0][-1]
target_dataset.times <= slice_end_time)[0][-1]

new_times = target_dataset.times[start_time_index:end_time_index + 1]
new_values = target_dataset.values[start_time_index:end_time_index + 1, :]

Expand Down

0 comments on commit 4807c4b

Please sign in to comment.