Skip to content

Commit 778f0a4

Browse files
committed
debug regular expression to match all cases
1 parent 561458e commit 778f0a4

1 file changed

Lines changed: 27 additions & 16 deletions

File tree

neo/rawio/spikeglxrawio.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def _parse_header(self):
9090
for info in self.signals_info_list:
9191
# key is (seg_index, stream_name)
9292
key = (info['seg_index'], info['stream_name'])
93+
assert key not in self.signals_info_dict
9394
self.signals_info_dict[key] = info
9495

9596
# create memmap
@@ -233,12 +234,11 @@ def _get_analogsignal_chunk(self, block_index, seg_index, i_start, i_stop,
233234
def scan_files(dirname):
234235
"""
235236
Scan for pairs of `.bin` and `.meta` files and return information about it.
236-
237+
237238
After exploring the folder, the segment index (`seg_index`) is construct as follow:
238239
* if only one `gate_num=0` then `trigger_num` = `seg_index`
239240
* if only one `trigger_num=0` then `gate_num` = `seg_index`
240241
* if both are increasing then seg_index increased by gate_num, trigger_num order.
241-
242242
"""
243243
info_list = []
244244

@@ -251,11 +251,12 @@ def scan_files(dirname):
251251
if meta_filename.exists() and bin_filename.exists():
252252
meta = read_meta_file(meta_filename)
253253
info = extract_stream_info(meta_filename, meta)
254+
254255
info['meta_file'] = str(meta_filename)
255256
info['bin_file'] = str(bin_filename)
256257
info_list.append(info)
257-
258-
total_gate = max([info['gate_num'] for info in info_list]) + 1
258+
259+
total_gate = max([info['gate_num'] for info in info_list if info['gate_num'] is not None]) + 1
259260
total_trigger_per_gate = []
260261
for gate_num in range(total_gate):
261262
max_trigger = 0
@@ -264,15 +265,15 @@ def scan_files(dirname):
264265
continue
265266
max_trigger = max(max_trigger, info['trigger_num'])
266267
total_trigger_per_gate.append(max_trigger+1)
267-
268+
268269
for info in info_list:
269270
g, t = info['gate_num'], info['trigger_num']
270271
if g == 0:
271272
seg_index = t
272273
else:
273274
seg_index = sum(total_trigger_per_gate[:g]) + t
274275
info['seg_index'] = seg_index
275-
276+
276277
return info_list
277278

278279

@@ -313,21 +314,31 @@ def parse_spikeglx_fname(fname):
313314
The trigger identifier, e.g. 1.
314315
device: str
315316
The probe identifier, e.g. "imec2"
316-
stream_kind: str
317-
The data type identifier, "lf" or "ap"
317+
stream_kind: str or None
318+
The data type identifier, "lf" or "ap" or None
318319
"""
319320
r = re.findall(r'(\S*)_g(\d*)_t(\d*)\.(\S*).(ap|lf)', fname)
320-
if len(r) >0:
321-
# standard case
321+
if len(r) == 1:
322+
# standard case with probe
322323
run_name, gate_num, trigger_num, device, stream_kind = r[0]
324+
else:
325+
r = re.findall(r'(\S*)_g(\d*)_t(\d*)\.(\S*)', fname)
326+
if len(r) == 1:
327+
# case for nidaq
328+
run_name, gate_num, trigger_num, device = r[0]
329+
stream_kind = None
330+
else:
331+
# the naming do not correspond lets try something more easy
332+
r = re.findall(r'(\S*)\.(\S*).(ap|lf)', fname)
333+
if len(r) == 1:
334+
run_name, device, stream_kind = r[0]
335+
gate_num, trigger_num = None, None
336+
337+
if gate_num is not None:
323338
gate_num = int(gate_num)
339+
if trigger_num is not None:
324340
trigger_num = int(trigger_num)
325-
else:
326-
# the naming do not correspond lets try something more easy
327-
r = re.findall(r'(\S*)\.(\S*).(ap|lf)', fname)
328-
if len(r) > 0:
329-
run_name, device, stream_kind = r[0]
330-
gate_num, trigger_num = None, None
341+
331342
return (run_name, gate_num, trigger_num, device, stream_kind)
332343

333344

0 commit comments

Comments
 (0)