Skip to content

Commit beee80e

Browse files
author
sprenger
committed
[Neuralynx] add 'exclude_filename' keyword
1 parent 4a4514a commit beee80e

File tree

4 files changed

+72
-3
lines changed

4 files changed

+72
-3
lines changed

neo/io/neuralynxio.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class NeuralynxIO(NeuralynxRawIO, BaseFromRaw):
2727
mode = 'dir'
2828

2929
def __init__(self, dirname='', filename='', use_cache=False, cache_path='same_as_resource',
30-
keep_original_times=False):
30+
exclude_filename=None, keep_original_times=False):
3131
"""
3232
Initialise IO instance
3333
@@ -41,13 +41,17 @@ def __init__(self, dirname='', filename='', use_cache=False, cache_path='same_as
4141
cache_path : str, optional
4242
Folder path to use for cache files.
4343
Default: 'same_as_resource'
44+
exclude_filename: str or list
45+
Filename or list of filenames to be excluded. Expects base filenames without
46+
directory path.
4447
keep_original_times : bool
4548
Preserve original time stamps as in data files. By default datasets are
4649
shifted to begin at t_start = 0*pq.second.
4750
Default: False
4851
"""
4952
NeuralynxRawIO.__init__(self, dirname=dirname, filename=filename, use_cache=use_cache,
50-
cache_path=cache_path, keep_original_times=keep_original_times)
53+
cache_path=cache_path, exclude_filename=exclude_filename,
54+
keep_original_times=keep_original_times)
5155
if self.rawmode == 'one-file':
5256
BaseFromRaw.__init__(self, filename)
5357
elif self.rawmode == 'one-dir':

neo/rawio/neuralynxrawio/neuralynxrawio.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class NeuralynxRawIO(BaseRawIO):
7676
_ncs_dtype = [('timestamp', 'uint64'), ('channel_id', 'uint32'), ('sample_rate', 'uint32'),
7777
('nb_valid', 'uint32'), ('samples', 'int16', (NcsSection._RECORD_SIZE))]
7878

79-
def __init__(self, dirname='', filename='', keep_original_times=False, **kargs):
79+
def __init__(self, dirname='', filename='', exclude_filename=None, keep_original_times=False, **kargs):
8080
"""
8181
Initialize io for either a directory of Ncs files or a single Ncs file.
8282
@@ -88,6 +88,9 @@ def __init__(self, dirname='', filename='', keep_original_times=False, **kargs):
8888
filename: str
8989
name of a single ncs, nse, nev, or ntt file to include in dataset. If used,
9090
dirname must not be provided.
91+
exclude_filename: str or list
92+
name of a single ncs, nse, nev or ntt file or list of such files. Expects plain
93+
filenames (without directory path).
9194
keep_original_times:
9295
if True, keep original start time as in files,
9396
otherwise set 0 of time to first time in dataset
@@ -102,6 +105,7 @@ def __init__(self, dirname='', filename='', keep_original_times=False, **kargs):
102105
raise ValueError("One of dirname or filename must be provided.")
103106

104107
self.keep_original_times = keep_original_times
108+
self.exclude_filename = exclude_filename
105109
BaseRawIO.__init__(self, **kargs)
106110

107111
def _source_name(self):
@@ -142,6 +146,15 @@ def _parse_header(self):
142146
dirname, fname = os.path.split(self.filename)
143147
filenames = [fname]
144148

149+
if isinstance(self.exclude_filename, str):
150+
self.exclude_filename = [self.exclude_filename]
151+
152+
# remove files that were explicitly excluded
153+
if self.exclude_filename is not None:
154+
for excl_file in self.exclude_filename:
155+
if excl_file in filenames:
156+
filenames.remove(excl_file)
157+
145158
for filename in filenames:
146159
filename = os.path.join(dirname, filename)
147160

neo/test/iotest/test_neuralynxio.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,29 @@ def test_read_single_file(self):
189189
self.assertTrue((len(block.segments[0].events)) == 0)
190190
self.assertTrue((len(block.segments[0].epochs)) == 0)
191191

192+
def test_exclude_filename(self):
193+
dname = self.get_local_path(
194+
'neuralynx/Cheetah_v5.7.4/original_data/'
195+
)
196+
197+
# exclude a single file
198+
nio = NeuralynxIO(dirname=dname, exclude_filename='CSC1.ncs', use_cache=False)
199+
block = nio.read_block()
200+
self.assertTrue(len(block.segments[0].analogsignals) > 0)
201+
self.assertTrue((len(block.segments[0].spiketrains)) >= 0)
202+
self.assertTrue((len(block.segments[0].events)) >= 0)
203+
self.assertTrue((len(block.segments[0].epochs)) == 0)
204+
205+
# exclude a multiple files
206+
exclude_files = [f'CSC{i}.ncs' for i in range(6)]
207+
nio = NeuralynxIO(dirname=dname, exclude_filename=exclude_files,
208+
use_cache=False)
209+
block = nio.read_block()
210+
self.assertTrue(len(block.segments[0].analogsignals) == 0)
211+
self.assertTrue((len(block.segments[0].spiketrains)) >= 0)
212+
self.assertTrue((len(block.segments[0].events)) >= 0)
213+
self.assertTrue((len(block.segments[0].epochs)) == 0)
214+
192215

193216
class TestPegasus_v211(CommonNeuralynxIOTest, unittest.TestCase):
194217
pegasus_version = '2.1.1'

neo/test/rawiotest/test_neuralynxrawio.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,35 @@ def test_single_file_mode(self):
119119
self.assertEqual(len(rawio.header['signal_channels']), 0)
120120
self.assertEqual(len(rawio.header['event_channels']), 0)
121121

122+
def test_exclude_filenames(self):
123+
# exclude single ncs file from session
124+
dname = self.get_local_path('neuralynx/Cheetah_v5.6.3/original_data/')
125+
rawio = NeuralynxRawIO(dirname=dname, exclude_filename='CSC2.ncs')
126+
rawio.parse_header()
127+
128+
self.assertEqual(rawio._nb_segment, 2)
129+
self.assertEqual(len(rawio.ncs_filenames), 1)
130+
self.assertEqual(len(rawio.nev_filenames), 1)
131+
sigHdrs = rawio.header['signal_channels']
132+
self.assertEqual(sigHdrs.size, 1)
133+
self.assertEqual(sigHdrs[0][0], 'CSC1')
134+
self.assertEqual(sigHdrs[0][1], '58')
135+
self.assertEqual(len(rawio.header['spike_channels']), 8)
136+
self.assertEqual(len(rawio.header['event_channels']), 2)
137+
138+
# exclude multiple files from session
139+
rawio = NeuralynxRawIO(dirname=dname, exclude_filename=['Events.nev', 'CSC2.ncs'])
140+
rawio.parse_header()
141+
142+
self.assertEqual(rawio._nb_segment, 2)
143+
self.assertEqual(len(rawio.ncs_filenames), 1)
144+
self.assertEqual(len(rawio.nev_filenames), 0)
145+
sigHdrs = rawio.header['signal_channels']
146+
self.assertEqual(sigHdrs.size, 1)
147+
self.assertEqual(sigHdrs[0][0], 'CSC1')
148+
self.assertEqual(sigHdrs[0][1], '58')
149+
self.assertEqual(len(rawio.header['spike_channels']), 8)
150+
self.assertEqual(len(rawio.header['event_channels']), 0)
122151

123152
class TestNcsRecordingType(TestNeuralynxRawIO, unittest.TestCase):
124153
"""

0 commit comments

Comments
 (0)