#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2021 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/>.
"""Demo data download for SEVIRI HRIT files."""
import logging
import os.path
from satpy import config
from satpy.demo.utils import download_url
logger = logging.getLogger(__name__)
ZENODO_BASE_URL = "https://zenodo.org/api/files/dcc5ab29-d8a3-4fb5-ab2b-adc405d18c23/"
FILENAME = "H-000-MSG4__-MSG4________-{channel:_<9s}-{segment:_<9s}-201802281500-__"
[docs]
def download_seviri_hrit_20180228_1500(base_dir=None, subset=None):
"""Download the SEVIRI HRIT files for 2018-02-28T15:00.
*subset* is a dictionary with the channels as keys and granules to download
as values, eg::
{"HRV": [1, 2, 3], "IR_108": [1, 2], "EPI": None}
"""
files = generate_subset_of_filenames(subset)
base_dir = base_dir or config.get("demo_data_dir", ".")
subdir = os.path.join(base_dir, "seviri_hrit", "20180228_1500")
os.makedirs(subdir, exist_ok=True)
targets = []
for the_file in files:
target = os.path.join(subdir, the_file)
targets.append(target)
if os.path.isfile(target):
continue
download_url(ZENODO_BASE_URL + the_file, target)
return targets
[docs]
def generate_subset_of_filenames(subset=None, base_dir=""):
"""Generate SEVIRI HRIT filenames."""
if subset is None:
subset = _create_full_set()
pattern = os.path.join(base_dir, FILENAME)
files = []
for channel, segments in subset.items():
new_files = _generate_filenames(pattern, channel, segments)
files.extend(new_files)
return files
[docs]
def _generate_filenames(pattern, channel, segments):
"""Generate the filenames for *channel* and *segments*."""
if channel in ["PRO", "EPI"]:
new_files = [pattern.format(channel="", segment=channel)]
else:
new_files = (pattern.format(channel=channel, segment=f"{segment:06d}") for segment in segments)
return new_files
[docs]
def _create_full_set():
"""Create the full set dictionary."""
subset = {"HRV": range(1, 25),
"EPI": None,
"PRO": None}
channels = ["IR_016", "IR_039", "IR_087", "IR_097", "IR_108", "IR_120", "IR_134",
"VIS006", "VIS008",
"WV_062", "WV_073"]
for channel in channels:
subset[channel] = range(1, 9)
return subset