import numpy as np
from pynwb.ophys import PlaneSegmentation, TwoPhotonSeries
from .. import ObjectMapper, register_map
[docs]
@register_map(PlaneSegmentation)
class PlaneSegmentationMap(ObjectMapper):
# This might be needed for 2.0 as well
def __init__(self, spec):
super(PlaneSegmentationMap, self).__init__(spec)
reference_images_spec = self.spec.get_group('reference_images').get_neurodata_type('ImageSeries')
self.map_spec('reference_images', reference_images_spec)
[docs]
@ObjectMapper.constructor_arg('imaging_plane')
def carg_imaging_plane(self, *args):
builder = args[0]
if len(args) < 2:
return builder.name # I think this is the hack you had in there before
manager = args[1]
root = builder
parent = root.parent
while parent is not None:
root = parent
parent = root.parent
ip_name = builder['imaging_plane_name']['data']
ip_builder = root['general/optophysiology/%s' % ip_name]
imaging_plane = manager.construct(ip_builder)
return imaging_plane
[docs]
@register_map(TwoPhotonSeries)
class TwoPhotonSeriesMap(ObjectMapper):
[docs]
@ObjectMapper.constructor_arg('data')
def carg_data(self, *args):
builder = args[0]
if builder.name in ('2p_image_series',):
return np.array([-1.])
[docs]
@ObjectMapper.constructor_arg('unit')
def carg_unit(self, *args):
builder = args[0]
if builder.name in ('2p_image_series',):
return 'None'
[docs]
@ObjectMapper.constructor_arg('imaging_plane')
def carg_imaging_plane(self, *args):
builder = args[0]
if len(args) < 2:
return builder.name # I think this is the hack you had in there before
manager = args[1]
root = builder
parent = root.parent
while parent is not None:
root = parent
parent = root.parent
ip_name = builder['imaging_plane']['data']
ip_builder = root['general/optophysiology/%s' % ip_name]
imaging_plane = manager.construct(ip_builder)
return imaging_plane