@@ -159,11 +159,14 @@ def _parse_header(self):
159159 # We then set the stream_id to the sync stream id
160160 channel_stream_id = sync_stream_id
161161
162- if "ADC" in chan_id :
163- # These are non-neural channels and their stream should be separated
164- # We defined their stream_id as the stream_index of neural data plus the number of neural streams
165- # This is to not break backwards compatbility with the stream_id numbering
166- channel_stream_id = str (stream_index + len (sig_stream_names ))
162+ if "OneBox" not in stream_name :
163+ # If recording system is not OneBox, which has already a separate stream for ADC channels,
164+ # we need to separate ADC channels from neural channels.
165+ if "ADC" in chan_id :
166+ # These are non-neural channels and their stream should be separated
167+ # We defined their stream_id as the stream_index of neural data plus the number of neural streams
168+ # This is to not break backwards compatbility with the stream_id numbering
169+ channel_stream_id = str (stream_index + len (sig_stream_names ))
167170
168171 gain = float (chan_info ["bit_volts" ])
169172 sampling_rate = float (info ["sample_rate" ])
@@ -271,10 +274,22 @@ def _parse_header(self):
271274 "SYNC channel must be the last channel in the buffer. Open an issue in python-neo to request this feature."
272275 )
273276
274- neural_channels = [ch for ch in info ["channels" ] if "ADC" not in ch ["channel_name" ]]
275- adc_channels = [ch for ch in info ["channels" ] if "ADC" in ch ["channel_name" ]]
276- num_neural_channels = len (neural_channels )
277- num_adc_channels = len (adc_channels )
277+ if "OneBox" not in info ["stream_name" ]:
278+ # If recording system is not OneBox, which has already a separate stream for ADC channels,
279+ # we need to separate ADC channels from neural channels.
280+ # We do this by defining different stream_ids for ADC and non-ADC channels
281+ # (see above when creating signal_channels and signal_streams)
282+
283+ # Split neural and ADC channels
284+ # SYNC channel is handled separately below
285+ neural_channels = [ch for ch in info ["channels" ] if "ADC" not in ch ["channel_name" ]]
286+ adc_channels = [ch for ch in info ["channels" ] if "ADC" in ch ["channel_name" ]]
287+ num_neural_channels = len (neural_channels )
288+ num_adc_channels = len (adc_channels ) if "OneBox" not in info ["stream_name" ] else 0
289+ else :
290+ # OneBox already has a separate stream for ADC channels, so no need to split them here
291+ num_neural_channels = num_channels - 1 if has_sync_trace else num_channels
292+ num_adc_channels = 0
278293
279294 if num_adc_channels == 0 :
280295 if has_sync_trace and not self .load_sync_channel :
@@ -498,12 +513,17 @@ def _parse_header(self):
498513 if has_sync_trace :
499514 values = values [:- 1 ]
500515
501- neural_channels = [ch for ch in info ["channels" ] if "ADC" not in ch ["channel_name" ]]
502- num_neural_channels = len (neural_channels )
503- if is_neural_stream :
504- values = values [:num_neural_channels ]
505- else :
506- values = values [num_neural_channels :]
516+ if "SYNC" in stream_name and not self .load_sync_channel :
517+ # This is the sync stream, we only keep the last value
518+ values = values [- 1 :]
519+
520+ if "OneBox" not in info ["stream_name" ]:
521+ neural_channels = [ch for ch in info ["channels" ] if "ADC" not in ch ["channel_name" ]]
522+ num_neural_channels = len (neural_channels )
523+ if is_neural_stream :
524+ values = values [:num_neural_channels ]
525+ else :
526+ values = values [num_neural_channels :]
507527
508528 sig_ann ["__array_annotations__" ][key ] = values
509529
0 commit comments