Exemple #1
0
def load_data(epoch_key):
    logger.info('Loading position information and linearizing...')
    position_info = (get_interpolated_position_info(
        epoch_key, ANIMALS).dropna(subset=["linear_position"]))
    track_graph = get_track_graph()

    logger.info('Loading multiunits...')
    tetrode_info = make_tetrode_dataframe(ANIMALS, epoch_key=epoch_key)
    is_brain_areas = tetrode_info.area.str.upper().isin(
        ["CA1", "DCA1", "ICA1"])
    tetrode_keys = tetrode_info.loc[is_brain_areas].index

    def _time_function(*args, **kwargs):
        return position_info.index

    multiunits = get_all_multiunit_indicators(tetrode_keys, ANIMALS,
                                              _time_function)

    multiunit_spikes = (np.any(~np.isnan(multiunits.values),
                               axis=1)).astype(np.float)
    multiunit_firing_rate = pd.DataFrame(get_multiunit_population_firing_rate(
        multiunit_spikes, SAMPLING_FREQUENCY),
                                         index=position_info.index,
                                         columns=['firing_rate'])

    return {
        'position_info': position_info,
        'tetrode_info': tetrode_info,
        'multiunits': multiunits,
        'multiunit_firing_rate': multiunit_firing_rate,
        'track_graph': track_graph,
    }
Exemple #2
0
def load_data(epoch_key, brain_areas=None):

    if brain_areas is None:
        brain_areas = BRAIN_AREAS

    time = get_trial_time(epoch_key, ANIMALS)
    time = (pd.Series(np.ones_like(time, dtype=np.float),
                      index=time).resample('2ms').mean().index)

    def _time_function(*args, **kwargs):
        return time

    position_info = (get_interpolated_position_dataframe(
        epoch_key, ANIMALS,
        _time_function).dropna(subset=['linear_position', 'speed']))

    time = position_info.index

    tetrode_info = make_tetrode_dataframe(ANIMALS, epoch_key=epoch_key)
    is_brain_areas = (
        tetrode_info.area.astype(str).str.upper().isin(brain_areas))
    tetrode_keys = tetrode_info.loc[is_brain_areas].index
    lfps = get_LFPs(tetrode_keys, ANIMALS)
    lfps = lfps.resample('2ms').mean().fillna(method='pad').reindex(time)

    try:
        neuron_info = make_neuron_dataframe(ANIMALS).xs(epoch_key,
                                                        drop_level=False)
        neuron_info = neuron_info.loc[(neuron_info.numspikes > 100)
                                      & neuron_info.area.isin(brain_areas) &
                                      (neuron_info.type == 'principal')]
        spikes = get_all_spike_indicators(neuron_info.index, ANIMALS,
                                          _time_function).reindex(time)
    except KeyError:
        spikes = None

    tetrode_info = tetrode_info.loc[is_brain_areas]
    multiunit = (get_all_multiunit_indicators(
        tetrode_info.index, ANIMALS,
        _time_function).sel(features=_MARKS).reindex({'time': time}))
    multiunit_spikes = (np.any(~np.isnan(multiunit.values),
                               axis=1)).astype(np.float)
    multiunit_firing_rate = pd.DataFrame(get_multiunit_population_firing_rate(
        multiunit_spikes, SAMPLING_FREQUENCY, smoothing_sigma=0.020),
                                         index=time,
                                         columns=['firing_rate'])

    return {
        'position_info': position_info,
        'spikes': spikes,
        'multiunit': multiunit,
        'lfps': lfps,
        'tetrode_info': tetrode_info,
        'multiunit_firing_rate': multiunit_firing_rate,
        'sampling_frequency': SAMPLING_FREQUENCY,
    }
