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