From f3bdb933cf3b59fa5d6521e6bfda97dd3e2e17b0 Mon Sep 17 00:00:00 2001
From: Johannes Schumann <johannes.schumann@fau.de>
Date: Mon, 25 May 2020 21:58:06 +0200
Subject: [PATCH] Added f90nml package

---
 km3buu/jobcard.py | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/km3buu/jobcard.py b/km3buu/jobcard.py
index 48285ab..7a594b3 100644
--- a/km3buu/jobcard.py
+++ b/km3buu/jobcard.py
@@ -12,6 +12,8 @@ __maintainer__ = "Johannes Schumann"
 __email__ = "jschumann@km3net.de"
 __status__ = "Development"
 
+import f90nml
+
 INPUT_PATH = "/opt/buuinput2019/"
 
 PROCESS_LOOKUP = {"cc": 2, "nc": 3, "anticc": -2, "antinc": -3}
@@ -47,7 +49,7 @@ class Jobcard(object):
     """
     def __init__(self, input_path=INPUT_PATH):
         self.input_path = "'%s'" % input_path
-        self._groups = {}
+        self._groups = f90nml.Namelist()
         self.set_property("input", "path_to_input", self.input_path)
 
     def set_property(self, group, name, value):
@@ -83,6 +85,31 @@ class Jobcard(object):
             retval += "/\n\n"
         return retval
 
+    def __getitem__(self, key):
+        if isinstance(key, str):
+            if '/' in key:
+                k = key.split('/')
+                return self._groups[k[0]][k[1]]
+            else:
+                return self._groups[key]
+        elif isinstance(key, tuple) and len(key) == 2:
+            return self._groups[key[0]][key[1]]
+        else:
+            raise IndexError("Invalid access to Jobcard")
+
+
+def read_jobcard(fpath):
+    """ Read a jobcard from file
+
+    Parameters
+    ----------
+    fpath: str
+        Filepath of the jobcard
+    """
+    jc = Jobcard()
+    jc._groups = f90nml.read(fpath)
+    return jc
+
 
 def generate_neutrino_jobcard_template(
     process,
-- 
GitLab