Skip to content

Commit a9340f1

Browse files
committed
wip : more rawio with buffer_ids
1 parent b54ec82 commit a9340f1

File tree

10 files changed

+85
-23
lines changed

10 files changed

+85
-23
lines changed

neo/rawio/neuroscoperawio.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
BaseRawIO,
2626
_signal_channel_dtype,
2727
_signal_stream_dtype,
28+
_signal_buffer_dtype,
2829
_spike_channel_dtype,
2930
_event_channel_dtype,
3031
)
@@ -107,8 +108,9 @@ def _parse_header(self):
107108
# Extract signal from the data file
108109
self._raw_signals = np.memmap(self.data_file_path, dtype=sig_dtype, mode="r", offset=0).reshape(-1, nb_channel)
109110

110-
# one unique stream
111-
signal_streams = np.array([("Signals", "0")], dtype=_signal_stream_dtype)
111+
# one unique stream and buffer
112+
signal_buffers = np.array([("Signals", "0")], dtype=_signal_buffer_dtype)
113+
signal_streams = np.array([("Signals", "0", "0")], dtype=_signal_stream_dtype)
112114

113115
# signals
114116
sig_channels = []
@@ -118,7 +120,8 @@ def _parse_header(self):
118120
units = "mV"
119121
offset = 0.0
120122
stream_id = "0"
121-
sig_channels.append((name, chan_id, self._sampling_rate, sig_dtype, units, gain, offset, stream_id))
123+
buffer_id = "0"
124+
sig_channels.append((name, chan_id, self._sampling_rate, sig_dtype, units, gain, offset, stream_id, buffer_id))
122125
sig_channels = np.array(sig_channels, dtype=_signal_channel_dtype)
123126

124127
# No events
@@ -133,6 +136,7 @@ def _parse_header(self):
133136
self.header = {}
134137
self.header["nb_block"] = 1
135138
self.header["nb_segment"] = [1]
139+
self.header["signal_buffers"] = signal_buffers
136140
self.header["signal_streams"] = signal_streams
137141
self.header["signal_channels"] = sig_channels
138142
self.header["spike_channels"] = spike_channels

neo/rawio/nixrawio.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
BaseRawIO,
1414
_signal_channel_dtype,
1515
_signal_stream_dtype,
16+
_signal_buffer_dtype,
1617
_spike_channel_dtype,
1718
_event_channel_dtype,
1819
)
@@ -77,7 +78,8 @@ def _parse_header(self):
7778
stream_ids.append(stream_id)
7879
gain = 1
7980
offset = 0.0
80-
signal_channels.append((ch_name, chan_id, sr, dtype, units, gain, offset, stream_id))
81+
buffer_id = ""
82+
signal_channels.append((ch_name, chan_id, sr, dtype, units, gain, offset, stream_id, buffer_id))
8183
# only read structure of first segment and assume the same
8284
# across segments
8385
break
@@ -86,6 +88,9 @@ def _parse_header(self):
8688
signal_streams = np.zeros(len(stream_ids), dtype=_signal_stream_dtype)
8789
signal_streams["id"] = stream_ids
8890
signal_streams["name"] = ""
91+
signal_streams["buffer_id"] = ""
92+
# potentially nix support buffer but because we use the python module API and not h5py then no buffer
93+
signal_buffers = np.array([], dtype=_signal_buffer_dtype)
8994

9095
spike_channels = []
9196
unit_name = ""
@@ -194,6 +199,7 @@ def _parse_header(self):
194199
self.header = {}
195200
self.header["nb_block"] = len(self.file.blocks)
196201
self.header["nb_segment"] = [len(seg_groups) for bl in self.file.blocks]
202+
self.header["signal_buffers"] = signal_buffers
197203
self.header["signal_streams"] = signal_streams
198204
self.header["signal_channels"] = signal_channels
199205
self.header["spike_channels"] = spike_channels

neo/rawio/openephysbinaryrawio.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
BaseRawIO,
2020
_signal_channel_dtype,
2121
_signal_stream_dtype,
22+
_signal_buffer_dtype,
2223
_spike_channel_dtype,
2324
_event_channel_dtype,
2425
)
@@ -120,6 +121,7 @@ def _parse_header(self):
120121
for stream_index, stream_name in enumerate(sig_stream_names):
121122
# stream_index is the index in vector sytream names
122123
stream_id = str(stream_index)
124+
buffer_id = stream_id
123125
info = self._sig_streams[0][0][stream_index]
124126
new_channels = []
125127
for chan_info in info["channels"]:
@@ -141,16 +143,21 @@ def _parse_header(self):
141143
chan_info["bit_volts"],
142144
0.0,
143145
stream_id,
146+
buffer_id,
144147
)
145148
)
146149
signal_channels.extend(new_channels)
147150
signal_channels = np.array(signal_channels, dtype=_signal_channel_dtype)
148151

