Esempio n. 1
0
 def test_dec10216(self):
     res = dec10216(np.array([255, 255, 255, 255, 255], dtype=np.uint8))
     exp = (np.ones((4, )) * 1023).astype(np.uint16)
     self.assertTrue(np.all(res == exp))
     res = dec10216(np.array([1, 1, 1, 1, 1], dtype=np.uint8))
     exp = np.array([4, 16, 64, 257], dtype=np.uint16)
     self.assertTrue(np.all(res == exp))
Esempio n. 2
0
    def get_dataset(self, dsid, info,
                    xslice=slice(None), yslice=slice(None)):

        if dsid.name not in self.mda['channel_list']:
            raise KeyError('Channel % s not available in the file' % dsid.name)
        elif dsid.name not in ['HRV']:
            shape = (self.mda['number_of_lines'], self.mda['number_of_columns'])

            # Check if there is only 1 channel in the list as a change
            # is needed in the arrray assignment ie channl id is not present
            if len(self.mda['channel_list']) == 1:
                raw = self.dask_array['visir']['line_data']
            else:
                i = self.mda['channel_list'].index(dsid.name)
                raw = self.dask_array['visir']['line_data'][:, i, :]

            data = dec10216(raw.flatten())
            data = da.flipud(da.fliplr((data.reshape(shape))))

        else:
            shape = (self.mda['hrv_number_of_lines'], self.mda['hrv_number_of_columns'])

            raw2 = self.dask_array['hrv']['line_data'][:, 2, :]
            raw1 = self.dask_array['hrv']['line_data'][:, 1, :]
            raw0 = self.dask_array['hrv']['line_data'][:, 0, :]

            shape_layer = (self.mda['number_of_lines'], self.mda['hrv_number_of_columns'])
            data2 = dec10216(raw2.flatten())
            data2 = da.flipud(da.fliplr((data2.reshape(shape_layer))))
            data1 = dec10216(raw1.flatten())
            data1 = da.flipud(da.fliplr((data1.reshape(shape_layer))))
            data0 = dec10216(raw0.flatten())
            data0 = da.flipud(da.fliplr((data0.reshape(shape_layer))))

            data = np.zeros(shape)
            idx = range(0, shape[0], 3)
            data[idx, :] = data2
            idx = range(1, shape[0], 3)
            data[idx, :] = data1
            idx = range(2, shape[0], 3)
            data[idx, :] = data0

        xarr = xr.DataArray(data, dims=['y', 'x']).where(data != 0).astype(np.float32)

        if xarr is None:
            dataset = None
        else:
            dataset = self.calibrate(xarr, dsid)
            dataset.attrs['units'] = info['units']
            dataset.attrs['wavelength'] = info['wavelength']
            dataset.attrs['standard_name'] = info['standard_name']
            dataset.attrs['platform_name'] = self.mda['platform_name']
            dataset.attrs['sensor'] = 'seviri'
            dataset.attrs['orbital_parameters'] = {
                'projection_longitude': self.mda['projection_parameters']['ssp_longitude'],
                'projection_latitude': 0.,
                'projection_altitude': self.mda['projection_parameters']['h']}

        return dataset
Esempio n. 3
0
 def test_dec10216(self):
     """Test the dec10216 function."""
     res = dec10216(np.array([255, 255, 255, 255, 255], dtype=np.uint8))
     exp = (np.ones((4, )) * 1023).astype(np.uint16)
     np.testing.assert_equal(res, exp)
     res = dec10216(np.array([1, 1, 1, 1, 1], dtype=np.uint8))
     exp = np.array([4,  16,  64, 257], dtype=np.uint16)
     np.testing.assert_equal(res, exp)
Esempio n. 4
0
 def _get_visir_channel(self, dataset_id):
     shape = (self.mda['number_of_lines'], self.mda['number_of_columns'])
     # Check if there is only 1 channel in the list as a change
     # is needed in the arrray assignment ie channl id is not present
     if len(self.mda['channel_list']) == 1:
         raw = self.dask_array['visir']['line_data']
     else:
         i = self.mda['channel_list'].index(dataset_id['name'])
         raw = self.dask_array['visir']['line_data'][:, i, :]
     data = dec10216(raw.flatten())
     data = data.reshape(shape)
     return data
