From c907d605d5928ddcaf550c1f1be8a8a7ba9070f6 Mon Sep 17 00:00:00 2001
From: pcain-usgs <pcain@usgs.gov>
Date: Fri, 6 Aug 2021 12:36:50 -0600
Subject: [PATCH] internal mseed HEZ->UVW conversions

---
 geomagio/edge/SNCL.py                  | 18 +++++++---
 test/edge_test/MiniSeedFactory_test.py |  4 +--
 test/edge_test/SNCL_test.py            | 50 ++++++++++++++++++--------
 3 files changed, 52 insertions(+), 20 deletions(-)

diff --git a/geomagio/edge/SNCL.py b/geomagio/edge/SNCL.py
index 771ef8ddf..8dc8a8e25 100644
--- a/geomagio/edge/SNCL.py
+++ b/geomagio/edge/SNCL.py
@@ -35,7 +35,9 @@ class SNCL(BaseModel):
         return SNCL(
             station=station,
             network=network,
-            channel=get_channel(element=element, interval=interval),
+            channel=get_channel(
+                element=element, interval=interval, data_type=data_type
+            ),
             location=location or get_location(element=element, data_type=data_type),
         )
 
@@ -85,9 +87,10 @@ class SNCL(BaseModel):
         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)
     )
 
 
@@ -154,7 +157,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 = "F"
     if "_Volt" in element:
         channel_middle = "E"
@@ -163,6 +166,13 @@ def _get_channel_end(element: str) -> str:
     elif "_Temp" in element:
         channel_middle = "K"
     channel_end = element.split("_")[0]
+    if data_type == "variation":
+        if channel_end == "H":
+            channel_end = "U"
+        elif channel_end == "E":
+            channel_end = "V"
+        elif channel_end == "Z":
+            channel_end = "W"
     return channel_middle + channel_end
 
 
diff --git a/test/edge_test/MiniSeedFactory_test.py b/test/edge_test/MiniSeedFactory_test.py
index bd1367d37..5689d69c5 100644
--- a/test/edge_test/MiniSeedFactory_test.py
+++ b/test/edge_test/MiniSeedFactory_test.py
@@ -34,11 +34,11 @@ def test__put_timeseries():
     sent = client.last_sent
     assert_equal(len(sent), 2)
     # first trace includes [0...4]
-    assert_equal(sent[0].stats.channel, "LFH")
+    assert_equal(sent[0].stats.channel, "LFU")
     assert_equal(len(sent[0]), 4)
     assert_equal(sent[0].stats.endtime, trace1.stats.starttime + 3)
     # second trace includes [5...9]
-    assert_equal(sent[1].stats.channel, "LFH")
+    assert_equal(sent[1].stats.channel, "LFU")
     assert_equal(len(sent[1]), 5)
     assert_equal(sent[1].stats.starttime, trace1.stats.starttime + 5)
     assert_equal(sent[1].stats.endtime, trace1.stats.endtime)
diff --git a/test/edge_test/SNCL_test.py b/test/edge_test/SNCL_test.py
index ea92aa524..3b36a0705 100644
--- a/test/edge_test/SNCL_test.py
+++ b/test/edge_test/SNCL_test.py
@@ -106,20 +106,42 @@ def test_element():
 
 def test_get_channel():
     """edge_test.SNCL_test.test_get_channel()"""
-    assert get_channel(element="U_Volt", interval="tenhertz") == "BEU"
-    assert get_channel(element="U_Bin", interval="tenhertz") == "BYU"
-    assert get_channel(element="D", interval="second") == "LFD"
-    assert get_channel(element="F", interval="minute") == "UFF"
-    assert get_channel(element="H", interval="hour") == "RFH"
-    assert get_channel(element="Dst4", interval="day") == "PX4"
-    assert get_channel(element="Dst3", interval="minute") == "UX3"
-    assert get_channel(element="E-E", interval="minute") == "UQE"
-    assert get_channel(element="E-N", interval="minute") == "UQN"
-    assert get_channel(element="UK1", interval="minute") == "UK1"
-    assert get_channel(element="U_Dist", interval="minute") == "UFU"
-    assert get_channel(element="U_SQ", interval="minute") == "UFU"
-    assert get_channel(element="U_SV", interval="minute") == "UFU"
-    assert get_channel(element="UK1.R0", interval="minute") == "UK1"
+    assert (
+        get_channel(element="U_Volt", interval="tenhertz", data_type="variation")
+        == "BEU"
+    )
+    assert (
+        get_channel(element="U_Bin", interval="tenhertz", data_type="variation")
+        == "BYU"
+    )
+    assert get_channel(element="D", interval="second", data_type="variation") == "LFD"
+    assert get_channel(element="F", interval="minute", data_type="variation") == "UFF"
+    assert get_channel(element="U", interval="hour", data_type="variation") == "RFU"
+    assert get_channel(element="V", interval="hour", data_type="variation") == "RFV"
+    assert get_channel(element="W", interval="hour", data_type="variation") == "RFW"
+    assert get_channel(element="H", interval="hour", data_type="variation") == "RFU"
+    assert get_channel(element="E", interval="hour", data_type="variation") == "RFV"
+    assert get_channel(element="Z", interval="hour", data_type="variation") == "RFW"
+    assert get_channel(element="Z", interval="hour", data_type="adjusted") == "RFZ"
+    assert get_channel(element="Dst4", interval="day", data_type="variation") == "PX4"
+    assert (
+        get_channel(element="Dst3", interval="minute", data_type="variation") == "UX3"
+    )
+    assert get_channel(element="E-E", interval="minute", data_type="variation") == "UQE"
+    assert get_channel(element="E-N", interval="minute", data_type="variation") == "UQN"
+    assert get_channel(element="UK1", interval="minute", data_type="variation") == "UK1"
+    assert (
+        get_channel(element="U_Dist", interval="minute", data_type="variation") == "UFU"
+    )
+    assert (
+        get_channel(element="U_SQ", interval="minute", data_type="variation") == "UFU"
+    )
+    assert (
+        get_channel(element="U_SV", interval="minute", data_type="variation") == "UFU"
+    )
+    assert (
+        get_channel(element="UK1.R0", interval="minute", data_type="variation") == "UK1"
+    )
 
 
 def test_get_location():
-- 
GitLab