From 6ffe4cda022ed3c6d2f34b8e0e39b3c200652e28 Mon Sep 17 00:00:00 2001
From: Johannes Schumann <johannes.schumann@fau.de>
Date: Sun, 29 Mar 2020 14:45:29 +0200
Subject: [PATCH] add first tests

---
 tests/test_gseagen.py | 533 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 533 insertions(+)
 create mode 100644 tests/test_gseagen.py

diff --git a/tests/test_gseagen.py b/tests/test_gseagen.py
new file mode 100644
index 0000000..3f516c2
--- /dev/null
+++ b/tests/test_gseagen.py
@@ -0,0 +1,533 @@
+import os
+import re
+import unittest
+
+from km3io.gseagen import GSGReader
+
+SAMPLES_DIR = os.path.join(os.path.dirname(__file__), "samples")
+GSG_FILE = os.path.join(SAMPLES_DIR, "gseagen.root")
+GSG_READER = GSGReader(GSG_FILE)
+
+
+class TestGSGHeader(unittest.TestCase):
+    def setUp(self):
+        self.header = GSG_READER.header
+
+    def test_str_byte_type(self):
+        assert isinstance(self.header['gSeaGenVer'], str)
+        assert isinstance(self.header['GenieVer'], str)
+        assert isinstance(self.header['gSeaGenVer'], str)
+        assert isinstance(self.header['InpXSecFile'], str)
+        assert isinstance(self.header['Flux1'], str)
+        assert isinstance(self.header['Flux2'], str)
+
+    def test_values(self):
+        assert self.header["RunNu"] == 1
+        assert self.header["RanSeed"] == 3662074
+        self.assertAlmostEqual(self.header["NTot"], 1000.)
+        self.assertAlmostEqual(self.header["EvMin"], 5.)
+        self.assertAlmostEqual(self.header["EvMax"], 50.)
+        self.assertAlmostEqual(self.header["CtMin"], -1.)
+        self.assertAlmostEqual(self.header["CtMax"], 1.)
+        self.assertAlmostEqual(self.header["Alpha"], 1.4)
+        assert self.header["NBin"] == 1
+        self.assertAlmostEqual(self.header["Can1"], 0.0)
+        self.assertAlmostEqual(self.header["Can2"], 476.5)
+        self.assertAlmostEqual(self.header["Can3"], 403.4)
+        self.assertAlmostEqual(self.header["OriginX"], 0.0)
+        self.assertAlmostEqual(self.header["OriginY"], 0.0)
+        self.assertAlmostEqual(self.header["OriginZ"], 0.0)
+        self.assertAlmostEqual(self.header["HRock"], 93.03036681)
+        self.assertAlmostEqual(self.header["HSeaWater"], 684.39143353)
+        self.assertAlmostEqual(self.header["RVol"], 611.29143353)
+        self.assertAlmostEqual(self.header["HBedRock"], 0.0)
+        self.assertAlmostEqual(self.header["NAbsLength"], 3.0)
+        self.assertAlmostEqual(self.header["AbsLength"], 93.33)
+        self.assertAlmostEqual(self.header["SiteDepth"], 2425.0)
+        self.assertAlmostEqual(self.header["SiteLatitude"], 0.747)
+        self.assertAlmostEqual(self.header["SiteLongitude"], 0.10763)
+        self.assertAlmostEqual(self.header["SeaBottomRadius"], 6368000.)
+        assert round(self.header["GlobalGenWeight"]-6.26910765e+08, 0) == 0
+        self.assertAlmostEqual(self.header["RhoSW"], 1.03975)
+        self.assertAlmostEqual(self.header["RhoSR"], 2.65)
+        self.assertAlmostEqual(self.header["TGen"], 31556926.)
+        assert not self.header["PropMode"]
+        assert self.header["NNu"] == 2
+        self.assertListEqual(self.header["NuList"].tolist(), [-14, 14])
+
+
+class TestGSGEvents(unittest.TestCase):
+    def setUp(self):
+        self.events = GSG_READER.events
+
+    def test_event_single_values(self):
+        event = self.events[0]
+        assert 1 == event.iEvt
+        self.assertAlmostEqual(event.PScale, 1.0)
+        assert event.TargetA == 28
+        assert event.TargetZ == 14
+        assert event.InterId == 2
+        assert event.ScattId == 3
+        self.assertAlmostEqual(event.Bx, 0.21398980096236023)
+        self.assertAlmostEqual(event.By, 0.7736389792036026)
+        assert event.VerInCan == 0
+        self.assertAlmostEqual(event.WaterXSec, 9.814545541159586e-42)
+        self.assertAlmostEqual(event.WaterIntLen, 169191612204.44382)
+        self.assertAlmostEqual(event.PEarth, 0.9998206835107583)
+        self.assertAlmostEqual(event.ColumnDepth, 31352421806833.758)
+        self.assertAlmostEqual(event.XSecMean, 9.49810757204515e-42)
+        self.assertAlmostEqual(event.Agen, 934842.6115446005)
+        self.assertAlmostEqual(event.WGen, 480360599.4207591)
+        self.assertAlmostEqual(event.WEvt, 5.629637364719835)
+        self.assertAlmostEqual(event.E_nu, 29.210801854810974)
+        assert event.Pdg_nu == -14
+        self.assertAlmostEqual(event.Vx_nu, 202.86806811399845)
+        self.assertAlmostEqual(event.Vy_nu, 226.64032038584787)
+        self.assertAlmostEqual(event.Vz_nu, -0.5526929982180058)
+        self.assertAlmostEqual(event.Dx_nu, -0.7554430076659393)
+        self.assertAlmostEqual(event.Dy_nu, 0.3034298552575011)
+        self.assertAlmostEqual(event.Dz_nu, 0.5807204018346965)
+        self.assertAlmostEqual(event.T_nu, 0.0)
+        self.assertAlmostEqual(event.E_pl, 6.648776215872709)
+        assert event.Pdg_pl == -13
+        self.assertAlmostEqual(event.Vx_pl, 202.86806811399845)
+        self.assertAlmostEqual(event.Vy_pl, 226.64032038584787)
+        self.assertAlmostEqual(event.Vz_pl, -0.5526929982180058)
+        self.assertAlmostEqual(event.Dx_pl, -0.8781745795144783)
+        self.assertAlmostEqual(event.Dy_pl, 0.2818890466120743)
+        self.assertAlmostEqual(event.Dz_pl, 0.3864556550171106)
+        self.assertAlmostEqual(event.T_pl, 0.0)
+        assert event.NTracks == 1
+
+    def test_event_list_values(self):
+        event = self.events[1]
+        self.assertListEqual(event.Id_tr.tolist(), [4, 5, 10, 11, 12])
+        self.assertListEqual(event.Pdg_tr.tolist(), [22, -13, 2112, -211, 111])
+        [
+            self.assertAlmostEqual(x, y) for x, y in zip(
+                event.E_tr,
+                [0.00618, 4.88912206, 2.33667201, 1.0022909, 1.17186997])
+        ]
+        [
+            self.assertAlmostEqual(x, y)
+            for x, y in zip(event.Vx_tr, [
+                -337.67895799, -337.67895799, -337.67895799, -337.67895799,
+                -337.67895799
+            ])
+        ]
+        [
+            self.assertAlmostEqual(x, y)
+            for x, y in zip(event.Vy_tr, [
+                -203.90999969, -203.90999969, -203.90999969, -203.90999969,
+                -203.90999969
+            ])
+        ]
+        [
+            self.assertAlmostEqual(x, y)
+            for x, y in zip(event.Vz_tr, [
+                416.08845294, 416.08845294, 416.08845294, 416.08845294,
+                416.08845294
+            ])
+        ]
+        [
+            self.assertAlmostEqual(x, y)
+            for x, y in zip(event.Dx_tr, [
+                0.06766196, -0.63563065, -0.70627586, -0.76364544, -0.80562216
+            ])
+        ]
+        [
+            self.assertAlmostEqual(x, y) for x, y in zip(
+                event.Dy_tr,
+                [0.33938809, -0.4846643, 0.50569058, -0.04136113, 0.10913917])
+        ]
+        [
+            self.assertAlmostEqual(x, y)
+            for x, y in zip(event.Dz_tr, [
+                -0.93820978, -0.6008945, -0.49543056, -0.64430963, -0.58228994
+            ])
+        ]
+        [self.assertAlmostEqual(x, y) for x, y in zip(event.T_tr, 5 * [0.])]
+
+
+# class TestDAQEvent(unittest.TestCase):
+#     def setUp(self):
+#         self.event = DAQ_FILE.events[0]
+#
+#     def test_str(self):
+#         assert re.match(".*event.*96.*snapshot.*18.*triggered",
+#                         str(self.event))
+#
+#     def test_repr(self):
+#         assert re.match(".*event.*96.*snapshot.*18.*triggered",
+#                         self.event.__repr__())
+#
+#
+# class TestDAQEventsSnapshotHits(unittest.TestCase):
+#     def setUp(self):
+#         self.events = DAQ_FILE.events
+#         self.lengths = {0: 96, 1: 124, -1: 78}
+#         self.total_item_count = 298
+#
+#     def test_reading_snapshot_hits(self):
+#         hits = self.events.snapshot_hits
+#
+#         for event_id, length in self.lengths.items():
+#             assert length == len(hits[event_id].dom_id)
+#             assert length == len(hits[event_id].channel_id)
+#             assert length == len(hits[event_id].time)
+#
+#     def test_total_item_counts(self):
+#         hits = self.events.snapshot_hits
+#
+#         assert self.total_item_count == sum(hits.dom_id.count())
+#         assert self.total_item_count == sum(hits.channel_id.count())
+#         assert self.total_item_count == sum(hits.time.count())
+#
+#     def test_data_values(self):
+#         hits = self.events.snapshot_hits
+#
+#         self.assertListEqual([806451572, 806451572, 806455814],
+#                              list(hits.dom_id[0][:3]))
+#         self.assertListEqual([10, 13, 0], list(hits.channel_id[0][:3]))
+#         self.assertListEqual([30733918, 30733916, 30733256],
+#                              list(hits.time[0][:3]))
+#
+#     def test_channel_ids_have_valid_values(self):
+#         hits = self.events.snapshot_hits
+#
+#         # channel IDs are always between [0, 30]
+#         assert all(c >= 0 for c in hits.channel_id.min())
+#         assert all(c < 31 for c in hits.channel_id.max())
+#
+#
+# class TestDAQEventsTriggeredHits(unittest.TestCase):
+#     def setUp(self):
+#         self.events = DAQ_FILE.events
+#         self.lengths = {0: 18, 1: 53, -1: 9}
+#         self.total_item_count = 80
+#
+#     def test_data_lengths(self):
+#         hits = self.events.triggered_hits
+#
+#         for event_id, length in self.lengths.items():
+#             assert length == len(hits[event_id].dom_id)
+#             assert length == len(hits[event_id].channel_id)
+#             assert length == len(hits[event_id].time)
+#             assert length == len(hits[event_id].trigger_mask)
+#
+#     def test_total_item_counts(self):
+#         hits = self.events.triggered_hits
+#
+#         assert self.total_item_count == sum(hits.dom_id.count())
+#         assert self.total_item_count == sum(hits.channel_id.count())
+#         assert self.total_item_count == sum(hits.time.count())
+#
+#     def test_data_values(self):
+#         hits = self.events.triggered_hits
+#
+#         self.assertListEqual([806451572, 806451572, 808432835],
+#                              list(hits.dom_id[0][:3]))
+#         self.assertListEqual([10, 13, 1], list(hits.channel_id[0][:3]))
+#         self.assertListEqual([30733918, 30733916, 30733429],
+#                              list(hits.time[0][:3]))
+#         self.assertListEqual([16, 16, 4], list(hits.trigger_mask[0][:3]))
+#
+#     def test_channel_ids_have_valid_values(self):
+#         hits = self.events.triggered_hits
+#
+#         # channel IDs are always between [0, 30]
+#         assert all(c >= 0 for c in hits.channel_id.min())
+#         assert all(c < 31 for c in hits.channel_id.max())
+#
+#
+# class TestDAQTimeslices(unittest.TestCase):
+#     def setUp(self):
+#         self.ts = DAQ_FILE.timeslices
+#
+#     def test_data_lengths(self):
+#         assert 3 == len(self.ts._timeslices["L1"][0])
+#         assert 3 == len(self.ts._timeslices["SN"][0])
+#         with self.assertRaises(KeyError):
+#             assert 0 == len(self.ts._timeslices["L2"][0])
+#         with self.assertRaises(KeyError):
+#             assert 0 == len(self.ts._timeslices["L0"][0])
+#
+#     def test_streams(self):
+#         self.ts.stream("L1", 0)
+#         self.ts.stream("SN", 0)
+#
+#     def test_reading_frames(self):
+#         assert 8 == len(self.ts.stream("SN", 1).frames[808447186])
+#
+#     def test_str(self):
+#         s = str(self.ts)
+#         assert "L1" in s
+#         assert "SN" in s
+#
+#
+# class TestDAQTimeslice(unittest.TestCase):
+#     def setUp(self):
+#         self.ts = DAQ_FILE.timeslices
+#         self.n_frames = {"L1": [69, 69, 69], "SN": [64, 66, 68]}
+#
+#     def test_str(self):
+#         for stream, n_frames in self.n_frames.items():
+#             print(stream, n_frames)
+#             for i in range(len(n_frames)):
+#                 s = str(self.ts.stream(stream, i))
+#                 assert re.match("{}.*{}".format(stream, n_frames[i]), s)
+#
+#
+# class TestSummaryslices(unittest.TestCase):
+#     def setUp(self):
+#         self.ss = DAQ_FILE.summaryslices
+#
+#     def test_headers(self):
+#         assert 3 == len(self.ss.headers)
+#         self.assertListEqual([44, 44, 44], list(self.ss.headers.detector_id))
+#         self.assertListEqual([6633, 6633, 6633], list(self.ss.headers.run))
+#         self.assertListEqual([126, 127, 128],
+#                              list(self.ss.headers.frame_index))
+#         assert 806451572 == self.ss.slices[0].dom_id[0]
+#
+#     def test_slices(self):
+#         assert 3 == len(self.ss.slices)
+#
+#     def test_rates(self):
+#         assert 3 == len(self.ss.rates)
+#
+#     def test_fifo(self):
+#         s = self.ss.slices[0]
+#         dct_fifo_stat = {
+#             808981510: True,
+#             808981523: False,
+#             808981672: False,
+#             808974773: False
+#         }
+#         for dom_id, fifo_status in dct_fifo_stat.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert any(get_channel_flags(frame.fifo[0])) == fifo_status
+#
+#     def test_has_udp_trailer(self):
+#         s = self.ss.slices[0]
+#         dct_udp_trailer = {
+#             806451572: True,
+#             806455814: True,
+#             806465101: True,
+#             806483369: True,
+#             806487219: True,
+#             806487226: True,
+#             806487231: True,
+#             808432835: True,
+#             808435278: True,
+#             808447180: True,
+#             808447186: True
+#         }
+#         for dom_id, udp_trailer in dct_udp_trailer.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert has_udp_trailer(frame.fifo[0]) == udp_trailer
+#
+#     def test_high_rate_veto(self):
+#         s = self.ss.slices[0]
+#         dct_high_rate_veto = {
+#             808489014: True,
+#             808489117: False,
+#             808493910: True,
+#             808946818: True,
+#             808951460: True,
+#             808956908: True,
+#             808959411: True,
+#             808961448: True,
+#             808961480: True,
+#             808961504: True,
+#             808961655: False,
+#             808964815: False,
+#             808964852: True,
+#             808969848: False,
+#             808969857: True,
+#             808972593: True,
+#             808972598: True,
+#             808972698: False,
+#             808974758: False,
+#             808974773: True,
+#             808974811: True,
+#             808974972: True,
+#             808976377: True,
+#             808979567: False,
+#             808979721: False,
+#             808979729: False,
+#             808981510: True,
+#             808981523: True,
+#             808981672: False,
+#             808981812: True,
+#             808981864: False,
+#             808982018: False
+#         }
+#         for dom_id, high_rate_veto in dct_high_rate_veto.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert any(get_channel_flags(frame.hrv[0])) == high_rate_veto
+#
+#     def test_max_sequence_number(self):
+#         s = self.ss.slices[0]
+#         dct_seq_numbers = {
+#             808974758: 18,
+#             808974773: 26,
+#             808974811: 25,
+#             808974972: 41,
+#             808976377: 35,
+#             808979567: 20,
+#             808979721: 17,
+#             808979729: 25,
+#             808981510: 35,
+#             808981523: 27,
+#             808981672: 17,
+#             808981812: 34,
+#             808981864: 18,
+#             808982018: 21,
+#             808982041: 27,
+#             808982077: 32,
+#             808982547: 20,
+#             808984711: 26,
+#             808996773: 31,
+#             808997793: 21,
+#             809006037: 26,
+#             809007627: 18,
+#             809503416: 28,
+#             809521500: 31,
+#             809524432: 21,
+#             809526097: 23,
+#             809544058: 21,
+#             809544061: 23
+#         }
+#         for dom_id, max_sequence_number in dct_seq_numbers.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert get_udp_max_sequence_number(
+#                 frame.dq_status[0]) == max_sequence_number
+#
+#     def test_number_udp_packets(self):
+#         s = self.ss.slices[0]
+#         dct_n_packets = {
+#             808451904: 27,
+#             808451907: 22,
+#             808469129: 20,
+#             808472260: 21,
+#             808472265: 22,
+#             808488895: 20,
+#             808488990: 20,
+#             808489014: 28,
+#             808489117: 22,
+#             808493910: 26,
+#             808946818: 23,
+#             808951460: 37,
+#             808956908: 33,
+#             808959411: 36,
+#             808961448: 28,
+#             808961480: 24,
+#             808961504: 28,
+#             808961655: 20,
+#             808964815: 20,
+#             808964852: 28,
+#             808969848: 21
+#         }
+#         for dom_id, n_udp_packets in dct_n_packets.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert get_number_udp_packets(frame.dq_status[0]) == n_udp_packets
+#
+#     def test_hrv_flags(self):
+#         s = self.ss.slices[0]
+#         dct_hrv_flags = {
+#             809524432: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             809526097: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 True, False, False, False, False, False, False, False, True,
+#                 False, False, False, False
+#             ],
+#             809544058: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             809544061: [
+#                 False, True, False, False, False, True, False, False, False,
+#                 False, False, False, False, False, False, True, False, False,
+#                 False, False, False, True, False, False, False, False, False,
+#                 False, False, False, False
+#             ]
+#         }
+#         for dom_id, hrv_flags in dct_hrv_flags.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert any([
+#                 a == b
+#                 for a, b in zip(get_channel_flags(frame.hrv[0]), hrv_flags)
+#             ])
+#
+#     def test_fifo_flags(self):
+#         s = self.ss.slices[0]
+#         dct_fifo_flags = {
+#             808982547: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             808984711: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             808996773: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             808997793: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             809006037: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False
+#             ],
+#             808981510: [
+#                 False, False, False, False, False, False, False, False, False,
+#                 False, False, False, False, False, True, True, False, False,
+#                 False, True, False, True, True, True, True, True, True, False,
+#                 False, True, False
+#             ]
+#         }
+#         for dom_id, fifo_flags in dct_fifo_flags.items():
+#             frame = s[s.dom_id == dom_id]
+#             assert any([
+#                 a == b
+#                 for a, b in zip(get_channel_flags(frame.fifo[0]), fifo_flags)
+#             ])
+#
+#     def test_str(self):
+#         print(str(self.ss))
+#
+#
+# class TestGetRate(unittest.TestCase):
+#     def test_zero(self):
+#         assert 0 == get_rate(0)
+#
+#     def test_some_values(self):
+#         assert 2054 == get_rate(1)
+#         assert 55987 == get_rate(123)
+#         assert 1999999 == get_rate(255)
+#
+#     def test_vectorized_input(self):
+#         self.assertListEqual([2054], list(get_rate([1])))
+#         self.assertListEqual([2054, 2111, 2169], list(get_rate([1, 2, 3])))
-- 
GitLab