From ca66f488e90447e4564a97fa273fd85b48cd8ae0 Mon Sep 17 00:00:00 2001 From: Carsten Hinz <c.hinz@fz-juelich.de> Date: Tue, 4 Jun 2024 09:50:46 +0200 Subject: [PATCH] rename of parameter adopted test to use function of Grid class --- tests/coordinates.py | 41 ++++++++++++++++------------------------- toargridding/grids.py | 9 +++++---- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/tests/coordinates.py b/tests/coordinates.py index 9781cf1..86a3ec6 100644 --- a/tests/coordinates.py +++ b/tests/coordinates.py @@ -4,36 +4,27 @@ from toargridding.variables import Coordinate from toargridding.metadata import Coordinates import numpy as np from pandas import Series +from toargridding.grids import RegularGrid +import matplotlib.pyplot as plt -def coord_to_index(coord : Series, x0_axis : float, d_axis : float, binWrap:int=None) -> np.array: - """converts a coordinate into a bin index on one axis +print("Script for visual inspection of coordinate results for longitude and latitude") - Parameters: - ---------- - coord: - coordinate for conversion - x0_axis: - offset of the axis - d_axis: - resolution of the axis - """ - binIDs = (np.ceil((coord / d_axis) - 0.5) - x0_axis / d_axis).astype(int) - binIDs[binIDs >= binWrap] -=binWrap - return binIDs +lon = Coordinate.from_resolution(Coordinates.longitude, 1,-180,180, True) +print(lon) +print("\n") -print("Script for visual inspection of coordinate results for longitude and latitude") +lat = Coordinate.from_resolution(Coordinates.latitude, 1.9,-90,90, False) +print(lat) -lon = Coordinate.from_resolution(Coordinates.longitude, 2.5,-180,180, True) -print(lon) +testGrid = RegularGrid(lat_resolution=1.9, lon_resolution=2.5) -testData = [x+0.1 for x in range(-180,180)] -testBins = coord_to_index(Series(testData), lon.min, lon.step, len(lon.data) ) -print(testBins) -print(len(lon.data)) -print(lon.data[144]) +testData = [x+0.1 for x in np.arange(-180,181, .5)] +testBins = testGrid.coord_to_index(Series(testData), lon.min, lon.step, len(lon.data) ) + +for val, bin in zip(testData, testBins): + print(val, "->", bin) -print("\n") -#lat = Coordinate.from_resolution(Coordinates.latitude, 1.9,-90,90, False) -#print(lat) +plt.plot(testData, testBins) +plt.show() \ No newline at end of file diff --git a/toargridding/grids.py b/toargridding/grids.py index cfdd462..fc32030 100644 --- a/toargridding/grids.py +++ b/toargridding/grids.py @@ -278,7 +278,7 @@ class RegularGrid(GridDefinition): return pd.Series(id_i, index=id_x.index) - def coord_to_index(self, coord : pd.Series, x0_axis : float, d_axis : float, max4binWrap : int=None) -> np.array: + def coord_to_index(self, coord : pd.Series, x0_axis : float, d_axis : float, maxBin4Wrap : int=None) -> np.array: """converts a coordinate into a bin index on one axis Parameters: @@ -289,12 +289,13 @@ class RegularGrid(GridDefinition): offset of the axis d_axis: resolution of the axis - max4binWrap: + maxBin4Wrap: this is the maximum bin number. If it is set, thw bin numbers wrap around, like for the latitude """ ids = (np.ceil((coord / d_axis) - 0.5) - x0_axis / d_axis).astype(int) - if max4binWrap is not None: - ids[ids >= max4binWrap] %= max4binWrap + if maxBin4Wrap is not None: + ids[ids >= maxBin4Wrap] %= maxBin4Wrap + ids[ids < 0] += maxBin4Wrap return ids def get_empty_grid(self, time: Variable, metadata: Metadata) -> xr.Dataset: # TODO make CF-compliant => docs -- GitLab