Source code for allensdk.brain_observatory.ecephys.stimulus_analysis.natural_movies

import numpy as np
import pandas as pd
from six import string_types
import scipy.ndimage as ndi
import scipy.stats as st
from scipy.optimize import curve_fit
import logging

import matplotlib.pyplot as plt

from .stimulus_analysis import StimulusAnalysis, get_fr

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)


logger = logging.getLogger(__name__)


[docs]class NaturalMovies(StimulusAnalysis): """ A class for computing single-unit metrics from the natural movies stimulus of an ecephys session NWB file. To use, pass in a EcephysSession object:: session = EcephysSession.from_nwb_path('/path/to/my.nwb') nm_analysis = NaturalMovies(session) or, alternatively, pass in the file path:: nm_analysis = Flashes('/path/to/my.nwb') You can also pass in a unit filter dictionary which will only select units with certain properties. For example to get only those units which are on probe C and found in the VISp area:: nm_analysis = NaturalMovies(session, filter={'location': 'probeC', 'ecephys_structure_acronym': 'VISp'}) To get a table of the individual unit metrics ranked by unit ID:: metrics_table_df = nm_analysis.metrics() TODO: Need to find a default trial_duration otherwise class will fail """ def __init__(self, ecephys_session, trial_duration=None, **kwargs): super(NaturalMovies, self).__init__(ecephys_session, trial_duration=trial_duration, **kwargs) self._metrics = None if self._params is not None: self._params = self._params['natural_movies'] self._stimulus_key = self._params['stimulus_key'] #else: # self._stimulus_key = 'natural_movies' @property def name(self): return 'Natural Movies' @property def null_condition(self): return -1 @property def METRICS_COLUMNS(self): return [('fano_nm', np.uint64), ('firing_rate_nm', np.float64), ('lifetime_sparseness_nm', np.float64), ('run_pval_ns', np.float64), ('run_mod_ns', np.float64)] @property def metrics(self): if self._metrics is None: logger.info('Calculating metrics for ' + self.name) unit_ids = self.unit_ids metrics_df = self.empty_metrics_table() metrics_df['fano_nm'] = [self._get_fano_factor(unit, self._get_preferred_condition(unit)) for unit in unit_ids] metrics_df['firing_rate_nm'] = [self._get_overall_firing_rate(unit) for unit in unit_ids] metrics_df['lifetime_sparseness_nm'] = [self._get_lifetime_sparseness(unit) for unit in unit_ids] run_vals = [self._get_running_modulation(unit, self._get_preferred_condition(unit)) for unit in unit_ids] metrics_df['run_pval_nm'] = [rv[0] for rv in run_vals] metrics_df['run_mod_nm'] = [rv[1] for rv in run_vals] self._metrics = metrics_df return self._metrics
[docs] @classmethod def known_stimulus_keys(cls): return ['natural_movies', 'natural_movie_1', 'natural_movie_3']
def _get_stim_table_stats(self): pass