149152
signal_streams = []
153+
signal_buffers = []
150154
for stream_index, stream_name in enumerate(sig_stream_names):
151155
stream_id = str(stream_index)
152-
signal_streams.append((stream_name, stream_id))
156+
buffer_id = str(stream_index)
157+
signal_buffers.append((stream_name, buffer_id))
158+
signal_streams.append((stream_name, stream_id, buffer_id))
153159
signal_streams = np.array(signal_streams, dtype=_signal_stream_dtype)
160+
signal_buffers = np.array(signal_buffers, dtype=_signal_buffer_dtype)
154161

155162
# create memmap for signals
156163
for block_index in range(nb_block):
@@ -299,6 +306,7 @@ def _parse_header(self):
299306
self.header = {}
300307
self.header["nb_block"] = nb_block
301308
self.header["nb_segment"] = nb_segment_per_block
309+
self.header["signal_buffers"] = signal_buffers
302310
self.header["signal_streams"] = signal_streams
303311
self.header["signal_channels"] = signal_channels
304312
self.header["spike_channels"] = spike_channels

neo/rawio/openephysrawio.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
BaseRawIO,
1818
_signal_channel_dtype,
1919
_signal_stream_dtype,
20+
_signal_buffer_dtype,
2021
_spike_channel_dtype,
2122
_event_channel_dtype,
2223
)
@@ -162,6 +163,8 @@ def _parse_header(self):
162163
units = "uV"
163164
else:
164165
units = "V"
166+
stream_id = processor_id
167+
buffer_id = ""
165168
signal_channels.append(
166169
(
167170
ch_name,
@@ -171,7 +174,8 @@ def _parse_header(self):
171174
units,
172175
chan_info["bitVolts"],
173176
0.0,
174-
processor_id,
177+
stream_id,
178+
buffer_id,
175179
)
176180
)
177181

@@ -221,10 +225,13 @@ def _parse_header(self):
221225
# and create streams channels (keep natural order 'CH' first)
222226
stream_ids, order = np.unique(chan_stream_ids, return_index=True)
223227
stream_ids = stream_ids[np.argsort(order)]
224-
signal_streams = [(f"Signals {stream_id}", f"{stream_id}") for stream_id in stream_ids]
225-
signal_streams = np.array(signal_streams, dtype=_signal_stream_dtype)
228+
signal_streams = [(f"Signals {stream_id}", f"{stream_id}", "") for stream_id in stream_ids]
226229
else:
227-
signal_streams = np.array([])
230+
signal_streams = []
231+
signal_streams = np.array(signal_streams, dtype=_signal_stream_dtype)
232+
# no buffer handling in this format because one channel per file
233+
signal_buffers = np.array( [], dtype=_signal_buffer_dtype)
234+
228235
# scan for spikes files
229236
spike_channels = []
230237

@@ -328,6 +335,7 @@ def _parse_header(self):
328335
self.header = {}
329336
self.header["nb_block"] = 1
330337
self.header["nb_segment"] = [nb_segment]
338+
self.header["signal_buffers"] = signal_buffers
331339
self.header["signal_streams"] = signal_streams
332340
self.header["signal_channels"] = signal_channels
333341
self.header["spike_channels"] = spike_channels

neo/rawio/phyrawio.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
BaseRawIO,
1313
_signal_channel_dtype,
1414
_signal_stream_dtype,
15+
_signal_buffer_dtype,
1516
_spike_channel_dtype,
1617
_event_channel_dtype,
1718
)
@@ -114,8 +115,8 @@ def _parse_header(self):
114115
self._t_start = 0.0
115116
self._t_stop = max(self._spike_times).item() / self._sampling_frequency
116117

117-
signal_streams = []
118-
signal_streams = np.array(signal_streams, dtype=_signal_stream_dtype)
118+
signal_streams = np.array([], dtype=_signal_stream_dtype)
119+
signal_buffers = np.array([], dtype=_signal_buffer_dtype)
119120

