From e04092db22acb69efdb148552ad086f776897cf1 Mon Sep 17 00:00:00 2001 From: oisin-m Date: Mon, 30 Mar 2026 15:52:30 +0200 Subject: [PATCH 1/3] feat: remove station mapping functionality --- .github/workflows/ci.yml | 7 - .readthedocs.yaml | 19 -- README.md | 10 +- docs/index.md | 5 - docs/installation.md | 17 -- docs/requirements.txt | 1 - docs/station_mapping.md | 216 ------------------ .../station_mapping_histogram.jpg | Bin 21731 -> 0 bytes .../station_mapping_search_algo.svg | 1 - .../station_mapping_visualisation.jpg | Bin 141832 -> 0 bytes docs/usage.md | 23 -- hat/cli.py | 37 --- hat/station_mapping/mapper.py | 121 ---------- hat/station_mapping/metrics.py | 67 ------ hat/station_mapping/station_mapping.py | 125 ---------- mkdocs.yml | 11 - notebooks/workflow/station_mapping.ipynb | 86 ------- pyproject.toml | 10 +- tests/__init__.py | 0 tests/test_imports.py | 2 - 20 files changed, 5 insertions(+), 753 deletions(-) delete mode 100644 .readthedocs.yaml delete mode 100644 docs/index.md delete mode 100644 docs/installation.md delete mode 100644 docs/requirements.txt delete mode 100644 docs/station_mapping.md delete mode 100644 docs/station_mapping/station_mapping_histogram.jpg delete mode 100644 docs/station_mapping/station_mapping_search_algo.svg delete mode 100644 docs/station_mapping/station_mapping_visualisation.jpg delete mode 100644 docs/usage.md delete mode 100644 hat/cli.py delete mode 100644 hat/station_mapping/mapper.py delete mode 100644 hat/station_mapping/metrics.py delete mode 100644 hat/station_mapping/station_mapping.py delete mode 100644 mkdocs.yml delete mode 100644 notebooks/workflow/station_mapping.ipynb delete mode 100644 tests/__init__.py delete mode 100644 tests/test_imports.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f6af53..63e6430 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,13 +16,6 @@ jobs: - run: ruff check # check linting violations - run: ruff format --check --exclude *.ipynb # check formatting - docs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - run: pip install -r docs/requirements.txt - - run: mkdocs build - setup_and_test: runs-on: ubuntu-latest steps: diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index c5587fb..0000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Read the Docs configuration file for MkDocs projects -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -# Set the version of Python and other tools you might need -build: - os: ubuntu-22.04 - tools: - python: "3.11" - -mkdocs: - configuration: mkdocs.yml - -# Optionally declare the Python requirements required to build your docs -python: - install: - - requirements: docs/requirements.txt diff --git a/README.md b/README.md index c3324f4..d359a31 100644 --- a/README.md +++ b/README.md @@ -16,22 +16,16 @@

- Installation - • - Documentation

