From a9feab8760e3c9591b76b76badb3ba1f6a5d0c6c Mon Sep 17 00:00:00 2001
From: Tamas Gal <tgal@km3net.de>
Date: Wed, 8 Jan 2020 10:25:01 +0100
Subject: [PATCH] Add preliminary attempts for slicing magic

---
 km3io/offline.py      | 6 ++++++
 tests/test_offline.py | 5 +++++
 2 files changed, 11 insertions(+)

diff --git a/km3io/offline.py b/km3io/offline.py
index 8bd986d..7d42d99 100644
--- a/km3io/offline.py
+++ b/km3io/offline.py
@@ -1,5 +1,6 @@
 import uproot
 import numpy as np
+
 import warnings
 import km3io.definitions.trigger
 import km3io.definitions.fitparameters
@@ -794,6 +795,11 @@ class OfflineTracks:
         if isinstance(item, int):
             return OfflineTrack(self._keys, [v[item] for v in self._values],
                                 fitparameters=self._fitparameters)
+        elif isinstance(item, list) and all(isinstance(i, str) for i in item):
+            cols = item
+            data = [getattr(self, c) for c in cols]
+            dtype = dict(names=cols, formats=[d.dtype for d in data])
+            return np.rec.fromarrays(data, dtype=dtype)
         else:
             return OfflineTracks(self._keys, [v[item] for v in self._values],
                                  fitparameters=self._fitparameters)
diff --git a/tests/test_offline.py b/tests/test_offline.py
index 5257b4d..69867ed 100644
--- a/tests/test_offline.py
+++ b/tests/test_offline.py
@@ -419,6 +419,11 @@ class TestOfflineTracks(unittest.TestCase):
             self.assertListEqual(list(tracks.E[:, 0][_slice]),
                                  list(tracks[_slice].E[:, 0]))
 
+    def test_slicing_via_columns(self):
+        tracks = self.tracks
+        data = tracks[['E', 'lik']]
+        assert 1 == data.E
+
 
 class TestOfflineTrack(unittest.TestCase):
     def setUp(self):
-- 
GitLab