@@ -61,6 +61,10 @@ class SubjectMetadataSchema(RaisingSchema):
6161class BehaviorMetadataSchema (RaisingSchema ):
6262 """This schema contains metadata pertaining to behavior.
6363 """
64+ neurodata_type = 'BehaviorMetadata'
65+ neurodata_type_inc = 'LabMetaData'
66+ neurodata_doc = "Metadata for behavior and behavior + ophys experiments"
67+ neurodata_skip = {"experiment_datetime" }
6468
6569 behavior_session_uuid = fields .UUID (
6670 doc = 'MTrain record for session, also called foraging_id' ,
@@ -71,6 +75,21 @@ class BehaviorMetadataSchema(RaisingSchema):
7175 'visual_stimulus from the monitor' ),
7276 required = True ,
7377 )
78+ session_type = fields .String (
79+ doc = 'Experimental session description' ,
80+ allow_none = True ,
81+ required = True ,
82+ )
83+ # 'experiment_datetime' will be stored in
84+ # pynwb NWBFile 'session_start_time' attr
85+ experiment_datetime = fields .DateTime (
86+ doc = 'Date of the experiment (UTC, as string)' ,
87+ required = True ,
88+ )
89+ rig_name = fields .String (
90+ doc = 'Name of behavior or optical physiology experiment rig' ,
91+ required = True ,
92+ )
7493
7594
7695class NwbOphysMetadataSchema (RaisingSchema ):
@@ -123,10 +142,6 @@ class OphysMetadataSchema(NwbOphysMetadataSchema):
123142 doc = 'Id for this ophys session' ,
124143 required = True ,
125144 )
126- rig_name = fields .String (
127- doc = 'Name of optical physiology experiment rig' ,
128- required = True ,
129- )
130145 field_of_view_width = fields .Int (
131146 doc = 'Width of optical physiology imaging plane in pixels' ,
132147 required = True ,
@@ -143,7 +158,7 @@ class OphysBehaviorMetadataSchema(BehaviorMetadataSchema, OphysMetadataSchema):
143158 """
144159
145160 neurodata_type = 'OphysBehaviorMetadata'
146- neurodata_type_inc = 'LabMetaData '
161+ neurodata_type_inc = 'BehaviorMetadata '
147162 neurodata_doc = "Metadata for behavior + ophys experiments"
148163 # Fields to skip converting to extension
149164 # They already exist as attributes for the following pyNWB classes:
@@ -152,18 +167,6 @@ class OphysBehaviorMetadataSchema(BehaviorMetadataSchema, OphysMetadataSchema):
152167 "targeted_structure" , "experiment_datetime" ,
153168 "ophys_frame_rate" }
154169
155- session_type = fields .String (
156- doc = 'Experimental session description' ,
157- allow_none = True ,
158- required = True ,
159- )
160- # 'experiment_datetime' will be stored in
161- # pynwb NWBFile 'session_start_time' attr
162- experiment_datetime = fields .DateTime (
163- doc = 'Date of the experiment (UTC, as string)' ,
164- required = True ,
165- )
166-
167170
168171class CompleteOphysBehaviorMetadataSchema (OphysBehaviorMetadataSchema ,
169172 SubjectMetadataSchema ):
@@ -230,3 +233,54 @@ class BehaviorTaskParametersSchema(RaisingSchema):
230233 doc = 'Total number of stimuli frames' ,
231234 required = True ,
232235 )
236+
237+
238+ class EyeTrackingRigGeometry (RaisingSchema ):
239+ """Eye tracking rig geometry"""
240+ values = fields .Float (
241+ doc = 'position/rotation with respect to (x, y, z)' ,
242+ required = True ,
243+ shape = (3 ,)
244+ )
245+ unit_of_measurement = fields .Str (
246+ doc = 'Unit of measurement for the data' ,
247+ required = True
248+ )
249+
250+
251+ class OphysEyeTrackingRigMetadataSchema (RaisingSchema ):
252+ """This schema encompasses metadata for ophys experiment rig
253+ """
254+ neurodata_type = 'OphysEyeTrackingRigMetadata'
255+ neurodata_type_inc = 'NWBDataInterface'
256+ neurodata_doc = "Metadata for ophys experiment rig"
257+
258+ equipment = fields .Str (
259+ doc = 'Description of rig' ,
260+ required = True
261+ )
262+ monitor_position = fields .Nested (
263+ EyeTrackingRigGeometry ,
264+ doc = 'position of monitor (x, y, z)' ,
265+ required = True
266+ )
267+ camera_position = fields .Nested (
268+ EyeTrackingRigGeometry ,
269+ doc = 'position of camera (x, y, z)' ,
270+ required = True
271+ )
272+ led_position = fields .Nested (
273+ EyeTrackingRigGeometry ,
274+ doc = 'position of LED (x, y, z)' ,
275+ required = True
276+ )
277+ monitor_rotation = fields .Nested (
278+ EyeTrackingRigGeometry ,
279+ doc = 'rotation of monitor (x, y, z)' ,
280+ required = True
281+ )
282+ camera_rotation = fields .Nested (
283+ EyeTrackingRigGeometry ,
284+ doc = 'rotation of camera (x, y, z)' ,
285+ required = True
286+ )
0 commit comments