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 cis_standard_time_unit as cstu # These implement a lot of what is necessary, but aren't in CIS style from acp_utils import rolling_window from orbit import ATSR lat_data = [] lon_data = [] time_data = [] for fname in self.filenames: prod = ATSR(fname) lat_data.append(prod.lat) lon_data.append(prod.lon) time_data.append(prod.get_time()) # TODO: Properly define metadata lat_meta = Metadata(standard_name="latitude", units="degrees") lon_meta = Metadata(standard_name="longitude", units="degrees") time_meta = Metadata(standard_name="time", units=cstu) lat = Coord(concatenate(lat_data), lat_meta, "Y") lat.update_shape() lat.update_range() lon = Coord(concatenate(lon_data), lon_meta, "Y") lon.update_shape() lon.update_range() time = Coord(concatenate(time_data), time_meta, "T") time.update_shape() time.update_range() return CoordList([lat, lon, time])
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_bounded_coord_list(self): from cis.data_io.Coord import Coord, CoordList from cis.data_io.ungridded_data import Metadata from cis.time_util import cis_standard_time_unit as cstu # These implement a lot of what is necessary, but aren't in CIS style from acp_utils import rolling_window from orbit import MODIS lat_data = [] lat_bounds = [] lon_data = [] lon_bounds = [] time_data = [] time_bounds = [] for fname in self.filenames: prod = MODIS(fname) lat_data.append(prod.lat) lon_data.append(prod.lon) lat_c = rolling_window(prod.lat_corner, (2, 2)) lat_bounds.append(lat_c.reshape(prod.shape + (4, ))) lon_c = rolling_window(prod.lon_corner, (2, 2)) lon_bounds.append(lon_c.reshape(prod.shape + (4, ))) t = prod.get_time() time_data.append(t) b = np.stack([t, np.roll(t, -1)], axis=2) b[-1, :, 1] = 2 * t[-1, :] - t[-2, :] time_bounds.append(b) # TODO: Properly define metadata lat_meta = Metadata(standard_name="latitude", units="degrees") lon_meta = Metadata(standard_name="longitude", units="degrees") time_meta = Metadata(standard_name="time", units=cstu) lat = Coord(concatenate(lat_data), lat_meta, "Y") lat.update_shape() lat.update_range() lat.bounds = concatenate(lat_bounds).reshape(lat.shape + (4, )) lat.bounds[..., 2:4] = lat.bounds[..., [3, 2]] lon = Coord(concatenate(lon_data), lon_meta, "Y") lon.update_shape() lon.update_range() lon.bounds = concatenate(lon_bounds).reshape(lon.shape + (4, )) lon.bounds[..., 2:4] = lon.bounds[..., [3, 2]] time = Coord(concatenate(time_data), time_meta, "T") time.update_shape() time.update_range() time.bounds = concatenate(time_bounds) return CoordList([lat, lon, time])
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])