> \[!IMPORTANT\] > This software is **Emerging** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). -The Hydrological Analysis Toolkit (HAT) is a software suite for hydrologists working with simulated and observed river discharge. HAT performs data analysis on hydrological datasets, with its main features being: -- mapping station locations into hydrological model grids -- interactive visualizations +The Hydrological Analysis Toolkit (HAT) is a toolkit for interactive visualizations for hydrological applications. > [!NOTE] -> The station extraction and hydrostats functionality formerly in HAT now live in [ecmwf/hyve](https://github.com/ecmwf/hyve). +> The station extraction and hydrostats functionality formerly in HAT now live in [ecmwf/hyve](https://github.com/ecmwf/hyve), and the station mapping functionality now lives in [ecmwf/hydro-station-mapping](https://github.com/ecmwf/hydro-station-mapping). ### Installation diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 3c3c736..0000000 --- a/docs/index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Welcome to HAT - -The Hydrological Analysis Toolkit (HAT) is a software suite for hydrologists working with simulated and observed river discharge. HAT performs data analysis on hydrological datasets, with its main feature being: - -- mapping station locations into hydrological model grids diff --git a/docs/installation.md b/docs/installation.md deleted file mode 100644 index 030b5f6..0000000 --- a/docs/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -### Installation - -Clone source code repository - - git clone https://github.com/ecmwf/hat.git - cd hat - -Create conda python environment - - # If on HPC.. - # module load conda - conda create -n hat python=3.10 - conda activate hat - -Installation of required dependencies - - pip install . diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 016bb16..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -mkdocs diff --git a/docs/station_mapping.md b/docs/station_mapping.md deleted file mode 100644 index b5564c3..0000000 --- a/docs/station_mapping.md +++ /dev/null @@ -1,216 +0,0 @@ - -`station_mapping` documentation -=============================== - -The `station_mapping` library is designed for mapping the location of hydrological station data onto the optimum location of a hydrological model grid (netcdf). -This tool is available as both [command line](#station-mapping-with-command-line) and [Python API](#station-mapping-as-python-script-eg-called-within-jupyter-notebook-or-python-file) - -The optimum grid cell location is searched through optimising the upstream area error and the cell distance(s) from the station nearest grid cells. In this tool, users can define their acceptable area difference/ error using the parameter `max_area_difference` (%) and the maximum cell radius parameter: `max_neighboring_cell` (number of cells) to search for this optimum grid. The tool can also be parameterised to ignore further searching of optimum cells when upstream area difference of a station nearest grid is below, i.e. when the uspteam area of the nearest cell to the station is already deemed acceptable by defining `min_area_diff`(%). - -For instance, refer to illustration example below, if the specified `max_area_difference` is 10%, then the optimum grid to be returned when specified `max_neighboring_cell` = 1 cell, is the one with 7% upstream area difference (blue). While if the `max_neighboring_cell` = 2 cell, then the cell with 5% upstream area difference will be returned as the optimum grid instead. - -illustration of optimum grid search algorithm - -In conclusion, the tool only searches for grid cell with optimal upstream area between the user defined `min_area_diff` and `max_area_diff` that are within the `max_neighboring_cell` radius from the station location. - - -How to use ------ -#### Station Mapping with Command Line -To use the `station_mapping` as command line, follow these steps: - -1. Prepare your data input: station data and grid data in the appropriate format. Station data should be in a CSV file, and grid data should be in a NetCDF file. - PLease ensure all lattitudes and longitude values in [ decimal degree format/ DD](https://en.wikipedia.org/wiki/Decimal_degrees). - -2. Create a [JSON configuration](https://github.com/ecmwf/hat/tree/main/notebooks/examples/station_mapping_config_example.json) file specifying the paths to your data files, column names, and other relevant parameters. - -3. Run the `station_mapping.py` script with the path to your configuration file: - -`./station_mapping.py path/to/your/config.json` - - -#### Station Mapping as python script, e.g. called within jupyter notebook or python file -1. Prepare your data input: station data and grid data in the appropriate format. Station data should be in a CSV file, and grid data should be in a NetCDF file. -Ensure that all the values of the lattitude and longitude in CSV files columns are in [ decimal degree format/ DD](https://en.wikipedia.org/wiki/Decimal_degrees) (NOT Degree Minute Seconds/ DMS). These affect both stations and manual mapping locations. - -2. Create a configuration dictionary - -``` -config = { - # Netcdf information - "upstream_area_file": "upArea.nc", #file path to netcdf of upstream area - - # Station Metadata CSV information - "csv_file": "outlets.csv", #file path to csv station metadata - "csv_lat_col": "StationLat", # column name for latitude (string) - "csv_lon_col": "StationLon", # column name for longitude (string) - "csv_station_name_col": "StationName", # column name for station (string) - "csv_ups_col": "DrainingArea.km2.Provider", # column name for metadata of upstream (string) - - # Mapping parameters (3x) - "max_neighboring_cells": 5, # Parameter 1: maximum radius to search for best cells (no. of cells) - "max_area_diff": 20, # Parameter 2: acceptable/ optimum upstream area difference (%) - "min_area_diff": 0, # Parameter 3: minimum upstream area difference (%) between nearest grid and the station metadata - - # manual mapping as reference for evaluation (optional) - "manual_lat_col": "LisfloodY", # column name for latitude of manually mapped station (string) - "manual_lon_col": "LisfloodX", # column name for longitude of manually mapped station (string) - "manual_area": "DrainingArea.km2.LDD", # column name for area of manually mapped station (string) - - # if Output directory is provided, it will save the geodataframe outputs to geojson and csv readable by GIS or jupyter interactive - # "out_directory": None # put none if you don't want to save the output - "out_directory": "output" -} -``` -3. Run the `station_mapping` function with the config dictionary input and store result as dataframe (df) -Since in the above example, the out_directory is not empty/ None, i.e. hence geojson and csv output of the station mapping tool will be saved in the specified directory. - -``` -# import station mapping -from hat.mapping.station_mapping import station_mapping -# call station_mapping function and apply on the created config dictionary -df = station_mapping(config) -``` - -Process Overview ----------------- - -* **Read and Validate Input Data**: Loads station metadata from the specified station metadata (CSV file) and upstream area grid data (NetCDF file), importing data, based on column name defined and the parameters in the configuration. -* **Nearest Grid Cell Search**: For each station, calculates the nearest grid cell based on latitude and longitude of each station. -* **Optimum Grid Cell Search**: Searches each neighboring cells at a +1 cell radius at a time until a specified maximum radius `max_neighboring_cells` is reached. At every +1 cell radius this searches for grid where its upstream area difference from the recorded station metadata is minimum, or until it reaches desired value of `max_area_diff` (%). When this minimum value of `max_area_diff` is reached, the search will be stopped and the particular cell location will be stored. It is also possible to ignore searching for optimum grid when the upstream area of nearest grid cell is already below or equal to `min_area_diff`. -* **Upstream Area and Distance Calculation**: For both nearest and optimum grids found for each station, upstream area is retrieved. Cell distance(s) from optimum grid to the stations grid (same as nearest grid) is calculated. -* **Manual Mapping Output** (Optional): If manual mapping data is provided, it will be stored to the result dataframe and later could be used as reference to compare automated mapping results to evaluate mapping performance. This can be done through evaluation module. -* **Save Results**: If an output directory is specified, saves the processed data as GeoJSON and CSV files for further analysis or visualization. Otherwise it only returns result as dataframe. - - -Outputs ------- - -The following elements (column) will be written as dataframe as the expected `station_mapping` output. -Note: `_lat` and `_lon` refer to the actual lattitude and longitude of the location, while `_lat_idx` and `_lon_idx` refer to the lat and lon grid ID. - -* Station data -`station_name`, `station_lat`, `station_lon`, `station_area` - -* Near grid data -`near_grid_lat_idx`, `near_grid_lon_idx`, `near_grid_lat`, `near_grid_lon`, `near_grid_area`, `near_grid_polygon` - -* Optimum grid from search routine -`optimum_grid_lat_idx`, `optimum_grid_lon_idx`, `optimum_grid_lat`, `optimum_grid_lon`, `optimum_grid_area`, `optimum_area_diff`, `optimum_distance_km`, `optimum_grid_polygon` - -* Manually mapped variable -`manual_lat`, `manual_lon`, `manual_lat_idx`, `manual_lon_idx`, `manual_area` - -* GIS compatble output files (optional) -if the "out_directory" in the `configuration` is specified, then the following files will be written in the directory: - - 1. `stations.geojson`: stations point vector in geojson (readable in GIS) - 2. `near_grid.geojson`: nearest grid vector (readable in GIS) - 3. `optimum_grid.geojson`: optimum grid vector (readable in GIS) - 4. `stations2grid_optimum`: polyline connecting each station location to the optimum grid's centroid (readable in GIS) - 5. `stations.csv`: the dataframe containing all the data column mentioned above in csv format. (readable in GIS/ spreadsheet) - - -Other Related Module --------------------- - -#### `evaluation` -An additional module is available to evaluate the performance of the station mapping, in particular the optimum grid cell found for each station. The common case for this evaluation is to compare the resulting optimum grid cells with the manually mapped station, based on their upstream area difference (%), and cell distance(s). - -* Main function: `def count_and_analyze_area_distance` - -* How to use: -``` -from hat.mapping.evaluation import count_and_analyze_area_distance # import library - -fig = count_and_analyze_area_distance(df, area_diff_limit, distance_limit, ref_name='manual', eval_name='optimum_grid', y_scale='log') -``` -* Parameters: - * `df`: dataframe resulted from running station_mapping tool - * `area_diff_limit`: margin of acceptable error or differece of upstream area (%) between the reference manual mapping and the evaluated optimum grid - * `distance_limit`: distance margin that defines the acceptable location distance between reference and the evaluated grid. E.g. distance = 0 means perfect mapping, where optimum grid and manual mapping locations are at the same cell. - * `ref_name` and `eval_name`: name of the reference and evaluated variable, the common case would be 'manual' for manual mapping as reference and `optimum_grid` as the evaluated optimum grids. - * `y_scale`: scale for y axis or the number of counts/ frequency found for histogram figure, default is 'log', with option for 'linear'. - -* Outputs: -Message display the counts of stations that are not found and found within the `error_margin`. -It also breaks down the count of found stations into those that are found within and outside the `distance_limit`. When this 'distance_limit' is set as 0, it counts for perfectly mapped station. - -In addition to these counts message display, the function also returns histogram of found stations counts (y-axis) for every cell distance (x-axis), see example screenshot below. - -station mapping evaluation histogram
- - - -#### `visualisation` -A simple interactive map to be implemented on jupyter notebook to overlay the GIS output resulting from the `station_mapping` is also available. -This module is based on ipyleaflet. - -Main function example of the module to overlay a geojson file as a map layer: -``` -# Define map vector layer from geojson file -map_layer = GeoJSONLayerManager( - "layer.geojson", # geojson file - style_callback=lambda feature: vector_style(feature, "blue", 0.5), # constant style - name="", # name for legend - -# Create an InteractiveMap instance -my_map = InteractiveMap() - -# Overlay layer to the interactive map -my_map.add_layer(map_layer) -``` - -Additional feature of this module include: -* Modifying the style of the vector layer to a varying color (colormap) based on the specified variable. For choices of colormap classes, refer to [matplotlib doc](https://matplotlib.org/stable/users/explain/colors/colormaps.html) - -``` -# define color map and normalize values based on lower and upper limit -cmap = cm["PRGn"] # define colormap class - -vmin, vmax = -10, 10 -norm = plt.Normalize(vmin=vmin, vmax=vmax) #normalize to lower & upper limit variable values - -map_layer = GeoJSONLayerManager( - "layer.geojson", # geojson file - style_callback=make_style_callback("", cmap, norm), # based on colormap instead of constant - name="", # name for legend - -# ... add layer to interactive map -``` - -* Adding attribute table popup when clicked (line vector only) - -``` -# Add line click handlers after the layer has been added to the map -if line_layer.layer: - line_layer.layer.on_click( - make_line_click_handler( - "station_name", # station name column name - "station_area", # station area column name - "near_grid_area", # near grid area column name - "optimum_grid_area", # optimum grid area column name - "optimum_distance_cells", # optimum distance column name - my_map.map, # Pass the map object as an argument - ) - ) -``` - -* Create and adding customized legend to the map -``` -legend_widget = create_gradient_legend(cmap, vmin, vmax) -my_map.map.add_control(WidgetControl(widget=legend_widget, position="bottomright")) -``` - -Screenshot below is the example of the visualisation output in the notebook example: -station mapping interactive map example
-In this example the station is indicated by the blue marker, with the dark grey rectangle as its nearest grid, and the other grid with varying color based on area difference colormap (legend, i.e. currently white) is the optimum grid. The black line connects the station location and the centroid of the optimum grid, and can be clickable to show the result attributes if the click handler is added. - - -Implementation Example in Jupyter notebook ---------------------------- - -For the implementation example of station mapping in Jupyter notebook, an example is created in [station mapping notebook](https://github.com/ecmwf/hat/tree/main/notebooks/examples/5a_station_mapping_evaluate.ipynb) -This configuration is based on DESTINE project, and you shall modify your netcdf and csv input file location accordingly. The example of evaluation module implementation is also attached to this jupyter notebook as well. - -Additionally, please refer to this the [station mapping visualisation notebook example here](https://github.com/ecmwf/hat/tree/main/notebooks/examples/5b_station_mapping_visualise.ipynb) diff --git a/docs/station_mapping/station_mapping_histogram.jpg b/docs/station_mapping/station_mapping_histogram.jpg deleted file mode 100644 index fded74c70e88ec4ad7999bd338cc9a6b761948bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21731 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 diff --git a/docs/station_mapping/station_mapping_search_algo.svg b/docs/station_mapping/station_mapping_search_algo.svg deleted file mode 100644 index 5a4a7e2..0000000 --- a/docs/station_mapping/station_mapping_search_algo.svg +++ /dev/null @@ -1 +0,0 @@ -1510571015108715151210302016171220301718203040Values: Upstream Area Difference % (Grid vs Station Metadata) StationNearest GridOptimum GridRadius: 1 cellOptimum GridRadius: 2 cells diff --git a/docs/station_mapping/station_mapping_visualisation.jpg b/docs/station_mapping/station_mapping_visualisation.jpg deleted file mode 100644 index 5ab1f006f0219a04bcc148b8cd752cd3b744f221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141832 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 z 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

gs$ZY*l`~!V(a&i#N^2YaXwgud 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%0A;mpfxd5_IsSD* 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 VeNq1a%WuSgBT~=-MHEm6|Jk!PP3Hgr diff --git a/docs/usage.md b/docs/usage.md deleted file mode 100644 index 00a5f5c..0000000 --- a/docs/usage.md +++ /dev/null @@ -1,23 +0,0 @@ -### Usage - -If you have already [installed](installation.md) hat then - -#### Activate Environment - - $ conda activate hat - -#### Command Line Tool - -Run a command line tool, for example - - $ hat-station-mapping --help - -For more information on individual command line tools, use the `--help` option at the command line or read the documentation, for instance for the [station mapping](station_mapping.md) tool. - -#### Python API - -In your python code you can import the hat module - - import hat - -For examples, please see these [jupyter notebooks](https://github.com/ecmwf-projects/hat/tree/main/notebooks) diff --git a/hat/cli.py b/hat/cli.py deleted file mode 100644 index 587e8b8..0000000 --- a/hat/cli.py +++ /dev/null @@ -1,37 +0,0 @@ -import yaml -import argparse -import sys - -from hat import _LOGGER as logger -from hat.station_mapping.mapper import mapper - - -def commandlineify(func): - def wrapper(args=None): - if args is None: - args = sys.argv[1:] - parser = argparse.ArgumentParser(description="Run tool with YAML config") - parser.add_argument("config", help="Path to the YAML config file") - args = parser.parse_args(args) - confpath = args.config - with open(confpath, "r") as file: - config = yaml.safe_load(file) - func(config) - - return wrapper - - -mapper_cli = commandlineify(mapper) - - -if __name__ == "__main__": - from importlib.metadata import entry_points - - eps = entry_points().select(group="console_scripts") - tools = {ep.name: ep.load() for ep in eps if ep.module.startswith("hat.")} - tool_name = sys.argv[1] - if tool_name in tools: - tools[tool_name](sys.argv[2:]) - else: - logger.error(f"Tool '{tool_name}' not found. Available tools: {', '.join(tools.keys())}") - sys.exit(1) diff --git a/hat/station_mapping/mapper.py b/hat/station_mapping/mapper.py deleted file mode 100644 index 4a63d50..0000000 --- a/hat/station_mapping/mapper.py +++ /dev/null @@ -1,121 +0,0 @@ -import pandas as pd -import xarray as xr -import earthkit.data as ekd -import numpy as np -import plotly.express as px -from plotly.colors import get_colorscale -from earthkit.hydro._readers import find_main_var -from .station_mapping import StationMapping - - -def get_grid_inputs(grid_config): - ds = ekd.from_source(*grid_config["source"]).to_xarray() - nc_variable = find_main_var(ds, 2) - metric_grid = ds[nc_variable].values - - coord_dict = grid_config.get("coords", None) - coord_x = "lat" if coord_dict is None else coord_dict["x"] - coord_y = "lon" if coord_dict is None else coord_dict["y"] - - grid_area_coords1, grid_area_coords2 = xr.broadcast(ds[coord_x], ds[coord_y]) - grid_area_coords1 = grid_area_coords1.values.copy() - grid_area_coords2 = grid_area_coords2.values.copy() - - return metric_grid, grid_area_coords1, grid_area_coords2 - - -def get_station_inputs(station_config): - df = pd.read_csv(station_config["file"]) - filters = station_config.get("filter") - if filters is not None: - df = df.query(filters) - coord_x = station_config["coords"]["x"] - coord_y = station_config["coords"]["y"] - station_coords1 = df[coord_x].values - station_coords2 = df[coord_y].values - station_metric = df[station_config["metric"]].values - return station_metric, station_coords1, station_coords2, df - - -def apply_blacklist(blacklist_config, metric_grid, grid_area_coords1, grid_area_coords2): - if blacklist_config is not None: - ds = ekd.from_source(*blacklist_config["source"]).to_xarray() - nc_variable = find_main_var(ds, 2) - mask = ds[nc_variable].values - metric_grid[mask] = np.nan - - return metric_grid, grid_area_coords1, grid_area_coords2 - - -def outputs_to_df( - df, indx, indy, area, cindx, cindy, carae, errors, grid_area_coords1, grid_area_coords2, shape, filename -): - df["opt_x_index"] = indx - df["opt_y_index"] = indy - df["near_x_index"] = cindx - df["near_y_index"] = cindy - df["near_area"] = carae - df["opt_error"] = errors - df["opt_area"] = area - df["opt_x_coord"] = grid_area_coords1[indx, 0] - df["opt_y_coord"] = grid_area_coords2[0, indy] - df["opt_1d_index"] = indy + shape[1] * indx - if filename is not None: - df.to_csv(filename, index=False) - return df - - -def light_zero_color(colorscale_name="Viridis", zero_color="rgba(0,0,0,0)"): - base = get_colorscale(colorscale_name) - n = len(base) - scaled = [[i / (n - 1), color] for i, (_, color) in enumerate(base)] - scaled[0] = [0.0, zero_color] - return scaled - - -def generate_summary_plots(df, plot_config): - if plot_config is None: - return - - distance_plot_config = plot_config.get("error", None) - if distance_plot_config is not None: - df["grid_offset_x"] = df["opt_x_index"] - df["near_x_index"] - df["grid_offset_y"] = df["opt_y_index"] - df["near_y_index"] - custom_scale = light_zero_color("Viridis") - fig = px.density_heatmap( - df, - x="grid_offset_x", - y="grid_offset_y", - marginal_x="histogram", - marginal_y="histogram", - color_continuous_scale=custom_scale, - ) - fig.write_html(distance_plot_config["file"]) - fig.show() - - error_plot_config = plot_config.get("error", None) - if error_plot_config is not None: - fig = px.histogram(df, x="opt_error") - fig.write_html(error_plot_config["file"]) - fig.show() - - -def mapper(config): - metric_grid, grid_area_coords1, grid_area_coords2 = get_grid_inputs(config["grid"]) - station_metric, station_coords1, station_coords2, df = get_station_inputs(config["station"]) - metric_grid, grid_area_coords1, grid_area_coords2 = apply_blacklist( - config.get("blacklist", None), metric_grid, grid_area_coords1, grid_area_coords2 - ) - mapping_outputs = StationMapping(config["parameters"]).conduct_mapping( - station_coords1, station_coords2, grid_area_coords1, grid_area_coords2, station_metric, metric_grid - ) - df = outputs_to_df( - df, - *mapping_outputs, - grid_area_coords1, - grid_area_coords2, - shape=grid_area_coords1.shape, - filename=config["output"]["file"] if config.get("output", None) is not None else None, - ) - generate_summary_plots(df, config.get("plot", None)) - return df diff --git a/hat/station_mapping/metrics.py b/hat/station_mapping/metrics.py deleted file mode 100644 index 413c7e5..0000000 --- a/hat/station_mapping/metrics.py +++ /dev/null @@ -1,67 +0,0 @@ -import numpy as np - - -def metric_wrapper(func): - def wrapper(val, grid): - # prep grid - if grid.ndim == 1: - grid = grid[np.newaxis, :] # (2,n) for dist, (1,n) for metric - # prep val - if np.isscalar(val): - val = np.array([val]) - if val.ndim == 1: - val = val[:, np.newaxis] # (2,1) for dist, (1,1) for metric - - return func(val, grid) - - return wrapper - - -@metric_wrapper -def zero(val, grid): - """ - Zero Error - """ - return np.zeros(grid.shape[1:]) - - -@metric_wrapper -def mape(val, grid): - """ - Mean Absolute Percentage Error - """ - denominator = np.where(np.abs(val) < 1e-8, 1e-8, np.abs(val)) - return np.mean(np.abs((val - grid) / denominator), axis=0) - - -@metric_wrapper -def mspe(val, grid): - """ - Mean Absolute Percentage Error - """ - denominator = np.where(np.abs(val) < 1e-8, 1e-8, np.abs(val)) - return np.mean(((val - grid) / denominator) ** 2, axis=0) - - -@metric_wrapper -def mae(val, grid): - """ - Mean Absolute Error - """ - return np.mean(np.abs(val - grid), axis=0) - - -@metric_wrapper -def mse(val, grid): - """ - Mean Squared Error - """ - return np.mean((val - grid) ** 2, axis=0) - - -@metric_wrapper -def rmse(val, grid): - """ - Root Mean Squared Error - """ - return np.sqrt(np.mean((val - grid) ** 2, axis=0)) diff --git a/hat/station_mapping/station_mapping.py b/hat/station_mapping/station_mapping.py deleted file mode 100644 index 864b536..0000000 --- a/hat/station_mapping/station_mapping.py +++ /dev/null @@ -1,125 +0,0 @@ -import numpy as np - -from hat.station_mapping import metrics - - -class StationMapping: - def __init__(self, config): - self.max_search_distance = config.get("max_search_distance", 5) - self.metric_error_func = getattr(metrics, config.get("metric_error_func", "mape")) - self.distance_error_func = getattr(metrics, config.get("distance_error_func", "no_error")) - self.lambd = config.get("lambda", 0) - self.max_error = config.get("max_error", np.inf) - self.min_error = config.get("min_error", 0) - - def conduct_mapping( - self, - station_coords1, - station_coords2, - grid_area_coords1, - grid_area_coords2, - station_metric=None, - grid_metric=None, - ): - num_stations = len(station_coords1) - - indxs = np.empty(num_stations, dtype=int) - indys = np.empty(num_stations, dtype=int) - closest_indxs = np.empty(num_stations, dtype=int) - closest_indys = np.empty(num_stations, dtype=int) - errors = np.empty(num_stations, dtype=float) - closest_areas = np.empty(num_stations, dtype=float) - best_areas = np.empty(num_stations, dtype=float) - - for i in range(num_stations): - station_x, station_y = station_coords1[i], station_coords2[i] - - # get all grid cells within max_search_distance - closest_idx = np.nanargmin(np.abs(grid_area_coords1[:, 0] - station_x)) - closest_idy = np.nanargmin(np.abs(grid_area_coords2[0, :] - station_y)) - - searchbox_min_x = closest_idx - self.max_search_distance - searchbox_max_x = closest_idx + self.max_search_distance + 1 - searchbox_min_y = closest_idy - self.max_search_distance - searchbox_max_y = closest_idy + self.max_search_distance + 1 - - # TODO: add option to wrap domain - searchbox_min_x = max(0, searchbox_min_x) - searchbox_max_x = min(grid_area_coords1.shape[0], searchbox_max_x) - searchbox_min_y = max(0, searchbox_min_y) - searchbox_max_y = min(grid_area_coords1.shape[1], searchbox_max_y) - - subset_x = grid_area_coords1[searchbox_min_x:searchbox_max_x, searchbox_min_y:searchbox_max_y] - subset_y = grid_area_coords2[searchbox_min_x:searchbox_max_x, searchbox_min_y:searchbox_max_y] - - shape = subset_x.shape - - subset_x = subset_x.flatten() - subset_y = subset_y.flatten() - - subset_coords = np.stack((subset_x, subset_y), axis=0) - coords_vec = np.array([station_x, station_y]) - - distance_error = self.distance_error_func(coords_vec, subset_coords) - - if station_metric is None: - area_error = 0 - else: - assert grid_metric is not None - subset_metric = grid_metric[searchbox_min_x:searchbox_max_x, searchbox_min_y:searchbox_max_y].flatten() - area_error = self.metric_error_func(station_metric[i], subset_metric) - - error = area_error + self.lambd * distance_error - area = subset_metric - - try: - best_error_1d_index = np.nanargmin(error) - min_index = np.unravel_index(best_error_1d_index, shape) - best_error = error[best_error_1d_index] - best_area = area[best_error_1d_index] - - center_offset_x = closest_idx - searchbox_min_x - center_offset_y = closest_idy - searchbox_min_y - subset_width = searchbox_max_y - searchbox_min_y - closest_1d_index = center_offset_x * subset_width + center_offset_y - - closest_error = error[closest_1d_index] - closest_area = area[closest_1d_index] - - if closest_error <= self.min_error: # if nearest cell is good enough - indx = closest_idx - indy = closest_idy - best_error = closest_error - best_area = closest_area - elif best_error <= self.max_error: - indx = (min_index[0] + searchbox_min_x) % grid_area_coords1.shape[0] - indy = (min_index[1] + searchbox_min_y) % grid_area_coords1.shape[1] - else: # if best match is still too bad, revert to closest cell - indx = closest_idx - indy = closest_idy - best_error = closest_error - best_area = closest_area - except ValueError: - center_offset_x = closest_idx - searchbox_min_x - center_offset_y = closest_idy - searchbox_min_y - subset_width = searchbox_max_y - searchbox_min_y - closest_1d_index = center_offset_x * subset_width + center_offset_y - - closest_error = error[closest_1d_index] - closest_area = area[closest_1d_index] - indx = closest_idx - indy = closest_idy - best_error = closest_error - best_area = closest_area - - indxs[i] = indx - indys[i] = indy - - closest_indxs[i] = closest_idx - closest_indys[i] = closest_idy - - errors[i] = best_error - best_areas[i] = best_area - closest_areas[i] = closest_area - - return indxs, indys, best_areas, closest_indxs, closest_indys, closest_areas, errors diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 11d64c5..0000000 --- a/mkdocs.yml +++ /dev/null @@ -1,11 +0,0 @@ -site_name: Hydrological Analysis Toolkit -site_url: https://ecmwf.github.io/hat/ - -nav: - - Welcome: index.md - - Installation: installation.md - - Usage: usage.md - - Command Line Interface: - - station_mapping: station_mapping.md - -theme: readthedocs diff --git a/notebooks/workflow/station_mapping.ipynb b/notebooks/workflow/station_mapping.ipynb deleted file mode 100644 index 71438db..0000000 --- a/notebooks/workflow/station_mapping.ipynb +++ /dev/null @@ -1,86 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "6908e7ba", - "metadata": {}, - "outputs": [], - "source": [ - "from hat.station_mapping import mapper" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8dbd8301", - "metadata": {}, - "outputs": [], - "source": [ - "config = {\n", - " \"station\": {\n", - " \"file\": \"stations.csv\",\n", - " \"filter\": \"(StationLon >= 0) and (drainage_area_provided >= 0)\",\n", - " \"coords\": {\n", - " \"x\": \"StationLat\",\n", - " \"y\": \"StationLon\"\n", - " },\n", - " \"metric\": \"drainage_area_provided\"\n", - " },\n", - " \"grid\": {\n", - " \"source\": [\"file\", \"upstream_area.nc\"],\n", - " \"coords\": {\n", - " \"x\": \"lat\",\n", - " \"y\": \"lon\"\n", - " }\n", - " },\n", - " \"blacklist\": {\n", - " \"source\": [\"file\", \"mask.nc\"]\n", - " },\n", - " \"parameters\": {\n", - " \"max_search_distance\": 5,\n", - " \"metric_error_func\": \"mape\", #options are mse, mape, mspe, mae, zero, rmse\n", - " \"distance_error_func\": \"mse\",\n", - " \"lambda\": 0, # error = metric_error_func + lambda * distance_error_func\n", - " \"max_error\": 0.2, # if error>max_error, just take nearest point since we have no idea\n", - " \"min_error\": 0 # if error[closest_point] <= min_error, don't bother searching (this is good enough)\n", - " },\n", - " \"output\": {\n", - " \"file\": \"mapped_stations.csv\"\n", - " },\n", - " \"plot\": {\n", - " \"error\": {\n", - " \"file\": \"hist.html\"\n", - " },\n", - " \"distance\": {\n", - " \"file\": \"heatmap.html\"\n", - " }\n", - " }\n", - "}\n", - "\n", - "df = mapper.mapper(config)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "hat", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/pyproject.toml b/pyproject.toml index ef05a90..0d78344 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,13 +4,12 @@ build-backend = "setuptools.build_meta" [project] name = "hydro_analysis_toolkit" -requires-python = ">=3.9" +requires-python = ">=3.10" authors = [ {name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int"}, ] maintainers = [ {name = "Corentin Carton de Wiart", email = "corentin.carton@ecmwf.int"}, - {name = "Oisín M. Morrison", email = "oisin.morrison@ecmwf.int"} ] description = "ECMWF's Hydrological Analysis Toolkit" license = { text = "Apache License Version 2.0" } @@ -21,11 +20,11 @@ classifiers = [ "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering" ] dynamic = ["version", "readme"] @@ -56,7 +55,7 @@ dependencies = [ [project.urls] repository = "https://github.com/ecmwf/hat" - documentation = "https://hydro-analysis-toolkit.readthedocs.io" + documentation = "https://github.com/ecmwf/hat" issues = "https://github.com/ecmwf/hat/issues" [project.optional-dependencies] @@ -71,9 +70,6 @@ dependencies = [ "pre-commit" ] -[project.scripts] - hat-station-mapping = "hat.cli:mapper_cli" - # Linting settings [tool.ruff] line-length = 120 diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test_imports.py b/tests/test_imports.py deleted file mode 100644 index bdd65cd..0000000 --- a/tests/test_imports.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_mapper_import(): - from hat.station_mapping.mapper import mapper From 91197bfb2d863a8267f6836164f2cc81122f0bd8 Mon Sep 17 00:00:00 2001 From: oisin-m Date: Mon, 30 Mar 2026 16:03:45 +0200 Subject: [PATCH 2/3] chore: remove hpc module workflow --- .github/workflows/hpc-module.yml | 54 -------------------------------- 1 file changed, 54 deletions(-) delete mode 100644 .github/workflows/hpc-module.yml diff --git a/.github/workflows/hpc-module.yml b/.github/workflows/hpc-module.yml deleted file mode 100644 index 0a0b6ba..0000000 --- a/.github/workflows/hpc-module.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: hpc-module - -on: - workflow_dispatch: - inputs: - module-name: - description: 'Module name' - required: true - type: string - module-tag: - description: 'Module tag' - required: false - default: 'NOT_DEFINED' - type: string - push: - tags: - - '[0-9]+.[0-9]+.[0-9]+' -jobs: - install_module: - runs-on: [hpc] - steps: - - uses: ecmwf-actions/reusable-workflows/ci-hpc-generic@v2 - with: - troika_user: ${{ secrets.HPC_CI_SSH_USER }} - template: | - - MODULE_VERSION=${{ github.event_name == 'workflow_dispatch' && inputs.module-name || github.ref_name }} - MODULE_TAG=${{ github.event_name == 'workflow_dispatch' && inputs.module-tag || 'default'}} - HAT_BRANCH=${{ github.ref_name }} - - PREFIX=${{ secrets.HPC_APPS_DIR }}/hat/${MODULE_VERSION} - rm -rf $PREFIX - mkdir -p $PREFIX - - # Load the default python module - module load python3 - - PYTHONUSERBASE=$PREFIX pip3 install --user git+https://github.com/ecmwf/hat.git@${HAT_BRANCH} - - module unload python3 - - software-sync -s local -p hat -t aa,ab,ac,ad - module load modulemgr - modulemgr -f -m aa,ab,ac,ad sync hat - - if [ $MODULE_TAG != 'NOT_DEFINED' ] - then - modulemgr -f -m aa,ab,ac,ad tag -o hat $MODULE_VERSION $MODULE_TAG - fi - - sbatch_options: | - #SBATCH --job-name=cd_hat - #SBATCH --time=00:10:00 - #SBATCH --qos=deploy From 5c0095015d08157601a954204a0ff02acc52e3fd Mon Sep 17 00:00:00 2001 From: oisin-m Date: Mon, 30 Mar 2026 16:09:06 +0200 Subject: [PATCH 3/3] chore: add basic import test --- tests/test_import.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 tests/test_import.py diff --git a/tests/test_import.py b/tests/test_import.py new file mode 100644 index 0000000..076e401 --- /dev/null +++ b/tests/test_import.py @@ -0,0 +1,2 @@ +def test_import(): + import hat # noqa: F401