From b3b97872c129406257cebc25932d994deae2c6d6 Mon Sep 17 00:00:00 2001
From: Mark Driver <mdd31@cam.ac.uk>
Date: Wed, 9 Aug 2017 21:35:00 +0100
Subject: [PATCH] add methods to write out fitting to the two sections.

---
 .../polynomialanalysis/polynomialplotting.py  | 20 +++++++++++
 .../polynomialplottingtest.py                 | 35 +++++++++++++++++++
 .../test/resources/water_poly_fit_split.csv   |  5 +++
 3 files changed, 60 insertions(+)
 create mode 100644 solventmapcreator/test/resources/water_poly_fit_split.csv

diff --git a/solventmapcreator/polynomialanalysis/polynomialplotting.py b/solventmapcreator/polynomialanalysis/polynomialplotting.py
index 9c4faab..083144f 100644
--- a/solventmapcreator/polynomialanalysis/polynomialplotting.py
+++ b/solventmapcreator/polynomialanalysis/polynomialplotting.py
@@ -31,6 +31,26 @@ 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_poly_data_to_file_split_fit(free_energy_filename, order_list, poly_filename,
+                                      pos_subset_list, neg_subset_list):
+    """This reads in the energy information, and then performs the fits on the
+    two separate subsets, and outputs to file.
+    """
+    datapoints = parse_free_energy_from_file_with_data_arrays(free_energy_filename)
+    return write_poly_data_to_file_split_fit(datapoints, order_list, poly_filename,
+                                             pos_subset_list, neg_subset_list)
+
+def write_poly_data_to_file_split_fit(datapoints, order_list, filename,
+                                      pos_subset_list, neg_subset_list):
+    """This calculates the polynomial information for fitting to the 2 sub sets
+    and writes to file.
+    """
+    return polynomialdatawriter.write_poly_data_to_file_split_fit(datapoints,
+                                                                  order_list,
+                                                                  filename,
+                                                                  pos_subset_list,
+                                                                  neg_subset_list)
+
 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.
diff --git a/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py b/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py
index 9c37b76..1a2a210 100644
--- a/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py
+++ b/solventmapcreator/test/polynomialanalysistest/polynomialplottingtest.py
@@ -32,6 +32,8 @@ class PolynomialPlottingTestCase(unittest.TestCase):
             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")
+        if os.path.isfile("actual_water_poly_fit_split.csv"):
+            os.remove("actual_water_poly_fit_split.csv")
     def test_parse_energies_create_plot_input_data(self):
         """Test to see expected plot data is returned.
         """
@@ -71,6 +73,39 @@ class PolynomialPlottingTestCase(unittest.TestCase):
             else:
                 LOGGER.debug("assert equal string")
                 self.assertEqual(actual_dict[key], expected_dict[key])
+    def test_parse_poly_data_to_file_split_fit(self):
+        """Test to see if expected fit is done on the positive and negative subsets
+        after the file was read in.
+        """
+        expected_file_name = "resources/water_poly_fit_split.csv"
+        actual_file_name = "actual_water_poly_fit_split.csv"
+        neg_set_list = ["-5.400solute", "-4.300solute", "-9.100solute", "-11.100solute", "-15.400solute"]
+        pos_set_list = ["0.500solute", "1.200solute", "7.200solute"]
+        poly_file_out = polynomialplotting.parse_poly_data_to_file_split_fit("resources/water.xml", [2, 4],
+                                                                             actual_file_name, pos_set_list,
+                                                                             neg_set_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_write_poly_data_to_file_split_fit(self):
+        """Test to see if expected_fit is done on the positive and negative subsets.
+        """
+        expected_file_name = "resources/water_poly_fit_split.csv"
+        actual_file_name = "actual_water_poly_fit_split.csv"
+        neg_set_list = ["-5.400solute", "-4.300solute", "-9.100solute", "-11.100solute", "-15.400solute"]
+        pos_set_list = ["0.500solute", "1.200solute", "7.200solute"]
+        poly_file_out = polynomialplotting.write_poly_data_to_file_split_fit(self.expected_datapoints, [2,4],
+                                                                             actual_file_name, pos_set_list,
+                                                                             neg_set_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_subset(self):
         """Test to see if expected_fit is done on a smaller subset of points.
         """
diff --git a/solventmapcreator/test/resources/water_poly_fit_split.csv b/solventmapcreator/test/resources/water_poly_fit_split.csv
new file mode 100644
index 0000000..39d3f9a
--- /dev/null
+++ b/solventmapcreator/test/resources/water_poly_fit_split.csv
@@ -0,0 +1,5 @@
+Order	Fit Range	RMSE	Covariance	Coefficients
+2	positive	0.0000000	1.2077460	-0.8992891	-0.3969325
+2	negative	0.0188857	0.0017833	6.3245323	2.8927088	-0.0017566
+4	positive	0.0000000	1.3515748	-1.3179762	-0.1267861	-0.0151557	-0.0020380
+4	negative	0.0000000	5.0388427	2.2906276	-0.0985583	-0.0064807	-0.0001546
-- 
GitLab