From fd1e0e606c3cda2ba4d8dc7aca0d7003933579bf Mon Sep 17 00:00:00 2001
From: Mark Driver <mdd31@cam.ac.uk>
Date: Mon, 17 Jul 2017 22:49:04 +0100
Subject: [PATCH] started work on reader for solvent file.

---
 solventmapcreator/io/solventxmlreader.py | 74 ++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 solventmapcreator/io/solventxmlreader.py

diff --git a/solventmapcreator/io/solventxmlreader.py b/solventmapcreator/io/solventxmlreader.py
new file mode 100644
index 0000000..8b37989
--- /dev/null
+++ b/solventmapcreator/io/solventxmlreader.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Script for reading in the solvent XML, and to extract the concentration of
+each molecule in a solvent mixture, and the number of SSIPs corresponding to
+each molecule.
+
+This allows the calculation of the fractional occupancy of the phase.
+
+@author: mark
+"""
+
+import logging
+from lxml import etree
+
+logging.basicConfig()
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.WARN)
+
+PHASE_NAMESPACE_DICT = {"phase":"http://www-hunter.ch.cam.ac.uk/PhaseSchema",
+                        "ssip":"http://www-hunter.ch.cam.ac.uk/SSIP",
+                        'cml':'http://www.xml-cml.org/schema'}
+
+def calculate_freactional_occupancy_for_solvent(solvent_element):
+    """
+    """
+
+def calculate_fractional_occupancy_contribution(molecule_element):
+    """
+    """
+
+def get_concentration_value(molecule_element):
+    """This extracts the concentration.
+    """
+    xpath_expression = "phase:Concentration"
+    concentration_element_list = molecule_element.xpath(xpath_expression, namespaces=PHASE_NAMESPACE_DICT)
+    if len(concentration_element_list) == 1:
+        return float(concentration_element_list[0].text)
+    else:
+        LOGGER.debug("len:")
+        LOGGER.debug(len(solvent_element_list))
+        LOGGER.debug(solvent_element_list)
+        raise ValueError("Wrong number of Concentration Elements.")
+
+def get_number_of_ssips_in_molecule(molecule_element):
+    """This extracts the SSIP elements and return the number.
+    """
+    xpath_expression = "ssip:SSIP"
+    ssip_element_list = molecule_element.xpath(xpath_expression, namespaces=PHASE_NAMESPACE_DICT)
+    return len(ssip_element_list)
+
+def get_solvent_element_by_id(solvent_list_element, solvent_id):
+    """This extracts the solvent element from the information
+    """
+    xpath_expression = create_solvent_xpath_expression(solvent_id)
+    solvent_element_list = solvent_list_element.xpath(xpath_expression, namespaces=PHASE_NAMESPACE_DICT)
+    if len(solvent_element_list) == 1:
+        return solvent_element_list[0]
+    else:
+        LOGGER.debug("len:")
+        LOGGER.debug(len(solvent_element_list))
+        LOGGER.debug(solvent_element_list)
+        raise ValueError("Wrong number of Solvent Elements.")
+
+def create_solvent_xpath_expression(solvent_id):
+    """This creates the xpath expression to extract the solvent Element based
+    on solventID.
+    """
+    return "phase:Solvent[@phase:solventID={:s}]".format(solvent_id)
+
+def read_element_tree(filename):
+    """This reads in an xml file to an element tree.
+    """
+    return etree.parse(filename)
-- 
GitLab