@@ -91,31 +91,33 @@ def _parse_header(self):
9191 for chan_idx , chan_info in enumerate (self .sess .session_info ['channels' ]):
9292 chan_freq = chan_info ['metadata' ]['sampling_frequency' ]
9393
94+ # set MED session reference channel to be this channel, so the correct contigua is returned
95+ self .sess .set_reference_channel (chan_info ['metadata' ]['channel_name' ])
96+ contigua = self .sess .find_discontinuities ()
97+
98+ # find total number of samples in this channel
99+ chan_num_samples = 0
100+ for seg_idx in range (len (contigua )):
101+ chan_num_samples += (contigua [seg_idx ]['end_index' ] - contigua [seg_idx ]['start_index' ]) + 1
102+
94103 # see if we need a new stream, or add channel to existing stream
95104 add_to_existing_stream_info = False
96105 for stream_info in self ._stream_info :
97- if chan_freq == stream_info ['sampling_frequency' ]:
106+ if chan_freq == stream_info ['sampling_frequency' ] and chan_num_samples == stream_info [ 'num_samples' ] :
98107 # found a match, so add it!
99108 add_to_existing_stream_info = True
100109 stream_info ['chan_list' ].append ((chan_idx , chan_info ['metadata' ]['channel_name' ]))
101110 stream_info ['raw_chans' ].append (chan_info ['metadata' ]['channel_name' ])
111+ break
102112
103113 if not add_to_existing_stream_info :
104114 self ._num_stream_info += 1
105- # set MED session reference channel to be this channel, so the correct contigua is returned
106- self .sess .set_reference_channel (chan_info ['metadata' ]['channel_name' ])
107- contigua = self .sess .find_discontinuities ()
108-
109- # find total number of samples in this stream
110- num_samples_in_stream = 0
111- for seg_idx in range (len (contigua )):
112- num_samples_in_stream += (contigua [seg_idx ]['end_index' ] - contigua [seg_idx ]['start_index' ]) + 1
113115
114116 new_stream_info = {'sampling_frequency' : chan_info ['metadata' ]['sampling_frequency' ], \
115117 'chan_list' : [(chan_idx , chan_info ['metadata' ]['channel_name' ])], \
116118 'contigua' : contigua , \
117119 'raw_chans' : [chan_info ['metadata' ]['channel_name' ]], \
118- 'num_samples' : num_samples_in_stream }
120+ 'num_samples' : chan_num_samples }
119121
120122 self ._stream_info .append (new_stream_info )
121123
@@ -126,8 +128,7 @@ def _parse_header(self):
126128 signal_channels = []
127129
128130 # fill in signal_streams and signal_channels info
129- signal_stream_counter = 0
130- for stream_info in self ._stream_info :
131+ for signal_stream_counter , stream_info in enumerate (self ._stream_info ):
131132
132133 # get the stream start time, which is the start time of the first continuous section
133134 stream_start_time = (stream_info ['contigua' ][0 ]["start_time" ] + self ._session_time_offset ) / 1e6
@@ -140,8 +141,6 @@ def _parse_header(self):
140141 # add entry for signal_channels for each channel in a stream
141142 for chan in stream_info ['chan_list' ]:
142143 signal_channels .append ((chan [1 ], chan [0 ], stream_info ['sampling_frequency' ], 'int32' , 'uV' , 1 , 0 , stream_id ))
143-
144- signal_stream_counter += 1
145144
146145 signal_streams = np .array (signal_streams , dtype = _signal_stream_dtype )
147146 signal_channels = np .array (signal_channels , dtype = _signal_channel_dtype )
@@ -233,7 +232,7 @@ def _get_analogsignal_chunk(self, block_index, seg_index, i_start, i_stop,
233232 self .sess .set_channel_active (self ._stream_info [stream_index ]['raw_chans' ][channel_idx ])
234233 self .sess .set_reference_channel (self ._stream_info [stream_index ]['raw_chans' ][channel_indexes [0 ]])
235234
236- # Return empty dataset if start/stop sampes are equal
235+ # Return empty dataset if start/stop samples are equal
237236 if i_start == i_stop :
238237 raw_signals = np .zeros ((0 , num_channels ), dtype = 'int32' )
239238 return raw_signals
@@ -245,10 +244,10 @@ def _get_analogsignal_chunk(self, block_index, seg_index, i_start, i_stop,
245244 # Create "sample_major" 2D numpy array from the result of read_by_index()
246245 samps_returned = len (self .sess .data ['channels' ][0 ]['data' ])
247246 raw_signals = np .array ([], dtype = np .int32 )
248- for chan in self . sess . data [ 'channels' ]:
249- raw_signals = np .concatenate (( raw_signals , chan [ 'data' ] ))
250- raw_signals = raw_signals . reshape ( num_channels , samps_returned )
251- raw_signals = raw_signals . transpose () # this makes is sample_major rather than channel_major
247+
248+ raw_signals = np .empty (( i_stop - i_start , num_channels ))
249+ for i , chan in enumerate ( self . sess . data [ 'channels' ]):
250+ raw_signals [:, i ] = chan [ 'data' ]
252251
253252 return raw_signals
254253
0 commit comments