120121
signal_channels = []
121122
signal_channels = np.array(signal_channels, dtype=_signal_channel_dtype)
@@ -138,6 +139,7 @@ def _parse_header(self):
138139
self.header = {}
139140
self.header["nb_block"] = 1
140141
self.header["nb_segment"] = [1]
142+
self.header["signal_buffers"] = signal_buffers
141143
self.header["signal_streams"] = signal_streams
142144
self.header["signal_channels"] = signal_channels
143145
self.header["spike_channels"] = spike_channels

neo/rawio/plexonrawio.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
BaseRawIO,
4040
_signal_channel_dtype,
4141
_signal_stream_dtype,
42+
_signal_buffer_dtype,
4243
_spike_channel_dtype,
4344
_event_channel_dtype,
4445
)
@@ -259,10 +260,14 @@ def _parse_header(self):
259260
)
260261
offset = 0.0
261262
stream_id = "0" # This is overwritten later
262-
sig_channels.append((name, str(chan_id), sampling_rate, sig_dtype, units, gain, offset, stream_id))
263+
buffer_id = ""
264+
sig_channels.append((name, str(chan_id), sampling_rate, sig_dtype, units, gain, offset, stream_id, buffer_id))
263265

264266
sig_channels = np.array(sig_channels, dtype=_signal_channel_dtype)
265267

268+
# no buffer here because block are splitted by channel
269+
signal_buffers = np.array([], dtype=_signal_buffer_dtype)
270+
266271
if sig_channels.size == 0:
267272
signal_streams = np.array([], dtype=_signal_stream_dtype)
268273

@@ -309,7 +314,8 @@ def _parse_header(self):
309314
self._sig_sampling_rate[stream_index] = sr
310315
self._signal_length[stream_index] = length
311316

312-
signal_streams.append((stream_name, stream_id))
317+
buffer_id = ""
318+
signal_streams.append((stream_name, stream_id, buffer_id))
313319

314320
signal_streams = np.array(signal_streams, dtype=_signal_stream_dtype)
315321

@@ -373,6 +379,7 @@ def _parse_header(self):
373379
self.header = {
374380
"nb_block": 1,
375381
"nb_segment": [1],
382+
"signal_buffers": signal_buffers,
376383
"signal_streams": signal_streams,
377384
"signal_channels": sig_channels,
378385
"spike_channels": spike_channels,

neo/rawio/rawbinarysignalrawio.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class RawBinarySignalIO
2525
BaseRawIO,
2626
_signal_channel_dtype,
2727
_signal_stream_dtype,
28+
_signal_buffer_dtype,
2829
_spike_channel_dtype,
2930
_event_channel_dtype,
3031
)
@@ -93,6 +94,7 @@ def _parse_header(self):
9394
chan_id = f"{c}"
9495
units = ""
9596
stream_id = "0"
97+
buffer_id = "0"
9698
signal_channels.append(
9799
(
98100
name,
@@ -103,14 +105,16 @@ def _parse_header(self):
103105
self.signal_gain,
104106
self.signal_offset,
105107
stream_id,
108+
buffer_id
106109
)
107110
)
108111

109112
signal_channels = np.array(signal_channels, dtype=_signal_channel_dtype)
110113

111-
# one unique stream
114+
# one unique stream and buffer
112115
if signal_channels.size > 0:
113-
signal_streams = np.array([("Signals", "0")], dtype=_signal_stream_dtype)
116+
signal_buffers = np.array([("Signals", "0")], dtype=_signal_buffer_dtype)
117+
signal_streams = np.array([("Signals", "0", "0")], dtype=_signal_stream_dtype)
114118
else:
115119
signal_streams = np.array([], dtype=_signal_stream_dtype)
116120

@@ -126,6 +130,7 @@ def _parse_header(self):
126130
self.header = {}
127131
self.header["nb_block"] = 1
128132
self.header["nb_segment"] = [1]
133+
self.header["signal_buffers"] = signal_buffers
129134
self.header["signal_streams"] = signal_streams
130135
self.header["signal_channels"] = signal_channels
131136
self.header["spike_channels"] = spike_channels

neo/rawio/rawmcsrawio.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
BaseRawIO,
2121
_signal_channel_dtype,
2222
_signal_stream_dtype,
23+
_signal_buffer_dtype,
2324
_spike_channel_dtype,
2425
_event_channel_dtype,
2526
)
@@ -53,8 +54,9 @@ def _parse_header(self):
5354
self.sampling_rate = info["sampling_rate"]
5455
self.nb_channel = len(info["channel_names"])
5556

