def get_structure_tree(self, file_name=None, structure_graph_id=1): """ Read the list of adult mouse structures and return an StructureTree instance. Parameters ---------- file_name: string File name to save/read the structures table. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. structure_graph_id: int Build a tree using structure only from the identified structure graph. """ file_name = self.get_cache_path(file_name, self.STRUCTURE_TREE_KEY) return OntologiesApi(self.api.api_url).get_structures_with_sets( strategy='lazy', path=file_name, pre=StructureTree.clean_structures, post=lambda x: StructureTree(StructureTree.clean_structures(x)), structure_graph_ids=structure_graph_id, **Cache.cache_json())
def _get_stimulus_mappings(self, file_name=None): """ Returns a mapping of which metrics are related to which stimuli. Internal use only. """ file_name = self.get_cache_path(file_name, self.STIMULUS_MAPPINGS_KEY) mappings = self.api.get_stimulus_mappings(path=file_name, strategy='lazy', **Cache.cache_json()) return mappings
def get_affine_parameters(self, section_data_set_id, direction='trv', file_name=None): ''' Extract the parameters of the 3D affine tranformation mapping this section data set's image-space stack to CCF-space (or vice-versa). Parameters ---------- section_data_set_id : int download the parameters for this data set. direction : str, optional Valid options are: trv : "transform from reference to volume". Maps CCF points to image space points. If you are resampling data into CCF, this is the direction you want. tvr : "transform from volume to reference". Maps image space points to CCF points. file_name : str If provided, store the downloaded file here. Returns ------- alignment : numpy.ndarray 4 X 3 matrix. In order to transform a point [X_1, X_2, X_3] run np.dot([X_1, X_2, X_3, 1], alignment). In to build a SimpleITK affine transform run: transform = sitk.AffineTransform(3) transform.SetParameters(alignment.flatten()) ''' if not direction in ('trv', 'tvr'): raise ArgumentError( 'invalid direction: {}. direction must be one of tvr, trv'. format(direction)) file_name = self.get_cache_path(file_name, self.ALIGNMENT3D_KEY) raw_alignment = self.api.download_alignment3d( strategy='lazy', path=file_name, section_data_set_id=section_data_set_id, **Cache.cache_json()) alignment_re = re.compile('{}_(?P<index>\d+)'.format(direction)) alignment = np.zeros((4, 3), dtype=float) for entry, value in raw_alignment.items(): match = alignment_re.match(entry) if match is not None: alignment.flat[int(match.group('index'))] = value return alignment
def get_cells(self, file_name=None, require_morphology=False, require_reconstruction=False, reporter_status=None, species=None, simple=True): """ Download metadata for all cells in the database and optionally return a subset filtered by whether or not they have a morphology or reconstruction. Parameters ---------- file_name: string File name to save/read the cell metadata as JSON. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. require_morphology: boolean Filter out cells that have no morphological images. require_reconstruction: boolean Filter out cells that have no morphological reconstructions. reporter_status: list Filter for cells that have one or more cell reporter statuses. species: list Filter for cells that belong to one or more species. If None, return all. Must be one of [ CellTypesApi.MOUSE, CellTypesApi.HUMAN ]. """ file_name = self.get_cache_path(file_name, self.CELLS_KEY) cells = self.api.list_cells_api(path=file_name, strategy='lazy', **Cache.cache_json()) if isinstance(reporter_status, string_types): reporter_status = [reporter_status] # filter the cells on the way out cells = self.api.filter_cells_api(cells, require_morphology, require_reconstruction, reporter_status, species, simple) return cells
def get_affine_parameters(self, section_data_set_id, direction='trv', file_name=None): ''' Extract the parameters of the 3D affine tranformation mapping this section data set's image-space stack to CCF-space (or vice-versa). Parameters ---------- section_data_set_id : int download the parameters for this data set. direction : str, optional Valid options are: trv : "transform from reference to volume". Maps CCF points to image space points. If you are resampling data into CCF, this is the direction you want. tvr : "transform from volume to reference". Maps image space points to CCF points. file_name : str If provided, store the downloaded file here. Returns ------- alignment : numpy.ndarray 4 X 3 matrix. In order to transform a point [X_1, X_2, X_3] run np.dot([X_1, X_2, X_3, 1], alignment). In to build a SimpleITK affine transform run: transform = sitk.AffineTransform(3) transform.SetParameters(alignment.flatten()) ''' if not direction in ('trv', 'tvr'): raise ArgumentError('invalid direction: {}. direction must be one of tvr, trv'.format(direction)) file_name = self.get_cache_path(file_name, self.ALIGNMENT3D_KEY) raw_alignment = self.api.download_alignment3d( strategy='lazy', path=file_name, section_data_set_id=section_data_set_id, **Cache.cache_json()) alignment_re = re.compile('{}_(?P<index>\d+)'.format(direction)) alignment = np.zeros((4, 3), dtype=float) for entry, value in raw_alignment.items(): match = alignment_re.match(entry) if match is not None: alignment.flat[int(match.group('index'))] = value return alignment
def test_excpt(mkdir, ju_read_url_get, ju_read, ju_write): @cacheable() def get_hemispheres_excpt(): return RmaApi().model_query(model='Hemisphere', excpt=['symbol']) df = get_hemispheres_excpt(path='/xyz/abc/example.json', strategy='create', **Cache.cache_json()) assert 'whatever' in df[0] ju_read_url_get.assert_called_once_with( 'http://api.brain-map.org/api/v2/data/query.json?q=model::Hemisphere,rma::options%5Bexcept$eqsymbol%5D') ju_write.assert_called_once_with('/xyz/abc/example.json', _msg) ju_read.assert_called_once_with('/xyz/abc/example.json') mkdir.assert_called_once_with('/xyz/abc')
def test_cacheable_json(from_csv, mkdir, ju_read_url_get, ju_read, ju_write): @cacheable() def get_hemispheres(): return RmaApi().model_query(model='Hemisphere') df = get_hemispheres(path='/xyz/abc/example.json', strategy='create', **Cache.cache_json()) assert 'whatever' in df[0] ju_read_url_get.assert_called_once_with( 'http://api.brain-map.org/api/v2/data/query.json?q=model::Hemisphere') assert not from_csv.called, 'from_csv should not have been called' ju_write.assert_called_once_with('/xyz/abc/example.json', _msg) ju_read.assert_called_once_with('/xyz/abc/example.json')
def test_cacheable_json(read_csv, mkdir, ju_read_url_get, ju_read, ju_write): @cacheable() def get_hemispheres(): return RmaApi().model_query(model='Hemisphere') df = get_hemispheres(path='/xyz/abc/example.json', strategy='create', **Cache.cache_json()) assert 'whatever' in df[0] ju_read_url_get.assert_called_once_with( 'http://api.brain-map.org/api/v2/data/query.json?q=model::Hemisphere') assert not read_csv.called, 'read_csv should not have been called' ju_write.assert_called_once_with('/xyz/abc/example.json', _msg) ju_read.assert_called_once_with('/xyz/abc/example.json')
def get_ephys_sweeps(self, specimen_id, file_name=None): """ Download sweep metadata for a single cell specimen. Parameters ---------- specimen_id: int ID of a cell. """ file_name = self.get_cache_path( file_name, self.EPHYS_SWEEPS_KEY, specimen_id) sweeps = self.api.get_ephys_sweeps(specimen_id, strategy='lazy', path=file_name, **Cache.cache_json()) return sweeps
def get_ephys_sweeps(self, specimen_id, file_name=None): """ Download sweep metadata for a single cell specimen. Parameters ---------- specimen_id: int ID of a cell. """ file_name = self.get_cache_path(file_name, self.EPHYS_SWEEPS_KEY, specimen_id) sweeps = self.api.get_ephys_sweeps(specimen_id, strategy='lazy', path=file_name, **Cache.cache_json()) return sweeps
def get_experiments(self, dataframe=False, file_name=None, cre=None, injection_structure_ids=None): """ Read a list of experiments that match certain criteria. If caching is enabled, this will save the whole (unfiltered) list of experiments to a file. Parameters ---------- dataframe: boolean Return the list of experiments as a Pandas DataFrame. If False, return a list of dictionaries. Default False. file_name: string File name to save/read the structures table. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. cre: boolean or list If True, return only cre-positive experiments. If False, return only cre-negative experiments. If None, return all experients. If list, return all experiments with cre line names in the supplied list. Default None. injection_structure_ids: list Only return experiments that were injected in the structures provided here. If None, return all experiments. Default None. """ file_name = self.get_cache_path(file_name, self.EXPERIMENTS_KEY) experiments = self.api.get_experiments_api(path=file_name, strategy='lazy', **Cache.cache_json()) for e in experiments: # renaming id e['id'] = e['data_set_id'] del e['data_set_id'] # simplify trangsenic line tl = e.get('transgenic_line', None) if tl: e['transgenic_line'] = tl['name'] # parse the injection structures injs = [int(i) for i in e['injection_structures'].split('/')] e['injection_structures'] = injs e['primary_injection_structure'] = injs[0] # remove storage dir del e['storage_directory'] # filter the read/downloaded list of experiments experiments = self.filter_experiments(experiments, cre, injection_structure_ids) if dataframe: experiments = pd.DataFrame(experiments) experiments.set_index(['id'], inplace=True, drop=False) return experiments
def get_cell_specimens(self, file_name=None, ids=None, experiment_container_ids=None, include_failed=False, simple=True, filters=None): """ Return cell specimens that have certain properies. Parameters ---------- file_name: string File name to save/read the cell specimens. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of cell specimen ids. experiment_container_ids: list List of experiment container ids. include_failed: bool Whether to include cells from failed experiment containers simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. filters: list of dicts List of filter dictionaries. The Allen Brain Observatory web site can generate filters in this format to reproduce a filtered set of cells found there. To see what these look like, visit http://observatory.brain-map.org/visualcoding, perform a cell search and apply some filters (e.g. find cells in a particular area), then click the "view these cells in the AllenSDK" link on the bottom-left of the search results page. This will take you to a page that contains a code sample you can use to apply those same filters via this argument. For more detail on the filter syntax, see BrainObservatoryApi.dataframe_query. Returns ------- list of dictionaries """ file_name = self.get_cache_path(file_name, self.CELL_SPECIMENS_KEY) cell_specimens = self.api.get_cell_metrics( path=file_name, strategy='lazy', pre=lambda x: [y for y in x], **Cache.cache_json()) cell_specimens = self.api.filter_cell_specimens( cell_specimens, ids=ids, experiment_container_ids=experiment_container_ids, include_failed=include_failed, filters=filters) # drop the thumbnail columns if simple: mappings = self._get_stimulus_mappings() thumbnails = [ m['item'] for m in mappings if m['item_type'] == 'T' and m['level'] == 'R' ] for cs in cell_specimens: for t in thumbnails: del cs[t] return cell_specimens
def get_experiment_containers(self, file_name=None, ids=None, targeted_structures=None, imaging_depths=None, cre_lines=None, reporter_lines=None, transgenic_lines=None, include_failed=False, simple=True): """ Get a list of experiment containers matching certain criteria. Parameters ---------- file_name: string File name to save/read the experiment containers. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of experiment container ids. targeted_structures: list List of structure acronyms. Must be in the list returned by BrainObservatoryCache.get_all_targeted_structures(). imaging_depths: list List of imaging depths. Must be in the list returned by BrainObservatoryCache.get_all_imaging_depths(). cre_lines: list List of cre lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines(). reporter_lines: list List of reporter lines. Must be in the list returned by BrainObservatoryCache.get_all_reporter_lines(). transgenic_lines: list List of transgenic lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines() or. BrainObservatoryCache.get_all_reporter_lines(). include_failed: boolean Whether or not to include failed experiment containers. simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. Returns ------- list of dictionaries """ _assert_not_string(targeted_structures, "targeted_structures") _assert_not_string(cre_lines, "cre_lines") _assert_not_string(reporter_lines, "reporter_lines") _assert_not_string(transgenic_lines, "transgenic_lines") file_name = self.get_cache_path( file_name, self.EXPERIMENT_CONTAINERS_KEY) containers = self.api.get_experiment_containers(path=file_name, strategy='lazy', **Cache.cache_json()) containers = self.api.filter_experiment_containers(containers, ids=ids, targeted_structures=targeted_structures, imaging_depths=imaging_depths, cre_lines=cre_lines, reporter_lines=reporter_lines, transgenic_lines=transgenic_lines, include_failed=include_failed, simple=simple) return containers
def get_ophys_experiments(self, file_name=None, ids=None, experiment_container_ids=None, targeted_structures=None, imaging_depths=None, cre_lines=None, reporter_lines=None, transgenic_lines=None, stimuli=None, session_types=None, cell_specimen_ids=None, include_failed=False, require_eye_tracking=False, simple=True): """ Get a list of ophys experiments matching certain criteria. Parameters ---------- file_name: string File name to save/read the ophys experiments. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of ophys experiment ids. experiment_container_ids: list List of experiment container ids. targeted_structures: list List of structure acronyms. Must be in the list returned by BrainObservatoryCache.get_all_targeted_structures(). imaging_depths: list List of imaging depths. Must be in the list returned by BrainObservatoryCache.get_all_imaging_depths(). cre_lines: list List of cre lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines(). reporter_lines: list List of reporter lines. Must be in the list returned by BrainObservatoryCache.get_all_reporter_lines(). transgenic_lines: list List of transgenic lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines() or. BrainObservatoryCache.get_all_reporter_lines(). stimuli: list List of stimulus names. Must be in the list returned by BrainObservatoryCache.get_all_stimuli(). session_types: list List of stimulus session type names. Must be in the list returned by BrainObservatoryCache.get_all_session_types(). cell_specimen_ids: list Only include experiments that contain cells with these ids. include_failed: boolean Whether or not to include experiments from failed experiment containers. simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. require_eye_tracking: boolean If True, only return experiments that have eye tracking results. Default: False. Returns ------- list of dictionaries """ _assert_not_string(targeted_structures, "targeted_structures") _assert_not_string(cre_lines, "cre_lines") _assert_not_string(reporter_lines, "reporter_lines") _assert_not_string(transgenic_lines, "transgenic_lines") _assert_not_string(stimuli, "stimuli") _assert_not_string(session_types, "session_types") file_name = self.get_cache_path(file_name, self.EXPERIMENTS_KEY) exps = self.api.get_ophys_experiments(path=file_name, strategy='lazy', **Cache.cache_json()) # NOTE: Ugly hack to update the 'fail_eye_tracking' field # which is using True/False values for the previous eye mapping # implementation. This will also need to be fixed in warehouse. # ----- Start of ugly hack ----- response = self.api.template_query('brain_observatory_queries', 'all_eye_mapping_files') session_ids_with_eye_tracking: set = { entry['attachable_id'] for entry in response if entry['attachable_type'] == "OphysSession" } for indx, exp in enumerate(exps): try: ophys_session_id = ophys_experiment_session_id_map[exp['id']] if ophys_session_id in session_ids_with_eye_tracking: exps[indx]['fail_eye_tracking'] = False else: exps[indx]['fail_eye_tracking'] = True except KeyError: exps[indx]['fail_eye_tracking'] = True # ----- End of ugly hack ----- if cell_specimen_ids is not None: cells = self.get_cell_specimens(ids=cell_specimen_ids) cell_container_ids = set( [cell['experiment_container_id'] for cell in cells]) if experiment_container_ids is not None: experiment_container_ids = list( set(experiment_container_ids) - cell_container_ids) else: experiment_container_ids = list(cell_container_ids) exps = self.api.filter_ophys_experiments( exps, ids=ids, experiment_container_ids=experiment_container_ids, targeted_structures=targeted_structures, imaging_depths=imaging_depths, cre_lines=cre_lines, reporter_lines=reporter_lines, transgenic_lines=transgenic_lines, stimuli=stimuli, session_types=session_types, include_failed=include_failed, require_eye_tracking=require_eye_tracking, simple=simple) return exps
def get_experiment_containers(self, file_name=None, ids=None, targeted_structures=None, imaging_depths=None, cre_lines=None, reporter_lines=None, transgenic_lines=None, include_failed=False, simple=True): """ Get a list of experiment containers matching certain criteria. Parameters ---------- file_name: string File name to save/read the experiment containers. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of experiment container ids. targeted_structures: list List of structure acronyms. Must be in the list returned by BrainObservatoryCache.get_all_targeted_structures(). imaging_depths: list List of imaging depths. Must be in the list returned by BrainObservatoryCache.get_all_imaging_depths(). cre_lines: list List of cre lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines(). reporter_lines: list List of reporter lines. Must be in the list returned by BrainObservatoryCache.get_all_reporter_lines(). transgenic_lines: list List of transgenic lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines() or. BrainObservatoryCache.get_all_reporter_lines(). include_failed: boolean Whether or not to include failed experiment containers. simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. Returns ------- list of dictionaries """ _assert_not_string(targeted_structures, "targeted_structures") _assert_not_string(cre_lines, "cre_lines") _assert_not_string(reporter_lines, "reporter_lines") _assert_not_string(transgenic_lines, "transgenic_lines") file_name = self.get_cache_path(file_name, self.EXPERIMENT_CONTAINERS_KEY) containers = self.api.get_experiment_containers(path=file_name, strategy='lazy', **Cache.cache_json()) containers = self.api.filter_experiment_containers( containers, ids=ids, targeted_structures=targeted_structures, imaging_depths=imaging_depths, cre_lines=cre_lines, reporter_lines=reporter_lines, transgenic_lines=transgenic_lines, include_failed=include_failed, simple=simple) return containers
def get_ophys_experiments(self, file_name=None, ids=None, experiment_container_ids=None, targeted_structures=None, imaging_depths=None, cre_lines=None, reporter_lines=None, transgenic_lines=None, stimuli=None, session_types=None, cell_specimen_ids=None, include_failed=False, require_eye_tracking=False, simple=True): """ Get a list of ophys experiments matching certain criteria. Parameters ---------- file_name: string File name to save/read the ophys experiments. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of ophys experiment ids. experiment_container_ids: list List of experiment container ids. targeted_structures: list List of structure acronyms. Must be in the list returned by BrainObservatoryCache.get_all_targeted_structures(). imaging_depths: list List of imaging depths. Must be in the list returned by BrainObservatoryCache.get_all_imaging_depths(). cre_lines: list List of cre lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines(). reporter_lines: list List of reporter lines. Must be in the list returned by BrainObservatoryCache.get_all_reporter_lines(). transgenic_lines: list List of transgenic lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines() or. BrainObservatoryCache.get_all_reporter_lines(). stimuli: list List of stimulus names. Must be in the list returned by BrainObservatoryCache.get_all_stimuli(). session_types: list List of stimulus session type names. Must be in the list returned by BrainObservatoryCache.get_all_session_types(). cell_specimen_ids: list Only include experiments that contain cells with these ids. include_failed: boolean Whether or not to include experiments from failed experiment containers. simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. require_eye_tracking: boolean If True, only return experiments that have eye tracking results. Default: False. Returns ------- list of dictionaries """ _assert_not_string(targeted_structures, "targeted_structures") _assert_not_string(cre_lines, "cre_lines") _assert_not_string(reporter_lines, "reporter_lines") _assert_not_string(transgenic_lines, "transgenic_lines") _assert_not_string(stimuli, "stimuli") _assert_not_string(session_types, "session_types") file_name = self.get_cache_path(file_name, self.EXPERIMENTS_KEY) exps = self.api.get_ophys_experiments(path=file_name, strategy='lazy', **Cache.cache_json()) if cell_specimen_ids is not None: cells = self.get_cell_specimens(ids=cell_specimen_ids) cell_container_ids = set([cell['experiment_container_id'] for cell in cells]) if experiment_container_ids is not None: experiment_container_ids = list(set(experiment_container_ids) - cell_container_ids) else: experiment_container_ids = list(cell_container_ids) exps = self.api.filter_ophys_experiments(exps, ids=ids, experiment_container_ids=experiment_container_ids, targeted_structures=targeted_structures, imaging_depths=imaging_depths, cre_lines=cre_lines, reporter_lines=reporter_lines, transgenic_lines=transgenic_lines, stimuli=stimuli, session_types=session_types, include_failed=include_failed, require_eye_tracking=require_eye_tracking, simple=simple) return exps
def get_cell_specimens(self, file_name=None, ids=None, experiment_container_ids=None, include_failed=False, simple=True, filters=None): """ Return cell specimens that have certain properies. Parameters ---------- file_name: string File name to save/read the cell specimens. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of cell specimen ids. experiment_container_ids: list List of experiment container ids. include_failed: bool Whether to include cells from failed experiment containers simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. filters: list of dicts List of filter dictionaries. The Allen Brain Observatory web site can generate filters in this format to reproduce a filtered set of cells found there. To see what these look like, visit http://observatory.brain-map.org/visualcoding, perform a cell search and apply some filters (e.g. find cells in a particular area), then click the "view these cells in the AllenSDK" link on the bottom-left of the search results page. This will take you to a page that contains a code sample you can use to apply those same filters via this argument. For more detail on the filter syntax, see BrainObservatoryApi.dataframe_query. Returns ------- list of dictionaries """ file_name = self.get_cache_path(file_name, self.CELL_SPECIMENS_KEY) cell_specimens = self.api.get_cell_metrics(path=file_name, strategy='lazy', pre= lambda x: [y for y in x], **Cache.cache_json()) cell_specimens = self.api.filter_cell_specimens(cell_specimens, ids=ids, experiment_container_ids=experiment_container_ids, include_failed=include_failed, filters=filters) # drop the thumbnail columns if simple: mappings = self._get_stimulus_mappings() thumbnails = [m['item'] for m in mappings if m[ 'item_type'] == 'T' and m['level'] == 'R'] for cs in cell_specimens: for t in thumbnails: del cs[t] return cell_specimens
def get_experiments(self, dataframe=False, file_name=None, cre=None, injection_structure_ids=None): """ Read a list of experiments that match certain criteria. If caching is enabled, this will save the whole (unfiltered) list of experiments to a file. Parameters ---------- dataframe: boolean Return the list of experiments as a Pandas DataFrame. If False, return a list of dictionaries. Default False. file_name: string File name to save/read the structures table. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. cre: boolean or list If True, return only cre-positive experiments. If False, return only cre-negative experiments. If None, return all experients. If list, return all experiments with cre line names in the supplied list. Default None. injection_structure_ids: list Only return experiments that were injected in the structures provided here. If None, return all experiments. Default None. """ file_name = self.get_cache_path(file_name, self.EXPERIMENTS_KEY) experiments = self.api.get_experiments_api(path=file_name, strategy='lazy', **Cache.cache_json()) for e in experiments: # renaming id e['id'] = e['data_set_id'] del e['data_set_id'] # simplify trangsenic line tl = e.get('transgenic_line', None) if tl: e['transgenic_line'] = tl['name'] # parse the injection structures injs = [ int(i) for i in e['injection_structures'].split('/') ] e['injection_structures'] = injs e['primary_injection_structure'] = injs[0] # remove storage dir del e['storage_directory'] # filter the read/downloaded list of experiments experiments = self.filter_experiments( experiments, cre, injection_structure_ids) if dataframe: experiments = pd.DataFrame(experiments) experiments.set_index(['id'], inplace=True, drop=False) return experiments
def get_ophys_experiments(self, file_name=None, ids=None, experiment_container_ids=None, targeted_structures=None, imaging_depths=None, cre_lines=None, reporter_lines=None, transgenic_lines=None, stimuli=None, session_types=None, cell_specimen_ids=None, include_failed=False, require_eye_tracking=False, simple=True): """ Get a list of ophys experiments matching certain criteria. Parameters ---------- file_name: string File name to save/read the ophys experiments. If file_name is None, the file_name will be pulled out of the manifest. If caching is disabled, no file will be saved. Default is None. ids: list List of ophys experiment ids. experiment_container_ids: list List of experiment container ids. targeted_structures: list List of structure acronyms. Must be in the list returned by BrainObservatoryCache.get_all_targeted_structures(). imaging_depths: list List of imaging depths. Must be in the list returned by BrainObservatoryCache.get_all_imaging_depths(). cre_lines: list List of cre lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines(). reporter_lines: list List of reporter lines. Must be in the list returned by BrainObservatoryCache.get_all_reporter_lines(). transgenic_lines: list List of transgenic lines. Must be in the list returned by BrainObservatoryCache.get_all_cre_lines() or. BrainObservatoryCache.get_all_reporter_lines(). stimuli: list List of stimulus names. Must be in the list returned by BrainObservatoryCache.get_all_stimuli(). session_types: list List of stimulus session type names. Must be in the list returned by BrainObservatoryCache.get_all_session_types(). cell_specimen_ids: list Only include experiments that contain cells with these ids. include_failed: boolean Whether or not to include experiments from failed experiment containers. simple: boolean Whether or not to simplify the dictionary properties returned by this method to a more concise subset. require_eye_tracking: boolean If True, only return experiments that have eye tracking results. Default: False. Returns ------- list of dictionaries """ _assert_not_string(targeted_structures, "targeted_structures") _assert_not_string(cre_lines, "cre_lines") _assert_not_string(reporter_lines, "reporter_lines") _assert_not_string(transgenic_lines, "transgenic_lines") _assert_not_string(stimuli, "stimuli") _assert_not_string(session_types, "session_types") file_name = self.get_cache_path(file_name, self.EXPERIMENTS_KEY) exps = self.api.get_ophys_experiments(path=file_name, strategy='lazy', **Cache.cache_json()) if cell_specimen_ids is not None: cells = self.get_cell_specimens(ids=cell_specimen_ids) cell_container_ids = set( [cell['experiment_container_id'] for cell in cells]) if experiment_container_ids is not None: experiment_container_ids = list( set(experiment_container_ids) - cell_container_ids) else: experiment_container_ids = list(cell_container_ids) exps = self.api.filter_ophys_experiments( exps, ids=ids, experiment_container_ids=experiment_container_ids, targeted_structures=targeted_structures, imaging_depths=imaging_depths, cre_lines=cre_lines, reporter_lines=reporter_lines, transgenic_lines=transgenic_lines, stimuli=stimuli, session_types=session_types, include_failed=include_failed, require_eye_tracking=require_eye_tracking, simple=simple) return exps