Source code for polar2grid.writers.cf

#!/usr/bin/env python3
# encoding: utf-8
# Copyright (C) 2022 Space Science and Engineering Center (SSEC),
#  University of Wisconsin-Madison.
#
#     This program 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.
#
#     This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
#
# This file is part of the polar2grid software package. Polar2grid takes
# satellite observation data, remaps it, and writes it to a file format for
# input into another program.
# Documentation: http://www.ssec.wisc.edu/software/polar2grid/
"""The CF writer puts gridded image data into a `CF-compliant` NetCDF file.

All datasets to be saved must have the same projection coordinates ``x`` and ``y``. If a scene holds datasets with
different grids, the CF compliant workaround is to save the datasets to separate files.

"""

import json
import logging

LOG = logging.getLogger(__name__)

# reader_name -> filename
DEFAULT_OUTPUT_FILENAMES = {
    "polar2grid": {
        None: "{platform_name}_{sensor}_{start_time:%Y%m%d_%H%M%S}.nc",
    },
    "geo2grid": {
        None: "{platform_name}_{sensor}_{start_time:%Y%m%d_%H%M%S}.nc",
    },
}


[docs] def add_writer_argument_groups(parser, group=None): if group is None: group = parser.add_argument_group(title="cf Writer") group.add_argument( "--output-filename", dest="filename", help="Custom file pattern to save dataset to", ) group.add_argument( "--groups", type=json.loads, help="Group datasets according to the given assignment: `{'group_name': ['dataset1', 'dataset2', ...]}`.", ) group.add_argument( "--header-attrs", type=json.loads, help="Global attributes to be included.", ) group.add_argument( "--engine", default="netcdf4", help="Engine for writing NetCDF file \ (options: '" "netcdf4" "', '" "scipy" "', '" "h5netcdf" "').", ) group.add_argument("--epoch-units", dest="epoch", help="Reference unit for the netCDF time coordinates.") group.add_argument( "--exclude-attrs", nargs="+", help="List of dataset attributes to be excluded", ) group.add_argument( "--include-lonlats", action="store_true", help="Include latitude and longitude coordinates.", ) group.add_argument("--pretty", action="store_true", help="Do not prefix coordinate with corresponding dataset name") group.add_argument( "--include-orig-name", action="store_true", help="Include the original dataset name as a variable attribute in the final netcdf.", ) group.add_argument( "--flatten-attrs", action="store_true", help="If invoked, flatten dict-type attributes", ) group.add_argument( "--numeric-name-prefix", default="CHANNEL_", help="Prefix added to each variable. For name starting with a digit.Use '' or None to leave this out..", ) return group, None