56-
# one unique stream
57-
signal_streams = np.array([("Signals", "0")], dtype=_signal_stream_dtype)
57+
# one unique stream and buffer
58+
signal_streams = np.array([("Signals", "0", "0")], dtype=_signal_stream_dtype)
59+
signal_buffers = np.array([("Signals", "0")], dtype=_signal_buffer_dtype)
5860

5961
self._raw_signals = np.memmap(self.filename, dtype=self.dtype, mode="r", offset=info["header_size"]).reshape(
6062
-1, self.nb_channel
@@ -64,6 +66,7 @@ def _parse_header(self):
6466
for c in range(self.nb_channel):
6567
chan_id = str(c)
6668
stream_id = "0"
69+
buffer_id = "0"
6770
sig_channels.append(
6871
(
6972
info["channel_names"][c],
@@ -74,6 +77,7 @@ def _parse_header(self):
7477
info["signal_gain"],
7578
info["signal_offset"],
7679
stream_id,
80+
buffer_id,
7781
)
7882
)
7983
sig_channels = np.array(sig_channels, dtype=_signal_channel_dtype)
@@ -90,6 +94,7 @@ def _parse_header(self):
9094
self.header = {}
9195
self.header["nb_block"] = 1
9296
self.header["nb_segment"] = [1]
97+
self.header["signal_buffers"] = signal_buffers
9398
self.header["signal_streams"] = signal_streams
9499
self.header["signal_channels"] = sig_channels
95100
self.header["spike_channels"] = spike_channels

neo/rawio/spike2rawio.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
BaseRawIO,
2727
_signal_channel_dtype,
2828
_signal_stream_dtype,
29+
_signal_buffer_dtype,
2930
_spike_channel_dtype,
3031
_event_channel_dtype,
3132
)
@@ -254,7 +255,8 @@ def _parse_header(self):
254255
offset = 0.0
255256
sig_dtype = "float32"
256257
stream_id = "0" # set it after the loop
257-
signal_channels.append((name, str(chan_id), sampling_rate, sig_dtype, units, gain, offset, stream_id))
258+
buffer_id = ""
259+
signal_channels.append((name, str(chan_id), sampling_rate, sig_dtype, units, gain, offset, stream_id, buffer_id))
258260

259261
elif chan_info["kind"] in [2, 3, 4, 5, 8]:
260262
# Event
@@ -297,6 +299,8 @@ def _parse_header(self):
297299
spike_channels = np.array(spike_channels, dtype=_spike_channel_dtype)
298300
event_channels = np.array(event_channels, dtype=_event_channel_dtype)
299301

302+
signal_buffers = np.array([], dtype=_signal_buffer_dtype)
303+
300304
if len(signal_channels) > 0:
301305
if self.try_signal_grouping:
302306
# try to group signals channel if same sampling_rate/dtype/...
@@ -324,7 +328,8 @@ def _parse_header(self):
324328
"Signal channel in groups do not have same size, use try_signal_grouping=False"
325329
)
326330
self._sig_dtypes[stream_id] = np.dtype(charact["dtype"])
327-
signal_streams.append((f"Signal stream {stream_id}", stream_id))
331+
buffer_id = ""
332+
signal_streams.append((f"Signal stream {stream_id}", stream_id, buffer_id))
328333
signal_streams = np.array(signal_streams, dtype=_signal_stream_dtype)
329334
else:
330335
# if try_signal_grouping fail the user can try to split each channel in
@@ -333,6 +338,7 @@ def _parse_header(self):
333338
signal_streams = np.zeros(signal_channels.size, dtype=_signal_stream_dtype)
334339
signal_streams["id"] = signal_channels["stream_id"]
335340
signal_streams["name"] = signal_channels["name"]
341+
signal_streams["buffer_id"] = ""
336342
self._sig_dtypes = {s["stream_id"]: np.dtype(s["dtype"]) for s in signal_channels}
337343
else:
338344
signal_streams = np.array([], dtype=_signal_stream_dtype)
@@ -341,6 +347,7 @@ def _parse_header(self):
341347
self.header = {}
342348
self.header["nb_block"] = 1
343349
self.header["nb_segment"] = [nb_segment]
350+
self.header["signal_buffers"] = signal_buffers
344351
self.header["signal_streams"] = signal_streams
345352
self.header["signal_channels"] = signal_channels
346353
self.header["spike_channels"] = spike_channels

0 commit comments

Comments
 (0)