From fb35499738b9e260afa34373584547b42d159e5b Mon Sep 17 00:00:00 2001 From: "E. Joshua Rigler" <erigler@usgs.gov> Date: Mon, 17 Mar 2025 09:15:11 -0600 Subject: [PATCH] Properly map `data_type`/`location` codes in *SNCL.py: There is an ambiguity that exists between `data_type` and `location` in *SNCL.py. Ideally, we'd clean this up, but that involves many changes, and well beyond just the *SNCL.py files. These changes at least fix issues with geomagio scripts that popped up during testing. --- geomagio/edge/LegacySNCL.py | 21 +++++++++++++++++---- geomagio/edge/SNCL.py | 4 ++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/geomagio/edge/LegacySNCL.py b/geomagio/edge/LegacySNCL.py index 22b5770b..0f447954 100644 --- a/geomagio/edge/LegacySNCL.py +++ b/geomagio/edge/LegacySNCL.py @@ -44,7 +44,9 @@ class LegacySNCL(SNCL): return LegacySNCL( station=station, network=network, - channel=get_channel(element=element, interval=interval), + channel=get_channel( + element=element, interval=interval, data_type=location or data_type + ), location=location or get_location(element=element, data_type=data_type), ) @@ -68,9 +70,10 @@ class LegacySNCL(SNCL): raise ValueError(f"Unexcepted interval code: {channel_start}") -def get_channel(element: str, interval: str) -> str: +def get_channel(element: str, interval: str, data_type: str) -> str: return _check_predefined_channel(element=element, interval=interval) or ( - _get_channel_start(interval=interval) + _get_channel_end(element=element) + _get_channel_start(interval=interval) + + _get_channel_end(element=element, data_type=data_type) ) @@ -133,7 +136,7 @@ def _check_predefined_channel(element: str, interval: str) -> Optional[str]: return None -def _get_channel_end(element: str) -> str: +def _get_channel_end(element: str, data_type: str) -> str: channel_middle = "V" if "_Volt" in element: channel_middle = "E" @@ -144,6 +147,16 @@ def _get_channel_end(element: str) -> str: elif element in ["F", "G"]: channel_middle = "S" channel_end = element.split("_")[0] + if data_type == "variation" or data_type[0] == "R": + # this may not actually be necessary since UVW were + # never used as legacy channels; it is included here + # solely for consistency with SNCL.py, but should be safe + if channel_end == "U": + channel_end = "H" + elif channel_end == "V": + channel_end = "Y" + elif channel_end == "W": + channel_end = "Z" return channel_middle + channel_end diff --git a/geomagio/edge/SNCL.py b/geomagio/edge/SNCL.py index 3028f82d..421190d8 100644 --- a/geomagio/edge/SNCL.py +++ b/geomagio/edge/SNCL.py @@ -46,7 +46,7 @@ class SNCL(BaseModel): station=station, network=network, channel=get_channel( - element=element, interval=interval, data_type=data_type + element=element, interval=interval, data_type=location or data_type ), location=location or get_location(element=element, data_type=data_type), ) @@ -178,7 +178,7 @@ def _get_channel_end(element: str, data_type: str) -> str: elif "_Temp" in element: channel_middle = "K" channel_end = element.split("_")[0] - if data_type == "variation": + if data_type == "variation" or data_type[0] == "R": if channel_end == "H": channel_end = "U" elif channel_end == "E": -- GitLab