Skip to content

Commit 0b580c8

Browse files
author
sprenger
committed
[nixraw] add signal annotations and basic test
1 parent 31135a6 commit 0b580c8

File tree

2 files changed

+16
-25
lines changed

2 files changed

+16
-25
lines changed

neo/rawio/nixrawio.py

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -211,21 +211,6 @@ def _parse_header(self):
211211
props = group.metadata.inherited_properties()
212212
seg_ann.update(self._filter_properties(props, "segment"))
213213

214-
# TODO handle annotation at stream level
215-
'''
216-
sig_idx = 0
217-
groupdas = NixIO._group_signals(grp.data_arrays)
218-
for nix_name, signals in groupdas.items():
219-
  da = signals[0]
220-
  if da.type == 'neo.analogsignal' and seg_ann['signals']:
221-
  # collect and group DataArrays
222-
  sig_ann = seg_ann['signals'][sig_idx]
223-
  sig_chan_ann = self.raw_annotations['signal_channels'][sig_idx]
224-
  props = da.metadata.inherited_properties()
225-
  sig_ann.update(self._filter_properties(props, 'analogsignal'))
226-
  sig_chan_ann.update(self._filter_properties(props, 'analogsignal'))
227-
  sig_idx += 1
228-
'''
229214
sp_idx = 0
230215
ev_idx = 0
231216
for mt in group.multi_tags:
@@ -251,18 +236,21 @@ def _parse_header(self):
251236
if da.type != "neo.analogsignal":
252237
continue
253238
anasig_id = da.name.split('.')[-2]
239+
# skip already annotated signals
254240
if anasig_id in annotated_anasigs:
255241
continue
256242
annotated_anasigs.append(anasig_id)
257243

258-
array_anno_props = []
259-
for prop in da.metadata.props:
260-
if prop.type == 'ARRAYANNOTATION':
261-
array_anno_props.append(prop)
262-
263-
props_dict = self._filter_properties(array_anno_props,
264-
"analogsignal")
244+
# collect annotation properties
245+
props = [p for p in da.metadata.props
246+
if p.type != 'ARRAYANNOTATION']
247+
props_dict = self._filter_properties(props, "analogsignal")
248+
sig_ann[stream_id].update(props_dict)
265249

250+
# collect array annotation properties
251+
props = [p for p in da.metadata.props
252+
if p.type == 'ARRAYANNOTATION']
253+
props_dict = self._filter_properties(props, "analogsignal")
266254
sig_ann[stream_id]['__array_annotations__'].update(
267255
props_dict)
268256

neo/test/iotest/test_nixio_fr.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,9 @@ def test_annotations(self):
106106
annotations = {'something': 'hello hello000'}
107107
seg = Segment(**annotations)
108108
an =AnalogSignal([[1, 2, 3], [4, 5, 6]], units='V',
109-
sampling_rate=1*pq.Hz)
110-
an.annotations['ansigrandom'] = 'hello chars'
109+
sampling_rate=1*pq.Hz)
110+
an.annotate(ansigrandom='hello chars')
111+
an.array_annotate(custom_id=[1, 2, 3])
111112
sp = SpikeTrain([3, 4, 5]* s, t_stop=10.0)
112113
sp.annotations['railway'] = 'hello train'
113114
ev = Event(np.arange(0, 30, 10)*pq.Hz,
@@ -123,14 +124,16 @@ def test_annotations(self):
123124
bl.segments.append(seg)
124125
io.write_block(bl)
125126
io.close()
127+
126128
with NixIOfr(filename=self.testfilename) as frio:
127129
frbl = frio.read_block()
128130
assert 'my_custom_annotation' in frbl.annotations
129131
assert 'something' in frbl.segments[0].annotations
130-
# assert 'ansigrandom' in frbl.segments[0].analogsignals[0].annotations
132+
assert 'ansigrandom' in frbl.segments[0].analogsignals[0].annotations
131133
assert 'railway' in frbl.segments[0].spiketrains[0].annotations
132134
assert 'venue' in frbl.segments[0].events[0].annotations
133135
assert 'evven' in frbl.segments[0].events[1].annotations
136+
assert 'custom_id' in frbl.segments[0].analogsignals[0].array_annotations
134137
os.remove(self.testfilename)
135138

136139

0 commit comments

Comments
 (0)