diff --git a/fishbook/fishbook.py b/fishbook/fishbook.py index 11f3c77..cecf6e3 100644 --- a/fishbook/fishbook.py +++ b/fishbook/fishbook.py @@ -1,6 +1,6 @@ from .database.database import Cells, Datasets, CellDatasetMap, Subjects, SubjectProperties, SubjectDatasetMap, Stimuli, Repros import numpy as np - +from IPython import embed def _safe_get_val(dictionary:dict, key, default=None): return dictionary[key] if key in dictionary.keys() else default @@ -58,7 +58,7 @@ class Cell: return [RePro(tuple=r) for r in repros] @staticmethod - def celltypes(): + def unique_cell_types(): return np.unique(Cells.fetch("cell_type")) @staticmethod @@ -198,31 +198,34 @@ class RePro: return [Stimulus(tuple=s) for s in stims] @staticmethod - def find_repros(repro_name=None, cell_id=None, cell_type=None, species=None, settings=None): + def find_repros(name=None, cell_id=None, cell_type=None, species=None, settings=None, quality=None): """ - Cell type and species are ignored, if cell_id is provided + Cell type, quality, and species are ignored, if cell_id is provided :param repro_name: :param cell_id: :param cell_type: :param species: :param settings: + :param quality: :return: """ repros = Repros & True - if repro_name: - repros = repros & "repro_name like '%{0:s}%'".format(repro_name) + if name: + repros = repros & "repro_name like '%{0:s}%'".format(name) if settings: repros = repros & "settings like '%{0:s}%'".format(settings) if cell_id: repros = repros & "cell_id = '{0:s}'".format(cell_id) - if not cell_id and (cell_type or species): - cells = Cells * Subjects + if not cell_id and (cell_type or species or quality): + cells = (Cells * CellDatasetMap * Datasets) * Subjects if cell_type: cells = cells & "cell_type like '%{0:s}%'".format(cell_type) if species: cells = cells & "species like '%{0:s}%'".format(species) - repros = repros * cells - repros.proj("repro_id", "repro_name", "settings", "run", "cell_id", "start", "duration").fetch(as_dict=True) + if quality: + cells = cells & "quality like '{0:s}'".format(quality) + p = cells.proj("quality", "experimenter") + repros = repros & p return [RePro(tuple=r) for r in repros]