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