diff --git a/CHANGELOG.rst b/CHANGELOG.rst index dfd9382e9756d96307bca79b13f5b47487a69bdd..b03a8310d93dbf801fff6b80de9e6d8eb55d3ee9 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,11 @@ Unreleased changes Version 0 --------- +0.15.2 / 2020-09-23 +~~~~~~~~~~~~~~~~~~~ +* Fixed a bug where the last bit of HRV or FIFO were incorrectly + masked when using ``km3io.online.get_channel_flags`` + 0.15.1 / 2020-07-15 ~~~~~~~~~~~~~~~~~~~ * Added wheel packages for faster installation diff --git a/km3io/definitions/fitparameters.py b/km3io/definitions/fitparameters.py index f7acfda708b5a9005bcb6d987f942f88c9940fd4..a92ba8f36220816978d62b18313b297f67b68d1b 100644 --- a/km3io/definitions/fitparameters.py +++ b/km3io/definitions/fitparameters.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -KM3NeT Data Definitions v1.2.2 +KM3NeT Data Definitions v1.2.3 https://git.km3net.de/common/km3net-dataformat """ diff --git a/km3io/definitions/reconstruction.py b/km3io/definitions/reconstruction.py index 0f05eb0a919143a87a170fbf203d9887da1fa8df..42c1c99a833f2af661e706c8966caf004e1a6dbc 100644 --- a/km3io/definitions/reconstruction.py +++ b/km3io/definitions/reconstruction.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -KM3NeT Data Definitions v1.2.2 +KM3NeT Data Definitions v1.2.3 https://git.km3net.de/common/km3net-dataformat """ diff --git a/km3io/definitions/trigger.py b/km3io/definitions/trigger.py index 1a460afc0f96f2081ae7118af31781564d359118..9dd75921e8aeccd7420a15ff901beddd7a1a6455 100644 --- a/km3io/definitions/trigger.py +++ b/km3io/definitions/trigger.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -KM3NeT Data Definitions v1.2.2 +KM3NeT Data Definitions v1.2.3 https://git.km3net.de/common/km3net-dataformat """ diff --git a/km3io/definitions/w2list_genhen.py b/km3io/definitions/w2list_genhen.py index e30d37cef4f785ca36a3ea0cdc1a757549285a69..8ff43a691ab3af6b1a2992bf4603c3a02397bec5 100644 --- a/km3io/definitions/w2list_genhen.py +++ b/km3io/definitions/w2list_genhen.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -KM3NeT Data Definitions v1.2.2 +KM3NeT Data Definitions v1.2.3 https://git.km3net.de/common/km3net-dataformat """ diff --git a/km3io/definitions/w2list_gseagen.py b/km3io/definitions/w2list_gseagen.py index 6e815591b243de6d2ba1a1f88e5a2a86f0f9a992..fe60876c0208653f08e3e694e1c60669da0dad54 100644 --- a/km3io/definitions/w2list_gseagen.py +++ b/km3io/definitions/w2list_gseagen.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -KM3NeT Data Definitions v1.2.2 +KM3NeT Data Definitions v1.2.3 https://git.km3net.de/common/km3net-dataformat """ diff --git a/km3io/online.py b/km3io/online.py index 5884821c8fe74c913e7015e936a1e73a4632ccb7..2a42cf272be15c5f64581fecf3e0793200a150fb 100644 --- a/km3io/online.py +++ b/km3io/online.py @@ -69,7 +69,7 @@ def get_channel_flags(value): value : int32 The integer value to be parsed. """ - channel_bits = np.bitwise_and(value, 0x3FFFFFFF) + channel_bits = np.bitwise_and(value, 0x7FFFFFFF) flags = unpack_bits(channel_bits, CHANNEL_BITS_TEMPLATE) return np.flip(flags, axis=-1) diff --git a/requirements-dev.txt b/requirements-dev.txt index 98cc552d93304d79e0d8e1698d0cad786dc68d94..a5d3da63defc479bf4539631380637361f580029 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,4 +1,4 @@ -km3net-testdata>=0.2.5 +km3net-testdata>=0.2.9 matplotlib memory_profiler numpydoc==0.9.2 diff --git a/tests/test_online.py b/tests/test_online.py index 5cef172a24cd7fad5b225cb52f5bc489a2ab18f1..c19e2d82b1abf3616f221fd4205e43b3cfe714f0 100644 --- a/tests/test_online.py +++ b/tests/test_online.py @@ -1,3 +1,5 @@ +from collections import namedtuple +import itertools import os import re import unittest @@ -5,6 +7,7 @@ import unittest from km3net_testdata import data_path from km3io.online import OnlineReader, get_rate, has_udp_trailer, get_udp_max_sequence_number, get_channel_flags, get_number_udp_packets +from km3io.tools import to_num ONLINE_FILE = data_path("online/km3net_online.root") @@ -399,6 +402,45 @@ class TestSummaryslices(unittest.TestCase): print(str(self.ss)) +class TestGetChannelFlags_Issue59(unittest.TestCase): + def test_sample_summaryslice_dump(self): + fieldnames = ["dom_id"] + + for i in range(31): + fieldnames.append(f"ch{i}") + fieldnames.append(f"hrvfifo{i}") + + Entry = namedtuple("Entry", fieldnames) + + with open( + data_path("online/KM3NeT_00000049_00008456.summaryslice-167941.txt") + ) as fobj: + ref_entries = [Entry(*list(l.strip().split())) for l in fobj.readlines()] + + r = OnlineReader( + data_path("online/KM3NeT_00000049_00008456.summaryslice-167941.root") + ) + summaryslice = r.summaryslices.slices[0] + + for ours, ref in zip(summaryslice, ref_entries): + assert ours.dom_id == to_num(ref.dom_id) + fifos = get_channel_flags(ours.fifo) + hrvs = get_channel_flags(ours.hrv) + for i in range(31): + attr = f"ch{i}" + self.assertAlmostEqual( + get_rate(getattr(ours, attr)) / 1000.0, + to_num(getattr(ref, attr)), + places=1, + ) + + hrvfifo = getattr(ref, f"hrvfifo{i}") + ref_hrv = bool(int(hrvfifo[0])) + ref_fifo = bool(int(hrvfifo[1])) + assert hrvs[i] == ref_hrv + assert fifos[i] == ref_fifo + + class TestGetRate(unittest.TestCase): def test_zero(self): assert 0 == get_rate(0)