From ca0df471291af6b541c9130c931e5a2109128a11 Mon Sep 17 00:00:00 2001
From: pcain-usgs <pcain@usgs.gov>
Date: Fri, 10 Apr 2020 16:01:20 -0600
Subject: [PATCH] Move Calculation variables to MeasurementType

---
 geomagio/residual/Calculation.py     | 50 ++++++++++++++--------------
 geomagio/residual/MeasurementType.py | 30 +++++++++++++++++
 2 files changed, 55 insertions(+), 25 deletions(-)

diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py
index 4584dc9da..f81d30895 100644
--- a/geomagio/residual/Calculation.py
+++ b/geomagio/residual/Calculation.py
@@ -26,7 +26,7 @@ class Calculate(BaseModel):
     residual: average residual across a measurement type
     hs: Multiplier for inclination claculations. +1 if measurment was taken in northern hemisphere, -1 if measurement was taken in the southern hemishpere.
     ordinate: Variometer data. Ordinate object(contains a datapoint for H, E, Z, and F)
-    ud: Multiplier for inclination calculations. +1 if instrument is oriented upward, -1 if instrument if oriented downward.
+    direction: Multiplier for inclination calculations. +1 if instrument is oriented upward, -1 if instrument if oriented downward.
     shift: Degree shift in inclination measurements.
     """
 
@@ -34,8 +34,8 @@ class Calculate(BaseModel):
     residual: float = None
     ordinate: Ordinate = None
     f: float = None
-    ud: int = None
-    pm: int = None
+    direction: int = None
+    meridian: int = None
     shift: int = None
 
 
@@ -101,36 +101,36 @@ def calculate_I(measurements, ordinates, ordinates_index, mean, metadata):
     hs = metadata["hemisphere"]
     # gather calculation objects for each measurement type
     southdown = Calculate(
-        shift=-200,
-        ud=1,
-        pm=1,
+        shift=mt.SOUTH_DOWN.shift,
+        direction=mt.SOUTH_DOWN.direction,
+        meridian=mt.SOUTH_DOWN.meridian,
         angle=average_angle(measurements, mt.SOUTH_DOWN),
         residual=average_residual(measurements, mt.SOUTH_DOWN),
         ordinate=average_ordinate(ordinates_index, mt.SOUTH_DOWN),
     )
 
     southup = Calculate(
-        shift=200,
-        ud=-1,
-        pm=-1,
+        shift=mt.SOUTH_UP.shift,
+        direction=mt.SOUTH_UP.direction,
+        meridian=mt.SOUTH_UP.meridian,
         angle=average_angle(measurements, mt.SOUTH_UP),
         residual=average_residual(measurements, mt.SOUTH_UP),
         ordinate=average_ordinate(ordinates_index, mt.SOUTH_UP),
     )
 
     northup = Calculate(
-        shift=0,
-        ud=-1,
-        pm=1,
+        shift=mt.NORTH_UP.shift,
+        direction=mt.NORTH_UP.direction,
+        meridian=mt.NORTH_UP.meridian,
         angle=average_angle(measurements, mt.NORTH_UP),
         residual=average_residual(measurements, mt.NORTH_UP),
         ordinate=average_ordinate(ordinates_index, mt.NORTH_UP),
     )
 
     northdown = Calculate(
-        shift=400,
-        ud=1,
-        pm=-1,
+        shift=mt.NORTH_DOWN.shift,
+        direction=mt.NORTH_DOWN.direction,
+        meridian=mt.NORTH_DOWN.meridian,
         angle=average_angle(measurements, mt.NORTH_DOWN),
         residual=average_residual(measurements, mt.NORTH_DOWN),
         ordinate=average_ordinate(ordinates_index, mt.NORTH_DOWN),
@@ -188,32 +188,32 @@ def calculate_D(ordinates_index, measurements, measurements_index, azimuth, h_b)
         average_mark -= 100
 
     # gather calculation objects for each declination measurement type
-    # note that the pm(plus minus) multiplier has been repurposed.
+    # note that the meridian(plus minus) multiplier has been repurposed.
     # West facing measurements have a multiplier of -1
     # East facing measurements have a multipllier of 1
     westdown = Calculate(
         angle=average_angle(measurements_index, mt.WEST_DOWN),
         residual=average_residual(measurements_index, mt.WEST_DOWN),
         ordinate=average_ordinate(ordinates_index, mt.WEST_DOWN),
-        pm=-1,
+        meridian=mt.WEST_DOWN.meridian,
     )
     westup = Calculate(
         angle=average_angle(measurements_index, mt.WEST_UP),
         residual=average_residual(measurements_index, mt.WEST_UP),
         ordinate=average_ordinate(ordinates_index, mt.WEST_UP),
-        pm=-1,
+        meridian=mt.WEST_UP.meridian,
     )
     eastdown = Calculate(
         angle=average_angle(measurements_index, mt.EAST_DOWN),
         residual=average_residual(measurements_index, mt.EAST_DOWN),
         ordinate=average_ordinate(ordinates_index, mt.EAST_DOWN),
-        pm=1,
+        meridian=mt.EAST_DOWN.meridian,
     )
     eastup = Calculate(
         angle=average_angle(measurements_index, mt.EAST_UP),
         residual=average_residual(measurements_index, mt.EAST_UP),
         ordinate=average_ordinate(ordinates_index, mt.EAST_UP),
-        pm=1,
+        meridian=mt.EAST_UP.meridian,
     )
     # convert azimuth to geon
     azimuth = (int(azimuth / 100) + (azimuth % 100) / 60) / 0.9
@@ -349,9 +349,9 @@ def calculate_measurement_inclination(calculation, hs):
     Calculate a measurement's inclination value using
     Calculate items' elements.
     """
