From ef4d25f62b4473cdca7cdfcba5f1a956a14e1251 Mon Sep 17 00:00:00 2001
From: Mark Driver <mdd31@cam.ac.uk>
Date: Mon, 24 Jul 2017 10:01:54 +0100
Subject: [PATCH] added method to do polynomial analysis on a subset of points.

---
 .../polynomialanalysis/polynomialplotting.py      | 10 ++++++++++
 .../polynomialplottingtest.py                     | 15 +++++++++++++++
 .../test/resources/water_poly_fit_subset.csv      |  3 +++
 3 files changed, 28 insertions(+)
 create mode 100644 solventmapcreator/test/resources/water_poly_fit_subset.csv

diff --git a/solventmapcreator/polynomialanalysis/polynomialplotting.py b/solventmapcreator/polynomialanalysis/polynomialplotting.py
index d7fdbd1..9c4faab 100644
--- a/solventmapcreator/polynomialanalysis/polynomialplotting.py
+++ b/solventmapcreator/polynomialanalysis/polynomialplotting.py
@@ -31,6 +31,16 @@ def parse_energies_create_plot_input_data(free_energy_filename, polynomial_order
     plot_data['figure_label'] = free_energy_filename.replace('.xml', '')
     return plot_data
 
+def parse_energies_and_output_poly_data_subset(free_energy_filename, order_list, poly_filename, subset_list):
+    """This reads in the energy information, and then selects teh subset of
+    points to carry out the analysis on, outputs the polynomial information to file.
+    """
+    datapoints = parse_free_energy_from_file_with_data_arrays(free_energy_filename)
+    datapoints_subset = datapoints.createDatapointsSubGroup(subset_list)
+    datapoints_subset.createDataArrays()
+    return write_poly_data_to_file(datapoints_subset, order_list, poly_filename)
+    
+
 def parse_energies_and_output_poly_data(free_energy_filename, order_list, poly_filename):
     """This reads in the energy information, and then outputs the polynomial
     information to file.
diff --git a/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py b/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py
index 3a50db7..5b01f83 100644
--- a/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py
+++ b/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py
@@ -30,6 +30,8 @@ class PolynomialPlottingTestCase(unittest.TestCase):
         del self.expected_datapoints
         if os.path.isfile("actual_water_poly_fit.csv"):
             os.remove("actual_water_poly_fit.csv")
+        if os.path.isfile("actual_water_poly_fit_subset.csv"):
+            os.remove("actual_water_poly_fit_subset.csv")
     def test_parse_energies_create_plot_input_data(self):
         """Test to see expected plot data is returned.
         """
@@ -69,6 +71,19 @@ class PolynomialPlottingTestCase(unittest.TestCase):
             else:
                 LOGGER.debug("assert equal string")
                 self.assertEqual(actual_dict[key], expected_dict[key])
+    def test_parse_energies_and_output_poly_data_subset(self):
+        """Test to see if expected_fit is done on a smaller subset of points.
+        """
+        expected_file_name = "resources/water_poly_fit_subset.csv"
+        actual_file_name = "actual_water_poly_fit_subset.csv"
+        subset_list = ["-5.400solute", "-4.300solute", "-9.100solute", "-11.100solute", "-15.400solute"]
+        poly_file_out = polynomialplotting.parse_energies_and_output_poly_data_subset("resources/water.xml", [2, 4], actual_file_name, subset_list)
+        self.assertEqual(0, poly_file_out)
+        with open(expected_file_name, 'r') as exp_file:
+            exp_file_lines = exp_file.readlines()
+            with open(actual_file_name, 'r') as act_file:
+                act_file_lines = act_file.readlines()
+                self.assertListEqual(act_file_lines, exp_file_lines)
     def test_parse_energies_and_output_poly_data(self):
         """Test to see if expected polynomial fit information is outputted to file.
         """
diff --git a/solventmapcreator/test/resources/water_poly_fit_subset.csv b/solventmapcreator/test/resources/water_poly_fit_subset.csv
new file mode 100644
index 0000000..bd92d55
--- /dev/null
+++ b/solventmapcreator/test/resources/water_poly_fit_subset.csv
@@ -0,0 +1,3 @@
+Order	RMSE	Covariance	Coefficients
+2	0.0188857	0.0017833	6.3245323	2.8927088	-0.0017566
+4	0.0000000	5.0388427	2.2906276	-0.0985583	-0.0064807	-0.0001546
-- 
GitLab