Source code for pynwb.legacy.map


from hdmf.build import ObjectMapper, TypeMap
from hdmf.build.builders import GroupBuilder


[docs] def decode(val): if isinstance(val, bytes): return val.decode('UTF-8') else: return val
[docs] class ObjectMapperLegacy(ObjectMapper):
[docs] @ObjectMapper.constructor_arg('source') def source_gettr(self, builder, manager): if 'source' in builder.attributes: return builder.attributes['source'] else: return 'No known source'
[docs] class TypeMapLegacy(TypeMap):
[docs] def get_builder_dt(self, builder): # noqa: C901 ''' For a given builder, return the neurodata_type. In this legacy TypeMap, the builder may have out-of-spec neurodata_type; this function coerces this to a 2.0 compatible version. ''' if builder.name == 'root': return 'NWBFile' elif builder.name == 'subject' and builder.parent.name == 'general': return 'Subject' else: attrs = builder.attributes ndt = attrs.get('neurodata_type') if ndt == 'Module': return 'ProcessingModule' elif ndt == 'Interface': return builder.name elif ndt == 'Epoch': return 'Epoch' elif ndt == 'TimeSeries': ancestry = decode(attrs['ancestry'][-1]) if ancestry == 'TwoPhotonSeries' and decode(builder.name) == 'corrected': return 'ImageSeries' else: return ancestry elif ndt == 'Custom': parent_ndt = self.get_builder_dt(builder.parent) if parent_ndt == 'ImageSegmentation' and builder.name in ('roi_ids', 'cell_specimen_ids'): return None elif parent_ndt == 'PlaneSegmentation' and builder.name in ('roi_list', 'imaging_plane_name'): return None elif parent_ndt == 'IntervalSeries' and builder.name in ('frame_duration',): return None elif parent_ndt == 'TimeSeries' and builder.name in ('feature_description', 'bits_per_pixel', 'dimension', 'field_of_view', 'format'): return None elif parent_ndt == 'ImagingPlane' and builder.parent.name in ('imaging_plane_1',): return None elif parent_ndt == 'AbstractFeatureSeries' and builder.name in ('frame_duration',): return None elif parent_ndt == 'IndexSeries' and builder.name in ('frame_duration',): return None elif builder.parent.name == 'general': return None elif parent_ndt == 'RoiResponseSeries' and builder.name in ('r', 'neuropil_traces_path', 'rmse', 'comments'): return None elif parent_ndt == 'SpatialSeries' and builder.name in ('features'): return None else: raise RuntimeError(('Unable to determine neurodata_type: attrs["neurodata_type"]: "Custom",' 'parent.neurodata_type: %s' % parent_ndt)) else: parent_ndt = self.get_builder_dt(builder.parent) if parent_ndt == 'Epoch': return 'EpochTimeSeries' elif parent_ndt == 'MotionCorrection': return 'CorrectedImageStack' elif parent_ndt == 'ImagingPlane' and isinstance(builder, GroupBuilder): return 'OpticalChannel' elif parent_ndt == 'ImageSegmentation': return 'PlaneSegmentation' elif parent_ndt == 'PlaneSegmentation': if builder.name in ('roi_list', 'imaging_plane_name'): return None else: return 'ROI' else: parent_names = { 'extracellular_ephys': 'ElectrodeGroup', 'intracellular_ephys': 'IntracellularElectrodeGroup', 'optophysiology': 'ImagingPlane', 'optogenetics': 'OptogeneticStimulusSite', 'root': None, 'xy_translation': None, 'imaging_plane_1': None, 'running_speed': None, 'general': None, '2p_image_series': None, 'natural_movie_one_stimulus': None, 'natural_scenes_stimulus': None, 'devices': None, 'spontaneous_stimulus': None, 'static_gratings_stimulus': None, 'maximum_intensity_projection_image': None, 'imaging_plane_1_neuropil_response': None, 'imaging_plane_1_demixed_signal': None, 'corrected': None, 'running_speed_index': None, 'pupil_size_index': None, 'pupil_size': None, 'pupil_location': None, 'pupil_location_spherical': None } return decode(parent_names.get(builder.parent.name))
[docs] def get_builder_ns(self, builder): return 'core'