Source code for allensdk.internal.brain_observatory.mouse
from typing import Optional, List
from allensdk.brain_observatory.behavior.data_objects.metadata\
.behavior_metadata.behavior_metadata import \
BehaviorMetadata
from allensdk.brain_observatory.behavior.data_objects.metadata\
.subject_metadata.mouse_id import \
MouseId
from allensdk.core.auth_config import LIMS_DB_CREDENTIAL_MAP
from allensdk.internal.api import db_connection_creator
from allensdk.internal.brain_observatory.util.multi_session_utils import \
get_session_metadata_multiprocessing, get_images_shown, \
remove_invalid_sessions
[docs]
class Mouse:
"""A mouse"""
def __init__(self, mouse_id: str):
self._mouse_id = mouse_id
@property
def mouse_id(self) -> str:
return self._mouse_id
[docs]
def get_behavior_sessions(
self,
exclude_invalid_sessions: bool = True
) -> List[BehaviorMetadata]:
"""
Gets all behavior sessions for mouse
Parameters
----------
exclude_invalid_sessions:
Whether to exclude invalid sessions
Returns
-------
List[BehaviorMetadata]
"""
lims_db = db_connection_creator(
fallback_credentials=LIMS_DB_CREDENTIAL_MAP
)
query = f"""
SELECT bs.id
FROM behavior_sessions bs
JOIN donors on donors.id = bs.donor_id
WHERE external_donor_name = '{self.mouse_id}'
"""
behavior_session_ids = lims_db.fetchall(query=query)
behavior_sessions = get_session_metadata_multiprocessing(
behavior_session_ids=behavior_session_ids,
lims_engine=lims_db
)
if exclude_invalid_sessions:
behavior_sessions = remove_invalid_sessions(
behavior_sessions=behavior_sessions
)
return behavior_sessions
[docs]
@classmethod
def from_behavior_session_id(
cls,
behavior_session_id: int
) -> "Mouse":
"""Instantiates `Mouse` from `behavior_session_id`"""
lims_db = db_connection_creator(
fallback_credentials=LIMS_DB_CREDENTIAL_MAP
)
mouse_id = MouseId.from_lims(
behavior_session_id=behavior_session_id,
lims_db=lims_db
)
return Mouse(mouse_id=mouse_id.value)
[docs]
def get_images_shown(
self,
up_to_behavior_session_id: Optional[int] = None,
n_workers: Optional[int] = None
):
"""Gets all images presented to mouse up to (not including)
`up_to_behavior_session_id` if provided
Parameters
----------
up_to_behavior_session_id
Filters stimulus presentations to all those up to (not including)
this behavior session, if provided
n_workers
Number of processes to spawn for reading image names from
stimulus files
"""
lims_db = db_connection_creator(
fallback_credentials=LIMS_DB_CREDENTIAL_MAP
)
behavior_sessions = self.get_behavior_sessions()
if up_to_behavior_session_id is not None:
this_date_of_acquisition = [
x.date_of_acquisition for x in behavior_sessions
if x.behavior_session_id == up_to_behavior_session_id][0]
prior_behavior_session_ids = set([
x.behavior_session_id for x in behavior_sessions
if x.date_of_acquisition < this_date_of_acquisition])
behavior_sessions = [
x for x in behavior_sessions
if x.behavior_session_id in prior_behavior_session_ids]
images_shown = get_images_shown(
behavior_session_ids=(
[x.behavior_session_id for x in behavior_sessions]),
lims_engine=lims_db,
n_workers=n_workers
)
return images_shown