From 1fe82bbd24f8ae40826ecf06ed56476276f6485c Mon Sep 17 00:00:00 2001 From: Isabelle Schmitz Date: Wed, 29 Apr 2026 13:51:29 +0200 Subject: [PATCH 1/3] [UPDATE] Updated FBC transport with new location and extended timeseries Location of the FBC transport file changed to: https://zenodo.org/records/19554222 Updated `fbc.py` to access the new dataset, adjusted `fbc.yml` to account for new variable naming and contributors and changed `test_fbc.py` to test the right file. --- amocatlas/data_sources/fbc.py | 78 +++++++-------------------------- amocatlas/metadata/fbc.yml | 25 +++-------- data/OS_GSR_FBC_D_1995_2024.nc | Bin 0 -> 154836 bytes tests/test_fbc.py | 6 +-- 4 files changed, 26 insertions(+), 83 deletions(-) create mode 100644 data/OS_GSR_FBC_D_1995_2024.nc diff --git a/amocatlas/data_sources/fbc.py b/amocatlas/data_sources/fbc.py index d94c4a7f..290471d3 100644 --- a/amocatlas/data_sources/fbc.py +++ b/amocatlas/data_sources/fbc.py @@ -19,8 +19,6 @@ from typing import Union import xarray as xr -import datetime -import pandas as pd # Import the modules used from amocatlas import logger, utilities @@ -34,21 +32,19 @@ DATASOURCE_ID = "fbc" # Default list of FBC data files -FBC_DEFAULT_FILES = [ - "FBC_overflow_transport.txt", -] -FBC_TRANSPORT_FILES = ["FBC_overflow_transport.txt"] -FBC_DEFAULT_SOURCE = "https://envofar.fo/var/ftp/Timeseries/" +FBC_DEFAULT_FILES = ["OS_GSR_FBC_D_1995_2024.nc"] +FBC_TRANSPORT_FILES = ["OS_GSR_FBC_D_1995_2024.nc"] +FBC_DEFAULT_SOURCE = "https://zenodo.org/records/19554222/files/" FBC_METADATA = { - "project": "Faroe Bank Channel overflow 1995-2015", - "weblink": "https://envofar.fo/var/ftp/Timeseries/FBC_overflow_transport.txt", + "project": "Faroe Bank Channel overflow 1995-2024", + "weblink": "https://zenodo.org/records/19554222", "comment": "Dataset accessed and processed via http://github.com/AMOCcommunity/amocatlas", } FBC_FILE_METADATA = { - "FBC_overflow_transport.txt": { - "data_product": "Daily averaged kinematic FBC-overflow flux (transport) in Sv", + "OS_GSR_FBC_D_1995_2024.nc": { + "data_product": "Daily average of FBC overflow transport, estimated from an array of moored ADCPs in Sv", }, } @@ -124,7 +120,7 @@ def read_fbc( added_attrs_per_dataset = [] if track_added_attrs else None for file in file_list: - if not (file.lower().endswith(".txt")): + if not (file.lower().endswith(".nc")): log_warning("Skipping unsupported file type : %s", file) continue @@ -141,57 +137,11 @@ def read_fbc( ) # Open dataset - if file.lower().endswith(".txt"): - # file.txt - try: - # column_names, _ = utilities.parse_ascii_header( - # file_path, comment_char="%" - # ) - data_start = utilities.find_data_start(file_path) - - df = pd.read_csv( - file_path, - sep=r"\s+", - encoding="latin-1", - skiprows=data_start, - names=["Decimal year", "Month", "Day", "Flux"], - ) - except Exception as e: - log_error("Failed to parse ASCII file: %s: %s", file_path, e) - raise FileNotFoundError( - f"Failed to parse ASCII file: {file_path}: {e}" - ) from e - - # Time handling - try: - df = df.apply( - lambda col: col.astype(str) - .str.replace(",", "", regex=False) - .astype(float) - ) - # df['Decimal year'] = df['Decimal year'].astype(str).str.replace(',', '',regex=False).astype(float) - df["TIME"] = df["Decimal year"].apply( - lambda x: datetime.datetime(int(x), 1, 1) - + datetime.timedelta( - days=(x - int(x)) - * ( - datetime.datetime(int(x) + 1, 1, 1) - - datetime.datetime(int(x), 1, 1) - ).days - ) - ) - df = df.drop(columns=["Decimal year"]) - ds = df.set_index("TIME").to_xarray() - except Exception as e: - log_error( - "Failed to convert DataFrame to xarray Dataset for %s: %s", - file, - e, - ) - raise ValueError( - f"Failed to convert DataFrame to xarray Dataset for {file}: {e}", - ) from e + if file.lower().endswith(".nc"): + # Use ReaderUtils for consistent dataset loading + + ds = ReaderUtils.safe_load_dataset(file_path) # Attach metadata # Attach metadata with optional tracking @@ -222,6 +172,10 @@ def read_fbc( DATASOURCE_ID, track_added_attrs=False, ) + else: + raise ValueError( + f"Unsupported file type for {file}. Only .nc files are supported." + ) datasets.append(ds) diff --git a/amocatlas/metadata/fbc.yml b/amocatlas/metadata/fbc.yml index 0c679d57..4f63fbae 100644 --- a/amocatlas/metadata/fbc.yml +++ b/amocatlas/metadata/fbc.yml @@ -1,8 +1,8 @@ metadata: program: "FBC" description: "FBC Overflow transport time series" - project: "B. Hansen et al.: A stable Faroe Bank Channel overflow" - weblink: https://envofar.fo/data/index.php?dir=Timeseries&sort=N&order=A + project: "B. Hansen, K. M. Larsen: NACLIM - Fluxes: Faroe Bank Channel overflow transport" + weblink: https://zenodo.org/records/19554222 comment: Dataset accessed and processed via http://github.com/AMOCcommunity/amocatlas acknowledgment: > Funding for the in situ Faroe Bank Channel measurements is from the Environmental Research Programme of the Nordic Council of Ministers (NMR) 1993–1998, from national Nordic research councils, from the Danish DANCEA programme, and from the European Framework Programs, lately under grant agreement no. GA212643 (THOR) and under grant agreement no. 308299 (NACLIM). @@ -11,29 +11,18 @@ metadata: license: featureType: timeSeries time_coverage_start: '1995-11-13' - time_coverage_end: '2023-05-19' + time_coverage_end: '2024-05-18' contributing_institutions: "Faroe Marine Research Institute (FAMRI)" files: - FBC_overflow_transport.txt: - source_url: https://envofar.fo/var/ftp/Timeseries/FBC_overflow_transport.txt + OS_GSR_FBC_D_1995_2024.nc: + source_url: https://zenodo.org/records/19554222/files/ data_product: "Daily averaged kinematic FBC-overflow flux (transport) in Sv" - variables_to_remove: [Day, Month] variable_mapping: - "Flux": TRANS_FBC + "FBC_tr": TRANS_FBC original_variable_metadata: Flux: long_name: "FBC Overflow" description: "FBC Overflow transport time series" units: Sverdrup - standard_name: ocean_volume_transport_across_line - Month: - long_name: "Month" - description: "Month" - units: - standard_name: - Day: - long_name: "Day" - description: "Day" - units: - standard_name: + standard_name: ocean_volume_transport_across_line \ No newline at end of file diff --git a/data/OS_GSR_FBC_D_1995_2024.nc b/data/OS_GSR_FBC_D_1995_2024.nc new file mode 100644 index 0000000000000000000000000000000000000000..56a822c3ac41cbeef382acbffbd3f29b3a7ef742 GIT binary patch literal 154836 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 z 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 J%MbPu_#f|4X@39! literal 0 HcmV?d00001 diff --git a/tests/test_fbc.py b/tests/test_fbc.py index 06155070..2b5753c7 100644 --- a/tests/test_fbc.py +++ b/tests/test_fbc.py @@ -29,15 +29,15 @@ def test_default_files_configuration(self): """Test default files configuration is reasonable.""" files = fbc.FBC_DEFAULT_FILES assert len(files) > 0 - assert "FBC_overflow_transport.txt" in files + assert "OS_GSR_FBC_D_1995_2024.nc" in files transport_files = fbc.FBC_TRANSPORT_FILES assert len(transport_files) > 0 - assert "FBC_overflow_transport.txt" in transport_files + assert "OS_GSR_FBC_D_1995_2024.nc" in transport_files # Files should be text format for FBC data for file in files: - assert file.endswith(".txt") + assert file.endswith(".nc") def test_function_exists_and_callable(self): """Test that main function exists and is callable.""" From 9d219528b2a112732c56991f0851a8d2020ee0da Mon Sep 17 00:00:00 2001 From: Isabelle Schmitz Date: Wed, 29 Apr 2026 14:01:23 +0200 Subject: [PATCH 2/3] Fix testing issue --- tests/test_fbc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_fbc.py b/tests/test_fbc.py index 2b5753c7..90512aaf 100644 --- a/tests/test_fbc.py +++ b/tests/test_fbc.py @@ -62,4 +62,3 @@ def test_module_imports_successfully(self): assert fbc is not None # Check required dependencies are accessible assert hasattr(fbc, "xr") # xarray - assert hasattr(fbc, "pd") # pandas From b07893bd2ba0d42fda021f175a5086182de99252 Mon Sep 17 00:00:00 2001 From: Isabelle Schmitz Date: Wed, 29 Apr 2026 14:29:05 +0200 Subject: [PATCH 3/3] resolving comments --- amocatlas/metadata/fbc.yml | 2 +- tests/test_fbc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/amocatlas/metadata/fbc.yml b/amocatlas/metadata/fbc.yml index 4f63fbae..f0fd4d02 100644 --- a/amocatlas/metadata/fbc.yml +++ b/amocatlas/metadata/fbc.yml @@ -21,7 +21,7 @@ files: variable_mapping: "FBC_tr": TRANS_FBC original_variable_metadata: - Flux: + FBC_tr: long_name: "FBC Overflow" description: "FBC Overflow transport time series" units: Sverdrup diff --git a/tests/test_fbc.py b/tests/test_fbc.py index 90512aaf..9c561714 100644 --- a/tests/test_fbc.py +++ b/tests/test_fbc.py @@ -35,7 +35,7 @@ def test_default_files_configuration(self): assert len(transport_files) > 0 assert "OS_GSR_FBC_D_1995_2024.nc" in transport_files - # Files should be text format for FBC data + # Files should be NetCDF format for FBC data for file in files: assert file.endswith(".nc")