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, }
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, }
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)
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)
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, }
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, }