Source code for satpy.readers.scatsat1_l2b

# -*- coding: utf-8 -*-
# Copyright (c) 2017 Satpy developers
#
# This file is part of satpy.
#
# satpy is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# satpy is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# satpy.  If not, see <http://www.gnu.org/licenses/>.
"""ScatSat-1 L2B Reader, distributed by Eumetsat in HDF5 format
"""

from datetime import datetime
import h5py

from satpy.dataset import Dataset
from satpy.readers.file_handlers import BaseFileHandler


[docs]class SCATSAT1L2BFileHandler(BaseFileHandler): def __init__(self, filename, filename_info, filetype_info): super(SCATSAT1L2BFileHandler, self).__init__(filename, filename_info, filetype_info) self.h5f = h5py.File(self.filename, "r") h5data = self.h5f['science_data'] self.filename_info['start_time'] = datetime.strptime(h5data.attrs['Range Beginning Date'], '%Y-%jT%H:%M:%S.%f') self.filename_info['end_time'] = datetime.strptime(h5data.attrs['Range Ending Date'], '%Y-%jT%H:%M:%S.%f') self.lons = None self.lats = None self.wind_speed_scale = float(h5data.attrs['Wind Speed Selection Scale']) self.wind_direction_scale = float(h5data.attrs['Wind Direction Selection Scale']) self.latitude_scale = float(h5data.attrs['Latitude Scale']) self.longitude_scale = float(h5data.attrs['Longitude Scale'])
[docs] def get_dataset(self, key, info): h5data = self.h5f['science_data'] stdname = info.get('standard_name') if stdname in ['latitude', 'longitude']: if self.lons is None or self.lats is None: self.lons = h5data['Longitude'][:]*self.longitude_scale self.lats = h5data['Latitude'][:]*self.latitude_scale if info['standard_name'] == 'longitude': return Dataset(self.lons, id=key, **info) else: return Dataset(self.lats, id=key, **info) if stdname in ['wind_speed']: windspeed = h5data['Wind_speed_selection'][:, :] * self.wind_speed_scale return Dataset(windspeed, id=key, **info) if stdname in ['wind_direction']: wind_direction = h5data['Wind_direction_selection'][:, :] * self.wind_direction_scale return Dataset(wind_direction, id=key, **info)