From fc8ef0ecc68487d6346b376d58072bc869b62129 Mon Sep 17 00:00:00 2001 From: Mark Driver <mdd31@cam.ac.uk> Date: Tue, 18 Jul 2017 22:32:39 +0100 Subject: [PATCH] created script for calculating the fractional occupancy of a phase, and corresponding tests. --- .../fractionaloccupancycalculator.py | 36 ++++++++++++++++ .../fractionaloccupancycalculatortest.py | 43 +++++++++++++++++++ .../test/solvationmapcreatortests.py | 4 +- 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 solventmapcreator/solvationcalculation/fractionaloccupancycalculator.py create mode 100644 solventmapcreator/test/solvationcalculationtest/fractionaloccupancycalculatortest.py diff --git a/solventmapcreator/solvationcalculation/fractionaloccupancycalculator.py b/solventmapcreator/solvationcalculation/fractionaloccupancycalculator.py new file mode 100644 index 0000000..f8be0ae --- /dev/null +++ b/solventmapcreator/solvationcalculation/fractionaloccupancycalculator.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +This calculates the fractional occupancy for a phase. This calculates the +solvent contribution from the given file containing solvent xml, and adds the +contribution for the single solute SSIP at the given concentration. + +@author: mark +""" + +import logging +import solventmapcreator.io.solventxmlreader as solventxmlreader + +logging.basicConfig() +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.WARN) + +def calculate_fractional_occupancy_for_phase(solvent_filename, solvent_id, solute_concentration): + """This calculates the fractional occupancy of the phase. This is the sum + of the solvent and solute contributions. + """ + solvent_fractional_occupancy = get_fractional_occupancy_for_solvent_from_file(solvent_filename, solvent_id) + solute_fractional_occupancy = calculate_fractional_occupancy_contribution_from_solute(solute_concentration) + return solute_fractional_occupancy + solvent_fractional_occupancy + +def calculate_fractional_occupancy_contribution_from_solute(solute_concentration): + """This calculates the fractional occupancy contribution for the + solute concentration given. This assumes teh solute is a single SSIP. + """ + return solute_concentration/solventxmlreader.IDEAL_MAX_SSIP_CONCENTRATION_MOLAR + +def get_fractional_occupancy_for_solvent_from_file(solvent_filename, solvent_id): + """This reads in the file and gets the fractional occupancy contribution + from the solvent. + """ + return solventxmlreader.get_fractional_occupancy_for_solvent_from_file(solvent_filename, solvent_id) diff --git a/solventmapcreator/test/solvationcalculationtest/fractionaloccupancycalculatortest.py b/solventmapcreator/test/solvationcalculationtest/fractionaloccupancycalculatortest.py new file mode 100644 index 0000000..9669876 --- /dev/null +++ b/solventmapcreator/test/solvationcalculationtest/fractionaloccupancycalculatortest.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Script for testing the fractionaloccupancycalculator + +@author: mark +""" + +import logging +import unittest +import solventmapcreator.solvationcalculation.fractionaloccupancycalculator as fractionaloccupancycalculator + +logging.basicConfig() +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.WARN) + +class FractionalOccupancyCalculatorTestCase(unittest.TestCase): + """Test case for the fractionaloccupancycalculator script. + """ + def setUp(self): + """Set up for tests. + """ + def tearDown(self): + """Clean up after tests. + """ + def test_calculate_fractional_occupancy_for_phase(self): + """Test to see if expected value is returned. + """ + expected_value = (55.35 * 4.0 /300.0) + (0.001/300) + actual_value = fractionaloccupancycalculator.calculate_fractional_occupancy_for_phase("resources/watersolvent.xml", + "water", 0.001) + def test_calculate_fractional_occupancy_contribution_from_solute(self): + """Test to see if expected value is returned. + """ + expected_value = 0.001/300 + actual_value = fractionaloccupancycalculator.calculate_fractional_occupancy_contribution_from_solute(0.001) + self.assertAlmostEqual(expected_value, actual_value) + def test_get_fractional_occupancy_for_solvent_from_file(self): + """Test to see if fractional occupancy is as expected. + """ + expected_value = 55.35 * 4.0 /300.0 + actual_value = fractionaloccupancycalculator.get_fractional_occupancy_for_solvent_from_file("resources/watersolvent.xml", "water") + self.assertAlmostEqual(expected_value, actual_value) \ No newline at end of file diff --git a/solventmapcreator/test/solvationmapcreatortests.py b/solventmapcreator/test/solvationmapcreatortests.py index 9f274dc..d3808dc 100644 --- a/solventmapcreator/test/solvationmapcreatortests.py +++ b/solventmapcreator/test/solvationmapcreatortests.py @@ -13,6 +13,7 @@ from solventmapcreator.test.iotest.solventxmlreadertest import SolventXMLReaderT from solventmapcreator.test.iotest.polynomialdatawritertest import PolynomialDataWriterTestCase from solventmapcreator.test.iotest.polynomialdatareadertest import PolynomialDataReaderTestCase from solventmapcreator.test.solvationcalculationtest.solvationcalculatortest import SolvationCalculatorTestCase +from solventmapcreator.test.solvationcalculationtest.fractionaloccupancycalculatortest import FractionalOccupancyCalculatorTestCase from solventmapcreator.test.polynomialanalysistest.polynomialdataanalysistest import PolynomialDataAnalysisTestCase from solventmapcreator.test.polynomialanalysistest.polynomialcomparisontest import PolynomialComparisonTestCase @@ -23,7 +24,8 @@ LOGGER.setLevel(logging.WARN) IO_TEST_CASES = [SolvationEnergyReaderTestCase, SolventXMLReaderTestCase, PolynomialDataWriterTestCase, PolynomialDataReaderTestCase] -SOLVATION_CALCULATION_TEST_CASES = [SolvationCalculatorTestCase] +SOLVATION_CALCULATION_TEST_CASES = [SolvationCalculatorTestCase, + FractionalOccupancyCalculatorTestCase] POLYNOMIAL_ANALYSIS_TEST_CASES = [PolynomialDataAnalysisTestCase, PolynomialComparisonTestCase] -- GitLab