Exemple #3
0
def get_adhoc_multiunit(speed, tetrode_info, time_function):
    time = time_function()
    is_brain_areas = (
        tetrode_info.area.astype(str).str.upper().isin(BRAIN_AREAS))
    tetrode_info = tetrode_info.loc[is_brain_areas]

    multiunit = (get_all_multiunit_indicators(
        tetrode_info.index, ANIMALS,
        time_function).sel(features=_MARKS).reindex({'time': time}))
    multiunit_spikes = (np.any(~np.isnan(multiunit.values),
                               axis=1)).astype(np.float)
    multiunit_firing_rate = pd.DataFrame(get_multiunit_population_firing_rate(
        multiunit_spikes, SAMPLING_FREQUENCY),
                                         index=time,
                                         columns=['firing_rate'])
    multiunit_rate_change = multiunit_firing_rate.transform(
        lambda df: df / df.mean())
    multiunit_rate_zscore = multiunit_firing_rate.transform(
        lambda df: (df - df.mean()) / df.std())

    multiunit_high_synchrony_times = multiunit_HSE_detector(
        time,
        multiunit_spikes,
        speed.values,
        SAMPLING_FREQUENCY,
        minimum_duration=np.timedelta64(15, 'ms'),
        zscore_threshold=2.0,
        close_event_threshold=np.timedelta64(0, 'ms'))
    multiunit_high_synchrony_times.index = (
        multiunit_high_synchrony_times.index.rename('replay_number'))
    multiunit_high_synchrony_labels = get_labels(
        multiunit_high_synchrony_times, time)
    is_multiunit_high_synchrony = multiunit_high_synchrony_labels > 0
    multiunit_high_synchrony_times = multiunit_high_synchrony_times.assign(
        duration=lambda df: (df.end_time - df.start_time).dt.total_seconds())
    multiunit_spikes = pd.DataFrame(multiunit_spikes, index=time)

    return dict(
        multiunit=multiunit,
        multiunit_spikes=multiunit_spikes,
        multiunit_firing_rate=multiunit_firing_rate,
        multiunit_high_synchrony_times=multiunit_high_synchrony_times,
        multiunit_high_synchrony_labels=multiunit_high_synchrony_labels,
        multiunit_rate_change=multiunit_rate_change,
        multiunit_rate_zscore=multiunit_rate_zscore,
        is_multiunit_high_synchrony=is_multiunit_high_synchrony)
Exemple #4
0
def get_adhoc_multiunit(position_info, tetrode_keys, time_function,
                        position_to_linearize):
    time = position_info.index
    multiunits = get_all_multiunit_indicators(tetrode_keys, ANIMALS,
                                              time_function)
    multiunit_spikes = (np.any(~np.isnan(multiunits.values),
                               axis=1)).astype(np.float)
    multiunit_firing_rate = pd.DataFrame(get_multiunit_population_firing_rate(
        multiunit_spikes, SAMPLING_FREQUENCY),
                                         index=position_info.index,
                                         columns=['firing_rate'])
    multiunit_rate_change = multiunit_firing_rate.transform(
        lambda df: df / df.mean())
    multiunit_rate_zscore = np.log(multiunit_firing_rate).transform(
        lambda df: (df - df.mean()) / df.std())

    speed_feature = position_to_linearize[0].split('_')[0]
    speed = np.asarray(position_info[f'{speed_feature}_vel'])

    multiunit_high_synchrony_times = multiunit_HSE_detector(
        time,
        multiunit_spikes,
        speed,
        SAMPLING_FREQUENCY,
        minimum_duration=np.timedelta64(15, 'ms'),
        zscore_threshold=2.0,
        close_event_threshold=np.timedelta64(0, 'ms'))
    multiunit_high_synchrony_times.index = (
        multiunit_high_synchrony_times.index.rename('replay_number'))
    multiunit_high_synchrony_labels = get_labels(
        multiunit_high_synchrony_times, time)
    is_multiunit_high_synchrony = multiunit_high_synchrony_labels > 0
    multiunit_high_synchrony_times = multiunit_high_synchrony_times.assign(
        duration=lambda df: (df.end_time - df.start_time).dt.total_seconds())

    return dict(
        multiunits=multiunits,
        multiunit_spikes=multiunit_spikes,
        multiunit_firing_rate=multiunit_firing_rate,
        multiunit_high_synchrony_times=multiunit_high_synchrony_times,
        multiunit_high_synchrony_labels=multiunit_high_synchrony_labels,
        multiunit_rate_change=multiunit_rate_change,
        multiunit_rate_zscore=multiunit_rate_zscore,
        is_multiunit_high_synchrony=is_multiunit_high_synchrony)
