Source code for allensdk.brain_observatory.behavior.data_objects.metadata.ophys_experiment_metadata.multi_plane_metadata.imaging_plane_group
from typing import Optional
from pynwb import NWBFile
from allensdk.core import DataObject
from allensdk.core import \
JsonReadableInterface, LimsReadableInterface, NwbReadableInterface
from allensdk.internal.api import PostgresQueryMixin
[docs]class ImagingPlaneGroup(DataObject, LimsReadableInterface,
JsonReadableInterface, NwbReadableInterface):
def __init__(self, plane_group: int, plane_group_count: int):
super().__init__(name='plane_group', value=None, is_value_self=True)
self._plane_group = plane_group
self._plane_group_count = plane_group_count
@property
def plane_group(self):
return self._plane_group
@property
def plane_group_count(self):
return self._plane_group_count
[docs] @classmethod
def from_lims(cls, ophys_experiment_id: int,
lims_db: PostgresQueryMixin) -> \
Optional["ImagingPlaneGroup"]:
"""
Parameters
----------
ophys_experiment_id
lims_db
Returns
-------
ImagingPlaneGroup instance if ophys_experiment given by
ophys_experiment_id is part of a plane group
else None
"""
query = f'''
SELECT oe.id as ophys_experiment_id, pg.group_order AS plane_group
FROM ophys_experiments oe
JOIN ophys_sessions os ON oe.ophys_session_id = os.id
JOIN ophys_imaging_plane_groups pg
ON pg.id = oe.ophys_imaging_plane_group_id
WHERE os.id = (
SELECT oe.ophys_session_id
FROM ophys_experiments oe
WHERE oe.id = {ophys_experiment_id}
)
'''
df = lims_db.select(query=query)
if df.empty:
return None
df = df.set_index('ophys_experiment_id')
plane_group = df.loc[ophys_experiment_id, 'plane_group']
plane_group_count = df['plane_group'].nunique()
return cls(plane_group=plane_group,
plane_group_count=plane_group_count)
[docs] @classmethod
def from_json(cls, dict_repr: dict) -> "ImagingPlaneGroup":
plane_group = dict_repr['imaging_plane_group']
plane_group_count = dict_repr['plane_group_count']
return cls(plane_group=plane_group,
plane_group_count=plane_group_count)
[docs] @classmethod
def from_nwb(cls, nwbfile: NWBFile) -> "ImagingPlaneGroup":
metadata = nwbfile.lab_meta_data['metadata']
return cls(plane_group=metadata.imaging_plane_group,
plane_group_count=metadata.imaging_plane_group_count)