-    return calculation.shift + calculation.pm * (
+    return calculation.shift + calculation.meridian * (
         +calculation.angle
-        + calculation.ud
+        + calculation.direction
         * (hs * np.arcsin(calculation.residual / calculation.f) * 200 / np.pi)
     )
 
@@ -368,17 +368,17 @@ def calculate_meridian_term(calculation, h_b):
     A2 = np.arctan(calculation.ordinate.e / (calculation.ordinate.h + h_b))
     A1 = (200 / np.pi) * (A1)
     A2 = (200 / np.pi) * (A2)
-    meridian_term = calculation.angle + (calculation.pm * A1) - A2
+    meridian_term = calculation.angle + (calculation.meridian * A1) - A2
     return meridian_term
 
 
-def convert_to_geon(angle, include_seconds=True):
+def convert_to_geon(angle, incldirectione_seconds=True):
     """
     Convert angles from measurements to geon
     """
     degrees = int(angle)
     minutes = int((angle % 1) * 100) / 60
-    if include_seconds:
+    if incldirectione_seconds:
         seconds = ((angle * 100) % 1) / 36
     else:
         seconds = 0
diff --git a/geomagio/residual/MeasurementType.py b/geomagio/residual/MeasurementType.py
index 3d7223361..8293d63a6 100644
--- a/geomagio/residual/MeasurementType.py
+++ b/geomagio/residual/MeasurementType.py
@@ -27,3 +27,33 @@ class MeasurementType(str, enum.Enum):
 
     # scaling
     NORTH_DOWN_SCALE = "NorthDownScale"
+
+    @property
+    def direction(self):
+        if self in [MeasurementType.SOUTH_DOWN, MeasurementType.NORTH_DOWN]:
+            return 1
+        else:
+            return -1
+
+    @property
+    def shift(self):
+        if self == MeasurementType.SOUTH_DOWN:
+            return -200
+        if self == MeasurementType.SOUTH_UP:
+            return 200
+        if self == MeasurementType.NORTH_UP:
+            return 0
+        if self == MeasurementType.NORTH_DOWN:
+            return 400
+
+    @property
+    def meridian(self):
+        if self in [
+            MeasurementType.SOUTH_DOWN,
+            MeasurementType.NORTH_UP,
+            MeasurementType.EAST_UP,
+            MeasurementType.EAST_DOWN,
+        ]:
+            return 1
+        else:
+            return -1
-- 
GitLab