Source code for allensdk.brain_observatory.nwb.eye_tracking.extension_builder

import os.path

from pynwb.spec import (NWBNamespaceBuilder, export_spec,
                        NWBGroupSpec, NWBDatasetSpec)

NAMESPACE = 'ndx-ellipse-eye-tracking'


[docs]def main(): # these arguments were auto-generated from your cookiecutter inputs ns_builder = NWBNamespaceBuilder( doc="""Store the elliptical eye tracking output of DeepLabCut""", name=f"""{NAMESPACE}""", version="""0.1.0""", author=list(map(str.strip, """Ben Dichter""".split(','))), contact=list(map(str.strip, """bdichter@lbl.gov""".split(','))) ) ns_builder.include_type('SpatialSeries', namespace='core') ns_builder.include_type('EyeTracking', namespace='core') ns_builder.include_type('TimeSeries', namespace='core') ellipse_series_spec = NWBGroupSpec( neurodata_type_def='EllipseSeries', neurodata_type_inc='SpatialSeries', doc='Information about an ellipse moving over time', datasets=[ NWBDatasetSpec( name='data', # override SpatialSeries 'data' dataset to be more explicit dtype='numeric', doc='The (x, y) coordinates of the center of the ellipse at each time point.', dims=('num_times', 'x, y'), shape=(None, 2), ), NWBDatasetSpec( name='area', dtype='float', doc='ellipse area, with nan values in likely blink times', shape=(None, ) ), NWBDatasetSpec( name='area_raw', dtype='float', doc='ellipse area, with no regard to likely blink times', shape=(None, ) ), NWBDatasetSpec( name='width', dtype='float', doc='width of ellipse', shape=(None, ) ), NWBDatasetSpec( name='height', dtype='float', doc='height of ellipse', shape=(None, ) ), NWBDatasetSpec( name='angle', dtype='float', doc='angle that ellipse is rotated by (phi)', shape=(None, ) ) ] ) ellipse_eye_tracking_spec = NWBGroupSpec( neurodata_type_def='EllipseEyeTracking', neurodata_type_inc='EyeTracking', name=None, default_name='EyeTracking', doc='Stores detailed eye tracking information output from DeepLabCut', groups=[ NWBGroupSpec( neurodata_type_inc=ellipse_series_spec, name=x, doc=x.replace('_', ' ') ) for x in ('eye_tracking', 'pupil_tracking', 'corneal_reflection_tracking') ] + [ NWBGroupSpec( neurodata_type_inc='TimeSeries', name='likely_blink', doc='Indicator of whether there was a probable blink for this frame' ) ] ) new_data_types = [ellipse_series_spec, ellipse_eye_tracking_spec] # export the spec to yaml files in the spec folder output_dir = os.path.abspath(os.path.join(os.path.dirname(__file__))) export_spec(ns_builder, new_data_types, output_dir)
if __name__ == "__main__": # usage: python create_extension_spec.py main()