From f8c98ab4cf684b878e289d3bb1360c63f4255913 Mon Sep 17 00:00:00 2001
From: Johannes Schumann <johannes.schumann@fau.de>
Date: Thu, 12 Mar 2020 14:43:13 +0100
Subject: [PATCH] Added object for parsing neutrino Xsection output

---
 .../neutrino_absorption_cross_section_ALL.dat   |  2 ++
 km3buu/output.py                                | 17 +++++++++++++++++
 km3buu/tests/test_output.py                     | 14 +++++++++++++-
 3 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 km3buu/data/test-data/neutrino_absorption_cross_section_ALL.dat

diff --git a/km3buu/data/test-data/neutrino_absorption_cross_section_ALL.dat b/km3buu/data/test-data/neutrino_absorption_cross_section_ALL.dat
new file mode 100644
index 0000000..3cce8c9
--- /dev/null
+++ b/km3buu/data/test-data/neutrino_absorption_cross_section_ALL.dat
@@ -0,0 +1,2 @@
+ # 1:var 2:sum 3:QE 4:Delta 5:highRES 6:1pi 7:DIS 8:2p2h-QE  9:2p2h-Delta 10:2pi
+   1.0000      0.61548       0.0000      0.61537      0.10661E-03   0.0000       0.0000       0.0000       0.0000       0.0000    
diff --git a/km3buu/output.py b/km3buu/output.py
index 3abda4b..7326edc 100644
--- a/km3buu/output.py
+++ b/km3buu/output.py
@@ -12,12 +12,29 @@ __maintainer__ = "Johannes Schumann"
 __email__ = "jschumann@km3net.de"
 __status__ = "Development"
 
+import re
 import mmap
 import numpy as np
 from io import StringIO
 from os import listdir
 from os.path import isfile, join, abspath
 
+EVENT_FILENAME = "FinalEvents.dat"
+XSECTION_FILENAMES = {"all": "neutrino_absorption_cross_section_ALL.dat"}
+
+
+class NeutrinoAbsorptionXSection:
+    def __init__(self, filepath):
+        self._filepath = filepath
+        with open(self._filepath, "r") as f:
+            lines = f.readlines()
+        header = re.sub(r'\d+:|#', '', lines[0]).split()
+        values = map(float, lines[1].split())
+        self._xsections = dict(zip(header, values))
+
+    def __getitem__(self, key):
+        return self._xsections[key]
+
 
 class FinalEvents:
     def __init__(self, filepath):
diff --git a/km3buu/tests/test_output.py b/km3buu/tests/test_output.py
index 1da0ad4..e62b063 100644
--- a/km3buu/tests/test_output.py
+++ b/km3buu/tests/test_output.py
@@ -19,9 +19,21 @@ from os.path import abspath, join, dirname
 TESTDATA_DIR = abspath(join(dirname(__file__), "../data/test-data/"))
 
 
+class TestXSection(unittest.TestCase):
+    def test_xsection_all(self):
+        filename = join(TESTDATA_DIR, XSECTION_FILENAMES["all"])
+        xsection = NeutrinoAbsorptionXSection(filename)
+        self.assertAlmostEqual(xsection['var'], 1.0)
+        self.assertAlmostEqual(xsection['sum'], 0.61548)
+        self.assertAlmostEqual(xsection['Delta'], 0.61537)
+        self.assertAlmostEqual(xsection['highRES'], 1.0661e-4)
+        self.assertAlmostEqual(xsection['Delta'], 0.61537)
+
+
+
 class TestFinalEvents(unittest.TestCase):
     def setUp(self):
-        self.filename = join(TESTDATA_DIR, "FinalEvents.dat")
+        self.filename = join(TESTDATA_DIR, EVENT_FILENAME)
         self.final_events = FinalEvents(self.filename)
 
     def test_values(self):
-- 
GitLab