From 85d028db4a29f1e07618bb3952de39a7e3817fac Mon Sep 17 00:00:00 2001
From: Johannes Schumann <johannes.schumann@fau.de>
Date: Wed, 18 Nov 2020 17:06:59 +0100
Subject: [PATCH] parse media composition from gseagen xml

---
 km3buu/config.py | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/km3buu/config.py b/km3buu/config.py
index 3081aa7..0093fb5 100644
--- a/km3buu/config.py
+++ b/km3buu/config.py
@@ -13,6 +13,8 @@ from configparser import ConfigParser, Error, NoOptionError, NoSectionError
 from thepipe.logger import get_logger
 from . import IMAGE_NAME
 from .environment import build_image
+import mendeleev
+import xml.etree.ElementTree as ElementTree
 
 __author__ = "Johannes Schumann"
 __copyright__ = "Copyright 2020, Johannes Schumann and the KM3NeT collaboration."
@@ -83,3 +85,35 @@ class Config(object):
         section = "GiBUU"
         key = "image_path"
         self.set(section, key, value)
+
+
+def read_media_compositions(filename):
+    """
+    Read gSeagen media composition xml formated file
+
+    Parameters
+    ----------
+    filename: str
+        Input file
+    """
+    xmlroot = ElementTree.parse(filename).getroot()
+    if xmlroot == "media_comp":
+        raise KeyError()
+
+    compositions = dict()
+    for media in xmlroot:
+        if media.tag != "param_set":
+            continue
+        elements = dict()
+        for element in media:
+            name = element.attrib["name"]
+            fraction = float(element.text)
+            elements[name] = (mendeleev.element(name), fraction)
+        attr = dict()
+        if "density" in media.attrib:
+            density = media.attrib["density"]
+            attr["density"] = density
+        attr["elements"] = elements
+        key = media.attrib["media"]
+        compositions[key] = attr
+    return compositions
-- 
GitLab