Esempio n. 5
0
    def _get_hrv_channel(self):
        shape = (self.mda['hrv_number_of_lines'],
                 self.mda['hrv_number_of_columns'])
        shape_layer = (self.mda['number_of_lines'],
                       self.mda['hrv_number_of_columns'])

        data_list = []
        for i in range(3):
            raw = self.dask_array['hrv']['line_data'][:, i, :]
            data = dec10216(raw.flatten())
            data = data.reshape(shape_layer)
            data_list.append(data)

        return np.stack(data_list, axis=1).reshape(shape)
Esempio n. 6
0
 def read_band(self, key, info):
     """Read the data."""
     shape = int(np.ceil(self.mda['data_field_length'] / 8.))
     if self.mda['number_of_bits_per_pixel'] == 16:
         dtype = '>u2'
         shape //= 2
     elif self.mda['number_of_bits_per_pixel'] in [8, 10]:
         dtype = np.uint8
     shape = (shape, )
     data = self._read_or_memmap_data(shape, dtype)
     data = da.from_array(data, chunks=shape[0])
     if self.mda['number_of_bits_per_pixel'] == 10:
         data = dec10216(data)
     data = data.reshape((self.mda['number_of_lines'],
                          self.mda['number_of_columns']))
     return data
Esempio n. 7
0
 def read_band(self, key, info):
     """Read the data."""
     shape = int(np.ceil(self.mda['data_field_length'] / 8.))
     if self.mda['number_of_bits_per_pixel'] == 16:
         dtype = '>u2'
         shape //= 2
     elif self.mda['number_of_bits_per_pixel'] in [8, 10]:
         dtype = np.uint8
     shape = (shape, )
     # For reading the image data, unzip_context is faster than generic_open
     with utils.unzip_context(self.filename) as fn:
         data = np.memmap(fn,
                          mode='r',
                          offset=self.mda['total_header_length'],
                          dtype=dtype,
                          shape=shape)
         data = da.from_array(data, chunks=shape[0])
     if self.mda['number_of_bits_per_pixel'] == 10:
         data = dec10216(data)
     data = data.reshape(
         (self.mda['number_of_lines'], self.mda['number_of_columns']))
     return data
Esempio n. 8
0
    def get_dataset(self, dataset_id, dataset_info):
        """Get the dataset."""
        if dataset_id['name'] not in self.mda['channel_list']:
            raise KeyError('Channel % s not available in the file' %
                           dataset_id['name'])
        elif dataset_id['name'] not in ['HRV']:
            shape = (self.mda['number_of_lines'],
                     self.mda['number_of_columns'])

            # Check if there is only 1 channel in the list as a change
            # is needed in the arrray assignment ie channl id is not present
            if len(self.mda['channel_list']) == 1:
                raw = self.dask_array['visir']['line_data']
            else:
                i = self.mda['channel_list'].index(dataset_id['name'])
                raw = self.dask_array['visir']['line_data'][:, i, :]

            data = dec10216(raw.flatten())
            data = data.reshape(shape)

        else:
            shape = (self.mda['hrv_number_of_lines'],
                     self.mda['hrv_number_of_columns'])

            raw2 = self.dask_array['hrv']['line_data'][:, 2, :]
            raw1 = self.dask_array['hrv']['line_data'][:, 1, :]
            raw0 = self.dask_array['hrv']['line_data'][:, 0, :]

            shape_layer = (self.mda['number_of_lines'],
                           self.mda['hrv_number_of_columns'])
            data2 = dec10216(raw2.flatten())
            data2 = data2.reshape(shape_layer)
            data1 = dec10216(raw1.flatten())
            data1 = data1.reshape(shape_layer)
            data0 = dec10216(raw0.flatten())
            data0 = data0.reshape(shape_layer)

            data = np.stack((data0, data1, data2), axis=1).reshape(shape)

        xarr = xr.DataArray(data,
                            dims=['y',
                                  'x']).where(data != 0).astype(np.float32)

        if xarr is None:
            dataset = None
        else:
            dataset = self.calibrate(xarr, dataset_id)
            dataset.attrs['units'] = dataset_info['units']
            dataset.attrs['wavelength'] = dataset_info['wavelength']
            dataset.attrs['standard_name'] = dataset_info['standard_name']
            dataset.attrs['platform_name'] = self.mda['platform_name']
            dataset.attrs['sensor'] = 'seviri'
            dataset.attrs['orbital_parameters'] = {
                'projection_longitude':
                self.mda['projection_parameters']['ssp_longitude'],
                'projection_latitude':
                0.,
                'projection_altitude':
                self.mda['projection_parameters']['h']
            }

        return dataset