From 119926e016392a72e5a9243c5e62e3a379586f30 Mon Sep 17 00:00:00 2001 From: Mark Driver <mdd31@cam.ac.uk> Date: Wed, 11 Jul 2018 18:21:50 +0100 Subject: [PATCH] update plotting routines. --- .../solvationplotinformation.py | 28 ++++++++++++++++--- .../solvationmapgeneratortest.py | 8 ++++-- .../solvationplotinformationtest.py | 27 ++++++++++++++---- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/solventmapcreator/solvationcalculation/solvationplotinformation.py b/solventmapcreator/solvationcalculation/solvationplotinformation.py index 557ae68..af7267b 100644 --- a/solventmapcreator/solvationcalculation/solvationplotinformation.py +++ b/solventmapcreator/solvationcalculation/solvationplotinformation.py @@ -18,15 +18,35 @@ def create_plot_input_data(epsilon_i_list, epsilon_j_list, temperature, theta, p """This creates a dictionary containing the input data and labels for plotting. """ input_data_values = create_input_data_values(epsilon_i_list, epsilon_j_list, temperature, theta, polynomial_coefficients) - input_data_labels = create_input_data_labels(epsilon_i_list, epsilon_j_list, x_label, y_label) + input_data_labels = create_input_data_labels(input_data_values, x_label, y_label) return {**input_data_values, **input_data_labels} -def create_input_data_labels(epsilon_i_list, epsilon_j_list, x_label, y_label): +def create_input_data_labels(input_data_values, x_label, y_label): """This creates a dictionary containing the labels with annotations. """ - axis_range = get_axis_range(epsilon_i_list, epsilon_j_list) + axis_range = get_axis_range(input_data_values["x_data"], input_data_values["y_data"]) + line_lists = create_line_lists(axis_range) + level_min = int(np.floor(input_data_values["z_data"].min())) + if level_min%2 == 0: + level_min = level_min - 1 + levels_list = range(level_min, int(np.ceil(input_data_values["z_data"].max()))+1,2) return {"x_label":x_label, "y_label":y_label, "plot_axis_range":axis_range, - "levels":[2*x -31 for x in range(32)]} + "levels":levels_list, **line_lists} + +def create_line_lists(axis_range): + """This creates the lists of values for horizontal and vertical lines. + """ + x_range = int(np.abs(axis_range[0] - axis_range[1])) + y_range = int(np.abs(axis_range[2]- axis_range[3])) + if y_range <= 5: + h_lines = [x/4.0 for x in range(int(np.floor(axis_range[2])), 4 * y_range + 1)] + else: + h_lines = [x/2.0 for x in range(int(np.floor(axis_range[2])), 2 * y_range + 1)] + if x_range <= 5: + v_lines = [x/4.0 for x in range(int(np.floor(axis_range[0])), 4 * x_range + 1)] + else: + v_lines = [x/2.0 for x in range(int(np.floor(axis_range[0])), 2 * x_range + 1)] + return {"h_lines":h_lines, "v_lines":v_lines} def create_input_data_values(epsilon_i_list, epsilon_j_list, temperature, theta, polynomial_coefficients): """This calculates the association energy matrix, and also generates the meshgrids ofthe x and y data. diff --git a/solventmapcreator/test/solvationcalculationtest/solvationmapgeneratortest.py b/solventmapcreator/test/solvationcalculationtest/solvationmapgeneratortest.py index 952beec..2190fb4 100644 --- a/solventmapcreator/test/solvationcalculationtest/solvationmapgeneratortest.py +++ b/solventmapcreator/test/solvationcalculationtest/solvationmapgeneratortest.py @@ -67,7 +67,9 @@ class SolvationMapGeneratorTestCase(unittest.TestCase): "x_label":"$\\beta$", "y_label":"$\\alpha$", "plot_axis_range":(2.0, 0.0, 0.0, 1.0), "figure_label":"water_solv_map", - "levels":[2*x -31.0 for x in range(32)]} + "levels":[-9, -7, -5], + "h_lines":[0., 0.25, 0.5, 0.75, 1.0], + "v_lines":[0.5, 0.75, 1., 1.25, 1.5, 1.75, 2.]} actual_dict = solvationmapgenerator.create_plot_input_data_from_files(self.epsilon_i_list, self.epsilon_j_list, "resources/watersolvent.xml", "water", "resources/expected_poly_fit.csv", 1) @@ -105,7 +107,9 @@ class SolvationMapGeneratorTestCase(unittest.TestCase): [-8.93648 , -8.759837]]), "x_label":"x_label", "y_label":"y_label", "plot_axis_range":(2.0, 0.0, 0.0, 1.0), - "levels":[2*x -31.0 for x in range(32)]} + "levels":[-9, -7], + "h_lines":[0., 0.25, 0.5, 0.75, 1.0], + "v_lines":[0.5, 0.75, 1., 1.25, 1.5, 1.75, 2.]} actual_dict = solvationmapgenerator.create_plot_input_data(self.epsilon_i_list, self.epsilon_j_list, 298.0, 1.0, diff --git a/solventmapcreator/test/solvationcalculationtest/solvationplotinformationtest.py b/solventmapcreator/test/solvationcalculationtest/solvationplotinformationtest.py index 90c9f39..b96e49d 100644 --- a/solventmapcreator/test/solvationcalculationtest/solvationplotinformationtest.py +++ b/solventmapcreator/test/solvationcalculationtest/solvationplotinformationtest.py @@ -38,13 +38,15 @@ class SolvationPlotInformationTestCase(unittest.TestCase): [-8.93648 , -8.759837]]), "x_label":"x_label", "y_label":"y_label", "plot_axis_range":(2.0, 0.0, 0.0, 1.0), - "levels":[2*x -31 for x in range(32)]} + "levels":[-9, -7], + "h_lines":[0., 0.25, 0.5, 0.75, 1.0], + "v_lines":[0.5, 0.75, 1., 1.25, 1.5, 1.75, 2.]} actual_dict = solvationplotinformation.create_plot_input_data(self.epsilon_i_list, self.epsilon_j_list, 298.0, 1.0, np.array([0.5, 1.0]), "x_label", "y_label") self.assertListEqual(sorted(expected_dict.keys()), sorted(actual_dict.keys())) for key in expected_dict.keys(): if key == "plot_axis_range": np.testing.assert_array_almost_equal(np.array(expected_dict[key]), np.array(actual_dict[key])) - elif "levels" == key: + elif "levels" == key or "_lines" in key: np.testing.assert_array_equal(np.array(expected_dict[key]), np.array(actual_dict[key])) elif "_data" in key: np.testing.assert_array_almost_equal(expected_dict[key], actual_dict[key]) @@ -55,16 +57,31 @@ class SolvationPlotInformationTestCase(unittest.TestCase): """ expected_dict = {"x_label":"x_label", "y_label":"y_label", "plot_axis_range":(2.0, 0.0, 0.0, 1.0), - "levels":[2*x -31 for x in range(32)]} - actual_dict = solvationplotinformation.create_input_data_labels(self.epsilon_i_list, self.epsilon_j_list, "x_label", "y_label") + "levels":[-9, -7], + "h_lines":[0., 0.25, 0.5, 0.75, 1.0], + "v_lines":[0.5, 0.75, 1., 1.25, 1.5, 1.75, 2.]} + input_dict = {'x_data':np.array([[0, 0], [1, 1], [2, 2]]), + 'y_data':np.array([[0, 1], [0, 1], [0, 1]]), + 'z_data':np.array([[-7.396882, -8.217107], + [-8.217107, -8.573011], + [-8.93648 , -8.759837]])} + actual_dict = solvationplotinformation.create_input_data_labels(input_dict, "x_label", "y_label") self.assertListEqual(sorted(expected_dict.keys()), sorted(actual_dict.keys())) for key in expected_dict.keys(): if key == "plot_axis_range": np.testing.assert_array_almost_equal(np.array(expected_dict[key]), np.array(actual_dict[key])) - elif "levels" == key: + elif "levels" == key or "_lines" in key: np.testing.assert_array_equal(np.array(expected_dict[key]), np.array(actual_dict[key])) else: self.assertEqual(expected_dict[key], actual_dict[key]) + def test_create_line_lists(self): + """Test to se if expected values are returned. + """ + expected_dict = {"h_lines":[0., 0.25, 0.5, 0.75, 1.0], + "v_lines":[0.5, 0.75, 1., 1.25, 1.5, 1.75, 2.]} + actual_dict = solvationplotinformation.create_line_lists((2.0, 0.0, 0.0, 1.0)) + for key in expected_dict.keys(): + np.testing.assert_array_equal(np.array(expected_dict[key]), np.array(actual_dict[key])) def test_create_input_data_values(self): """Test to see if expected dictionary is produced. """ -- GitLab