Exemple #5
0
def load_data(epoch_key, brain_areas=['CA1', 'CA2', 'CA3']):

    time = get_trial_time(epoch_key, ANIMALS)
    time = (pd.Series(np.ones_like(time, dtype=np.float), index=time)
            .resample('2ms').mean()
            .index)

    def _time_function(*args, **kwargs):
        return time

    logger.info('Loading position info...')
    position_info = (
        get_interpolated_position_dataframe(
            epoch_key, ANIMALS, _time_function)
        .dropna(subset=['linear_position', 'speed']))

    time = position_info.index

    tetrode_info = make_tetrode_dataframe(ANIMALS, epoch_key=epoch_key)
    is_brain_areas = (
        tetrode_info.area.astype(str).str.upper().isin(brain_areas))
    tetrode_keys = tetrode_info.loc[is_brain_areas].index
    lfps = get_LFPs(tetrode_keys, ANIMALS)
    lfps = lfps.resample('2ms').mean().fillna(method='pad').reindex(time)

    logger.info('Loading spikes...')
    try:
        neuron_info = make_neuron_dataframe(ANIMALS).xs(
            epoch_key, drop_level=False)
        neuron_info = neuron_info.loc[
            (neuron_info.numspikes > 100) &
            neuron_info.area.isin(brain_areas) &
            (neuron_info.type == 'principal')]
        spikes = get_all_spike_indicators(
            neuron_info.index, ANIMALS, _time_function).reindex(time)
    except KeyError:
        spikes = None

    logger.info('Loading multiunit...')
    tetrode_info = tetrode_info.loc[is_brain_areas]
    multiunit = (get_all_multiunit_indicators(
        tetrode_info.index, ANIMALS, _time_function)
        .reindex({'time': time}))

    multiunit = multiunit.sel(features=MARKS)
    multiunit_spikes = (np.any(~np.isnan(multiunit.values), axis=1)
                        ).astype(np.float)
    multiunit_firing_rate = pd.DataFrame(
        get_multiunit_population_firing_rate(
            multiunit_spikes, SAMPLING_FREQUENCY), index=time,
        columns=['firing_rate'])

    logger.info('Finding ripple times...')
    (ripple_times, ripple_filtered_lfps, ripple_lfps,
     ripple_consensus_trace_zscore) = get_ripple_times(epoch_key)

    ripple_times = ripple_times.assign(
        duration=lambda df: (df.end_time - df.start_time).dt.total_seconds())

    return {
        'position_info': position_info,
        'ripple_times': ripple_times,
        'spikes': spikes,
        'multiunit': multiunit,
        'lfps': lfps,
        'tetrode_info': tetrode_info,
        'ripple_filtered_lfps': ripple_filtered_lfps,
        'ripple_lfps': ripple_lfps,
        'ripple_consensus_trace_zscore': ripple_consensus_trace_zscore,
        'multiunit_firing_rate': multiunit_firing_rate,
        'sampling_frequency': SAMPLING_FREQUENCY,
    }
Exemple #6
0
def load_data(epoch_key):
    logger.info('Loading position information and linearizing...')
    position_info = (get_interpolated_position_info(epoch_key, ANIMALS)
                     .dropna(subset=["linear_position"]))
    track_graph = get_track_graph()

    logger.info('Loading multiunits...')
    tetrode_info = make_tetrode_dataframe(
        ANIMALS, epoch_key=epoch_key)

    def n_dead_chans(x):
        if isinstance(x, float):
            return 1
        elif isinstance(x, (list, tuple, np.ndarray)):
            return len(x)

    # Temporarily remove these tetrodes that have bad marks in peanut, 14, 4
    bad_trode = [9, 16, 21]

    tetrode_keys = tetrode_info.loc[
        (tetrode_info.area.str.upper() == "CA1")
        & (tetrode_info.deadchans.apply(lambda x: n_dead_chans(x)) < 4)
        & ~tetrode_info.nTrode.isin(tetrode_info.ref.dropna().unique())
        & ~tetrode_info.nTrode.isin(bad_trode)
    ].index

    def _time_function(*args, **kwargs):
        return position_info.index

    multiunits = get_all_multiunit_indicators(
        tetrode_keys, ANIMALS, _time_function)

    multiunit_spikes = (np.any(~np.isnan(multiunits.values), axis=1)
                        ).astype(np.float)
    multiunit_firing_rate = pd.DataFrame(
        get_multiunit_population_firing_rate(
            multiunit_spikes, SAMPLING_FREQUENCY), index=position_info.index,
        columns=['firing_rate'])

    logger.info('Loading sorted spikes...')
    neuron_info = make_neuron_dataframe(ANIMALS).xs(
        epoch_key, drop_level=False)
    neuron_info = pd.merge(
        neuron_info,
        tetrode_info.loc[:, ["area", "suparea"]],
        left_index=True,
        right_index=True,
    )
    neuron_info = (neuron_info
                   .loc[neuron_info.accepted.astype(bool)]  # only accepted
                   .dropna(subset=["area"]))  # drop cells that don't have area

    spikes = get_all_spike_indicators(
        neuron_info.index, ANIMALS, _time_function)

    return {
        'position_info': position_info,
        'tetrode_info': tetrode_info,
        'multiunits': multiunits,
        'multiunit_firing_rate': multiunit_firing_rate,
        'neuron_info': neuron_info,
        'spikes': spikes,
        'track_graph': track_graph,
    }