From 4fb86fb67f0787c48c636095995f2571a5364aaa Mon Sep 17 00:00:00 2001
From: Mark Driver <mdd31@cam.ac.uk>
Date: Fri, 7 Jul 2017 20:45:40 +0100
Subject: [PATCH] added more functions to do it from a higher level, and rename
 some input variables for greater clarity.

---
 .../polynomialcomparison.py                   | 28 +++++++++++++------
 .../polynomialcomparisontest.py               | 24 ++++++++++++++--
 2 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/solventmapcreator/polynomialanalysis/polynomialcomparison.py b/solventmapcreator/polynomialanalysis/polynomialcomparison.py
index 9d2e813..f78446f 100644
--- a/solventmapcreator/polynomialanalysis/polynomialcomparison.py
+++ b/solventmapcreator/polynomialanalysis/polynomialcomparison.py
@@ -15,15 +15,21 @@ logging.basicConfig()
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.WARN)
 
-def calculate_hausdorff_distance_matrix(x_values, polynomial_dict_by_solvent_id):
+def calculate_hausdorff_distance_matrix_from_poly_coeff(x_values, polynomial_order, poly_data_by_id):
+    """This first extracts and calculates the values, then returns the Hausdorff matrix.
+    """
+    polynomial_values_by_id = calculate_polynomial_values_all_solvents(x_values, polynomial_order, poly_data_by_id)
+    return calculate_hausdorff_distance_matrix(x_values, polynomial_values_by_id)
+
+def calculate_hausdorff_distance_matrix(x_values, polynomial_values_dict_by_solvent_id):
     """This calculates the hausdorff distance between all polynomial curves.
     """
-    sorted_id_list = get_sorted_solvent_id_list(polynomial_dict_by_solvent_id)
+    sorted_id_list = get_sorted_solvent_id_list(polynomial_values_dict_by_solvent_id)
     hausdorff_matrix = np.zeros((len(sorted_id_list), len(sorted_id_list)))
     for i in range(len(sorted_id_list)):
-        poly_values_i = polynomial_dict_by_solvent_id[sorted_id_list[i]]
+        poly_values_i = polynomial_values_dict_by_solvent_id[sorted_id_list[i]]
         for j in range(i):
-            poly_values_j = polynomial_dict_by_solvent_id[sorted_id_list[j]]
+            poly_values_j = polynomial_values_dict_by_solvent_id[sorted_id_list[j]]
             hausdorff_value = calculate_hausdorff_distance(x_values, poly_values_i, poly_values_j)
             if i == j:
                 hausdorff_matrix[i][i] = hausdorff_value
@@ -32,15 +38,21 @@ def calculate_hausdorff_distance_matrix(x_values, polynomial_dict_by_solvent_id)
                 hausdorff_matrix[j][i] = hausdorff_value
     return hausdorff_matrix
 
-def calculate_rmsd_matrix(polynomial_dict_by_solvent_id):
+def calculate_rmsd_matrix_from_poly_coeff(x_values, polynomial_order, poly_data_by_id):
+    """This first extracts and calculates the values, then returns the RMSD matrix.
+    """
+    polynomial_values_by_id = calculate_polynomial_values_all_solvents(x_values, polynomial_order, poly_data_by_id)
+    return calculate_rmsd_matrix(polynomial_values_by_id)
+
+def calculate_rmsd_matrix(polynomial_values_dict_by_solvent_id):
     """This calculates the rmsd between all curves, and outputs a matrix.
     """
-    sorted_id_list = get_sorted_solvent_id_list(polynomial_dict_by_solvent_id)
+    sorted_id_list = get_sorted_solvent_id_list(polynomial_values_dict_by_solvent_id)
     rmsd_matrix = np.zeros((len(sorted_id_list), len(sorted_id_list)))
     for i in range(len(sorted_id_list)):
-        poly_values_i = polynomial_dict_by_solvent_id[sorted_id_list[i]]
+        poly_values_i = polynomial_values_dict_by_solvent_id[sorted_id_list[i]]
         for j in range(i):
-            poly_values_j = polynomial_dict_by_solvent_id[sorted_id_list[j]]
+            poly_values_j = polynomial_values_dict_by_solvent_id[sorted_id_list[j]]
             rmsd_value = calculate_rmsd_between_curves(poly_values_i, poly_values_j)
             #Noting that the matrix is symmetric
             if i == j:
diff --git a/solventmapcreator/test/polynomialanalysistest/polynomialcomparisontest.py b/solventmapcreator/test/polynomialanalysistest/polynomialcomparisontest.py
index 1047d4c..3740157 100644
--- a/solventmapcreator/test/polynomialanalysistest/polynomialcomparisontest.py
+++ b/solventmapcreator/test/polynomialanalysistest/polynomialcomparisontest.py
@@ -46,8 +46,20 @@ class PolynomialComparisonTestCase(unittest.TestCase):
         del self.poly_data_by_solvent_id
         del self.x_values
         del self.poly_values_dict
-    def test_calculate_hausdorff_distance_matrix(self):
+    def test_(self):
+        """
         """
+    def test_calculate_hausdorff_distance_matrix_from_poly_coeff(self):
+        """Test tp see if expected matrix is produced.
+        """
+        expected_matrix = np.array([[0.0, 1.0, 4.0],
+                                    [1.0, 0.0, 3.0],
+                                    [4.0, 3.0, 0.0]])
+        actual_matrix = polynomialcomparison.calculate_hausdorff_distance_matrix_from_poly_coeff(self.x_values,
+                                                                                                 2, self.poly_data_by_solvent_id)
+        np.testing.assert_array_almost_equal(expected_matrix, actual_matrix)
+    def test_calculate_hausdorff_distance_matrix(self):
+        """Test to see if expected matrix is produced.
         """
         expected_matrix = np.array([[0.0, 1.0, 4.0],
                                     [1.0, 0.0, 3.0],
@@ -55,6 +67,14 @@ class PolynomialComparisonTestCase(unittest.TestCase):
         actual_matrix = polynomialcomparison.calculate_hausdorff_distance_matrix(self.x_values,
                                                                                  self.poly_values_dict)
         np.testing.assert_array_almost_equal(expected_matrix, actual_matrix)
+    def test_calculate_rmsd_matrix_from_poly_coeff(self):
+        """Test to see if expected matrix is generated.
+        """
+        expected_matrix = np.array([[0.0, 1.0, 2.607681],
+                                    [1.0, 0.0, 1.949359],
+                                    [2.607681, 1.949359, 0.0]])
+        actual_matrix = polynomialcomparison.calculate_rmsd_matrix_from_poly_coeff(self.x_values, 2, self.poly_data_by_solvent_id)
+        np.testing.assert_array_almost_equal(expected_matrix, actual_matrix)
     def test_calculate_rmsd_matrix(self):
         """Test to see if expected RMSD matrix is produced.
         """
@@ -115,4 +135,4 @@ class PolynomialComparisonTestCase(unittest.TestCase):
         expected_values = np.array([4.0, 1.0, 0.0, 1.0, 4.0])
         poly_coefficients = self.poly_data_by_solvent_id["poly_fit"][2]["coefficients"]
         actual_values = polynomialcomparison.calculate_polynomial_values(self.x_values, poly_coefficients)
-        np.testing.assert_array_almost_equal(expected_values, actual_values)
\ No newline at end of file
+        np.testing.assert_array_almost_equal(expected_values, actual_values)
-- 
GitLab