Skip to content

Commit ae46a43

Browse files
committed
Start differentiating for variable ROIs
Right now the Readers for newer versions don't do anything different, but some of the structure is there to allow them to.
1 parent 02594de commit ae46a43

2 files changed

Lines changed: 24 additions & 6 deletions

File tree

src/silverlabnwb/header.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,11 @@ def get_raw_fields(self):
148148
"""
149149
return self._raw_fields
150150

151+
@property
152+
def allows_variable_rois(self):
153+
"""Check whether ROIs with variable shape or resolution are allowed."""
154+
return False # by default (in older versions), they are not
155+
151156

152157
class LabViewHeaderPre2018(LabViewHeader):
153158

@@ -190,7 +195,7 @@ class LabViewHeaderPost2018(LabViewHeader):
190195
"gain_green": "pmt 2",
191196
}
192197

193-
# In this version of LabView, the trial times are stored in their own
198+
# In these versions of LabView, the trial times are stored in their own
194199
# (misleadingly titled) section of the header.
195200
trial_times_section = 'Intertrial FIFO Times'
196201

@@ -220,8 +225,8 @@ def _determine_imaging_mode(self):
220225
' or "Functional Imaging" must be true.')
221226

222227
def _imaging_section(self):
223-
# In LabView version 2.3.1, imaging parameters are stored under the
224-
# relevant imaging mode section.
228+
# In LabView version 2.3.1 and newer, imaging parameters are stored
229+
# under the relevant imaging mode section.
225230
imaging_section_name = ("VOLUME IMAGING"
226231
if self.imaging_mode is Modes.volume
227232
else "FUNCTIONAL IMAGING")
@@ -269,3 +274,8 @@ class LabViewHeader300(LabViewHeaderPost2018):
269274
@property
270275
def version(self):
271276
return LabViewVersions.v300
277+
278+
@property
279+
def allows_variable_rois(self):
280+
return (self._imaging_section['Variable Length'] == 'TRUE'
281+
or self._imaging_section['Variable Resolution'] == 'TRUE')

src/silverlabnwb/rois.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ def get_reader(cls, header):
4040
if header.version in [LabViewVersions.pre2018, LabViewVersions.v231]:
4141
return ClassicRoiReader()
4242
elif header.version is LabViewVersions.v300:
43-
# Here, we should check whether we have variable shape/resolution
44-
# ROIs based on the header, and create an appropriate subclass.
45-
return RoiReaderv300()
43+
if header.allows_variable_rois:
44+
# FIXME Handle this using RoiReaderv300Variable!
45+
raise ValueError('Variable ROIs not handled yet.')
46+
else:
47+
return RoiReaderv300()
4648
else:
4749
raise ValueError('Unsupported LabView version {}.'.format(header.version))
4850

@@ -105,3 +107,9 @@ def __init__(self):
105107
self.type_conversion_post_read.update({
106108
# For if we need to convert any of the new columns post-read.
107109
})
110+
111+
112+
class RoiReaderv300Variable(RoiReaderv300):
113+
"""A reader for LabView version 3.0.0, supporting variable shape ROIs."""
114+
# This should do something different when we ask to get the plane for a ROI.
115+
pass

0 commit comments

Comments
 (0)