Exemplo n.º 1
0
    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])
Exemplo n.º 2
0
    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])
Exemplo n.º 3
0
    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])
Exemplo n.º 4
0
    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])
Exemplo n.º 5
0
    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])