def _create_coord_list(self, filenames, variable=None): import datetime as dt variables = ["Latitude", "Longitude", "Scan_Start_Time"] logging.info("Listing coordinates: " + str(variables)) sdata, vdata = hdf.read(filenames, variables) apply_interpolation = False if variable is not None: scale = self.__get_data_scale(filenames[0], variable) apply_interpolation = True if scale is "1km" else False lat = sdata["Latitude"] sd_lat = hdf.read_data(lat, "SD") lat_data = self.__field_interpolate(sd_lat) if apply_interpolation else sd_lat lat_metadata = hdf.read_metadata(lat, "SD") lat_coord = Coord(lat_data, lat_metadata, "Y") lon = sdata["Longitude"] lon_data = ( self.__field_interpolate(hdf.read_data(lon, "SD")) if apply_interpolation else hdf.read_data(lon, "SD") ) lon_metadata = hdf.read_metadata(lon, "SD") lon_coord = Coord(lon_data, lon_metadata, "X") time = sdata["Scan_Start_Time"] time_metadata = hdf.read_metadata(time, "SD") # Ensure the standard name is set time_metadata.standard_name = "time" time_coord = Coord(time, time_metadata, "T") time_coord.convert_TAI_time_to_std_time(dt.datetime(1993, 1, 1, 0, 0, 0)) return CoordList([lat_coord, lon_coord, time_coord])
def _create_coord_list(self): """Read file coordinates into a CIS object""" from cis.data_io.Coord import Coord, CoordList from reame.utils import ncdf_read try: lon_data, lon_metadata = ncdf_read(self.filenames, "longitude") lat_data, lat_metadata = ncdf_read(self.filenames, "latitude") except IndexError: lon_data, lon_metadata = ncdf_read(self.filenames, "lon") lat_data, lat_metadata = ncdf_read(self.filenames, "lat") lat = Coord(lat_data, lat_metadata, "Y") lat.update_shape() lat.update_range() lon = Coord(lon_data, lon_metadata, "X") lon.update_shape() lat.update_range() time_data, time_metadata = ncdf_read(self.filenames, "time") # Ensure the standard name is set time_metadata.standard_name = "time" time = Coord(time_data, time_metadata, "T") time.convert_TAI_time_to_std_time(ATSR_REFERENCE_TIME) time.update_shape() time.update_range() return CoordList([lat, lon, time])
def _create_coord_list(self): from cis.data_io.Coord import Coord, CoordList from cis.data_io.ungridded_data import Metadata from cis.time_util import convert_sec_since_to_std_time from os.path import basename lat_all = [] lon_all = [] time_all = [] for fname in self.filenames: var_name = self.gdal_variable_name(fname, "Optical_Depth_055") if self.grid_path: granule = basename(fname).split(".")[2] lat_data, lon_data = self._read_grid_centres(granule) else: lat_data, lon_data = self._calculate_grid_centres(var_name) time_data = self._calculate_grid_time(var_name, lat_data, lon_data) # Workaround files containing only one day sh = (-1, ) + lat_data.shape time_data = time_data.reshape(sh) keep = np.logical_not(self._read_qcmask(fname)).reshape(sh) for time_slice, keep_slice in zip(time_data, keep): lat_all.extend(lat_data[keep_slice]) lon_all.extend(lon_data[keep_slice]) time_all.extend(time_slice[keep_slice]) if len(lat_all) == 0: raise NotImplementedError("It's empty!") lat = Coord( np.ma.array(lat_all), Metadata(name="lat", standard_name="latitude", units="degrees", range=(-90., 90.)), "Y") lat.update_shape() lon = Coord( np.ma.array(lon_all), Metadata(name="lon", standard_name="longitude", units="degrees", range=(-180., 180.)), "X") lon.update_shape() time = Coord( np.ma.array(time_all), Metadata(name="time", standard_name="time", units="Seconds since 1993-1-1 00:00:00.0 0"), "T") time.convert_TAI_time_to_std_time(MODIS_REFERENCE_TIME) time.update_shape() # Set the QC mask as we now know how many points we have self._qcmask = np.full(lat.shape, False) return CoordList([lat, lon, time])
def _create_coord_list(self, filenames): from cis.data_io.netcdf import read_many_files, get_metadata from cis.data_io.Coord import Coord import datetime # FIXME: when reading an existing file variables might be "latitude", "longitude" variables = ["lat", "lon", "time"] logging.info("Listing coordinates: " + str(variables)) data = read_many_files(filenames, variables, dim="pixel_number") coords = CoordList() coords.append(Coord(data["lon"], get_metadata(data["lon"]), "X")) coords.append(Coord(data["lat"], get_metadata(data["lat"]), "Y")) time_coord = Coord(data["time"], get_metadata(data["time"]), "T") time_coord.convert_TAI_time_to_std_time(datetime.datetime(1970, 1, 1)) coords.append(time_coord) return coords
def _create_coord_list(self, filenames, variable=None): import datetime as dt variables = ['Latitude', 'Longitude', 'Scan_Start_Time'] logging.info("Listing coordinates: " + str(variables)) sdata, vdata = hdf.read(filenames, variables) apply_interpolation = False if variable is not None: scale = self.__get_data_scale(filenames[0], variable) apply_interpolation = True if scale is "1km" else False lat = sdata['Latitude'] sd_lat = hdf.read_data(lat, _get_MODIS_SDS_data) lat_data = self.__field_interpolate( sd_lat) if apply_interpolation else sd_lat lat_metadata = hdf.read_metadata(lat, "SD") lat_coord = Coord(lat_data, lat_metadata, 'Y') lon = sdata['Longitude'] if apply_interpolation: lon_data = self.__field_interpolate( hdf.read_data(lon, _get_MODIS_SDS_data)) else: lon_data = hdf.read_data(lon, _get_MODIS_SDS_data) lon_metadata = hdf.read_metadata(lon, "SD") lon_coord = Coord(lon_data, lon_metadata, 'X') time = sdata['Scan_Start_Time'] time_metadata = hdf.read_metadata(time, "SD") # Ensure the standard name is set time_metadata.standard_name = 'time' time_coord = Coord(time, time_metadata, "T", _get_MODIS_SDS_data) time_coord.convert_TAI_time_to_std_time( dt.datetime(1993, 1, 1, 0, 0, 0)) return CoordList([lat_coord, lon_coord, time_coord])
def _create_coord_list(self, filenames, variable=None): import datetime as dt variables = ['Latitude', 'Longitude', 'Scan_Start_Time'] logging.info("Listing coordinates: " + str(variables)) sdata, vdata = hdf.read(filenames, variables) self.apply_interpolation = False if variable is not None: scale = self.__get_data_scale(filenames[0], variable) self.apply_interpolation = scale == "1km" lat = sdata['Latitude'] lat_data = hdf.read_data(lat, _get_MODIS_SDS_data) lon = sdata['Longitude'] lon_data = hdf.read_data(lon, _get_MODIS_SDS_data) if self.apply_interpolation: lon_data, lat_data = modis5kmto1km(lon_data[:], lat_data[:]) lat_metadata = hdf.read_metadata(lat, "SD") lat_coord = Coord(lat_data, lat_metadata, 'Y') lon_metadata = hdf.read_metadata(lon, "SD") lon_coord = Coord(lon_data, lon_metadata, 'X') time = sdata['Scan_Start_Time'] time_metadata = hdf.read_metadata(time, "SD") # Ensure the standard name is set time_metadata.standard_name = 'time' time_data = hdf.read_data(time, _get_MODIS_SDS_data) if self.apply_interpolation: time_data = np.repeat(np.repeat(time_data, 5, axis=0), 5, axis=1) time_coord = Coord(time_data, time_metadata, "T") time_coord.convert_TAI_time_to_std_time( dt.datetime(1993, 1, 1, 0, 0, 0)) return CoordList([lat_coord, lon_coord, time_coord])
def _create_coord_list(self, filenames, variable=None): import datetime as dt variables = ['Latitude', 'Longitude', 'Scan_Start_Time'] logging.info("Listing coordinates: " + str(variables)) sdata, vdata = hdf.read(filenames, variables) apply_interpolation = False if variable is not None: scale = self.__get_data_scale(filenames[0], variable) apply_interpolation = True if scale is "1km" else False lat = sdata['Latitude'] lat_data = hdf.read_data(lat, _get_MODIS_SDS_data) lon = sdata['Longitude'] lon_data = hdf.read_data(lon, _get_MODIS_SDS_data) if apply_interpolation: lon_data, lat_data = modis5kmto1km(lon_data[:], lat_data[:]) lat_metadata = hdf.read_metadata(lat, "SD") lat_coord = Coord(lat_data, lat_metadata, 'Y') lon_metadata = hdf.read_metadata(lon, "SD") lon_coord = Coord(lon_data, lon_metadata, 'X') time = sdata['Scan_Start_Time'] time_metadata = hdf.read_metadata(time, "SD") # Ensure the standard name is set time_metadata.standard_name = 'time' time_data = hdf.read_data(time, _get_MODIS_SDS_data) time_data = np.repeat(np.repeat(time_data, 5, axis=0), 5, axis=1) time_coord = Coord(time_data, time_metadata, "T") time_coord.convert_TAI_time_to_std_time(dt.datetime(1993, 1, 1, 0, 0, 0)) return CoordList([lat_coord, lon_coord, time_coord])
def _create_coord_list(self): """Read data coordinates into CIS object""" from cis.data_io.Coord import Coord, CoordList from reame.utils import hdf_read lon_data, lon_metadata = hdf_read(self.filenames, "Longitude") lon = Coord(lon_data, lon_metadata, "X") lon.update_shape() lon.update_range() lat_data, lat_metadata = hdf_read(self.filenames, "Latitude") lat = Coord(lat_data, lat_metadata, "Y") lat.update_shape() lat.update_range() time_data, time_metadata = hdf_read(self.filenames, "Scan_Start_Time") # Ensure the standard name is set time_metadata.standard_name = "time" time = Coord(time_data, time_metadata, "T") time.convert_TAI_time_to_std_time(MODIS_REFERENCE_TIME) time.update_shape() time.update_range() return CoordList([lat, lon, time])