From a2e5f405c7622b81e62a624b9080debd918e34ec Mon Sep 17 00:00:00 2001
From: pcain-usgs <pcain@usgs.gov>
Date: Fri, 8 May 2020 12:56:54 -0600
Subject: [PATCH] Remove HEZ matrix size dependancy

---
 geomagio/algorithm/AdjustedAlgorithm.py | 59 +++++++++----------------
 1 file changed, 22 insertions(+), 37 deletions(-)

diff --git a/geomagio/algorithm/AdjustedAlgorithm.py b/geomagio/algorithm/AdjustedAlgorithm.py
index e2cdd4b0a..ee7f06c55 100644
--- a/geomagio/algorithm/AdjustedAlgorithm.py
+++ b/geomagio/algorithm/AdjustedAlgorithm.py
@@ -40,7 +40,7 @@ class AdjustedAlgorithm(Algorithm):
         """Load algorithm state from a file.
         File name is self.statefile.
         """
-        self.matrix = np.eye(4)
+        self.matrix = None
         self.pier_correction = 0
         if self.statefile is None:
             return
@@ -53,23 +53,18 @@ class AdjustedAlgorithm(Algorithm):
             sys.stderr.write("I/O error {0}".format(err))
         if data is None or data == "":
             return
-        self.matrix[0, 0] = np.float64(data["M11"])
-        self.matrix[0, 1] = np.float64(data["M12"])
-        self.matrix[0, 2] = np.float64(data["M13"])
-        self.matrix[0, 3] = np.float64(data["M14"])
-        self.matrix[1, 0] = np.float64(data["M21"])
-        self.matrix[1, 1] = np.float64(data["M22"])
-        self.matrix[1, 2] = np.float64(data["M23"])
-        self.matrix[1, 3] = np.float64(data["M24"])
-        self.matrix[2, 0] = np.float64(data["M31"])
-        self.matrix[2, 1] = np.float64(data["M32"])
-        self.matrix[2, 2] = np.float64(data["M33"])
-        self.matrix[2, 3] = np.float64(data["M34"])
-        self.matrix[3, 0] = np.float64(data["M41"])
-        self.matrix[3, 1] = np.float64(data["M42"])
-        self.matrix[3, 2] = np.float64(data["M43"])
-        self.matrix[3, 3] = np.float64(data["M44"])
-        self.pier_correction = np.float64(data["PC"])
+
+        PC = data.pop("PC")
+        self.pier_correction = np.float64(PC)
+        # excludes PC
+        keys = list(data.keys())
+        # get maximum row/colum number
+        length = int(max(keys)[-1])
+        self.matrix = np.eye(length)
+        for i in range(length):
+            for j in range(length):
+                key = "M" + str(i + 1) + str(j + 1)
+                self.matrix[i, j] = np.float64(data[key])
 
     def save_state(self):
         """Save algorithm state to a file.
@@ -77,25 +72,15 @@ class AdjustedAlgorithm(Algorithm):
         """
         if self.statefile is None:
             return
-        data = {
-            "M11": self.matrix[0, 0],
-            "M12": self.matrix[0, 1],
-            "M13": self.matrix[0, 2],
-            "M14": self.matrix[0, 3],
-            "M21": self.matrix[1, 0],
-            "M22": self.matrix[1, 1],
-            "M23": self.matrix[1, 2],
-            "M24": self.matrix[1, 3],
-            "M31": self.matrix[2, 0],
-            "M32": self.matrix[2, 1],
-            "M33": self.matrix[2, 2],
-            "M34": self.matrix[2, 3],
-            "M41": self.matrix[3, 0],
-            "M42": self.matrix[3, 1],
-            "M43": self.matrix[3, 2],
-            "M44": self.matrix[3, 3],
-            "PC": self.pier_correction,
-        }
+        data = {"PC": self.pier_correction}
+
+        length = len(self.matrix[0, :])
+
+        for i in range(length):
+            for j in range(length):
+                key = "M" + str(i + 1) + str(j + 1)
+                data[key] = self.matrix[i, j]
+
         with open(self.statefile, "w") as f:
             f.write(json.dumps(data))
 
-- 
GitLab