def test_check_period(self): dat = datetime(2014, 11, 20) assert check_period('dekad', dat) == datetime(2014, 11, 20, 0, 0) assert check_period('week', dat) == datetime(2014, 11, 23, 0, 0) assert check_period('monthly', dat) == datetime(2014, 11, 30, 0, 0)
def read_img(self, date, region=None, variable=None, scaled=True): """Gets images from netCDF file for certain date Parameters ---------- date : datetime Date of the image. region : str, optional Region of interest, set to first defined region if not set. variable : str, optional Variable to display, selects first available variables if None. scaled : bool, optional If true, data will be scaled to a predefined range; if false, data will be shown as given in rawdata file; defaults to True. Returns ------- img : numpy.ndarray Image of selected date. lon : numpy.array Array with longitudes. lat : numpy.array Array with latitudes. metadata : dict Dictionary containing metadata of the variable. """ if region is None: region = self.dest_regions[0] if variable is None: variable = self.get_variables()[0] else: # Renames variable name to SOURCE_variable variable = self.check_variable(variable) source_file = self.src_file[region] # get dekad of date: date = dt.check_period(self.dest_temp_res, date) with Dataset(source_file, 'r', format='NETCDF4') as nc: time = nc.variables['time'] datenum = date2num(date, units=time.units, calendar=time.calendar) position = np.where(time[:] == datenum)[0][0] var = nc.variables[variable] img = var[position] lon = nc.variables['lon'][:] lat = nc.variables['lat'][:] metadata = {} for attr in var.ncattrs(): if attr[0] != '_' and attr != 'scale_factor': metadata[attr] = var.getncattr(attr) if not metadata: metadata = None if 'scaling_factor' in var.ncattrs(): if metadata['scaling_factor'] < 0: img = img * float(metadata['scaling_factor']) else: img = img / float(metadata['scaling_factor']) if scaled: if self.valid_range is not None: if self.data_range is not None: img = self._scale_values(img) return img, lon, lat, metadata
def read_img(self, date, region=None, variable=None, scaled=True): """Gets images from netCDF file for certain date Parameters ---------- date : datetime Date of the image. region : str, optional Region of interest, set to first defined region if not set. variable : str, optional Variable to display, selects first available variables if None. scaled : bool, optional If true, data will be scaled to a predefined range; if false, data will be shown as given in rawdata file; defaults to True. Returns ------- img : numpy.ndarray Image of selected date. lon : numpy.array Array with longitudes. lat : numpy.array Array with latitudes. metadata : dict Dictionary containing metadata of the variable. """ if region is None: region = self.valid_regions[0] if variable is None: variable = self.get_variables()[0] else: # Renames variable name to SOURCE_variable variable = self.check_variable(variable) source_file = self.src_file[region] # get dekad of date: date = dt.check_period(self.dest_temp_res, date) with Dataset(source_file, 'r', format='NETCDF4') as nc: time = nc.variables['time'] datenum = date2num(date, units=time.units, calendar=time.calendar) position = np.where(time[:] == datenum)[0][0] var = nc.variables[variable] img = var[position] lon = nc.variables['lon'][:] lat = nc.variables['lat'][:] metadata = {} for attr in var.ncattrs(): if attr[0] != '_' and attr != 'scale_factor': metadata[attr] = var.getncattr(attr) if not metadata: metadata = None if 'scaling_factor' in var.ncattrs(): if metadata['scaling_factor'] < 0: img = img * float(metadata['scaling_factor']) else: img = img / float(metadata['scaling_factor']) if scaled: if self.valid_range is not None: if self.data_range is not None: img = self._scale_values(img) return img, lon, lat, metadata