From 6c20227159ef29cbdc113128dcb84cdefa7cd2b0 Mon Sep 17 00:00:00 2001
From: Mark Driver <mdd31@alumni.cam.ac.uk>
Date: Sat, 4 Apr 2020 15:45:23 +0100
Subject: [PATCH] update to phase calculator runner to produce summary of phase
 information from VLE calculation.

---
 .../runners/phasecalculatorrunner.py          | 31 +++++++++--
 .../runnerstest/phasecalculatorrunnertest.py  | 53 +++++++++++++------
 2 files changed, 62 insertions(+), 22 deletions(-)

diff --git a/phasecalculator/runners/phasecalculatorrunner.py b/phasecalculator/runners/phasecalculatorrunner.py
index 8b6d61d..356260f 100755
--- a/phasecalculator/runners/phasecalculatorrunner.py
+++ b/phasecalculator/runners/phasecalculatorrunner.py
@@ -188,9 +188,12 @@ def run_vle_analysis(system_info, phase_filename, **kwargs):
 
     """
     jar_path = system_info.runtime_information.phasetransfer_jar
-    output_filename = create_phase_output_filename(phase_filename)
-    return vlerun.run_vle_calculation(
-        jar_path, phase_filename, output_filename, **kwargs
+    phase_output_filename = create_phase_output_filename(phase_filename)
+    csv_filename = create_phase_summary_filename(system_info.runtime_information.output_dir,
+                                                 phase_filename)
+    vlerun.calculate_and_process_vle_data(
+        jar_path, phase_filename, phase_output_filename,
+        csv_filename, **kwargs
     )
 
 
@@ -211,9 +214,27 @@ def create_output_dir(system_info):
     output_path.mkdir(parents=True, exist_ok=True)
     return output_path.as_posix()
 
+def create_phase_summary_filename(output_dir, phase_filename):
+    """Create phase summary CSV filename.
+
+    Parameters
+    ----------
+    output_dir : str
+        output directory name.
+    phase_filename : str
+        phase filename.
+
+    Returns
+    -------
+    str
+        CSV filename.
+
+    """
+    summary_filename = phase_filename.split("/")[-1].replace(".xml", "calculation_summary.csv")
+    return (pathlib.Path(output_dir) /summary_filename).as_posix()
 
 def create_free_energy_output_filename(solvent_filename):
-    """Create free energy filename for solvent file. 
+    """Create free energy filename for solvent file.
 
     Parameters
     ----------
@@ -263,7 +284,7 @@ def create_fractional_occupancy_filename(solvent_filename):
     return solvent_filename.replace(".xml", "_fracocc.xml")
 
 def create_phase_output_filename(phase_filename):
-    """
+    """Create phase output filename.
 
     Parameters
     ----------
diff --git a/phasecalculator/test/runnerstest/phasecalculatorrunnertest.py b/phasecalculator/test/runnerstest/phasecalculatorrunnertest.py
index a8338b1..ba1e808 100755
--- a/phasecalculator/test/runnerstest/phasecalculatorrunnertest.py
+++ b/phasecalculator/test/runnerstest/phasecalculatorrunnertest.py
@@ -109,7 +109,19 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase):
             .absolute()
             .as_posix()
         )
+        self.expected_phase_output_filename = (
+            (parent_directory / "resources" / "expected_phasecalculated.xml")
+            .absolute()
+            .as_posix()
+        )
+        self.expected_phas_csv = (
+            (parent_directory / "resources" / "expected_phasesummary.csv")
+            .absolute()
+            .as_posix()
+        )
         self.phase_filename = "scratch/systemphase.xml"
+        self.phase_out_file = "scratch/systemphasecalculated.xml"
+        self.output_csv_file = "fgip/systemphasecalculation_summary.csv"
         self.solv_energy_dict = {
             "solvent_filename": self.expected_solvent_file,
             "temperature_value": 298.0,
@@ -166,7 +178,7 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase):
         )
         shutil.copyfile(self.expected_free_file, "scratch/systemsolvent_298.0Kfree.xml")
         shutil.copyfile(self.frac_occ_filename, "scratch/systemsolvent_298.0K_fracocc.xml")
-
+        shutil.copyfile(self.expected_phase_output_filename, self.phase_out_file)
     def test_run_all_analysis(self):
         """Test
 
@@ -181,6 +193,12 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase):
         self.assertTrue(pathlib.Path(self.solvent_map).is_file())
         self.assertTrue(pathlib.Path(self.fgip_file).is_file())
         self.assertTrue(pathlib.Path(self.similarity_file).is_file())
+        with open(self.output_csv_file, "r") as act_file:
+            actual_contents = act_file.read()
+            with open(self.expected_phas_csv, "r") as exp_file:
+                expected_contents = exp_file.read()
+                self.assertMultiLineEqual(expected_contents, actual_contents)
+
 
     def test_run_fgip_analysis(self):
         """Test
@@ -218,22 +236,12 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase):
         None.
 
         """
-        expected_args = [
-            "java",
-            "-jar",
-            self.example_jar,
-            "--phaseOut",
-            "--phaseCollectionList",
-            "--conccalc",
-            "--gascalc",
-            "--calc",
-            "--phaseFile",
-            self.phase_filename,
-            "-o",
-            self.phase_filename.replace(".xml", "calculated.xml"),
-        ]
-        process = pcalcrun.run_vle_analysis(self.system, self.phase_filename)
-        self.assertListEqual(expected_args, process.args)
+        pcalcrun.run_vle_analysis(self.system, self.phase_filename)
+        with open(self.output_csv_file, "r") as act_file:
+            actual_contents = act_file.read()
+            with open(self.expected_phas_csv, "r") as exp_file:
+                expected_contents = exp_file.read()
+                self.assertMultiLineEqual(expected_contents, actual_contents)
 
     def test_create_output_dir(self):
         """Test expected output directory created.
@@ -247,6 +255,17 @@ class PhaseCalculatorRunnerTestCase(unittest.TestCase):
             pathlib.Path(self.system.runtime_information.output_dir).is_dir()
         )
 
+    def test_create_phase_summary_filename(self):
+        """Test create phase summary filename.
+
+        Returns
+        -------
+        None.
+
+        """
+        expected_filename = "output/systemphasecalculation_summary.csv"
+        actual_filename = pcalcrun.create_phase_summary_filename("output", "scratch/systemphase.xml")
+        self.assertEqual(expected_filename, actual_filename)
     def test_create_free_energy_output_filename(self):
         """Test expected filename produced.
 
-- 
GitLab