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