ewatercycle.util
Utility functions for the eWaterCycle package.
Module Contents
- ewatercycle.util.find_closest_point(grid_longitudes: collections.abc.Iterable[float], grid_latitudes: collections.abc.Iterable[float], point_longitude: float, point_latitude: float) tuple[int, int]
Find closest grid cell to a point based on Geographical distances.
- Parameters:
grid_longitudes – 1d array of model grid longitudes in degrees
grid_latitudes – 1d array of model grid latitudes in degrees
point_longitude – longitude in degrees of target coordinate
point_latitude – latitude in degrees of target coordinate
- Returns:
Tuple with first index of closest grid point in the original longitude array and second the index of closest grid point in the original latitude array.
- ewatercycle.util.geographical_distances(point_longitude: float, point_latitude: float, lon_vectors: numpy.ndarray, lat_vectors: numpy.ndarray, radius=6373.0) numpy.ndarray
Calculate geographical distances.
It uses Spherical Earth projected to a plane formula: https://en.wikipedia.org/wiki/Geographical_distance
- Parameters:
point_longitude – longitude in degrees of target coordinate
point_latitude – latitude in degrees of target coordinate
lon_vectors – 1d array of longitudes in degrees
lat_vectors – 1d array of latitudes in degrees
radius – Radius of a sphere in km. Default is Earths approximate radius.
- Returns:
Array of geographical distance of point to all vector members.
- ewatercycle.util.get_time(time_iso: str) datetime.datetime
Return a datetime in UTC.
Convert a date string in ISO format to a datetime and check if it is in UTC.
- ewatercycle.util.get_extents(shapefile: Any, pad=0) dict[str, float]
Get lat/lon extents from shapefile and add padding.
- Parameters:
shapefile – Path to shapfile
pad – Optional padding
- Returns:
Dict with start_longitude, start_latitude, end_longitude, end_latitude
- ewatercycle.util.fit_extents_to_grid(extents, step=0.1, offset=0.05, ndigits=2) dict[str, float]
Get lat/lon extents fitted to a grid.
- Parameters:
extents – Dict with start_longitude, start_latitude, end_longitude, end_latitude
step – Distance between to grid cells
offset – Offset to pad with after rounding extent to step.
ndigits – Number of digits to return
- Returns:
Dict with start_longitude, start_latitude, end_longitude, end_latitude
- ewatercycle.util.merge_esvmaltool_datasets(datasets: list[xarray.Dataset]) xarray.Dataset
Merge the separate output datasets from an ESMValTool recipe into one dataset.
ESMValTool has bad management of floating point precision in coordinates. Every CMORized file can have different rounding errors in the values of its coordinates. This will prevent easy merging with xarray’s open_mfdataset, or combine_by_coords. By rounding to the 7th decimal place, more than sufficient precision is preserved (‘waldo-on-a-page’ precision)[1], while solving the floating point inprecision issue.
References
[1] Randall Monroe, 2019. xkcd: Coordinate Precision. https://xkcd.com/2170/
- ewatercycle.util.to_absolute_path(input_path: str | pathlib.Path, parent: pathlib.Path | None = None, must_exist: bool = False, must_be_in_parent=True) pathlib.Path
Parse input string as
pathlib.Path
object.- Parameters:
input_path – Input string path that can be a relative or absolute path.
parent – Optional parent path of the input path
must_exist – Optional argument to check if the input path exists.
must_be_in_parent – Optional argument to check if the input path is subpath of parent path
- Returns:
The input path that is an absolute path and a
pathlib.Path
object.
- ewatercycle.util.reindex(source_file: str, var_name: str, mask_file: str, target_file: str)
Conform the input file onto the indexes of a mask file.
Writing the results to the target file.
- Parameters:
source_file – Input string path of the file that needs to be reindexed.
var_name – Variable name in the source_file dataset.
mask_file – Input string path of the mask file.
target_file – Output string path of the file that is reindexed.
- class ewatercycle.util.CaseConfigParser(defaults=None, dict_type=_default_dict, allow_no_value=False, *, delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=DEFAULTSECT, interpolation=_UNSET, converters=_UNSET)
Bases:
configparser.ConfigParser
Case sensitive config parser.
See https://stackoverflow.com/questions/1611799/preserve-case-in-configparser
- optionxform(optionstr)
Do not convert option names to lowercase.