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