From 3564a2712b473bcd337f2e32de91aa8817183858 Mon Sep 17 00:00:00 2001
From: lsachuk <lsachuk@contractor.usgs.gov>
Date: Fri, 14 Apr 2023 11:31:35 -0600
Subject: [PATCH] added calculate_* methods for horizontal and vertical
 component

---
 geomagio/residual/Calculation.py | 100 +++++++++++++++++--------------
 geomagio/residual/Diagnostics.py |  10 +---
 2 files changed, 57 insertions(+), 53 deletions(-)

diff --git a/geomagio/residual/Calculation.py b/geomagio/residual/Calculation.py
index 5352676b..72708859 100644
--- a/geomagio/residual/Calculation.py
+++ b/geomagio/residual/Calculation.py
@@ -37,18 +37,23 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading:
         hemisphere=reading.hemisphere, measurements=reading.measurements
     )
     corrected_f = f + reading.pier_correction
-    # calculate absolutes, horizontal_component, vertical_component
-    (
-        absoluteH,
-        absoluteZ,
-        horizontal_component,
-        vertical_component,
-    ) = calculate_HZ_absolutes(
+
+    # calculate absolutes,
+    (absoluteH, absoluteZ) = calculate_HZ_absolutes(
         corrected_f=corrected_f,
         inclination=inclination,
         mean=i_mean,
         reference=reference,
     )
+
+    horizontal_component = calculate_horizontal_component(
+        inclination=inclination, corrected_f=corrected_f
+    )
+
+    vertical_component = calculate_vertical_component(
+        inclination=inclination, corrected_f=corrected_f
+    )
+
     absoluteD, meridian = calculate_D_absolute(
         azimuth=reading.azimuth,
         h_baseline=absoluteH.baseline,
@@ -88,10 +93,7 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading:
         mean_mark=mean_mark, magnetic_south_meridian=magnetic_south_meridian
     )
 
-    ordinate_f = calculate_ordinate_f(
-        corrected_f=corrected_f,
-        pier_correction=reading.pier_correction,
-    )
+    ordinate_f = f
 
     ordinate_d = calculate_ordinate_d(
         absoluteD_absolute=absoluteD.absolute,
@@ -118,7 +120,6 @@ def calculate(reading: Reading, adjust_reference: bool = True) -> Reading:
         magnetic_azimuth_of_mark=magnetic_azimuth_of_mark,
         magnetic_south_meridian=magnetic_south_meridian,
         mean_mark=mean_mark,
-        meridian=meridian,
         ordinate_d=ordinate_d,
         ordinate_f=ordinate_f,
         ordinate_h=ordinate_h,
@@ -219,7 +220,7 @@ def calculate_HZ_absolutes(
     mean: AverageMeasurement,
     reference: Measurement,
 ) -> Tuple[Absolute, Absolute, float, float]:
-    """Calculate H and Z absolutes, horizontal_component,       vertical_component.
+    """Calculate H and Z absolutes
 
     Parameters
     ----------
@@ -233,15 +234,8 @@ def calculate_HZ_absolutes(
     Tuple
         - H Absolute
         - Z Absolute
-        - horizontal_component,
-        - vertical_component
     """
-
-    #  store the pre-shifted h_abs and the pre-shifted z_abs
     inclination_radians = np.radians(inclination)
-    horizontal_component = corrected_f * np.cos(inclination_radians)
-    vertical_component = corrected_f * np.sin(inclination_radians)
-
     h_abs = corrected_f * np.cos(inclination_radians)
     z_abs = corrected_f * np.sin(inclination_radians)
     h_b = np.sqrt(h_abs**2 - mean.e**2) - mean.h
@@ -271,8 +265,6 @@ def calculate_HZ_absolutes(
             starttime=starttime,
             endtime=endtime,
         ),
-        horizontal_component,
-        vertical_component,
     )
 
 
@@ -409,7 +401,7 @@ def calculate_D_computed(
 
     d_computed = np.average(
         [
-            np.degrees(np.arctan(m.e / (m.h + h_baseline)))
+            -1 * np.degrees(np.arctan(m.e / (m.h + h_baseline)))
             for m in declination_measurements
         ]
     )
@@ -493,28 +485,6 @@ def calculate_magnetic_azimuth_of_mark(
     return magnetic_azimuth_of_mark
 
 
-def calculate_ordinate_f(
-    corrected_f: float,
-    pier_correction: float,
-) -> float:
-    """Calculate ordinate_f.
-
-    Parameters
-    ----------
-    corrected_f: float,
-    pier_correction:float,
-
-
-    Returns
-    -------
-    Calculated ordinate_f
-    """
-
-    ordinate_f = corrected_f - pier_correction
-
-    return ordinate_f
-
-
 def calculate_ordinate_d(
     absoluteD_absolute: float,
     absoluteD_baseline: float,
@@ -576,8 +546,46 @@ def calculate_ordinate_h(
     -------
     Calculated ordinate_h
     """
-    ordinate_e = absoluteH_absolute * np.sin(ordinate_d)
+    ordinate_e = absoluteH_absolute * np.sin(np.radians(ordinate_d))
 
     ordinate_h = np.sqrt(absoluteH_absolute**2 - ordinate_e**2) - absoluteH_baseline
 
     return ordinate_h
+
+
+def calculate_horizontal_component(inclination: float, corrected_f: float) -> float:
+    """Calculate horizontal_component.
+
+    Parameters
+    ----------
+    inclination: calculated inclination.
+    corrected_f: calculated f with pier correction.
+
+    Returns
+    -------
+    Calculated horizontal_component
+    """
+
+    inclination_radians = np.radians(inclination)
+    horizontal_component = corrected_f * np.cos(inclination_radians)
+
+    return horizontal_component
+
+
+def calculate_vertical_component(inclination: float, corrected_f: float) -> float:
+    """Calculate vertical_component.
+
+    Parameters
+    ----------
+    inclination: calculated inclination.
+    corrected_f: calculated f with pier correction.
+
+    Returns
+    -------
+    Calculated vertical_component
+    """
+
+    inclination_radians = np.radians(inclination)
+    vertical_component = corrected_f * np.sin(inclination_radians)
+
+    return vertical_component
diff --git a/geomagio/residual/Diagnostics.py b/geomagio/residual/Diagnostics.py
index 7844cb7b..7c75de63 100644
--- a/geomagio/residual/Diagnostics.py
+++ b/geomagio/residual/Diagnostics.py
@@ -8,11 +8,10 @@ class Diagnostics(BaseModel):
 
     Attributes
     ----------
-     corrected_f: Optional[float] = None
+    corrected_f: Optional[float] = None
     d_computed: Optional[float] = None
     horizontal_component: Optional[float] = None
-    horizontal_component: Optional[float] = None
-    inclination: float
+    inclination: Optional[float] = None
     magnetic_azimuth_of_mark: Optional[float] = None
     magnetic_south_meridian: Optional[float] = None
     mean_mark: Optional[float] = None
@@ -22,19 +21,16 @@ class Diagnostics(BaseModel):
     ordinate_h: Optional[float] = None
     ordinate_z: Optional[float] = None
     r_computed: Optional[float] = None
-    scale_value: Optional[float] = None
     vertical_component: Optional[float] = None
     """
 
     corrected_f: Optional[float] = None
     d_computed: Optional[float] = None
     horizontal_component: Optional[float] = None
-    horizontal_component: Optional[float] = None
-    inclination: float
+    inclination: Optional[float] = None
     magnetic_azimuth_of_mark: Optional[float] = None
     magnetic_south_meridian: Optional[float] = None
     mean_mark: Optional[float] = None
-    meridian: Optional[float] = None
     ordinate_d: Optional[float] = None
     ordinate_f: Optional[float] = None
     ordinate_h: Optional[float] = None
-- 
GitLab