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