Esempio n. 1
0
File: MODIS.py Progetto: cpaulik/cis
    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])
Esempio 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])
Esempio 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])
Esempio n. 4
0
File: CCI.py Progetto: cpaulik/cis
    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
Esempio n. 5
0
    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])
Esempio n. 6
0
    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])
Esempio n. 7
0
    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])
Esempio n. 8
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])