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